본문 바로가기
Kosta DevOps 과정 280기/Java

final 키워드가 올 수 있는 곳

by 롯슈83 2024. 5. 23.

변수명 앞에 final 

  • 변수이지만 상수처럼 고정된 값을 가지고 싶을 때 사용
  • 단, 참조형 변수는 주소를 가지고 있으므로 가르키는 객체의 내용이 바뀌어도 가르키는 대상이 변하지 않는 한 컴파일 에러가 나지 않는다
public class FinalTest01 {
	public static void main(String[] args) {
		final int []array = {5,48, 6,2,78,2};
		
		for(int i : array)
			System.out.print(i+", ");
		System.out.println();
		System.out.println(array);
		array[3] = 39;
		System.out.println();
		for(int i : array)
			System.out.print(i+", ");
		System.out.println();
		System.out.println(array);
	}
}

 

메소드명 앞에 final

  • 더 이상 고쳐선 안되는 함수를 만들었을 때, 오버라이딩을 금지시키기 위하여 만들어졌다.
  • 일반적으로 상속 관계에 있을 때 자식 클래스의 부모의 메소드를 필요하다면 오버라이딩 할 수 있다. 그런데 만약, 부모 클래스를 만들 떄 미래에 만들어지는 후손들이 어떠한 메소드를 오버라이딩 하지 않도록 하기 위한 방법이다.
  • 미래에 만들어질 후손들이 가져야할 공통적인 속성과 동작을 뽑아서 일반화(부모클래스를 만들 때)를 할 때에 특정메소드는 의미 상 완전하여 더 이상 후손들이 동작 방식을 변경시키지 않도록 하기 위함이다. 
  • 일반화 하고 싶을 때 사용한다. 

클래스명 앞에 final

  • 더 이상 확장하고 싶지 않을 때 사용
  • 일반적으로 클래스의 세상에서는 얼마든지 이미 있는 클래스를 확장하여 새로운 클래스를 만들 수 있다. 그런데 만약 어떤 클래스는 의미 상 완전하여 더 이상 이 클래스를 확장하여 새로운 속성이나 동작을 추가하지 않도록 하려면 final 클래스로 만들어서 상속을 금지시킨다. 
package com.kosta.exam00;

class A{
	public void pro() {
		System.out.println("A클래스의 pro입니다.");
	}
	public final void test() {
		System.out.println("테스트 입니다.");
	}
	
}
final class B extends A{
	public void pro() {
		System.out.println("B클래스의 pro입니다.");
	}
	/* final 오류
	public void test() {
		System.out.println("테스트 입니다.");
	}
	*/
}
/* final 오류
class C extends B{
	
}*/
public class FinalTest01 {

	public static void main(String[] args) {
		
		B ob = new B();
		ob.pro();
	}
}

 

대표적으로 Java가 지원하는 클래스 중에서 final인 클래스

  • String 은 이미 final 이다.
  • Math 또한 final 이 붙어있는 클래스이다.

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

난수  (0) 2024.05.23
동적인 배열 Set, List, Map  (0) 2024.05.23
다형성(polymarphism)  (0) 2024.05.20
접근명시자 정리  (0) 2024.05.20
객체 지향 프로그래밍 특징2 - 상속성  (0) 2024.05.20