본문 바로가기

Java

[Java] static, final, static final

📌 static

  • 공용 데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메소드를 선언하고자 할 때 활용
  • 정적 메소드는 객체 참조 없이 바로 사용할 수 있는 특징으로 인스턴스 필드나 메소드, 그리고 this 키워드를 사용할 수 없다.
  • 객체마다 가질 필요가 없는 공용으로 사용하는 필드 혹은 인스턴스 필드를 포함하지 않는 메소드
👉 static을 언제 사용해야 하는가?
1. 모든 인스턴스에 공통된 값을 유지해야 하는 멤버 변수
 - 인스턴스를 생성하면, 각 인스턴스들은 서로 독립적이기 때문에 서로 다른 값을 유지합니다. 경우에 따라서 각 인스턴스들이 공통적으로 같은 값이 유지되어야 하는 경우에 static을 붙입니다.

2. 인스턴스 변수를 사용하지 않는 메소드
 - 메소드의 작업내용 중에서 인스턴스 변수를 필요로 한다면, static을 붙일 수 없다. 반대로 인스턴스 변수를 필요로 하지 않는다면, 가능한 static을 붙이는 것이 좋습니다. 인스턴스를 따로 생성하지 않아도 되며, 메소드 호출 시간이 짧아지기 때문에 효율이 높아진다. static을 안 붙인 메소드는 실행 시 호출되어야 할 메소드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 조금 더 걸린다.

 

📌 final

  • final class : 부모 클래스가 될 수 없다. (상속 불가)
  • final method : 오버 라이딩 불가
  • final 예약어는 지역변수를 선언할 때 사용하면 해당 지역변수를 수정할 수 없도록 만든다. 한번 값이 고정되면 값을 바꿀 수 없도록 하는 것으로, 모든 영역에서 상수로 사용되는 static final과 유사하지만 조금의 차이가 있다.
👉 final 변수가 반드시 상수는 아니다.
왜냐면 final의 정의가 '상수'가 아니라 '한 번만 초기화 가능하다' 이기 때문이다. 즉, 인스턴스를 생성할 때 한 번만 초기화하고 쭉 변화 없이 사용하는 경우 final만 활용

 

📌 static final

  • 상수를 선언하고자 할 때 사용된다.
  • static final은 final과 다른 점은 객체마다 따로 저장할 필요가 없는 공용성을 가지고 있는 점이다. 때문에 static을 추가적으로 선언을 해줌으로써 객체를 생성시키지 않고도 사용할 수 있다.