본문 바로가기
JAVA

final에 대하여

by Big Sun 2023. 5. 26.
728x90

 

안녕하세요! 최근에 불변 객체에 대해서 학습을 하다가, final 키워드에 대한 이해가 부족하다고 판단되 다시 한번 공부를 해보았
습니다.

 

먼저, final 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있습니다.

 

final 키워드는 위와같이 여러 곳에서 사용될 수 있지만, 공통적으로 가지고 있는 의미가 있는데,

이는 바로 무언가를 제한한다 라는 의미입니다.

 

먼저, 변수(variable)에 대하여 알아보겠습니다.

 

변수(variable)

 

변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가집니다.

하지만, 변수가 기본형 변수냐 아니면, 참조형 변수인 것인가에 따라서 달라집니다.

 

public class Phone {

    final int useAge = 1;
    final Screen screen = new Screen(640,480);

		// public void setUseAge(int useAge) {
    //    this.useAge = useAge; 
    // }

}

public class Screen {

    private int horizontalPixels;
		private int verticalPixels;
		

    public Screen (int horizontalPixels, int verticalPixels){
        this.horizontalPixels = horizontalPixels;
				this.verticalPixels = verticalPixels
    }
    
		// getter, setter ...
}

setUseAge 메서드는 컴파일 에러가 납니다. 왜냐하면, 변수에 final을 붙였기 때문입니다.

public class PhoneTest {

    public static void main(String args[]){
        Phone phone = new Phone();

        // phone.getUseAge() = 2; -> 컴파일 에러(값에 값 대입 불가)

        // phone = new Screen(800,600); -> 컴파일 에러

        phone.screen.setHorizontalPixels(1000);
    }
}

위의 예에서 알 수 있듯이, 기본형 변수의 경우에 값을 변경하는 것을 불가능합니다.

참조형 변수 역시 참조형 변수가 가리키는 객체는 변경하지 못 합니다.

 

하지만, 참조형 변수가 가리키는 객체의 값은 변경할 수 있습니다.

 

정리하자면, final은 수정할 수 없는 범위를 그 변수의 값에 한정하는 것을 알 수 있습니다.

 

 

다음으로는 메서드(method)에 대해서 알아보겠습니다.

 

메서드(method)

 

메서드에 final을 붙이면 override를 제한할 수 있습니다.

 

public class Phone {

    private final String madeBy;
    private final Screen screen;
    private int useAge;

    public Phone(String madeBy, Screen screen, int useAge) {
        this.madeBy = madeBy;
        this.screen = screen;
        this.useAge = useAge;
    }

    public final void speech(){
        System.out.println(" === ");
    }

}

public class FolderPhone extends Phone{
    
    public FolderPhone(String madeBy, Screen screen, int useAge) {
        super(madeBy, screen, useAge);
    }
    
    @Override
    // public void speech(){
    //    System.out.println(" === ");
    // }
}

 

마지막으로 클래스(class)에 대해서 알아보겠습니다.

 

클래스(Class)

 

final 키워드를 클래스에 붙이면 그 클래스는 상속 불가능한 클래스가 됩니다.

public final class Integer extends Number
        implements Comparable<Integer>, Constable, ConstantDesc {
   
}

 

 

지금가지 final에 대해서 공부해보았습니다.

 

모두 열공하세요~

 

728x90

'JAVA' 카테고리의 다른 글

불변 객체(Immnutable Object)란??  (1) 2023.05.27
String vs StringBuilder vs StringBuffer  (0) 2023.05.27
정적 팩토리 메서드  (1) 2023.05.23
인터페이스 default 메서드와 static 메서드  (0) 2023.04.27
enum 이 자식!!  (2) 2023.03.01