http://www.yes24.com/Product/Goods/103389317
Do it! 자바 완전 정복 책을 공부하며 요약・정리한 내용입니다.
인스턴스 멤버(instance member)
앞에 static이 붙어 있지 않으며 클래스의 객체를 생성해야 다른 클래스에서 사용 가능
정적 멤버(static member)
앞에 static이 붙어 있으며 다른 클래스에서 객체 생성 없이 클래스명.멤버명 으로 바로 사용 가능
인스턴스 필드와 정적 필드
인스턴스 필드
class A {
int x = 3; // 인스턴스 필드
}
public Class B {
public static void main(String[] args) {
// 인스턴스 필드 활용 : 객체 생성후 사용
A a = new A();
System.out.println(a.x);
}
}
//--==>> 3
인스턴스 x는 객체 내부에 저장 공간이 생성되기에 반드시 객체를 먼저 생성해야 한다. 또한 저장 공간이 힙 메모리에 위치하므로 해당 저장 공간에 값을 읽기 위해 참조 변수명을 사용해야 한다.
정적 필드
class A {
static int y = 4; // 정적 필드
}
public class B {
public static void main(String[] args) {
System.out.println(A.y);
// 정적 필드 활용 : 객체 생성 없이 클래스 명으로 사용
A a = new A();
System.out.println(a.y);
// 객체 생성을 한 이후 사용할 수 있지만
// 이렇게 사용하면 적정 필드임을 나타내기 어려워서 권장하지 않음
}
}
정적 필드는 클래스 내부에 저장 공간을 지니고 있다. 즉 객체가 생성되기 전에 먼저 생성 그러니까 객체 생성 없이 바로 사용할 수 있다.
또한 클래스 내부에서 클래스 내부에 저장되기 때문에 객체 간 공유하는 성질이 있다.
아래 예시를 보면 쉽게 이해할 수 있다.
e.g.
class A{
int x = 3; //인스턴스 필드
static int y = 4; //정적 필드
}
public class B {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
// 인스턴스 필드
a1.x = 30;
a2.x = 300;
System.out.println("a1.x : " + a1.x);
System.out.println("a2.x : " + a2.x);
// 정적 필드
a1.y = 40;
a2.y = 400;
System.out.println("a1.y : " + a1.y);
System.out.println("a2.y : " + a2.y);
}
}
//--==>>
/*
a1.x : 30
a2.x : 300
a1.y : 400
a2.y : 400
*/
인스턴스 메서드와 정적 메서드
인스턴스 메서드
class A {
void inMethod () { //인스턴스 메서드
System.out.println("Instance Method");
}
}
public class B {
public static void main(String[] args) {
// 인스턴스 메서드 활용 : 객체 생성후 사용
A a = new A();
a.inMethod();
}
}
//--==>> Instance Method
정적 메서드
class A {
void stMethod() { // 정적 메서드
System.out.println("Static Method");
}
}
public class B {
public static void main(String[] args) {
//정적 메서드 활용 : 객체 생성 없이 클래스 명으로 사용
A.stMethod();
A a = new A();
a.stMethod();
// 객체 생성을 한 이후 사용할 수 있지만
// 권장하지 않음
}
}
//--==>> Static Method
정적 메서드 내에서는 정적 필드, 정적 메서드만 사용 가능!!
인스턴스 필드나 인스턴스 메서드는 사용 불가!!
왜냐하면 인스턴스 필드나 인스턴스 메서드는 객체를 생성한 이후에 사용 가능하다.
하지만 객체 생성 이전에 실행하려는 정적 메서드 내부에는 객체 생성하기 전에 사용할 수 있는 요소(정적 멤버)들로만 구성되어야 하기 때문이다.
이는 정적 메서드 내부에서는 클래스 자신의 객체를 가리키는 this 키워드를 사용할 수 없다는 것 또한 의미한다.
'Java > Java' 카테고리의 다른 글
Java의 SCE(Short-Circuit Evaluation, 단락 회로 평가) (0) | 2022.07.16 |
---|---|
상속(Java) (0) | 2022.04.27 |
클래스 접근 지정자와 생성자 접근 지정자(java) (0) | 2022.04.20 |
가변 길이 배열 입력매개변수 메서드 (Java) (0) | 2022.04.11 |
long형과 float형 뒤에 ‘L’과 ’f’가 붙는 이유 (0) | 2022.01.23 |