[4단원]final 키워드

final

의미

  • 클래스 앞에 final 이 붙으면 마지막 혹은 변경 불가능 이라는 의미를 가지게 된다.
  • final 이 사용 될 수 있는 위치는 3가지이다
    1. 클래스
    1. 변수
    1. 메서드

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 사용시 주의점

  • 코드의 유연성을 제한할 수 있음
  • 추후 코드 수정이 어렵거나 불가능할 수 있음.
    • 유지보수성을 잘 고려해야함

Uploaded by N2T