차곡차곡 성 쌓기
article thumbnail
Published 2024. 2. 13. 00:06
자바 #6 - static과 final CS/자바

Static 변수

static멤버와 non-static 멤버의 차이

  non-static 멤버 static 멤버
공간적 특성 객체마다 별도 존재 클래스당 하나 생성
• 멤버는 객체 내부가 아닌 별도의 공간(데이터 영역)에 생성
시간적 특성 객체 생성시에 멤버 생성됨
• 객체가 사라지면 멤버도 사라짐
클래스 로딩 시에 멤버 생성
• 프로그램이 종료될 때 멤버 사라짐
공유의 특성 공유되지 않음
• 객체 내에 각각 공간 유지
동일한 클래스의 모든 객체들에 의해 공유됨

 

 

static변수 객체 접근

public static void main(String []args){
  1. StaticSample s1, s2;
  2. s1 = new StaticSample();
  3. s2.n = 5; // static 멤버 접근
}

 

1 : StaticSmaple.class 파일이 로딩 후 메모리에 올려진다.

JVM이 선언되어 있는 static 변수를 본 후 static 멤버의 메모리를 할당하는 과정이다.

 

2 : static 멤버들은 제외한 non-static 멤버들의 메모리를 할당 받는다. 

s1은 non-static 멤버들이 할당된 힙 주소를 가리키게 된다. 하지만 static 멤버들도 포함한다.

static 멤버들은 데이터 영역에 생기고, non-static 멤버들은 힙 영역에 생긴다

 

3 : 객체 레퍼런스를 통해 바로 static 멤버에 접근할 수 있다. 하지만 클래스 네임으로 접근하는 것을 권장한다.

 

 

클래스 접근

public static void main(String []args){
  1. StaticSample.m = 10;
}

 

1 : StaticSmaple.class 파일이 로딩 후 메모리에 올려진다.

static 멤버들이 할당되었기 때문에 바로 접근할 수 있다.

 

 

static의 활용

  • 전역 변수와 전역함수를 만들 때 활용
  • 공유 멤버를 작성할 때

 

static 메소드의 제약 조건

제약 1. static 메소드에서는 static 변수만 사용가능하다.

이유 : 객체가 생성되지 않은 상황에서도 static 메소드가 실행될 수 있기 때문

 

제약 2. static 메소드는 this 사용 불가

이유 : static 메소드는 객체가 생성되기 전에 접근이 가능하므로, 현재 객체를 가리키는 this 레퍼런스는 사용할 수 없다.

 

 

Final 클래스와 메소드

final 클래스 - 클래스 상속 불가

의도 : 상속 받는 것 원치 않을 때

 

final 메소드 - 오버라이딩 불가

의도 : 상속받아도 오버라이딩 하지마. 반드시 내 것 써야해

 

final 필드 - 상수 선언

의도 : 선언 시에 초기값 무조건 지정. 또한 값 바꿀 수 없음

profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!