기능을 작성하다보면, final 클래스, 메소드, 변수를 작성할 필요가 생깁니다.
시스템의 불변성을 보장하기 위해서 사용되는 이 final 키워드는 왜 사용하는지 알아보겠습니다.
final 클래스
public final class ...
외부에서 상속이 불가능합니다.
즉, 자식클래스를 생성하여 클래스 로직을 변경하는 것을 방지하기 위해 사용됩니다.
외부에서는 이 클래스를 상속할 수 없으므로, 오버라이딩이 불가능해져 고유성/불변성을 유지할 수 있습니다.
final 메소드
class A {
final void method() {...}
}
외부에서 이 클래스를 상속할 경우, final로 선언된 메소드는 오버라이딩이 불가능합니다.
자식클래스가 이 메소드를 그대로 사용하게 만들기 위해 사용됩니다.
final 필드
class A {
// 1. 필드 선언 시 초기값 설정
private final String NAME = "STRING";
// 2. 생성자에서 초기값 설정
private final String NAME;
public A (String name) {
this.NAME = name;
}
}
final로 필드를 초기화할 경우, 더 이상 그 필드값을 수정할 수 없습니다.
final 필드에 초기값을 줄 수 있는 경우는 2가지가 있는데, 필드 선언 시 초기값을 설정하거나 생성자에서 초기값을 설정하면 됩니다.
초기화되어있지 않은 경우, 컴파일 에러가 발생합니다.
인스턴스 전역에서 값을 수정할 필요가 없는 동일한 데이터를 가지는 경우에 static과 함께 사용하여 상수로 선언할 수 있습니다.
'백엔드 Backend > 기본 개념' 카테고리의 다른 글
캐시 / 캐시 전략 (1) | 2024.08.12 |
---|---|
JWT 토큰 (0) | 2024.08.08 |
SSH Key 동작 원리 (0) | 2024.08.08 |
예외 이해하기 (0) | 2024.08.08 |
아키텍처 (1) | 2024.08.07 |
기능을 작성하다보면, final 클래스, 메소드, 변수를 작성할 필요가 생깁니다.
시스템의 불변성을 보장하기 위해서 사용되는 이 final 키워드는 왜 사용하는지 알아보겠습니다.
final 클래스
public final class ...
외부에서 상속이 불가능합니다.
즉, 자식클래스를 생성하여 클래스 로직을 변경하는 것을 방지하기 위해 사용됩니다.
외부에서는 이 클래스를 상속할 수 없으므로, 오버라이딩이 불가능해져 고유성/불변성을 유지할 수 있습니다.
final 메소드
class A {
final void method() {...}
}
외부에서 이 클래스를 상속할 경우, final로 선언된 메소드는 오버라이딩이 불가능합니다.
자식클래스가 이 메소드를 그대로 사용하게 만들기 위해 사용됩니다.
final 필드
class A {
// 1. 필드 선언 시 초기값 설정
private final String NAME = "STRING";
// 2. 생성자에서 초기값 설정
private final String NAME;
public A (String name) {
this.NAME = name;
}
}
final로 필드를 초기화할 경우, 더 이상 그 필드값을 수정할 수 없습니다.
final 필드에 초기값을 줄 수 있는 경우는 2가지가 있는데, 필드 선언 시 초기값을 설정하거나 생성자에서 초기값을 설정하면 됩니다.
초기화되어있지 않은 경우, 컴파일 에러가 발생합니다.
인스턴스 전역에서 값을 수정할 필요가 없는 동일한 데이터를 가지는 경우에 static과 함께 사용하여 상수로 선언할 수 있습니다.
'백엔드 Backend > 기본 개념' 카테고리의 다른 글
캐시 / 캐시 전략 (1) | 2024.08.12 |
---|---|
JWT 토큰 (0) | 2024.08.08 |
SSH Key 동작 원리 (0) | 2024.08.08 |
예외 이해하기 (0) | 2024.08.08 |
아키텍처 (1) | 2024.08.07 |