Spring Boot - Lombok

2024. 4. 3. 18:45· Spring
목차
  1. @Getter, @Setter
  2. @NoArgsConstructor
  3. @AllArgConstructor
  4. @RequiredArgsConstructor
  5. @Builder
  6. @ToString
  7. @Data
  8. @Value
  9. @Slf4j
  10. 예제
반응형

LomBok은 반복적이고 지루한 코드를 줄이고 간결하고 가독성 코드를 작성할 수 있도록 도와주는 유용한 라이브러리 이다.
 
롬복은 어노테이션 기반으로 사용가능 하며 @Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor, @ToString 등과 같은 어노테이션을 제공하여, 접근자 및 설정자, 생성자등의 메서드를 자동으로 생성한다.
 

@Getter, @Setter

import lombok.*;

@Getter
@Setter
public class Person {
    private String name;
    private int age;
	
    /* Getter와 Setter 메서드를 @Getter, @Setter 어노테이션으로 대체한다.
        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }
        
        // Setter 메서드
        public void setName(String name) {
            this.name = name;
        }

        public void setAge(int age) {
            this.age = age;
        }
    */
    
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(30);
        
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

 
@Getter 및 @Setter는 Getter, Setter 메서드를 자동으로 생성할 수 있다. 위 코드의 주석 부분을 어노테이션 한줄로 대체가능하다.
 


 

@NoArgsConstructor

import lombok.*;

@Setter
@Getter
@NoArgsConstructor
public class Person {
    private String name;
    private int age;
    
    /* 
        매개변수가 없는 기본 생성자, @NoArgsConstructor 어노테이션이 대신한다.
        public Person() {
            기본적으로 아무것도 수행하지 않음
        }
    */
    

    public static void main(String[] args) {
        // 매개변수가 없는 기본 생성자를 사용하여 객체 생성
        Person person = new Person();
        person.setName("John");
        person.setAge(30);

        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }

}

 
@NoArgConstructor 어노테이션은 매개변수가 없는 기본 생성자를 직접 작성 할 수 있다. 주석에 있는 코드를 대체한다.
 


@AllArgConstructor

@Getter
@Setter
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
    
    /* 
    	// 모든 필드를 초기화하는 생성자, @AllArgsConstructor가 대신한다.
        public Person(String name, int age) {
        this.name = name;
        this.age = age;
    	}
    */

    public static void main(String[] args) {
        // 모든 필드를 초기화하는 생성자를 사용하여 객체 생성
        Person person = new Person("John", 30);

        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }

}

 
@AllArgsConstructor 어노테이션은 모든 필드를 초기화 하는 생성자를 대신한다.
 


 

@RequiredArgsConstructor

@Getter
@RequiredArgsConstructor
public class Person {
    private final String name;
    private final int age;
	
    /*
        // 필요한 필드를 초기화하는 생성자
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    */
    
    public static void main(String[] args) {
        // 필요한 필드를 초기화하는 생성자를 사용하여 객체 생성
        Person person = new Person("John", 30);

        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }

}

 
@RequiredArgsConstructor 어노테이션은 final 키워드를 사용하여 필드를 선언하면 해당 필드는 생성자에서 반드시 초기화 되어야 한다.
 


 

@Builder

@Bulider
@Getter
public class Person {
    private String name;
    private int age;

    // private 생성자
    private Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
	
    /*
    // 빌더 클래스, @Bulider로 대체
      public static class Builder {
          private String name;
          private int age;

          public Builder name(String name) {
              this.name = name;
              return this;
          }

          public Builder age(int age) {
              this.age = age;
              return this;
          }

          public Person build() {
              return new Person(name, age);
          }
      }
    */
	
    
    public static void main(String[] args) {
        // 빌더를 사용하여 객체 생성
        Person person = new Person.Builder()
                                  .name("John")
                                  .age(30)
                                  .build();

        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }

}

 
@Bulider 어노테이션은 빌더 패턴을 대신 구사해준다. 객체 생성시 가독성, 유연성, 객체 불변성 보장등의 장점이 있다.
 


 

@ToString

import lombok.ToString;

@ToString
public class Person {
    private String name;
    private int age;

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(30);
        
        System.out.println(person); 
        
        // 출력: Person(name=John, age=30)
    }
    
    /* toString 메서드, @ToString이 대체한다.
      @Override
      public String toString() {
          return "Person{name='" + name + "', age=" + age + "}";
      }
    */

}

 
@ToString은 주석에 있는 ToString을 대체한다. 주로 디버깅 및 로깅, 가독성을 목적으로 사용된다. 객체자체를 그냥 출력하면 "Person@15db9742"와 같이 해쉬코드가 출력되는데 이 이유는 모든 클래스는 Object 클래스를 상속 받기 떄문에 클래스에서 hashCode() 메서드를 오버라이드 하지 않으면 hashCod() 메서드가 호출된다. 이 메서드는 객체 메모리 주소를 기반으로 한 해시 코드를 반환한다.
 


 

@Data

@Data // @Getter, @Setter, @ToString @EqualsAndHashCode, @RequiredArgsConstructor를 모두 사용가능하게 해준다.
public class Person {

}

 
@Data 어노테이션은  @Getter, @Setter, @ToString @EqualsAndHashCode, @RequiredArgsConstructor를 모두 사용가능하게 해준다.
 


 

@Value

import lombok.Value;

@Value
public class Person {
    private String name;
    private int age;
}

    /* @Value를 대체하는 코드
    public class Person {
        private final String name;
        private final int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }
    }
    */

public class Main {
    public static void main(String[] args) {
        // @Value 애노테이션을 사용한 경우
        Person person = new Person("John", 30);
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());

        // Setter 메서드가 생성되지 않았으므로 필드를 변경할 수 없다.
        // person.setName("Alice"); // 컴파일 에러 발생

        /* 어노테이션을 사용하지 않은 경우
        Person person = new Person("John", 30);
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());

        // Setter 메서드가 생성되지 않았으므로 필드를 변경할 수 없다.
        // person.setName("Alice"); // 컴파일 에러 발생
        */
    }
}

 
@Value 어노테이션은 불변(immutable)한 클래스를 생성할 때 사용한다. 필드는 모두 private fainal로 선언되고, 생성자, Getter 메서드만 생성된다. Setter는 사용되지 않는다. (@AllargsConstructor와 @Getter를 사용한 것과 유사하다.)
 


 

@Slf4j

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Example {
    public static void main(String[] args) {
        log.info("This is an info message");
        log.warn("This is a warning message");
        log.error("This is an error message");
    }
}

 
@Slf4j 어노테이션은 간단한 로깅 기능을 제공한다. 로깅 레벨에는 info warn, error등이 있으며 각 레벨에 따라 다른 메서드를 사용하여 로깅할 수 있다. 자동으로 log 객체를 생성하고 초기화하여 사용자가 별도로 로거를 설정할 필요가 없다.
 
info : 정보성 로그 메세지, 정상 동작을 기록
warn : 경고성 로그 메세지, 경고, 잠재적인 문제등을 기록
error : 에러 로그 메세지, 오류나 예외등을 기록
 

예제

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/example")
@Slf4j
public class ExampleController {

    @GetMapping("/hello")
    public String hello() {
        log.info("GET request received for /example/hello");
        return "hello";
    }

    @GetMapping("/error")
    public String error() {
        log.error("An error occurred while processing /example/error");
        return "error";
    }
}

 
/example/hello 엔드포인트로 GET 요청을 처리하는 메서드는 info 레벨로 출력하고
/example/error 엔드포인트로의 GET 요청은 error 레벨의 로그를 출력한다.

'Spring' 카테고리의 다른 글

Spring Boot - Querydsl  (0) 2025.01.15
Spring Boot - ResponseEntity 클래스  (0) 2025.01.11
Spirng Boot - REST API로 CRUD 만들기  (0) 2024.04.03
Spring Security 살펴보기  (0) 2024.02.22
스프링 핵심 원리 - 스프링 컨테이너 생성, 빈 조회  (0) 2024.01.22
  1. @Getter, @Setter
  2. @NoArgsConstructor
  3. @AllArgConstructor
  4. @RequiredArgsConstructor
  5. @Builder
  6. @ToString
  7. @Data
  8. @Value
  9. @Slf4j
  10. 예제
'Spring' 카테고리의 다른 글
  • Spring Boot - Querydsl
  • Spring Boot - ResponseEntity 클래스
  • Spirng Boot - REST API로 CRUD 만들기
  • Spring Security 살펴보기
CHun2
CHun2
천천히, 하나씩
CHun2
훈이의 개발일기
CHun2
전체
오늘
어제
  • 분류 전체보기 (64)
    • Computer Structure (4)
    • BeakJoon (3)
    • Data Structures & Algorithm.. (12)
    • Database (2)
    • Design pattan (2)
    • Git (1)
    • Java (9)
    • Javascript (2)
    • JPA (5)
    • MongoDB (1)
    • Network (2)
    • Projects (1)
    • React (1)
    • Spring (11)
    • SQLD (2)
    • 정보처리기사 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Stack
  • 자바
  • Java
  • it
  • 알고리즘
  • SQLD
  • 스프링 핵심 원리
  • Queue
  • spring-boot
  • 파이썬
  • 스택
  • JPA
  • collection
  • 스프링 입문
  • Interface
  • 자바기초
  • 자료구조
  • 데이터베이스
  • 정리
  • Spring
  • 인터페이스
  • DATABASE
  • restAPI
  • spring boot
  • Beakjoon
  • 프로그래밍
  • python
  • 백준
  • 컴퓨터구조
  • SQL

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
CHun2
Spring Boot - Lombok
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.