일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 외부키
- 포트
- EC2
- 네이티브쿼리
- 커밋메세지수정
- subquery
- 적용우선순위
- docker명령어
- 컨테이너실행
- 테스트
- 추후정리
- 예약
- 참조키
- AuthenticationEntryPoint
- appspec.yml
- querydsl
- 검색
- 서브쿼리
- 테스트메소드
- ubuntu
- Query
- MySQL
- WeNews
- 메세지수정
- 2 > /dev/null
- appspec
- foreignkey
- ㅔㄴ션
- application.yml
- 메소드명
- Today
- Total
제뉴어리의 모든것
[자바] 알아두면 유용한 Lombok 어노테이션 본문
이번 포스트에서는 많이 알려지지는 않았지만 알아두면 유용한 Lombok 어노테이션에 대해서 알아보겠습니다.
빌더 자동 생성
다수의 필드를 가지는 복잡한 클래스의 경우, 생성자 대신에 빌더를 사용하는 경우가 많은데요. 빌더 패턴을 직접 작성해보면 코딩량이 의외로 상당함을 깨닫게 됩니다. 이 때, @Builder 어노테이션을 사용하면 자동으로 해당 클래스에 빌더를 추가해주기 때문에 매우 편리합니다.
@Builder public class User { private Long id; private String username; private String password; @Singular private List<Integer> scores; }
컬렉션으로 된 필드에는 @Singular 어노테이션을 선언해주면 모든 원소를 한 번에 넘기지 않고 원소를 하나씩 추가할 수 있습니다.
User user = User.builder() .id(1L) .username("dale") .password("1234") .score(70) .score(80) .build(); // User(id=1, username=dale, password=1234, scores=[70, 80])
로거 자동 생성
클래스마다 일일이 로거를 생성해주는 여간 귀찮은 일이 아닙니다. 이 때, @Log 어노테이션을 사용하면 자동으로 log 필드를 만들고, 해당 클래스의 이름으로 로거 객체를 생성하여 할당해줍니다. @Log 뿐만 아니라, @Slf4j나 @Log4j2 등 다양한 로깅 프레임워크에 대응하는 어노테이션을 제공하오니 참고바랍니다.
@Log public class LogExample { // 자동 생성 // private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName()); public static void main(String... args) { log.info("TEST"); } }
Null 체크
@NonNull 어노테이션을 변수에 붙이면 자동으로 null 체크를 해줍니다. 즉, 해당 변수가 null로 넘어온 경우, NullPointerException 예외를 일으켜 줍니다.
@NonNull @Setter private String id;
obj.setId(null); // NullPointerException 발생
자동 자원 닫기
IO 처리나 JDBC 코딩을 할 때, try-catch-finally 문의 finally 절을 통해서 close() 메소드를 호출하는 게 여간 번거로운 일이 아니었는데요. @Cleanup 어노테션을 사용하면 해당 자원이 자동으로 닫히는 것이 보장됩니다.
@Cleanup Connection con = DriverManager.getConnection(url, user, password);
예외 처리 생략
Checked Exception 때문에 반드시 throws나 try-catch 구문을 통해서 번거롭게 명시적으로 예외 처리를 해줘야할 때 가 있습니다. 이럴 때, @SneakyThrows 어노테이션을 사용하면 명시적인 예외 처리를 생략할 수 있습니다. (호불호가 갈릴 수 있는 기능인 것 같습니다.)
@SneakyThrows(IOException.class) public void printLines() { BufferedReader reader = new BufferedReader(...); for (String line; (line = reader.readLine()) != null; ) { System.out.println(line); } }
동기화
자바의 synchronized 키워드를 메소드에 선언하면 객체 레벨에서 락이 걸려서 여러가지 동기화 관련 문제들이 발생할 수 있습니다. 대신에 @Synchronized 어노테이션을 사용하면 가상의 필드 레벨에서 좀 더 안전하게 락을 걸어줍니다.
@Synchronized public void hello() { System.out.println("world"); }
불변 클래스
한 번 생성하면 변경할 수 없는 불변 객체를 만들기 위한 클래스를 선언할 때는 @Data 대신에 @Value 어노테이션을 사용하면 됩니다.
이상으로 유용하지만 많이 알려지지 않은 Lombok의 어노테이션에 대해서 알아보았습니다.
출처 : [자바] 알아두면 유용한 Lombok 어노테이션 | Engineering Blog by Dale Seo불러오는 중입니다...
'JAVA' 카테고리의 다른 글
변수의 데이터타입 확인하기 (0) | 2021.03.10 |
---|---|
HttpsURLConnection을 이용하여 네이버 맵 api 호출시 주의사항 (0) | 2021.03.05 |
jdk 설치와 intellij에서 프로젝트의 jdk 버전 설정 (0) | 2021.01.26 |
@Build 와 @AllArgsConstructor 의 관계 (0) | 2021.01.17 |
Java 스트림 Stream (1) 총정리 (0) | 2021.01.17 |