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

dy7888·2023년 8월 22일
0

필드

  • 클래스가 가지고 있는 속성
  • 다른 언어에서는 멤버 변수라고 부름

인스턴스 필드

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 필드만 사용할 수 있다.

객체마다 가지고 있어야 할 데이터 -> 인스턴스 필드
객체마다 가지고 있을 필요 없고, 공용 데이터 -> 정적 필드

profile
나의 기록하는 개발 일지

0개의 댓글