Java

[중앙정보처리학원] Java* 사용 제한자 final, 열거형 Enum

해보구 2024. 4. 22. 16:58

final 키워드

final을 해석하면 ‘마지막’ 이라는 뜻이지 않은가.

final 키워드는 필드, 메서드, 클래스, 지역변수에 선언이 가능하다.

그렇다면 마지막 필드, 마지막 메서드, 마지막 클래스일까?

약간은 의미가 비슷하다고 할 수도 있겠다.

마지막 필드와 지역변수 → 더 이상 값의 변경은 없다.

마지막 메서드 → 더 이상 재 정의는 없다.

마지막 클래스 → 더 이상의 개념의 확장은 없다.

 

 

tips

 

 public static final int  ( psfi 등으로 줄여서가능 )

 

 자바의 상수 : 무조건 static final 같이

 

final 걍 상속을 다 막아버리는거임

'

 

final 필드

public class Person {
	
	final String nation; //에러
	String name;
	int age;

}

클래스를 선언할 때 final 필드를 선언하고 그냥 가만히 있는다면 에러가 발생한다.

반드시 초기화를 해서 마지막 값을 지정해 주어야 한다.

 

 

 

public class Person {
	
	final String nation = "대한민국"; 
	String name;
	int age;

}

이런 식으로 final 변수는 초기화가 무조건 필요하다.

그래야 해당 값을 불변의 값으로 지정할 수 있다.

직접 초기화 하는 방식 말고도 이런 방식도 있다.

 

 

 

 

public class Person {
	
	final String nation = "대한민국"; 
	final String name;
	int age;

	//생성자를 이용해서 초기화.
	public Person(String name) {
		this.name = name;
	}

}

final 필드를 직접 초기화 하는 방식 말고, 객체가 생성될 때 동시 초기화 할 수 있게

생성자에 필드 초기화 로직을 작성할 수도 있다.

그럼 이제 객체가 생성될 때 전달한 값이 절대 바뀌지 않는 불변의 값으로 지정될 것이다.

 

 

 

public class Main {
	
	Person p = new Person("김철수");
	p.nation = "미국"; //에러
	p.name = "김마이클"; //에러
}

 

final로 선언된 변수는 절대 바뀔 수 없는 불변의 값으로 인식되기 때문에

할당 행위 자체가 성립되지 않는다.

 

final method

final이 붙은 메서드는 오버라이딩을 막는다.

final class

클래스 선언 시 final을 사용하면 그 클래스는 상속이 불가능 해 진다.

 

 

열거형(Enum)

 

열거형(Enum)은 일련의 고정된 상수들을 한 곳에 모아 관리할 수 있도록 하는 자료형임

열거형을 사용함으로써 코드의 가독성과 유지보수성이 향상됨

 

 

tips

// enum 쓰는 이유 : 문자열은 오타나도 안알려주니까 안전하게 오타안나게

 

열거형의 기본 구조

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}