S E P H ' S
[Java] 8. final keyword 본문
Final
final 키워드는 변수(variable), 메소드(method), 클래스(class)에 사용될 수 있습니다. final 키워드는 어디에 사용되느냐에 따라서 의미가 달라지지만 공통적으로 무언가를 제한한다는 의미를 가집니다.
- final variable
변하지 않는 상수값이 되어 새로 할당할 수 없는 변수가 된다.
- final method
다른 메소드에서 오버라이딩 하지 못한다.
- final class
다른 클래스에서 상속하지 못한다.
변수(Variable)
변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가집니다. 수정될 수 없기 때문에 초기화는 필수입니다. 만약에 객체안의 변수라면 생성자, static 블럭을 통한 초기화는 허용됩니다.
수정할 수 없다는 범위는 그 변수의 값에 한정합니다. 즉, 다른 객체를 참조하거나 참조하는 객체 내부의 값은 변경할 수 있습니다.
아래 코드에 value라는 기본형 변수, person이라는 참조형 변수를 하나씩 선언하고 있습니다.
기본형 변수는 값을 변경할 수 없고 참조형 변수는 그 객체 내부의 값은 변경할 수 있지만 가리키는 객체를 변경하지 못한다는 사실을 알 수 있습니다. 추가로, final로 선언된 변수는 초기화 전에 사용하게 되면 컴파일 에러가 발생합니다.
메소드(Method)
메소드에 final이 사용되면 오바라이딩을 제한합니다. 클래스를 상속하면 해당 클래스의 protected, public의 접근 제어자를 가진 메소드를 상속해서 재구현할 수 있습니다. 하지만 final을 메소드에 사용함으로써 상속 받은 클래스에서 해당 메소드를 수정해서 사용하지 못하도록 할 수 있습니다.
클래스(Class)
final 키워드를 클래스에 사용하면 상속 불가능 클래스가 됩니다. 즉, 다른 클래스에서 상속하여 재정의를 할 수 없습니다. 대표적으로 Interger와 Wrapper클래스가 있습니다. 클래스 설계 시에 재정의 불가하게 사용하고 싶다면 final로 등록하는 것이 좋습니다.
참조링크
'Programing & Coding > JAVA' 카테고리의 다른 글
[Java] Arrays.asList() (0) | 2022.11.07 |
---|---|
[Java] 9. Overloading & Overriding (0) | 2022.01.18 |
[Java] 7. Generic (0) | 2022.01.10 |
[Java] 6. Annotation (0) | 2022.01.04 |
[Java] 5. Collection (Stack, Queue) (0) | 2022.01.04 |