[Java] Final 키워드

이지원·2025년 2월 3일

Java Study

목록 보기
8/9
  • final 키워드
    final 키워드의 의미는 '마지막'이라는 직관적인 뜻을 가지고 있다. static 키워드와 마찬가지로, 변수, 메서드, 클래스 앞에 사용가능하고 메서드와 클래스 앞에 붙는 final은 다음 학습인 상속을 학습하면서 설명하도록 하겠다.

final 변수

  • 필요성
    final 키워드가 필요한 이유는 무엇일까? final 키워드를 사용하게 되면 변수에 값을 설정한 경우 변경이 불가해진다. 이러한 특성은 코드의 안정성과 예측 가능성을 높힐 수 있기 때문에 final 키워드가 필요하다고 생각했다.

  • final 지역 변수

    public static void main(String[] args) {
    		final int capacity = 10;
     	    final City city = new Seoul();
        
      	    capacity = 20;
      	    city = new Busan();
     }

    위와 같이 final 지역 변수를 앞에서 학습한 기본형과 참조형으로 선언하였다. 먼저, capacity 변수를 20으로 변경하면 어떻게 될까? 당연히 final 변수는 변경 불가능하기 때문에, 컴파일 오류가 발생할 것이다. 마찬가지로 참조형 변수인 city 또한, 부산으로 변경이 불가능할 것이다.

    public static void main(String[] args) {
    		final City city = new Seoul();
       
     	    city.food = "물떡";
     }

    위와 같이 city의 참조된 객체의 값은 변경할 수 있다. 따라서, city의 객체 참조값은 변경될 수 없지만, city 객체의 값은 변경할 수 있다는 것을 유의하자.

  • final 멤버 변수
    위에서 지역 변수에서의 final 사용법 및 주의사항을 알아 보았다. 그러면 멤버 변수에서는 어떻게 사용할까?

    public class City {
    		private final capacity; 
     }

    위와 같이 멤버 변수가 있을 때, 기존의 값 설정 방법을 생각하면 2가지가 있을 것이다.

    • 필드에서 값 설정
      public class City {
      		private final capacity = 100_000;
       }
      필드를 통해 바로 값을 설정하는 방법이다.
    • 생성자를 통한 값 설정
      public class City {
      		private final capacity;
         
         	    public City(int capacity) {
         			this.capacity = capacity;
              }
       }
      생성자를 통해 바로 값을 설정하는 방법이다. 여기서 주의할 점은 필드를 통해 값을 설정한다면 생성자를 통해 값을 또 설정할 시 컴파일 오류가 발생한다는 점을 주의하자.
  • 상수
    상수는 변하지 않고, 항상 일정한 값을 갖는 수를 말하고, 자바에서는 보통 단 하나만 존재하는 변하지 않는 고정된 값을 말한다.

    • 상수 사용법
      상수를 표현하기 위해서는 어떻게 해야할까? 일단, 상수는 변하지 않아야 하니 final 키워드를 사용할 것이다. 그리고 상수를 객체 마다 만들어야 할 이유가 없기 때문에 static 키워드를 통해 클래스 내에서 공용을 사용할 것이다.
      따라서, 상수는 static 키워드와 final 키워드를 붙혀 아래와 같이 static final 을 이용해서 표현할 수 있다.
      public class City {
      		public static final CAPACITY = 100_000;
              public static final CITY_SPOT = 1_000;
      }
    • 상수 특징
      위에서 본 것처럼 상수는 대문자를 사용하고 구분은 _(언더스코어)로 한다.
      그리고, 상수에 접근할 때에는 필드를 직접 접근해서 사용한다. 예시로 아래와 같이 사용한다.
      public static void main(String[] args) {
      		System.out.pringln(City.CAPACITY);
       }
      위와 같이 필드에 직접 접근하는 이유는 상수는 기능을 하는 것이 아니라, 고정된 값 자체를 사용하는 목적이기 때문이다. 또 다른 하나는, 상수는 값을 변경할 수 없기 때문에 외부에서 데이터에 접근하더라도 값을 변경할 수 없다. 따라서, 상수는 필드에 직접 접근하여 사용한다.
profile
백엔드 개발자취

0개의 댓글