반응형
final 필드와 상수
final 필드
final의 의미는 최종적이라는 뜻을 갖고 있다.
Final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다.
final 필드의 초기값을 줄 수 있는 방법은 두가지이다.
첫 번째는 필드 선언시에 초기값을 주는 방법이며,
두 번째는 생성자를 통해 초기값을 주는 방법이다.
(만약 초기화되지 않은 final 필드를 그대로 남겨두면 컴파일 에러가 발생한다.)
상수(static final)
일반적으로 불변의 값을 상수라고 부른다.
불변의 값을 저장하는 필드를 자바에서는 상수(constant)라고 부른다.
final 필드는 한 번 초기화되면 수정할 수 없는 필드이지만, final 필드를 상수라고 부르진 않는다.
왜냐하면 불변의 값은 객체마다 저장할 필요가 없는 공용성을 띠고 있으며, 여러 가지 값으로 초기화될 수 없기 때문이다.
final 필드는 객체마다 저장되고, 생성자의 매가값을 통해서 여러 가지 값을 가질 수 있기 때문에 상수가 될 수없다.
상수는 static이면서 final 이어야 한다.
static final필드는 객체마다 저장되지 않고, 클래스에만 포함된다. 한 번 초기값이 저장되면 변경할 수 없다.
(상수 이름은 대문자로 작성하는게 관례이며, 언더바(_)를 사용하여 단어들을 연결한다.)
static final double PI = 3.14159;
static final double EARTH_RADIUS = 6400;
final 클래스와 final 메소드
final 키워드는 클래스, 필드, 메소드 선언 시에 사용할 수 있다. Final 키워드는 결코 수정될 수 없음을 뜻한다.
상속할 수 없는 final 클래스
클래스를 선언할 때 final을 class앞에 붙이게 된다면, 최종적인 클래스이므로 상속할 수 없는 클래스가 된다.
대표적인 예로는 자바 표준 API인 String 클래스가 있다.
1 2 | public final class String { … } public class MyString extends String { … } // 불가 | cs |
오버라이딩할 수 없는 final 메소드
메소드를 선언할 때 final 키워드를 붙이게 되면 최종적인 메소드이므로 오버라이딩(Overriding)할 수 없는 메소드가 된다. (자식 클래스에서 재정의 불가)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Car{ .. public final void drive(){ System.out.println(“gogo sing!”); } .. } public class MyCar extends Car{ .. @Override public final void drive(){ // 불가 } .. } | cs |
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] 스레드 생성 및 동작방식(Thread_1) (0) | 2019.02.25 |
---|---|
[JAVA] 제네릭(Generic) 문법 정리 (4) | 2019.02.12 |
[JAVA] 정적멤버와 static (0) | 2018.11.26 |
[JAVA] 예외처리 - 예외처리 방법 (2) | 2018.09.19 |
[JAVA] 예외처리 - 에러 및 예외종류 (0) | 2018.09.19 |