코딩조각

[java] static 메서드 사용법(주의점)

밍튜 2023. 12. 11. 23:52
  • static 메서드는 static 만 사용할 수 있다.
    • 클래스 내부의 기능을 사용할 때, 정적 메서드는 static 이 붙은 정적 메서드나 정적 변수만 사용할 수 있다.
    • 클래스 내부의 기능을 사용할 때, 정적 메서드는 인스턴스 변수나, 인스턴스 메서드를 사용할 수 있다.
  • 반대로 모든 곳에서 static 을 호출할 수 있다.
    • 정적 메서드는 공용 기능이다. 따라서 접근 제어자만 허락한다면 클래스를 통해 모든 곳에서 static 을 호출할 수 있다.

무슨 말이냐하면 static 메서드는 static끼리만 사용가능하다.

static메서드에서 새로 만들어진 instance의 변수나 instance의 메서드의 사용은 불가능하다는 말이다.

 

하지만 static을 붙인 순간 method 메모리의 static영역에 계속 떠있으므로 '접근제어자가 열려있다면!'

어디에서나 누구나 '클래스를 통해서' static 영역의 메서드나 필드에 접근이 가능하다.

 

 

클래스 DecoData의 내부를 보면

static 필드 = staticValue

static 메서드 = staticCall()

이 있다.

 

staticCall()은 같은 static인 staticValue를 참조할 수 있다.

하지만 힙영역의 instanceValue는 참조할수있는 참조값이 없으므로 참조가 불가능하다.(물론 외부에서 참조값이 파라미터로 들어온다면 가능은 하다)

 

힙영역에서 DecoData의 인스턴스는 (클래스). 쩜!!!  .으로 static의 메서드와 필드를 불러올수 있다.