Jin's IT Story.

Lombok이란? 어노테이션 완전 정리

| 2026-08-16
목차
    어두운 네이비색 배경 위에서 입체적으로 빛나며 데이터 선으로 연결된 현대적인 추상 소프트웨어 코드 기호 일러스트

    코드를 가볍게 만드는 마법, 롬복(Lombok)이란?

    자바(Java) 개발을 하다 보면 클래스 하나를 만들 때마다 수많은 보일러플레이트(Boilerplate) 코드를 마주하게 됩니다. 변수 몇 개를 정의했을 뿐인데 게터(Getter), 세터(Setter), 생성자, toString 메서드 등이 수십 줄에 걸쳐 화면을 가득 채우곤 합니다. 이러한 단순 반복 작업을 획기적으로 줄여주고 개발자의 코딩 효율을 극대화해 주는 고마운 도구가 바로 롬복(Lombok)입니다.

    롬복은 자바 라이브러리로, 반복적으로 작성해야 하는 지루한 코드들을 어노테이션(Annotation) 하나로 자동 생성해 줍니다. 개발자가 소스코드에 어노테이션을 붙여두면 컴파일 과정에서 롬복이 이를 감지하여 실제 바이트코드에 관련 메서드를 대신 추가해 주는 방식으로 작동합니다.

    이 덕분에 우리는 핵심 비즈니스 로직에만 집중할 수 있게 되며, 코드의 가독성 또한 놀라울 정도로 향상됩니다. 지저분한 코드가 사라져 협업할 때 동료의 코드를 분석하는 시간도 크게 단축됩니다.

    기본 중의 기본: @Getter, @Setter, @ToString 어노테이션

    가장 자주 쓰이면서도 강력한 도구는 단연 @Getter와 @Setter입니다. 클래스 레벨이나 멤버 변수 위에 이 어노테이션을 붙이면 컴파일 시점에 자동으로 get변수명()과 set변수명() 메서드가 생성됩니다. 마치 주방에 식기세척기를 들여놓아 매번 손으로 설거지할 필요가 없어진 것과 같은 편리함입니다.

    여기에 객체의 정보를 한눈에 문자열로 확인하게 해주는 @ToString도 빼놓을 수 없습니다. 원래라면 디버깅을 위해 일일이 문자열 출력 포맷을 정의해야 했지만, 이제는 어노테이션 하나로 객체 내부의 모든 필드 값을 예쁘게 출력할 수 있어 개발 생산성이 매우 높아집니다.

    안전하고 우아한 객체 생성, @Builder

    객체를 생성할 때 생성자의 파라미터가 너무 많으면 어떤 값을 어떤 순서로 넣어야 할지 헷갈리기 마련입니다. 실수로 이메일 자리에 전화번호를 넣는 치명적인 버그가 발생하기도 합니다. 이런 문제를 멋지게 해결해 주는 디자인 패턴이 바로 빌더(Builder) 패턴이며, 이를 자동화한 것이 @Builder입니다.

    @Builder를 사용하면 체이닝(Chaining) 방식으로 필요한 값을 명확히 지정하며 객체를 생성할 수 있습니다. 생성자 파라미터 순서에 신경 쓰지 않아도 되고, 가독성 높은 코드를 작성할 수 있어 최근 개발 트렌드에서 가장 널리 쓰이는 어노테이션 중 하나입니다.

    생성자 고민을 해결하는 세 가지 어노테이션

    클래스를 설계할 때 생성자 정의도 핵심적인 부분입니다. 롬복은 생성자 작성을 편리하게 해주는 세 가지 대표적인 생성자 어노테이션을 제공합니다.

    • @NoArgsConstructor: 파라미터가 없는 기본 생성자를 자동으로 만들어 줍니다. 주로 데이터베이스 연동 프레임워크에서 기본 생성자가 필수적일 때 유용하게 쓰입니다.
    • @AllArgsConstructor: 클래스의 모든 필드를 파라미터로 받는 생성자를 생성해 줍니다. 필드가 추가되거나 변경될 때 자동으로 반영되므로 대단히 편리합니다.
    • @RequiredArgsConstructor: final 키워드가 붙었거나 @NonNull이 지정된 필수 필드만을 파라미터로 받는 생성자를 만듭니다. 의존성 주입을 받을 때 생성자 주입 방식으로 널리 활용됩니다.

    편리함 속에 숨겨진 롬복 사용 시 주의사항

    롬복은 매우 편리하지만 무분별하게 사용하면 예기치 못한 부작용을 낳을 수 있습니다. 대표적인 예가 모든 기능을 한 번에 묶어놓은 @Data 어노테이션입니다. @Data는 게터, 세터, toString, 생성자뿐만 아니라 equals와 hashCode까지 전부 자동으로 생성해 줍니다.

    하지만 무조건 세터가 열려 있으면 객체의 무분별한 상태 변경이 허용되어 객체지향적인 설계가 무너질 수 있습니다. 또한, 순환 참조가 있는 양방향 관계의 객체 구조에서 @ToString을 기본 설정으로 쓰면 예기치 못한 에러가 발생할 수 있어 각별한 주의가 필요합니다.

    마무리하며: 영리하게 롬복 활용하기

    롬복은 현대 자바 개발에서 더 이상 선택이 아닌 필수에 가까운 강력한 도구입니다. 지루하고 반복적인 타이핑 시간을 줄여 개발 속도를 비약적으로 끌어올려 줍니다.

    하지만 도구가 강력할수록 그 내부 동작 방식을 정확히 이해하고 사용하는 것이 중요합니다. 각 어노테이션이 실제로 어떤 코드를 만들어내는지 원리를 이해하고 조심스럽게 적용한다면, 훨씬 더 깔끔하고 견고한 애플리케이션을 완성할 수 있을 것입니다.