유난스런 개발 기록

[JAVA] Day-16 _ final 키워드 본문

개념정리/JAVA

[JAVA] Day-16 _ final 키워드

yourhwan 2023. 2. 6. 21:19

day-16

final 키워드


final 키워드란 ? 

  • final 키워드는 메소드 , 변수, 클래스 에 사용이 가능하다.
  • final은 말 그대로 종결자다. 때문에 final 을 붙여주면 특정한 제한이 걸린다. 

 

== final 메소드는 overriding (오버라이딩, 메소드의 재정의) 이 불가능하다. ==

== final 클래스는 다른 클래스에게 상속을 해줄 수 없다. 즉, 부모 클래스로 사용될 수 없다. ==

== final 을 필드에 붙이면 새로운 값을 할당할 수 없다. =

 

코드를 확인해보면 쉽게 이해할 수 있다. 

실습으로 생성했던 여러개의 클래스를 첨부한다.

 

어디에 final 이 사용되었고, 어떻게 적용되고 있는지 확인해보면 된다.

 

final_test_1

package my.day16.d.Final;

public class Final_test_1 {

	String id;
	String name;
	
	// 필드에 final 이 붙으면 더 이상 새로운 값으로 할당할 수 없다.
	final double PI = 3.141592;  // 상수변수 
	
	
	void greeting() {
		System.out.println("=== 안녕하세요 ===");
	}
	
	// 메소드에 final 을 붙이면 자식 클래스에서 메소드의 overriding(오버라이딩, 재정의)을 할 수 없게 된다. 
	final void rule() {
		System.out.println("=== 정직하게 삽시다 ===");
	}
		
}

 

final_test_2

package my.day16.d.Final;

// final 로 되어진 클래스는 다른 클래스로 상속해줄 수 없다는 말이다.
// 즉, final 로 되어진 클래스는 다른 클래스에서 부모 클래스로 사용될 수 없다는 말이다.
public final class Final_test_2 {

	String id;
	String name;
	
	public void example() {
		System.out.println("=== 연습입니다. ===");
	}
	
}

 

main_final_test_1

package my.day16.d.Final;

public class Main_final_test_1 {

	public static void main(String[] args) {
		
		Final_test_1 ft1 = new Final_test_1();
		
		ft1.id = "leess";
		ft1.name = "이순신";
		
	//	ft1.PI = 23.324324;  // final 이므로 새로운 값을 할당할 수 없기에 오류임.
		
		//////////////////////////////////////////////
		
		Child_1 child = new Child_1();
		child.greeting(); // 메소드의 overriding(오버라이딩, 재정의)
		child.rule();
		child.mytest();

	}// end of main()-------------------------

}

 

child_1

package my.day16.d.Final;

public class Child_1 extends Final_test_1 {

	int age;
	
	void mytest() {
		System.out.println(">> 연습입니다. <<");
	}
	
	@Override
	public void greeting() {
		System.out.println("\n~~~ Hi Hello ~~~\n");
	}
	
/*	
	=== final 메소드는 overriding(오버라이딩, 재정의)을 할 수 없다. ===
	@Override
	public void rule() {
		System.out.println("\n~~~ Honesty ~~~\n");
	}
*/	
	
}

 

child_2

package my.day16.d.Final;

public class Child_2 extends Final_test_2 {

	// Final_test_2 클래스가 final 클래스 이므로 상속받을 수 없다.
	// 상속을 받을 수 없는데 extends 를 사용했으므로 오류이다.
	
}

 

 

final 키워드가 붙으면 메소드, 클래스, 필드 등의 생성에 제한이 생길 수 있다는 것을 꼭 기억하자.