2022/04/30 롬복(Lombok)이 뭔데!

김석진·2022년 4월 30일
0

다시 초심으로

목록 보기
6/19

🍳보일러플레이트코드를 없애주는 편리한도구 LOMBOK(롬복)🍳

롬복은 자바스프링에서 반복적으로 타이핑 해야하는 보일러 플레이트 코드를 자동으로 생성해주는 거의 필수적인 라이브러리이다.

보일러 플레이트란?

컴퓨터 프로그래밍에서 보일러플레이트 또는 보일러플레이트 코드라고 부르는 것은 최소한의 변경으로 여러곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드를 말한다.


롬복은 컴파일시 쓰면 끝인게 아니고 annotationProcessor를 통해 한번 빌드가 된 후 롬복이 자동으로 추가되는 코드가 추가되어야 롬복이 정상적으로 실행이된다.

롬복에서 가장 대표적인 기능

public class DevDto{
	String name;
    Integer age;
    LocalDateTime startAt;
}

이렇게 3가지의 프로퍼티가 있을때 네임을 자바빈규약에 따라서 getter()/setter()를 만들어야 한다.

ex) public class DevDto{
	...
	public void setName(String name){
    this.name=name;
    }
    public String getName(){
    return this.name;
    }

롬복을 사용하기 전에는 이런 getter/setter를 다 써야한다는 단점이 있었다. 이렇게 하면은 프로퍼티명을 바꾸는 상황이 온다면 getter/setter의 명도 다 바꿔야한다는 불편함이 있다(물론 윈도우기준 shift+F6을통한 rename을 하면 쉽게 리팩토링이 가능하다ㅎ) 프로퍼티의 수가 많아지고 코드의 양이 많아진다면 창의 절반이상을 차지하게 될것이다

롬복을 사용한다면?

@Getter
@Setter
public class DevDto{
	String name;
    Integer age;
    LocalDateTime startAt;
}

이렇게 두줄로 어노테이션을 붙여준다면 위에서 봤던 getter/setter를 자동으로 만들어준다 얼마나 편한 도구인가..

나는 아직 getter/setter가 익숙하기도했다 하지만 하면서 너무 귀찮고 롬복이 개발자에게 편한 기능을 제공하며 특별한 제약이나 상황에 대처하는 시간을 엄청 단축시킬수 있겠다고 생각했다!

@ToString

롬복이 제공하는 @ToString 애노테이션은 우리가 보고싶은 객체의 클래스안의 값들을 String형태로 보여준다.

사용하지않는다면 Object에 구현된 toString의 메소드를 쓸수있다. 즉 클래스에 생성될때 인스턴스의 해쉬코드(고유한 아이디)를 찍어준다

이거는 우리가 보고싶은 객체의 속성 값들이 아니다.

👍또 Spring에서 많이 쓰는 생성자관련 애노테이션👍

@NoArgsConstructor

아무 아규먼트가 없는 기본생성자를 만들어준다.

@AllArgsConstructor

모든 argument가 있는 생성자를 만들어준다.

@RequiredArgsConstructor

필수(즉 필요한값) argument가 있는 생성자를 만들어준다. 즉, final필드나 @NonNull키워드가 잡혀있는 프로퍼티들을 기본적으로 들어있는 생성자를 만들어준다.

@Builder


@Builder 애노테이션은 Builder패턴을 사용할 수 있도록 해주는것이다.

빌더 패턴(Builder pattern) 이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. (출처: 위키백과)
빌더패턴을 활용하면 어떤 필드에 어떤 인자를 넣어줬는지 명확히 알 수 있고, 넣어줄 필요 없는 필드(null)는 굳이 선언할 필요 없으니 좋다고 생각했다

여러 처리를 하다보면 atomic하게 생성을 할때가 좋을 때가 있다고 강사님께서 하셨다.
setter의 경우 한줄 한줄 처리를 해야하고 예를 들어 dto.set(), dto.set()이렇게 진행이 되는데 만약 실수로 뭐 하나를 빼먹던가 하면 오류를 찾는데도 시간이 엄청 오래 걸릴 것이다
( 코드의 응집력도 떨어지게 되고 하나하나 찾아야 하는 불편함이 있다)

✨아주 마법같은 애노테이션 @Data✨

이 애노테이션을 사용을 한다면은 @Setter, @RequiredArgsConstructor, @NoArgsConstructor,@ToString,@EqualsAndHashCode 요거를 다합친것과 동일하다.

@ToString이 꼭없어야하는경우(DTO에 잠깐 개인정보가 담겨질때 @ToString이 있으면 에러메세지에 개인정보가 찍힐수잇따) 이렇게 꼭필요한경우에만 @Data나 @ToString을 사용해야한다.

즉 @Data 애노테이션은 모든 기능들이 다 있기때문에 양날의 검이다. 그러므로사용할 상황에 맞게 @Data를 쓸지 아니면 위에 애노테이션을 잘붙여서 사용하면 될것같다.

profile
주니어 개발자 되고싶어요

0개의 댓글