final
의미
- 클래스 앞에
final
이 붙으면마지막
혹은변경 불가능
이라는 의미를 가지게 된다.
- final 이 사용 될 수 있는 위치는 3가지이다
- 클래스
- 변수
- 메서드
final
과 클래스
- 의미
- 클래스 앞에
final
이 붙으면, 그 클래스는 더 이상 상속될 수 없다.
- 다른 클래스가 그 클래스를 상속할 수 없는 것이다.
- 클래스 앞에
- 예제
public final class 고양이 { } public class 길고양이 extends 고양이 { } // 컴파일 에러
- 컴파일 하는 경우 에러가 발생한다.
길고양이
클래스는고양이
클래스를 상속받을 수 없기 때문이다.
final
과 변수
- 의미
- 변수 앞에
final
이 붙게된다면, 그 변수는 한 번 초기화된 후에는 값을 변경할 수 없다.
상수
가 됨.
- 변수 앞에
- 초기화의 위치
정적 상수
- 선언 시
static
블록 내에서 초기화 가능
- 선언 시
객체 상수
- 선언 시
- 생성자 혹은 인스턴스 블록내에서 초기화 가능
- 선언 시
지역 상수
- 선언시 혹은 메서드 내에서
- 한 번만 초기화 가능
- 선언시 혹은 메서드 내에서
- 예제
public class 고양이 { final static int 정정상수 1 = 1; final static int 정적상수2; final int 객체상수1 = 1; final int 객체상수2; static { 정적상수2 = 2; // 상수는 한 번 초기화되면 값을 변경할 수 없다. // 정적상수2 = 4; } 고양이() { 객체상수2 = 2; // 상수는 한 번 초기화되면 값을 변경할 수 없다. // 객체상수2 = 4; final int 지역상수1 = 1; final int 지역상수2; 지역상수2 = 2; } }
final
과 메서드
- 의미
- 메서드 선언부에
final
가 붙는다면, 해당 메서드는 자식 클래스에서 오버라이딩(재정의) 가 불가능해진다.
- 메서드 선언부에
- 예제
public class 동물 { final void 숨쉬다() { System.out.println("호흡 중"); } } class 포유류 extends 동물 { // 에러 발생: Cannot override the final method from 동물 void 숨쉬다() { System.out.println("호흡 중"); } }
- 슈퍼클래스의 메서드가 final 이 붙어있어서,
포유류
클래스에서 이를 오버라이딩할 수 없음.
- 컴파일러가
Cannot override the final method from 동물
에러를 발생시킴
- 슈퍼클래스의 메서드가 final 이 붙어있어서,
final
을 사용하는 이유
안정성
과설계의 명확성
- 어떠한 메서드가
final
이 선언된다면,
- 해당 메서드는 확실하게 정해진 동작을 수행
- 자식클래스까지 고려하지 않아도 되는 예상치 못한 부작용을 방지가능
- 어떠한 메서드가
final
사용시 주의점
- 코드의 유연성을 제한할 수 있음
- 추후 코드 수정이 어렵거나 불가능할 수 있음.
- 유지보수성을 잘 고려해야함
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[4단원]instanceof 연산자 (0) | 2023.08.29 |
---|---|
[4단원]클래스 생성 시의 실행 블록, static 블록 (0) | 2023.08.28 |
[4단원]생성자 (0) | 2023.08.28 |
[3단원]참조 변수의 복사 (0) | 2023.08.27 |
[4단원]자바가 확장한 객체지향 초읽기 - Abstract 키워드 - 추상메서드와 추상 클래스 (0) | 2023.08.27 |