final에 대하여

2023. 5. 26. 22:22JAVA

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