본문 바로가기

Java

static 필드, 인스턴스 필드 차이

인스턴스 필드

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