관리 메뉴

너와 나의 스토리

[Java] static vs final vs static final 본문

Programming Language/Java

[Java] static vs final vs static final

노는게제일좋아! 2021. 4. 16. 14:07
반응형

Static

  • Static 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드를 말한다.
public class Calculator {
  String mutableStr;
  static int num = 3;
  
  void setMutableStr(String str){
      this.mutableStr = str;
  }
  
  String getMutableStr(){
      return this.mutableStr;
  }
  
  static int plus(int x, int y){
      return x+y;
  }
}
  • 위와 같이 작성된 클래스는 다음과 같이 사용할 수 있다.
  • 인스턴스 필드를 사용하지 않아도 된다면, 정적 메서드로 선언하여 사용
int initNum = Calculator.num;
int res = Calculator.plus(1,2);
  • 인스턴스 필드를 사용하면 인스턴스 메서드로 선언
Calculator calculator = new Calculator();
calculator.setMutableStr("hello");
System.out.println(calculator.getMutableStr());
// System.out.println(Calculator.getMutableStr());   <- 정적 메서드로 호출 불가

 

 

 

Final

  • final field: 초기값이 최종적인 값(프로그램 실행 도중 변경될 수 없음)
  • final class: 부모 클래스가 될 수 없다(상속 불가)
    • 자식 클래스 생성 불가
  • final method: overriding 불가
    • 부모 클래스에서 특정 메서드를 final method로 선언해두면, 자식 클래스는 이를 오버라이딩할 수 없다. 
    • 주는 대로 써야 함 ㅎ
  • static or static final과의 차이점
    • final로 선언된 필드는 객체를 선언해서 그 인스턴스로 접근해야 한다.

 

 

Static final

  • static final field는 객체마다 저장되지 않고, 클래스에만 포함된다.
  • static field처럼 static field 필드도 정적 메서드로 선언해서 사용 가능하다
반응형
Comments