티스토리 뷰
출처:
Java - 클래스 맴버, 인스턴스 맴버 (1/4) : 맴버란?
🙋🏻♂️ 맴버
객체도 구성원이 있으며 다음과 같다.
- 메소드
- 변수
따라서 객체를 만들기 위해서는 우선 class를 정의하고 그 안에 변수와 메소드를 정의하는 경우라면, 맴버를 모두 만드는 것과 동일하다.
중요한 것은 class 내부의 변수는 해당 class를 사용하여 만든 instance에서 모두 같은 값을 갖지만, instance를 선언할 때 사용하는 변수의 경우 예로 위의 left와 right의 경우instance마다 모두 다르게 지정할 수 있다.
class Calculator3 {
public static void sum(int left, int right) {
System.out.println(left + right);
}
public static void avg(int left, int right) {
System.out.println((left + right) / 2);
}
}
public class CalculatorDemo3 {
public static void main(String[] args) {
Calculator3.sum(10, 30);
Calculator3.avg(10, 30);
Calculator3.sum(20, 40);
Calculator3.avg(20, 40);
}
}
위에서 static을 사용하면 인스턴스를 지정할 필요없이 method를 바로 이용할 수 있다. 즉 직접 접근이 가능하다. 위 예제 말고 클래스에 대한 예제가 엄청 많은데, 해당 예제들은 인스턴스로 만들어서 메소드를 호출하는 방식부터 지금처럼 호출하지 않고 바로 코드를 짜는 방식(static을 사용해야 함) 등 다양함.
중요한 것은 아래의 예제이다.
- 인스턴스 메소드는 클래스 맴버에 접근할 수 있다.
- 클래스 메소드는 인스턴스 맴버에 접근할 수 없다.
// class와 instance 관련 접근 예제임
class C1 {
static int static_variable = 1; // static이 붙어 있기 때문에 class 변수임
int instance_variable = 1; // 단순히 int만 있기 때문에 인스턴스 변수임
// class 메소드
static void static_static () {
// 인스턴스가 클래스 메소드에 접근하는 것은 가능하고
//
System.out.println(static_variable);
}
static void static_instance() {
// 클래스 메소드에서는 인스턴스 변수에 접근할 수 없다.
// System.out.println(instance_variable);
}
// instance 메소드
void instance_static () {
// 인스턴스 메소드는 클래스 변수에 접근 가능하다.
System.out.println(static_variable);
}
void instance_instance () {
System.out.println(instance_variable);
}
}
public class ClassMemberDemo {
public static void main(String[] args) {
C1 c1 = new C1();
// instance를 만들면 instance는 정적(static) method나 변수에 접근이 가능하기 때문에
// 만들어진다.
c1.static_static();
// 인스턴스 맴버(c1)은 클래스 메소드(static_static)에 접근할 수 있으며
// 해당 class 메소드가 class 변수를 사용하고 있기 때문에 접근이 가능하다.
// error 남
c1.static_instance();
// 클래스 메소드는 인스턴스 맴버(c1)에 접근할 수 없기 때문에 에러남
c1.instance_static();
// instance 메소드는 class 변수에 접근할 수 있음
c1.instance_instance();
// instance 메소드는 instance 변수에 접근할 수 있음.
C1.static_static();
// class를 통해서 class에 직접 접근할 수 있음
C1.static_instance();
// 해당 class 메소드가 인스턴스 변수에 접근하고 있기 때문에
// 실행이 안됨
C1.instance_static();
// instance 메소드는 class 변수(static)에 접근 가능하지만
// 클래스로 직접 접근하려고 하기 때문에
// 위 코드는 불가능
C1.instance_instance();
// 클래스를 통해 인스턴스 메소드에 직접 접근하려고 하기 때문에
// 위 코드는 불가능
}
}
정리하자면
- 인스턴스 변수 (Non-Static Field)
- 클래스 변수 (Static Field)
참고로 필드라는 것은 클래스 전역에서 접근할 수 있는 것을 의미함.
'Spring > Java' 카테고리의 다른 글
| [Java] 초기화와 생성자 (0) | 2021.12.02 |
|---|---|
| [Java] 유효범위 (0) | 2021.12.02 |
| [Java] 클래스와 인스턴스 그리고 객체 (0) | 2021.12.02 |
| [Java] 객체와 객체지향 프로그래밍 (0) | 2021.11.29 |
| [Java] Java의 입력과 출력 간단 정리 (0) | 2021.11.29 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 백준알고리즘 #BFS #델타이동 #알고리즘풀이 #개발 #안전영역 #풀스택개발자가되고싶습니다. #노력할래요 # 꾸준히 # 화이팅! #비전공개발자
- Java
- Java #객체지향 #상속 #생성자 #개념 #비전공개발자 #FullStack을 #향해
- Class
- 앱개발
- 참조연산자
- 일반파라미터
- 비전공싸피합격
- 생성자
- 안드로이드 #안드로이드스튜디오 #Kotlin #앱개발 #안드로이드기초 #비전공개발자 #풀스택개발자 #앱개발자
- 기본생성자
- 코틀린
- 카카오
- 프로그래머스
- kotlin문법
- 알고리즘
- 추가합격후기
- Programmers #알고리즘 #Python #KAKAOINTERNSHIP #비전공개발자 #불량사용자
- DP
- Python
- 싸피5기
- Kotlin
- 비전공개발자
- 안드로이드
- 백준
- 보조생성자
- 프로젝트구조
- 백준 #숨박꼭질3 #다익스트라 #알고리즘 #비전공개발자 #풀스택 #웹개발 #앱개발 #안드로이드 #python
- 구간 합 구하기 4
- 중첩클래스와 내부클래스
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함
