final 키워드
- final은 최종적인 이라는 의미를 가지고 있다.
- 즉, 해당 변수는 값이 저장되면 최종적인 값이 된다.
🏷 final 사용법
✔️class 필드 안
final String name = "choi";
- 클래스 필드 변수에 = 연산자를 사용하여 값을 넣어준다.
✔️ 생성자를 통해
public Class Users {
final String name;
public Users(String name) {
this.name = name;
}
}
만약, 위의 코드에 static이 붙게 된다면,
static final String name; // 컴파일 에러가 발생한다.
이유: static 키워드는 JVM 구동 시, 메모리에 올라가 있어야 하므로, 객체의 생성과 관계 없이 초기값이 할당 되어 있어야 하기 때문이다.
정답: static final String name = "Choi"; // 변수 선언 시 초기 값 할당
✏️ staitc VS final
static final
- 선언과 동시에 초기화 되어 프로그램이 종료될 때까지 값이 유지된다.
- 객체 생성과 무관하다.
final
- 객체 생성 시 마다, 초기화를 통해 값을 다르게 설정 할 수 있다.
- 객체 생성과 유관하다.
❓ final은 상수인가?
final을 통해 상수의 역활을 할 수는 있다.
- = 연산자를 이용하면 사실 값을 변경할 수 없기 때문이다.
- 하지만, final을 붙였다고 해서 상수가 되는 건 아니다.
- 생성자를 통해 값을 할당할 때에는 파라미터로 받는 값에 따라 변수의 값이 달라지기 때문이다.
- 완전한 상수를 만들기 위해서는 개체의 생성과 상관없이 메모리에 값이 할당되는 static 키워드를 통해 상수를 생성하자!
📘 부록
해당 내용으로 스터디를 했을 때, 알게된 점도 기록해보려고 한다.
만약 ,
fina User user = new User(); 으로 user 객체를 생성한다면,
user의 번지 수는 불변이겠지만, 그 안의 값들은 변경된다.
즉, final을 선언했다고 해서 그 안의 값들에 대해서는 불변을 보장할 수 없다는 것이다.
'토이 프로젝트 배우게 된 것들 & 오류 해결🐰' 카테고리의 다른 글
hibernate db dialect 오류 (0) | 2022.11.28 |
---|---|
H2 DB file is locked 발생 원인 및 해결 방법 (0) | 2022.11.28 |
JPA 연관관계 총 정리 (0) | 2022.11.17 |
Builder 패턴, @NoArgsConstructor, @AllArgsConstructor (0) | 2022.11.14 |
Spring Boot에서 H2 데이터베이스 연결 (0) | 2022.11.10 |