본문 바로가기
Java & Kotlin/Java

13. final

by heekng 2021. 1. 19.
반응형
 

final 키워드에 대하여 클래스, 메소드, 변수에 맞추어 알아보겠습니다.


1. final 클래스

클래스에 final이 이용되는 것은 상속을 제한한다는 것을 뜻합니다.

즉, 다른 클래스에서 해당 클래스의 필드를 수정하지 못하게 하는 것을 뜻합니다.

위 코드처럼 부모클래스에서 final을 선언한다면, 이는 최종, 마지막 클래스임을 선언한 것이기 때문에 상속관계로 클래스간의 관계를 연장할 수 없습니다.


2. final 메소드

1

2

3

4

5

6

7

8

9

10

11

12

class Naver{

String id = "아이디";

String password = "패스워드";

void login() { //로그인한다는 메소드

System.out.println(id + "" + password);

}

}

 

class blog extends Naver{

void login() { //상속받은 Naver클래스의 login메소드를 오버라이드

System.out.println("블로그에서 로그인");

}

위 코드는 일반적인 상속관계에서의 오버라이드입니다.

Naver클래스를 상속받은 Blog클래스는 상속받은 메소드를 오버라이드하여 수정할 수 있습니다.

하지만 위처럼 메소드를 final로 선언한다면 상속관계의 클래스더라도 오버라이드가 불가능합니다.


3. final 변수

마지막으로 변수, 멤버변수에서 final키워드는 일반적으로 상수라고 표현합니다.

하지만 final키워드만을 사용하였다고 상수라고 단정지을 수 없습니다.

일반적으로 멤버변수에 final을 이용하면 위와 같이 선언 이후 수정이 불가능합니다.

하지만

위처럼 변수를 선언만 하고 해당 변수에 값을 넣어 초기화하는 코드를 따로 뺀다면?

이는 수정이 불가능 한것이 아니라 초기화가 단 한번만 가능하다는 것을 의미하게 됩니다.

그렇다면 변하지 않는 고정된 수를 의미하는 상수를 선언하고 싶을 때에는 static을 함께 이용해야 합니다.

1

2

3

4

5

6

7

public class Blog{

static final String NAME = "세걸음";

 

public static void main(String[] args) {

System.out.println(NAME);

}

}

위와 같이 클래스 내에서 static final을 이용하여 상수를 선언하면 빌드단계에서 수정할 수 없는 상수가 메모리에 올라가게 되며, 정말 우리가 원하는 상수를 선언할 수 있게 됩니다.

선언과 동시에 값을 넣어주지 않는다면 static키워드가 이용되지 않았던 상황과는 다르게 선언 자체를 거부하게 됩니다.

반응형

'Java & Kotlin > Java' 카테고리의 다른 글

16. 상속 (extends, 오버라이드)  (0) 2021.01.19
15. 싱글톤 (Singleton)  (0) 2021.01.19
14. 접근제한자(public, protected, private, default), getter, setter  (0) 2021.01.19
12. Static  (0) 2021.01.19
11. 열거형 (Enum)  (0) 2021.01.19
10. 클래스 (Class, 생성자)_1  (0) 2021.01.19