본문 바로가기
Backend/Spring

Spring : Lombok(롬복)에 대해 알아보자

by 코딩쥐 2024. 10. 27.

Lombok은 자주 사용되는 메서드를 Annotation을 사용해 자동으로 생성해주는 JAVA 라이브러리이다. Lombok을 사용하면 getter, setter메서드 생성, 생성자 생성, toString()생성 등을 어노테이션을 사용해 자동으로 생성해주어 코드가 간결해진다. 단, Lombok은 플러그인을 설치해야 하며 디버깅 시 어려움이 있을 수 있다. 

 

IntelliJ에서 Lombok설치

(1) 파일 → 설정에 들어간다. (Ctrl + Alt + S)

(2) 설정 창이 뜨면 플러그인을 누른다.

(3) 플러그인에서 마켓플레이스를 누르고 Lombok을 검색하여 설치한다.

 

(4) 설치 후 build.gradle로 들어가 dependencies에 아래 코드를 추가한 후에 새로고침한다. 

	implementation 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'

 

(5) 설정에 들어간다. (Ctrl + Alt + S)

(6) 어노테이션 프로세서를 검색해서 어노테이션 처리 활성화를 클릭하여 적용한다.


Lombok 사용하기

1. @Getter | @Setter | @ToString

  • @Getter : getProductID() 와 getName() 메서드를 자동으로 생성
  • @Setter : setProductID()와 setName() 메서드를 자동으로 생성
  • @ToString: toString()메서드를 자동으로 생성
package com.example.project.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class ProductDTO {
    private String productID; // 상품ID
    private String name; // 상품이름
}
package com.example.project.controller;

import com.example.project.dto.ProductDTO;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class ProductController {
    @RequestMapping(value="/product", method= RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<ProductDTO> productfn(){
        //Getter와 Setter 메서드를 작성하지 않아도 자동으로 생성되어 사용할 수 있다.
        ProductDTO product = new ProductDTO();
        product.setProductID("ab20p");
        product.setName("연필");
        //toString 메서드를 작성하지 않아도 자동으로 생성되어 사용할 수 있다.
        System.out.println(product.toString());

        //헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-type", "application/json");
        headers.add("Accept-Charset", "UTF8");

        return new ResponseEntity<>(product, HttpStatus.OK);
    }
}

 

2. @NoArgsConstructor | @AllArgsConstructor

  • @NoArgsConstructor : 매개변수가 없는 생성자
  • @AllArgsConstructor : 모든 필드에 대한 생성자
package com.example.project.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor // public ProductDTO() {}
@AllArgsConstructor  //public ProductDTO(String productID, String name) { this.productID = productID; this.name = name; }
public class ProductDTO {
    private String productID; // 상품ID
    private String name; // 상품이름
}
package com.example.project.controller;

import com.example.project.dto.ProductDTO;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;

@Controller
public class ProductController {
    @RequestMapping(value="/product", method= RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<ProductDTO>> productfn(){
        //생성자가 자동으로 생성되어 사용할 수 있다.
        //(1) 매개변수가 없는 생성자
        ProductDTO product1 = new ProductDTO();
        product1.setProductID("19mf90");
        product1.setName("지우개");
        //(2) 매개변수가 있는 생성자
        ProductDTO product2 = new ProductDTO("ak19k", "텀블러");

        //배열로 product 삽입
        List<ProductDTO> productList = new ArrayList<>();
        productList.add(product1);
        productList.add(product2);

        //헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-type", "application/json");
        headers.add("Accept-Charset", "UTF8");

        return new ResponseEntity<>(productList, HttpStatus.OK);
    }
}