인스턴스 필드
static이 붙어있지 않은 필드. 인스턴스가 꼭 만들어져야만 사용 가능하다.
Static 필드
[접근제한자] [static] [final] 타입 필드명 [= 초기값]; // static int count = 0;
Person 클래스를 읽어 들일 때, static 필드는 정적 영역에 따로 저장된다. 인스턴스를 만들지 않아도 Person을 JVM이 읽어들일 때 count 변수는 메모리에 따로 올라간다.
static필드는 클래스명.필드명 형식으로 사용
예) System.out.println(Person.count)
Person p1 = new Person(); // JVM은 CLASSPATH에서 Person 클래스를 찾고 Person 클래스 정보를 메모리에 올린다.
Person p2 = new Person();
System.out.println(p1.count); // 0
System.out.println(p2.count); // 0
p1.count++;
System.out.println(p1.count); // 1
System.out.println(p2.count); // 1
- static 메소드(클래스 메소드)에서는 인스턴스 필드/메소드를 사용할 수 없다. -> 메모리에 생성되는 시점이 다르기 때문
- static 메소드는 인스턴스가 없어도 사용 가능하지만, 인스턴스 필드는 인스턴스 생성이 있어야만 사용 가능하다.
- static 메소드가 실행되는 시점에서는, 인스턴스 필드가 메모리에 있지 않으니까 사용할 수 없다고 컴파일 에러.
- 객체 자신의 참조인 this 사용 불가
즉, static 메소드 안에서는 static 필드만 사용할 수 있다.
객체마다 가지고 있어야 할 데이터 -> 인스턴스 필드
객체마다 가지고 있을 필요 없고, 공용 데이터 -> 정적 필드
'Java' 카테고리의 다른 글
[Java] final, 불변객체 String (0) | 2023.08.31 |
---|---|
최상위 객체 Object, 캡슐화 (0) | 2023.08.31 |
[Java] JDK, JRE 차이 (0) | 2023.08.31 |
[Java] 클래스, 객체, 인스턴스 (0) | 2023.08.31 |
[Java] 접근제한자 (0) | 2023.08.31 |