정적 멤버와 인스턴스 멤버

suhjaesuk·2022년 11월 10일
0

Java

목록 보기
2/4
post-thumbnail

1) 정적 멤버

정적 필드(Static변수)와 정적 메소드(Static메소드)를 합쳐 정적 멤버라고 합니다. 클래스에 소속된 멤버로 인스턴스 생성 여부에 상관없이 모든 인스턴스에서 공통으로 사용 가능 합니다.

  • 클래스 로더가 클래스를 로딩해서 메소드 영역에 적재될 때 클래스 별로 관리됩니다.
  • Static 키워드를 통해 생성된 정적 멤버들은 Heap 영역이 아닌 Static 영역에 할당됩니다.
  • Static 영역에 할당된 메모리는 인스턴스 생성과는 별개로 모든 객체가 공유하여 사용할 수 있는 장점이 있습니다.
  • Garbage Collector의 관리 영역 밖에 존재하기 때문에 Static을 남발하게 되면 시스템 성능에 문제가 생길 수 있습니다.
  • main() 메소드도 정적 메소드에 포함됩니다.

2) 인스턴스 멤버

인스턴스 필드와 인스턴스 메소드를 합쳐 인스턴스 멤버라고 합니다. 클래스에 소속된 멤버로 객체없이는 사용할 수 없습니다.

  • 인스턴스 필드는 객체마다 따로 존재하고 인스턴스 생성 시 힙 영역에 할당됩니다. 인스턴스 소멸시 Garbage Collector에 의해 메모리가 소멸됩니다.
  • 인스턴스 메소드는 객체마다 존재하지 않고, 클래스 로딩 시 메소드 영역에 저장되고 공유됩니다.

3) 멤버 판단 기준

  • 객체마다 가지고 있어야할 데이터라면 인스턴스 필드로 선언
  • 객체마다 가지고 있을 필요가 없는 공용 데이터라면 정적 필드로 선언
  • 인스턴스 필드를 포함하고 있다면 인스턴스 메소드로 선언
  • 인스턴스 멤버를 포함하고 있지 않다면 정적 메소드로 선언 (호출 시 인스턴스 멤버가 없을 수도 있어서)
profile
wanna be BE-Developer

0개의 댓글