반응형
코드리뷰를 할때나, 개발을 할때 final을 보면 이게 꼭 필요한것인가? 하고 의문을 같거나 언제 사용하면 좋을까? 하고 생각에 잠기는 경우가 생긴다.
기본적으로 final 이라고하면 불변 객체에 정의후 값을 재할당하지 않을때 사용함으로 상수(const
)에서 많이 사용한다. 요즘엔 IDEA 도구가 좋아지다 보니, Eclipse나 IntelliJ 에서 자주 추천을 해준다. 특히나 Spring(boot)를 사용하시는 개발자라면 생성자 방식의 주입을 사용하실때 ide에서 final을 추천해준다.
그럼 언제 사용하고, 어떤 의미를 가지고 있는지 좀더 살펴보자.
final 종류
- final 변수
- final method
- final class
for example
final 변수
→ 해당 변수가 생성자나 대입 연산을 통해 한번만 초기화 됨을 의미하며, 상수 값을 만들때 주로 사용한다.
- 원시타입에 대한 final
public void finalTest() {
final int x = 10;
// x= 11; // 컴파일 에러 원시타입의 값에 재대입 불가
}
- 객체 타입에 대한 fianl
public void finalObjectTest() {
final Users user = new User();
user.setName("it.famer") // 객체에 대한 속성값은 변경 가능
// user = new User(); 신규 Object는 선언 불가
}
public void finalObjectTest() {
final List<Users> users = new List<>();
Users user = new User();
user.setName("it.famer") // 객체에 대한 속성값은 변경 가능
users.add(user);
// users = new List<>(); 신규 Object는 선언 불가
}
- 메서드 인자 값에 대한 final
public void setUserName(final String userName) {
System.out.println("사용자 이름 =" , userName);
// userName = "변경테스트"; final 메서드 인자 값임이로 메서드 안에서 변경시 오류 , 변경불가
}
- 맴버 변수에 대한 fianl 변수
- 인스턴스 초기화 블록 사용의 final
public class Users {
final String URL;
{
URL = "http://localhost/ads"
}
public void send () {
System.out.println("URL 주소 =" , URL);
}
}
- 생성자방식의 맴버 변수 final
class User {
final String URL;
User(String url) {
URL = url;
}
public String getURL() {
return URL;
}
// setter 생성시 에러
}
final Method
final이 적용된 메소드는 상속후에도 재정의 할 수 없다
final class
class에서 사용되는 final은 클레스를 상속할수 없도록 제한한다.
반응형
'JAVA' 카테고리의 다른 글
동시성 과 병렬성(Concurrence and parallelism) (2) | 2023.02.01 |
---|---|
async/sync & blocking/ non-blocking (동기/비동기 & 블로킹/논블로킹) (1) | 2022.11.28 |
java Class initializationblock(instance initialization) , 초기화 생성 블럭 (0) | 2021.06.09 |
java URL stream meta data 추출 (0) | 2021.06.09 |
java generic 사용법 (0) | 2021.06.01 |