반응형
final
java에서 final을 언제 사용할가?
java에서는 final이라는 예약어를 클래스, 메소드, 변수에 사용할 수 있다.
class에서 final을 사용하는 이유
public final class FinalClass{
}
// error: cannot inherit form final FinalClass
public class ExtendFinalClass extends FinalClass{
}
Class에서 final을 사용하면 해당 클래스를 상속할 수 없다. 즉 더 이상 확장해서는 안 되는 클래스, 누군가 이 클래스를 상속받아서 내용을 변경해서는 안 되는 클래스를 선언할 때 final을 class앞에 선언한다.
메소드에서 final을 사용하는 이유
public abstract class FinalMethod{
public final void printing(String data){
System.out.println("Data : " + data);
}
}
public abstract class FinalChildMethod extends FinalMethod{
// error: printing cannot override
public void printing(String data){
System.out.println("Data : " + data);
}
}
메소드의 경우도 class에서 final을 사용하는 이유와 비슷하며 메소드를 final로 선언할 경우 더 이상 overriding을 할 수 없다.
변수에서 final을 사용하는 이유
public abstract class FinalValue{
// 초기화 하지 않을 시 error : variable instanceNotVariable not initialized in defalut constructor
final int instanceNotVariable = 1; // 초기화
}
class나 method에서 final을 사용하면 더 이상 상속이 불가능하고, Override할 수 없지만 변수에서는 다른 용도로 사용한다. 변수에 final을 사용하면 더 이상 바꿀 수 없는 값이 된다. 즉 더 이상 변수가 아니고 상수가 된다. 그래서 final을 사용할 때 변수 선언과 동시에 초기화도 해주어야 한다. 그러나 매개 변수나 지역 변수를 final로 선언하는 경우에는 반드시 선언 시 초기화를할 필요는 없다. (매개 변수는 이미 초기화 되어 넘어오고, 지역 변수는 메소드를 서언하는 중괄호 내에서만 참조되므로 다른 곳에서 변경할 일이 없다.)
final을 사용할 때 주의사항
final로 객체(인스턴스 변수)를 생성할 때에도 선언과 동시에 초기화를 해야한다. 변수와 비슷하지만 다른점은 객체(생성자) 안에 선언되어 있는 변수는 객체를 생성한 것과 다르기 때문에(final로 선언되어 있는지 알 수 없다.) 객체 안에 선언된 변수는 값이 변경될 수 있다.
반응형
'책 공부 > 자바의 신' 카테고리의 다른 글
interface 와 abstract class (0) | 2024.03.12 |
---|---|
Java에서 this란 무엇인가? (0) | 2022.09.01 |
오버로딩(overloading) vs 오버라이딩(overriding) (0) | 2022.08.17 |
자바의 신 기본 정리 (0) | 2022.08.14 |