이론 정리/java

java에서 정적 멤버를 접근하는 방법??(feat.클래스이름)

철매존 2023. 1. 30. 22:48
728x90

정적 멤버를 접근하는 방법??

java에서 정적 맴버를 접근할 때에는

public class Ryoochan {
    static int iq;

    public static void main(String[] args) {
        System.out.println(Ryoochan.iq);    // 이런 식으로
    }
}

요렇게, 클래스이름.멤버이름으로 접근한다.
왜지...?

일관된 방법

이게 사실 정적멤버에 접근하는 방식은 3개가 있다.

  • 정적멤버 사용
    • 같은 패키지
      • 상속한 경우
        • 사용 가능
      • 상속하지 않은 경우
        • 사용 불가
  • this.정적멤버 사용
    • 같은 패키지
      • 상속한 경우
        • 사용 가능
      • 상속하지 않은 경우
        • 사용 불가
    • 다른 패키지
      • 상속한 경우
        • 사용 가능
      • 상속하지 않은 경우
        • 사용 불가
  • 클래스이름.정적멤버 사용
    • 같은 패키지
      • 상속한 경우
        • 사용 가능
      • 상속하지 않은 경우
        • 사용 가능
    • 다른 패키지
      • 상속한 경우
        • 사용 가능
      • 상속하지 않은 경우
        • 사용 가능

이렇게, 클래스이름.정적멤버 를 사용하는 경우는 어떤 경우에도 사용 가능하다.
다른 방식은 막 상황따라 되고 안되고가 나뉘어서... 일관되지 않는다.

메모리의 물리적 접근

클래스이름.정적멤버 를 통해 변수에 접근하면

  1. 해당 메모리 영역에 한번에 접근!

반면 참조변수.정적멤버 를 통해 접근하는 경우는

  1. 참조변수가 스택 영역에 존재한다.
  2. 이 참조변수가 힙 영역에의 객체를 가리킴
  3. 객체가 다시 정적 멤버를 가리킴

물리적 접근에서도 바로바로 접근하는게 훨씬 효율적이다.