학습 키워드
- Lombok (롬복)
- Getter / Setter
- @NoArgsConstructor, @AllArgsConstructor
- @RequiredArgsConstructor (의존성 주입)
학습 한 내용
자바에서는 객체의 필드(데이터)를 외부에서 직접 수정하게 두지 않고, 메서드를 통해서만 접근하게 만드는 게 원칙이다. 하지만 모든 필드에 일일이 메서드를 만드는 건 노가다인데, 이를 Lombok이라는 라이브러리가 대신 해준다.
참고로 컴파일 시 코드가 생성되기 때문에 디버깅이 복잡할 수 있다
Getter와 Setter: 데이터의 출입문
- @Getter: 변수 값을 가져올 때(Get) 쓴다.
getUsername()처럼 "그 데이터 나한테 줘"라고 요청하는 문이다. - @Setter: 변수 값을 세팅할 때(Set) 쓴다.
setUsername("철수")처럼 "이 값을 데이터에 저장해"라고 명령하는 문이다. - 왜 직접 안 쓰고 얘를 쓰나? 나중에 데이터에 제한을 걸고 싶을 때(예: 나이는 0보다 커야 함) 이 메서드 안에서만 로직을 수정하면 되기 때문에 유지보수가 편해진다.
- 다만, 모든 필드에 Setter를 사용하는 것은 좋은 설계가 아니다. Setter는 객체의 상태를 무분별하게 변경할 수 있기 때문에 필요한 경우에만 사용해야 한다.
생성자(Constructor) 자동화
- @NoArgsConstructor: 파라미터가 하나도 없는 기본 생성자를 만들어준다. JPA나 프레임워크가 객체를 만들 때 필수다.
- @AllArgsConstructor: 모든 필드를 한 번에 채워서 객체를 만들 수 있는 생성자를 만들어준다.
- @RequiredArgsConstructor: final이 붙은 필수 필드들만 모아서 생성자를 만들어준다. 주로 스프링에서 다른 서비스나 컴포넌트를 주입(DI)받을 때 필수적으로 사용한다.