반응형

Lombok은 자바 컴파일 시점에서 특정 어노테이션으로 해당 코드를 추가할 수 있는 라이브러리입니디. 이는 코드의 다이어트? 가독 성 및 유지 보수에 많은 도움이 됩니다. 하지만 편리한 만큼 잘못 사용하기 쉬운 것이 Lombok 입니다.

1. 설치하기
Lombok 홈페이지로 이동하여 다운로드. ( http://projectlombok.org/download )
다운로드된 jar파일을 실행한다.

자동으로 로컬에 설치된 eclipse와 sts를 찾아주는데 "Install / Update" 버튼을 클릭하면 설치 완료된다.

eclipse나 sts폴더로 가면 lombok.jar 파일이 생성되어 있을것이며, ini 환경파일에 아래와 같은 코드가 추가된다.

2. 사용하기
간단하게 어노테이션만 추가하면 된다.
@Data 어노테이션만 추가했는데, Outline에 getter/setter/toString 메소드가 보인다.

3. 사용시 주의점

@Data는 지양 하자
@Data는 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor을 한번에 사용하는 강력한 어노테이션 입니다. 강력한 어노테이션인 만큼 그에 따른 부작용도 많다고 생각합니다.

무분별한 Setter 남용
위에서 언급했듯이 @Data를 사용하면 자동으로 Setter를 지원하게 됩니다. 그로 인해서 생기는 문제점들이 있습니다. 
간단하게 정리하면 Setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의 안전성이 보장받기 힘듭니다. 예를들어 email의 변경 기능이 제공 되지 않는다고 가정한다면 email 관련된 setter도 제공되지 않아야 안전합니다. 단순 안전함을 넘어서 해당 객체가 자기 자신을 가장 잘 표현하는 구조 즉 email의 변경 포인트를 제공하지 않음으로써 email 변경 기능이 없다는 것을 표현한다고 생각합니다.

ToString으로 인한 양방향 연관관계시 순환 참조 문제
두 객체가 서로 참조할 경우 ToString을 호출하면 무한 순환 참조가 발생합니다. JPA를 사용하다 보면 객체를 Json으로 직렬화 하는 가정에서 발생하는 문제와 동일한 이유입니다. 이 처럼 무분별하게 @Data를 사용하게 되면 이러한 문제를 만나기 쉽습니다.

4. 결론
많은 개발자 환경과 빌드에 해당 라이브러리를 추가하는 작업을 별도로 해야하고, 명시적이지 않게 자동으로 무언가를 해준다는것 자체도 별로 맘에 들지 않는다!
마지막으로 이클립스에서 자동으로 getter/setter/toString 정도는 잘 만들어 주자나!!

그래서 쓰지 않기로 합니다!!

 

 

 

 

반응형

'IT > JAVA' 카테고리의 다른 글

[JAVA] JAVA 버전별 특징  (0) 2020.09.24
반응형

 

JAVA 버전 발표일 특징 비고
Java SE 15 2020년 9월 15일 - EdDSA 암호화 알고리즘 추가
- 패턴 매칭 (2차 미리보기, 상단 Java 14 참조)
- 스케일링 가능한 낮은 지연의 가비지 컬렉터 추가(ZGC)
- Solaris 및 SPARC 플랫폼 지원 제거
- 외부 메모리 접근 API (인큐베이팅)
- 레코드 (2차 미리보기, 상단 Java 14 참조)
- 클래스 봉인 (미리보기)
- 상속 가능한 클래스를 지정할 수 있는 봉인 클래스가 제공된다.
- 상속 가능한 대상은 상위 클래스 또는 인터페이스 패키지 내에 속해 있어야 한다.
 
Java SE 14 2020년 3월 18일 - 프리뷰 기능으로 instanceof의 패턴 매칭과 record라는 데이터 오브젝트 선언 추가
- 인큐베이터라는 패키징 툴(OS에 맞춘 실행파일 생성기능)추가
 
Java SE 13 2019년 9월 17일 - switch문에 yield 예약어 추가  
Java SE 12 2019년 3월 19일 - switch문 확장 ( -> )
- 가비지 컬렉터 개선
- 마이크로 벤치마크 툴 추가
- 성능개선
 
Java SE 11 2018년 9월 25일 - lambda 파라미터에 대한 지역변수 문법
- 엡실론 가비지 컬렉터
- HTTP 클라이언트 표준화
- OracleJDK의 독점기능이 OpenJDK에 이식 (OracleJDK와 OpenJDK가 동일해짐)
- 2019년 1월부터 OracleJDK가 유료 모델로 전환

-
 eclipse 재단으로 넘어간 Java EE 삭제
- JavaFX도 JDK에서 분리하여 별도 모듈 제공

Java SE 10 2018년 3월 20일 - var 키워드를 이용한 지역변수 타입추론
- 병렬처리 가비지 컬렉터
- 개별 Thread로 분리된 Stop-The World
- 루트 CA
- JVM heap영역을 시스템 메모리가 아니 다른종류의 메모리에도 할당
- JDK 레토지토리가 하나로 통합
- Java기반 JIT 컴파일러
- 이전 버전 deprecated처리된 API 삭제
Java SE 9 2017년 9월 21일

- Jingsaw 기반 런타임 모듈화(module)
- JShell 추가(인터프리터 셀처럼 사용)
- private interface method
- immutable collection
- 통합 로깅
- HTTP/2
- HTML 5 JavaDoc
- 프로퍼티 파일에 UTF-8 지원

- 버전을 1.x로 하지 않고 9.0으로 변경
- Ahead-of-time compiler 시범 적용
- Java Applet 기능 종료
- 64비트 버전만 출시

Java SE 8 2014년 3월 18일 - lambda expression
- type annotation
- stream api 추가
- repeating annotation
- static link library
- interface default method
- unsigned integer 계산
- 날짜와 시간 API(new) -> JodaTime
- rhino 대신 nashorn javascript 엔진 탑재
- 32비트 지원 마지막 공식버전
Java SE 7 2011년 7월 7일 - diamond operator <>
- try-resource
- multi-catch
- switch문에 String 사용
- concurrency API(new)
- File NIO(new)
- Java2D 지원
- dynamic language 지원
 
Java SE 6 2006년 12월 11일 - interface에 @Override 추가됨
- JDBC 4.0
- Scripting Language Support
- Java Compiler API
- pluggable annotation
- J2SE -> Java SE로 변경
J2SE 5 2004년 9월 30일 - generics
- annotation
- auto boxing/unboxing
- enumeration
- 가변길이 파라미터
- static import
- concurrency API
- 버전중 1을 빼고 표기
(내부적으로는 1.5, 1.6, 1.7 등을 사용)
J2SE 1.4 2002년 2월 6일 - assert
- regular expression
- NIO
- IPv6
- XML API
- JCE
- JSSE
- JAAS
- Java Web Start
 
J2SE 1.3 2000년 3월 8일 - HotSpot JVM
- JNDI
- JPDA
- JavaSound
- RMI가 CORBA 지원
J2SE 1.2 1998년 12월 8일 - strictfp
- SWING GUI
- JIT CORBA
- Collections
- JDK -> J2SE로 변경 (J2SE 5까지 사용)
- 1999년 업데이트를 통한HotSpot JVM
JDK 1.1 1997년 2월 19일 - inner class
- JavaBeans
- RMI
- reflection
- unicode
- 국제화(internationallization)
 
JDK 1.0 1996년 1월 23일   - 이전에 Oak로 불렸으나, 안정화 작업을 거친 1.0.2부터 JAVA로 변경
JDK 1.0a2 1995년 5월 23일   - 자바 언어가 정식으로 발표된 날
JDK 1.0a 1994년    

 

참조1: 나무위키(https://namu.wiki/w/Java)
참조2: https://i3utterfly.tistory.com/entry/JAVA-버전별-정리?category=831532?category=831532 [나의 개발이야기]

반응형

'IT > JAVA' 카테고리의 다른 글

Lombok 설치 및 활용  (0) 2020.10.13

+ Recent posts