final 이란?
- 무언가를 제한한다는 의미를 가지는 것으로, 변수(variable), 메서드(method), 클래스(class)에 사용가능하다. 이 final 키워드는 어떤 곳에 사용되냐에 따라 다른 의미를 가진다.
메소드를 선언할 때 final 키워드를 붙이면 이 메소드는 최종적인 메소드이므로 오버라이딩할 수 없다.
즉, 부모 클래스를 상속해서 자식 클래스를 선언할 때, 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의 불가.
변수(variable)
- 변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미이다. 따라서 초기화 값을 필수적으로 기입해야한다.
만약 객체 안의 변수라면 생성자, static 블럭을 통해 초기화까지는 가능하다.
단, 수정할 수 없다는 의미의 범위는 변수의 값에 한정된다. 다른 객체를 참조하거나 할 때 객체의 내부 값은 변경할 수 있다.
MyTall Class
1 2 3 4 5 6 7 8 9 10 11 12 13 | package johong.study_0719_second.finalEx; public final class MyTall { final double MY_TALL = 171.1; double yourTall = 180.4; public MyTall() { System.out.println("나의 키는 : " + MY_TALL); System.out.println("당신의 키는 : " + yourTall); } } | cs |
MySonTall Class
1 2 3 4 5 6 7 8 9 10 11 12 13 | package johong.study_0719_second.finalEx; //public class MySonTall extends MyTall { // // MyTall 클래스가 final이라서 상속이 불가능하다. // public void mySonFuture() { // System.out.println("아빠랑 비슷한 키 가짐"); // } // //} | cs |
FinalClass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package johong.study_0719_second.finalEx; public class FinalClass { public static void main(String[] args) { MyTall a = new MyTall(); a.yourTall = 188.2; System.out.println("당신의 키는 : " +a.yourTall); //a.MY_TALL = 190.3; final이라서 변경할 수 없다. // MyTall 클래스가 final을 가지기 때문에 상속 불가. //MySonTall son = new MySonTall(); //son.mySonFuture(); } } | cs |
FinalVaildate와 같이 생성자를 이용해 final 필드를 초기화 하는 경우, 각 인스턴스 마다 final 필드에 다른 값을 할당할 수 있다. final을 사용했기 때문에 생성 이후에는 값을 변경하는 것이 불가능하다.
v1, v2, v3은 각각 힙영역에 총 3개가 생성되며 모두 똑같은 값을 가지게 될 것이다. 그러나 이렇게 하면 모든 인스턴스가 같은 값을 사용하기 때문에 메모리 낭비가 발생한다. 이럴때 사용하면 좋은 것이 static 영역이다.
static 영역은 단 하나만 존재하는 영역이다. 이를 통해 메모리 중복을 해결할 수 있다.
이러한 이유로 상수를 지정할 때에는 static final을 사용한다는 점을 알아두자.
상수의 특징
- 대문자를 사용하고 구분은 _ 로한다.
- 필드를 직접 접근해서 사용한다.
- static final 키워드를 사용한다.
'✨ Java > etc' 카테고리의 다른 글
자바(JAVA) - static(클래스)변수와 instance변수, local(지역)변수 (0) | 2023.07.06 |
---|---|
자바(JAVA) - 자료형 변환 (byte, int, long, char, boolean) 연산 (0) | 2023.07.06 |
자바(JAVA) - 제네릭(Generic) (0) | 2023.07.06 |
자바(JAVA) - 자바의 특징 (0) | 2023.07.06 |
자바(JAVA) - Static의 의미 (0) | 2023.07.05 |
댓글