Purple Bobblehead Bunny

Backend/SPRING

[Spring] Lombok

준영어린이 2022. 7. 29. 22:33

 

🚀 Lombok

보통 JAVA에서는 많은 멤버변수가 있고, Getter, Setter, toString 등 직접 코드를 입력해줘야 하는데,

Lombok은 VO/DTO/Domain 객체에 필요한 Getter Setter, toString 메서드, 생성자 등을 자동으로 생성을 해 반복 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리이다.

 

Lombok은 여러가지 어노테이션을 제공하고, 이를 기반으로 반복 소스코드를 컴파일 과정에서 생성해주는 방식으로 동작하는 라이브러리이다.

 


🚀 어노테이션

 

  • 1. @Getter / @Setter
    • 특정 필드 위에서 어노테이션을 붙여주면, 자동으로 생성된 접근자와 설정자 메서드를 사용할 수 있다.                   클래스 위에 붙여주는 경우에는 모든 필드에 접근자와 설정자가 자동으로 생성된다
  • @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
    • 생성자를 자동으로 생성해주는 어노테이션
      • @NoArgsConstructor - 매개변수가 없는 기본 생성자를 생성한다.
      • @AllArgsConstructor - 필드 값을 모두 포함한 생성자를 생성해준다. 
      • @RequiredArgsConstructor - final필드와 @NonNull 어노테이션이 붙은 필드에 대한 생성자를 생성하여                                                        특정 변수만을 활용하는 생성자를 생성한다.
  • @ToString
    • 필드를 기반으로 ToString 메서드를 자동생성하며, 클래스명(필드1 이름= 필드1 값, 필드2이름 = 필드2값)으로       출력이 된다. @ToString(exclude = "필드명") 을 사용하여 원하지 않는 필드는 제외할 수 있다.
  • @EqualsAnsHashCode
    • Equals와 hashCode 메서드를 자동으로 생성해주며, callSuper를 사용해서 메서드 자동 생성시 부모 클래스의 필드까지 고려할 것인지를 설정할 수 있다. callSuper=true 이면, 부모 클래스 필드 값도 동일한지 고려하고,              callSuper=false(기본값)로 설정하면 자신 클래스의 필드 값들만 고려한다.
  • @Data
    • @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 한번에 생성해준다.
  • @Log4j2
    • 자바 로깅을 위한 라이브러리, log.info() 를 이용한다.

 


실습

TestDTO.java

 

JUnit DTOTests.java

 


 

🚀 빌더 패턴(Builder Pattern)

GoF 디자인 패턴 중 생성 패턴에 해당한다.

빌더 패턴은 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다.

 

빌더 패턴 적용시 효과

  • 불필요한 생성자 제거
  • 데이터의 순서에 상관없이 객체 생성 가능
  • 명시적 선언으로 이해하기 쉬움

 

// ProfileDTO

@ToString
@Data   // @Getter + @Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder 
public class ProfileDTO {
	private String name;
    private String age;
    private String weight;
    private String height;
}

 

// Test

@Test

public void testfunc2() {

	ProfileDTO dto = ProfileDTO.builder()
    	.weight("56.6");
        .name("홍길동")
        .height("188.5")
        .age("44");
        .build();
System.out.println("빌더 패턴 생성 확인 : " + dto.toString());
System.out.println("이름 : " + dto.getName());
System.out.println("나이 : " + dto.getAge());
System.out.println("키 : " + dto.getHeight());
System.out.println("몸무게 : " + dto.getWeight());

ProfileDTO dto2 = ProfileDTO.builder()
		.name("남길동")
        .height("188.5")
        .build();
System.out.println("빌더 패턴 생성 확인 : " + dto.toString());

'Backend > SPRING' 카테고리의 다른 글

[Spring]MyBatis  (0) 2022.08.01
[Spring] Connection Pool  (0) 2022.08.01
[Spring] DB OJDBC  (0) 2022.08.01
[Spring] Logj4  (0) 2022.08.01
[Spring] 스프링 프레임워크, Spring FrameWork  (0) 2022.07.11