본문으로 바로가기

[JAVA] final 이란

category 프로그래밍/JAVA 2020. 10. 13. 00:21
728x90
반응형

final은 자바에서 사용하는 키워드입니다. final은 한 번만 할당할 수 있는 엔티티를 정의할 때 사용합니다.

 

final을 직역하면 최종적, 마지막이란 뜻이므로 어느정도 유추가 가능합니다.

보통 final을 쓸 때 static final도 많이 사용하는데 오늘은 이 두가지 키워드의 사용법에 대해 포스팅하겠습니다.

1. final

final의 경우, 3곳에서 사용할 수 있습니다.

상수, 메소드, 클래스입니다.

각각에 대해 예제 코드에  함께 사용법에 대해 알아보겠습니다.

1) 상수

형식 : final 자료형 변수명

===========================================================
final int num = 10;
      
num = 5; // 에러발생
===========================================================

위의 예제 코드에서는 에러가 발생합니다.

final 키워드를 사용하여 int형 변수 num에 10을 저장하였습니다.

이렇게 되면 num에는 상수 10이 저장이 됩니다.

다음 코드에서 num에 5를 저장하려고 합니다.

여기서 num은 선언과 동시에 값을 입력하지 않고, 선언을 한 후, 나중에 값을 저장해도 됩니다.

num은 final 키워드를 사용하여 상수가 되었기 때문에 에러가 발생합니다.

->상수로 사용할 때는, 한번 값을 저장하고 다시 바꾸지 않을 때 사용하게됩니다.

2) 메소드

형식 : final 리턴형 메소드명(매개변수) { }

===========================================================
public class abc {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      
   }

   public final void test() {

   }
   
}

public class def extends abc {
   public void test(){} // 에러발생
}
===========================================================

위의 예제 코드에서는 에러가 발생합니다.

abc 클래스에서 final 키워드를 사용하여 메소드를 만들었고, def 클래스에서 abc 클래스를 상속받아 test 메소드를 사용하였습니다.

final을 쓰게되면 오버라이딩을 하지 못합니다.

그러므로 test 메소드를 사용하지 못합니다.

->상속을 한 후, 메소드를 오버라이딩을 사용못하도록 할 때 final을 사용합니다.

3) 클래스

형식 : final class 클래스명 { }

===========================================================
public final class abc {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      
   }

   public void test() {

   }
   
}

public class def extends abc{ // 에러발생
   public void test() {

   }
}
===========================================================

위의 예제 코드에서는 에러가 발생합니다.

abc 클래스를 final로 정의했기 때문에 abc 클래스는 상속이 불가능합니다.

상속하는 부분에서 에러가 발생합니다.

->클래스를 상속을 사용못하도록 할 때 final을 사용합니다.

 

 

 

2. static final

형식 : static final 자료형 변수명

===========================================================
static final int num = 1; // 에러발생
   
num = 5;
===========================================================

위의 예제 코드에서는 에러가 발생합니다.

num은 상수이기 때문에 값을 넣지 못합니다.

static final의 경우 final을 상수로 쓸때와 다른점은 클래스 변수라는 것입니다. 

클래스에 존재하기 때문에 선언과 동시에 값을 입력해야합니다.

그리고 final을 상수로 쓸 때, 에러 발생 위치가 다릅니다.

->클래스 자체에서 상수로 사용할 때 쓰입니다.

이상입니다.

감사합니다.

728x90
반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] SLF4J 에러  (0) 2020.11.04
[JAVA] 파일 이동 방법  (0) 2020.10.19
[JAVA] 파일 복사  (0) 2020.10.05
[JAVA] 문자열 붙이기  (0) 2020.09.23
[JAVA] JVM 메모리 설정  (0) 2020.04.14