Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) static과 final 키워드의 차이점 완벽 정리

이 글에서는 자바(Java) 프로그래밍에서 자주 혼동되는 두 가지 키워드인 staticfinal의 차이점을 살펴보겠습니다. 두 키워드는 모두 코드의 동작 방식과 접근성에 영향을 주지만, 그 목적과 특성은 완전히 다릅니다.

1. static 키워드란?

static은 클래스 레벨에 속하는 멤버를 정의할 때 사용하는 키워드입니다. 인스턴스 생성 없이도 클래스 이름만으로 접근할 수 있다는 것이 가장 큰 특징입니다.

static의 주요 특징

  • 적용 대상: 중첩 클래스(nested class), 변수, 메서드, 초기화 블록(static block)에 적용할 수 있습니다.

  • 초기화 유연성: static 변수는 선언 시점에 반드시 초기화할 필요가 없습니다.

  • 값 재할당 가능: static 변수는 언제든지 다시 초기화(값 변경)할 수 있습니다.

  • 접근 범위 제한: static 컨텍스트 내부에서는 해당 클래스의 정적(static) 멤버에만 직접 접근할 수 있습니다.

  • 호출 제약: static 메서드는 다른 static 메서드에서만 직접 호출할 수 있습니다.

  • 객체 생성 불가: static으로 선언된 중첩 클래스는 별도의 객체(인스턴스)를 생성할 수 없습니다.

  • 멤버 구성 제한: static 클래스는 오직 정적 멤버만 포함할 수 있습니다.

  • 용도: static 블록은 클래스 로딩 시점에 static 변수들을 초기화하는 데 사용됩니다.

2. final 키워드란?

final은 클래스, 메서드, 변수에 '변경 불가'라는 제약을 부여하는 키워드입니다. 즉, 한 번 정의된 대상은 이후 수정하거나 확장할 수 없도록 만듭니다.

final의 주요 특징

  • 예약어(키워드): final은 자바에서 제공하는 예약어입니다.

  • 제약 적용: 클래스, 메서드, 변수에 각각 다른 형태의 제약을 적용합니다.

  • 상속 금지: final로 선언된 클래스는 다른 클래스가 상속할 수 없습니다.

  • 오버라이딩 금지: final 메서드는 하위 클래스에서 재정의(오버라이딩)할 수 없습니다.

  • 재정의 불가: final 메서드는 어떤 하위 클래스도 이를 상속하여 변경할 수 없습니다.

  • 선언 시 초기화 필수: final 변수는 선언 시점에 반드시 값을 할당해야 합니다.

  • 불변성 보장: 한 번 값이 설정된 final 변수는 변경하거나 다시 초기화할 수 없습니다.

3. static vs final 핵심 비교

구분staticfinal
목적클래스 레벨 멤버 정의 및 공유변경·확장 방지(불변성 보장)
초기화 시점선언 시 초기화 필수 아님선언 시 초기화 필수
값 변경재할당 가능재할당 불가
상속/오버라이딩제약 없음상속·오버라이딩 불가
대표 활용 예유틸리티 메서드, 공유 카운터, Math 클래스상수 정의(final static), 보안상 상속 방지 클래스(String 등)

4. 마무리

정리하면, static은 '클래스에 소속되어 모든 인스턴스가 공유한다'는 의미이고, final은 '더 이상 변경할 수 없다'는 의미입니다. 실무에서는 두 키워드를 함께 사용해 static final 형태의 상수를 정의하는 경우가 매우 흔합니다. 두 키워드의 동작 원리를 정확히 이해하면 더 안전하고 효율적인 자바 코드를 작성할 수 있습니다.