[그린컴퓨터] Server/JAVA(객체 지향 프로그래밍)

final 예약어 { 상수를 의미하는 final 변수, 상속할 수 없는 final 클래스, TDD }

Ben의 프로그램 2023. 6. 1. 20:53
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)이라고 합니다. 
  • 테스트 코드를 만들 수 있다는 것은 이미 구현 코드가 머릿속에 있다는 뜻이기도 합니다.