본문 바로가기
✨ Java/etc

자바(JAVA) - 상수(final)의 의미

by 환풍 2023. 7. 5.
728x90
반응형

 

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 키워드를 사용한다.

 

 

 

728x90
반응형

댓글