🔭
Ellery's study archive
Resume(수정중)GithubTistory
  • framework, library
    • Spring core
      • 스프링 트라이앵글 - POJO, IOC/DI, AOP, PSA
      • Servlet
    • Spring MVC
      • DispatcherServlet
      • Validation
    • Spring Boot
    • Spring Security
    • Spring Batch
    • Spring Webflux
    • JPA
    • JUnit, Spring Test
    • etc
      • Slf4j MDC(Mapped Diagnostic Context)
  • ETC, 개발 팁들
    • 개발 팁들
      • 스프링 프로젝트 init 시에 해야될 것들
      • vim 한글 깨질 때 인코딩 방식 지정
      • EC2 ssh connection 쉽게 하기
      • 리눅스 커맨드, netstats
      • Fork한 레포지토리 origin 업데이트
      • git merge, rebase
      • Intellij 자주 쓰는 기능 단축키
      • JSON handling
      • aws user-data.sh
    • Lombok annotation, 권장 방식
    • DB 모델링 시에 인조 식별자 정의하는 케이스
    • Redis pub/sub vs Apache kafka
  • Language
    • Java
      • 자바 버젼별 feature
      • JVM architecture
      • Garbage collection
      • Java String pool
      • java 8 Concurrent
      • Optional
      • Stream
      • Comparator, Comparator
      • Error, Exception
      • Java의 Call by value(pass by value)
      • Java 변수 간 값 Swap 방식 5가지
    • Javascript
      • 자주 쓰는 ES6 문법 정리
      • ES6 module
      • ES6 proxy
      • scope, var closure 이슈, let, const
    • Python
      • @lru_cache
  • CS
    • OS
      • Process, Thread
      • CPU scheduling
      • sync vs async, blocking vs nonblocking
      • Memory segmentation
      • virtual memory
      • 페이지 교체 알고리즘
    • Network
      • UDP
      • TCP
      • DNS
      • HTTP
      • web server, WAS
      • Proxy, Load balancer
      • web socket, WebRTC
      • gRPC
      • web secure
    • DB
      • MySQL
      • index
      • 정규화
      • DB 트랜잭션, 동시성 제어 문제
      • 클러스터링
      • 레플리케이션
      • 샤딩
    • Data Structure, Algorithm
      • AVL tree, Red black tree
      • B-tree, B*tree, B+tree
      • Hash
    • Design pattern
      • SOLID
      • 생성 패턴
        • 싱글톤 패턴
        • 팩토리 메서드 패턴
        • 빌더 패턴
        • Null 객체 패턴
      • 구조 패턴
        • 퍼사드 패턴
        • 프록시 패턴
        • 어댑터 패턴
        • 데코레이터 패턴
      • 행위 패턴
        • 전략 패턴
        • 템플릿 메서드 패턴
        • 상태 패턴
        • 옵저버 패턴
  • 소프트웨어 아키텍쳐
    • Layered Architecture
    • 클린 아키텍쳐
    • DDD
    • etc
      • DTO vs VO
  • 개발 서적들
    • 소트웍스 앤솔로지에서 소개되는 객체지향 생활 체조 원칙 간략 정리
    • 엘레강트 오브젝트 - 새로운 관점에서 바라본 객체지향
    • 만들면서 배우는 클린 아키텍쳐
  • 테크 블로그
Powered by GitBook
On this page
  • 메소드 관련
  • 통합 기능
  • 빌더 패턴
  • 그 외
Edit on GitHub
  1. ETC, 개발 팁들

Lombok annotation, 권장 방식

Previousaws user-data.shNextDB 모델링 시에 인조 식별자 정의하는 케이스

Last updated 2 years ago

NoArgsConstructor : 매개 변수가 없는 기본 생성자를 생성

  • force : final 필드가 존재할 때 이를 null 또는 0으로 초기화해 기본 생성자를 만들 수 있게 한다.

  • access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)

  • onConstructor_ = {@어노테이션,...} : 생성된 생성자에 어노테이션 추가

  • staticName : 해당 생성자를 사용하는 static 생성자를 추가


@RequiredArgsConstructor : final 필드만 포함된 생성자를 생성

  • access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)

  • onConstructor_ = {@어노테이션,...} : 생성된 생성자에 어노테이션 추가

  • staticName : 해당 생성자를 사용하는 static 생성자를 추가

    • of로 정의하는 패턴 많이 볼 수 있음


@AllArgsConstructor : 모든 필드를 포함한 생성자를 생성

  • access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)

  • onConstructor_ = {@어노테이션,...} : 생성된 생성자에 어노테이션 추가

  • staticName : 해당 생성자를 사용하는 static 생성자를 추가


메소드 관련


@Getter : Getter를 자동으로 생성

  • lazy : Getter를 캐시 하며, Getter가 CPU가 많이 필요하거나 메모리가 많이 필요한 표현식의 경우 유용 (private final 변수에만 사용 가능, 롬복에서 잠금 처리하여 Thread-safe일 필요 없다.)

  • onMethod_ = {@어노테이션,...} : 생성되는 메소드에 어노테이션 추가

  • value : 생성되는 메소드의 접근제어자 설정 (AccessLevel)


@Setter : Setter를 자동으로 생성

  • onParam_ = {@어노테이션,...} : Setter의 매개 변수에 어노테이션 추가

  • onMethod_ = {@어노테이션,...} : 생성되는 메소드에 어노테이션 추가

  • value : 생성되는 메소드의 접근제어자 설정 (AccessLevel)


@ToString : toString 메소드를 자동으로 생성

  • includeFieldNames : 이름-값 쌍으로 표현할지 값만 표현할지 여부

  • of : 포함할 필드 설정

  • exclude : 제외할 필드 설정

  • callSuper : 슈퍼 클래스의 toString 메소드 출력을 포함시킬지 여부

  • doNotUseGetters : toString 메소드 구현에 Getter 메소드를 사용하지 않고 this를 사용할지 여부

  • onlyExplicitlyIncluded : 필드에 설정된 @ToString.Include 또는 @ToString.Exclude를 적용시킨다


@EqualsAndHashCode : equals, hashCode 메소드를 자동으로 생성

  • cacheStrategy : hashCode의 호출 결과를 캐시하여 이후 호출에 사용할지 여부

  • of : 포함할 필드 설정

  • exclude : 제외할 필드 설정

  • callSuper : 슈퍼 클래스의 toString 메소드 출력을 포함시킬지 여부

  • doNotUseGetters : toString 메소드 구현에 Getter 메소드를 사용하지 않고 this를 사용할지 여부

  • onlyExplicitlyIncluded : 필드에 설정된 @EqualsAndHashCode.Include 또는 @EqualsAndHashCode.Exclude를 적용시킨다.


@With : with 메소드를 자동으로 생성

with 메소드는 해당 필드만 인자로 전달한 값으로 변경하여, 모든 필드를 사용한 생성자를 통해 새로운 객체로 반환한다. (해당 객체의 필드와 동일한 값을 설정하면 해당 객체를 반환한다.)

  • onParam_ = {@어노테이션,...} : with 메소드의 매개 변수에 어노테이션 추가

  • onMethod_ = {@어노테이션,...} : with 메소드에 어노테이션 추가

  • value : 생성되는 메소드의 접근제어자 설정 (AccessLevel)


통합 기능


@Data : 여러 어노테이션 통합

@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 기능을 함께 제공

  • staticConstructor : final 변수로 이루어진 static 생성자를 만든다. (@RequiredArgsConstructor를 private로 생성)


@Value : @Data의 변형된 기능

모든 필드를 private final로 설정, 클래스를 final로 설정, Setter를 생성하지 않는다.

  • staticConstructor : final 변수로 이루어진 static 생성자를 만든다. (@RequiredArgsConstructor를 private로 생성)


빌더 패턴


@Builder : 메소드 체이닝을 이용하는 static 메소드 builder()를 생성한다.

생성자 대신 편리하게 사용

  • access : builder()의 접근제어자 설정 (AccessLevel)

  • builderClassName : builder의 클래스 이름을 명시적으로 설정

  • builderMethodName : builder()의 메소드 이름을 명시적으로 변경

  • buildMethodName : build()의 메소드 이름을 명시적으로 변경

  • toBuilder : 인스턴스의 현재 값을 가지고 시작하는 builder를 생성

  • setterPrefix : Setter 메소드의 이름 앞에 해당 문자열을 붙인다.


@Builder.Default : 명시적으로 기본값 설정

필드에 값을 설정하지 않은 경우 0/null/false로 기본값이 설정된다.이때 기본값을 지정하기 위해 사용


@Singular : 해당 필드를 컬렉션으로 처리하여 다수의 값을 할당할 수 있다.

값을 비우는 clear 메소드가 함께 생성된다.

  • ("필드명") : 컬렉션의 값을 할당할 때 사용할 필드명을 따로 지정한다.(기존 필드명은 컬렉션 자체를 할당할 때 사용된다.)


그 외


@NonNull : null-check 로직을 자동으로 생성하여 null 값이 넘어온 경우 NulPointerException 발생

기본 생성자 대신 해당 필드를 포함한 생성자가 추가된다.


@Cleanup : 해당 영역을 벗어날 때 지정된 리소스의 close()를 호출

try-finally 구문이 적용된다.

  • ("메소드명") : close()가 아닌 dispose()와 같은 리소스를 닫는 메소드를 호출하고자 할 때 속성으로 해당 메소드명 기입(매개 변수가 있는 메소드는 호출할 수 없다.)


@Synchronized : java의 synchronized의 더 안전하게 변형된 기능

static, instance 단위로 락을 거는 synchronized와 다르게 필드 단위로 락을 건다. (메소드에만 사용 가능)

  • ("필드명") : 해당 필드에 락을 건다.


@SneakyThrows(예외클래스) : try-catch 문법으로 해당 예외를 처리

Checked Exception 처리에 유용


@Log, @CommonsLog, @Log4j2, @Slf4j 등...

로그 프레임워크를 log라는 이름의 private static final 필드로 생성한다.

https://johngrib.github.io/wiki/pattern/static-factory-method/#lombok-requiredargsconstructorstaticname%EC%9D%98-%EC%82%AC%EC%9A%A9
실무에서 Lombok 사용법 - Yun Blog | 기술 블로그
Good and Bad usage of LombokMedium
Be Careful With LombokMedium
DTO 만들 때 Lombok 꿀팁 대방출!
Logo
Logo
Logo
Logo