[내일배움캠프 Spring_3기] Annotation과 Lombok

jiiim_ni·2026년 2월 3일

Annotation

어노테이션은 자바 코드에 메타 데이터를 추가하여 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용됨

대표적인 Annotation 예시: @Override

public interface Mouse {

    void leftClick();
    void rightClick();
    void scrollWheel();
}
public class LogitechMouse implements Mouse {
    @Override
    public void leftClick() {
        // 로지텍 좌클릭 로직 구현
    }

    @Override
    public void rightClick() {
        // 로지텍 우클릭 로직 구현
    }

    @Override
    public void scrollWheel() {
        // 로지텍 스크롤휠 로직 구현
    }
}
  • 위 코드에서 @Override가 바로 어노테이션
  • 만약 Mouse 인터페이스에 존재하지 않는 메서드를 오버라이드하려고 하면 @Override가 에러를 보여줌

어노테이션을 활용하면 복잡한 기능도 쉽게 사용할 수 있다


Lombok 라이브러리

롬복은 보일러 플레이트 코드를 줄여주는 라이브러리로 자동으로 보일러 플레이트 코드를 생성하여 코드의 가독성과 유지보수성을 높여줌

Lombok은 어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성함

보일러 플레이트 코드(Boilerplate Code)란?

getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드를 뜻함

롬복을 사용하여 보일러 플레이트 코드를 줄임!

Getter와 Setter를 직접 구현하면 코드량이 굉장히 많아지게 되는데 Lombok의 @Getter와 @Setter 어노테이션을 사용하면 쉽게 구현 가능

주요 Lombok Annotation

@Getter, @Setter

  • 클래스의 모든 필드에 대한 getter와 setter 메서드를 자동으로 생성
@Getter
@Setter
public class User {
    private String name;
    private int age;
  
  /** 아래 코드를 @Getter, @Setter 어노테이션이 생성해준다.
    public String getName() {
	    return name;
    }

    public void setName(String name) {
	    this.name = name;
    }
    
    public int getAge() {
	    return age;
    }

    public void setAge(int age) {
	    this.age = age;
    }
    **/
}
  • 위 코드에서 getName(), setName(String name), getAge(), setAge(int age) 메서드가 자동으로 생성된다.

@ToString

  • 객체의 toString() 메서드를 자동으로 생성한다.
  • 기본적으로 클래스의 모든 필드를 포함하며, 특정 필드를 제외하거나 포맷을 지정할 수도 있다.
@ToString
public class User {
    private String name;
    private int age;
}
  • toString()메서드는 객체를 String으로 변환해주는 역할을 수행

@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor

  • 기본 생성자를 생성함
  • 모든 필드를 매개변수로 하는 생성자를 생성
  • 필수(final) 필드만을 매개변수로 하는 생성자를 자동으로 생성
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private int age;
}

@Slf4j

  • 클래스에 로그를 남기기 위한 Logger 객체를 자동으로 생성
@Slf4j
public class UserService {
    public void logMessage() {
        log.info("This is a log message");
    }
}

0개의 댓글