728x90
final 예약어?
- 템플릿 메서드를 만들면서 final 예약어에 대해 처음 배워보았습니다.
- final 은 '마지막' 이란 의미입니다.
- 즉 마지막으로 정한 것이니 더 이상 수정할 수 없다는 의미를 가지고 있습니다.
- 자바 프로그램에서 final 예약어는 변수, 메서드, 클래스에서 사용할 수 있습니다.

- final 메서드는 재정의 할 수 없는 메서드를 의미하며, 다른 말로하면 상속받아 사용할 수 없는 메서드입니다.
- final 메서드에 대해서는 이미 배웠으므로 여기에서는 final 변수와 final 클래스에 대해 알아보겠습니다.
상수를 의미하는 final 변수
- 상수는 무엇을 의미하는 것일까요?
- 상수는 변하지 않는 수를 의미합니다.
- 간단한 예제를 통해 확인해보겠습니다.
public class Constant {
int num = 10;
final int NUM = 100; // 상수 선언
public static void main(String[] args) {
Constant cons = new Constant();
cons.num = 50;
cons.NUM = 200; // 상수에 값을 대입하여 오류 발생
System.out.println(cons.num);
System.out.println(cons.NUM);
}
}
- 위 코드를 보면 변수를 두 개 선언했습니다.
- 하나는 int num 이고 다른 하나는 final int NUM 입니다.
- 상수를 선언할 때는 final 예약어와 함께 변수를 대문자로 선언합니다.
- 상수로 선언한 변수는 다른 값을 대입할 수 없는 것을 예제를 통해서 알 수 있습니다.
여러 자바 파일에서 공유하는 상수 값 정의하기
- 하나의 자바 파일에서만 사용할 상수 값은 해당 파일 안에서 정의해서 사용해도 문제가 없습니다.
- 하지만, 프로젝트를 하다 보면 여러 파일에서 똑같이 공유해야 하는 상수 값도 있기 마련입니다.
- 이런 경우 상수 값을 파일마다 선언한다면 코드가 중복될 뿐만 아니라 값이 변하거나 추가될 때 그 값을 사용하는 모든 파일들을 수정해야 합니다.
- 따라서 자바로 프로젝트를 진행할 때 여러 파일에서 공유해야 하는 상수 값은 한 파일에 모아 public static final 로 선언하여 사용하는 것이 매우 권장됩니다.
public class Define {
public static final int MIN = 1;
public static final int MAX = 99999;
public static final double PI = 3.14;
public static final String GOOD_MORNING = "Good Morning";
}
- 위의 모든 변수들은 final 예약어와 대문자로 표현하여 상수라는 것을 명확하게 표현했습니다.
- 또한 public 과 static 예약어와 함께 선언했기 때문에 외부에서도 인스턴스를 생성하는 것과 관계없이 클래스 이름으로 참조할 수 있습니다.
상속할 수 없는 final 클래스
- 클래스를 final 로 선언하면 상속할 수 없습니다.
- 상속을 하면 변수나 메서드를 재정의할 수 있는데, 그러면 원래 클래스가 가지고 있는 기능에 오류가 생길 수도 있습니다.
- 따라서 보안과 관련되어 있거나 기반 클래스가 변하면 안 되는 경우에는 클래스를 final 로 선언합니다.
- JDK 에서 제공하는 클래스 중에서도 final 로 선언한 클래스가 있습니다.
- 대표적으로 문자열을 나타내는 String 이나 정수 값을 나타내는 Integer 클래스를 예로 들 수 있습니다.
- 이러한 클래스가 상속되면 클래스를 만들 때 의도한 바와 다르게 사용될 수도 있으므로 final 로 선언합니다.
프로그램을 잘 구현하는 또 다른 방법 : TDD (Test Driven Development)
- 지금까지 객체 지향 프로그램의 여러 기술을 알아보았습니다.
- 상속과 다형성, 추상 클래스까지 이해했다면 반 이상 온 것입니다.
- 프로그램을 잘 짜는 방법을 하나 이해하고 가겠습니다.
- 이전에 게임 Player 예제를 만들면서 클래스를 순서대로 구현해 나갔었습니다.
- 한번 거꾸로 반대의 순서로 만들어보시길 바랍니다.
- 맨 먼저 최종 실행 파일 MainBoard 클래스부터 만들어나가는 겁니다.
- 그러면 아마 많은 오류 메시지가 나올 겁니다.
- 오류를 해결해 나가면서 프로그램을 완성시키는 겁니다.
- 이렇게 테스트 코드를 먼저 개발하는 개발 방법론을 테스트 주도 개발(Test Driven Development : TDD)이라고 합니다.
- 테스트 코드를 만들 수 있다는 것은 이미 구현 코드가 머릿속에 있다는 뜻이기도 합니다.
'[그린컴퓨터] Server > JAVA(객체 지향 프로그래밍)' 카테고리의 다른 글
| 인터페이스와 다형성 { 인터페이스의 역할, 인터페이스와 다형성, 클라이언트가 클래스를 사용하는 방법 } (0) | 2023.06.04 |
|---|---|
| 인터페이스란 { 구현 코드가 없는 인터페이스, 클래스에서 인터페이스 구현하기, 인터페이스 구현과 형 변환 } (0) | 2023.06.02 |
| 템플릿 메서드 응용하기 { 예제 이해하기, 클래스 기능과 관계, 클래스 설계하기, 추상 클래스와 다형성 } (0) | 2023.06.01 |
| 템플릿 메서드 { 추상 클래스와 템플릿 메서드, 템플릿 메서드의 역할, final } (0) | 2023.06.01 |
| 추상 클래스 { 추상 클래스란, 추상 클래스 구현하기, 추상 클래스를 만드는 이유 } (0) | 2023.05.31 |