Free Lines Arrow
본문 바로가기
Spring/spring 기초 스터디

[Spring] Lombok

by skahn1215 2021. 5. 23.
728x90
반응형

Lombok

 

Lombok 이란?

사이트 주소: https://projectlombok.org/features/all

사이트 설명중 아래말이 멋지다.

 

Never write another getter or equals method again

getter 와 동등한 메서드를 쓰지 말라고 한다. 상당히 훌룡하다.

 

Lombok(롬복)은 Java 라이브러리다.

getter, setter, toString 등의 메서드 작성 코드를 알아서 만들어 준다.

 

Lombok 을 사용하는이유

getter, setter, toString를 직접 안만들어도 된다.

코드가 간결해진다.

 

Lombok 적용해보기

Lombok 환경설정

파일명: build.gradle

plugins {
	id 'org.springframework.boot' version '2.4.4'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

//lombok 설정 추가 시작
configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}
//lombok 설정 추가 끝

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'

	//lombok 라이브러리 추가 시작
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'

	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
    //lombok 라이브러리 추가 끝

	testImplementation ('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit'
	}
}

test {
	useJUnitPlatform()
}

 

Lombok 적용전 기존코드

public class Model {

    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

Lombok 적용1

@Getter, @Setter 사용

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
// 롬복 적용
public class Model {

    private String id;
    private String name;

    public static void main(String[] args) {
        Model model = new Model();
        model.setName("TEST");
        System.out.println(model.getName());
    }
}

적용한 코드를 보면

getName() setName 함수가 없어도 잘 동작한다.

Lombok의 @Getter, @Setter를 적용했기 때문에 가능하다.

 

정말 구현되었는지 확인해보자.

빨간 고추아이콘으로 getter, setter가 보인다.

lombok에서 구현을 해주었다.

 

Lombok 적용2

@Data 사용

import lombok.Data;

@Data
public class Model {

    private String id;
    private String name;

    public static void main(String[] args) {
        Model model = new Model();
        model.setName("TEST");
        System.out.println(model.getName());
    }
}

 

@Data를 사용하여 @Getter @Setter 를 생략 가능하다.

즉 @Data로 더 쉽게 처리 가능하다.

 

 

 

Lombok 으로 생성자 생략하기

생성자 까지 Lombok 으로 해결가능하다.

 

Test를 위해서 3개의 클래스를 만들었다.

  1. Model: 해당 모델은 Model2를 필요로 한다.
  2. Model2: Model2 구현
  3. modelConfig: 스프링 적용을 하기 위한 Config 클래스

 

Model2

public class Model2 {
    int id;
    int name;
}

 

Config

import hello.core.member.MemberServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class modelConfig {

    @Bean
    public Model2 model2() {
        return new Model2();
    }

    @Bean
    public Model model() {
        return new Model(model2());
    }
}

 

Lombok 적용전

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.stereotype.Component;


@Component
public class Model {

    private String id;
    private String name;
    private final Model2 model2;

    @Autowired
    public Model(Model2 modle2){
        this.model2 = modle2;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        ApplicationContext ac = new AnnotationConfigApplicationContext(modelConfig.class);

        Model model = ac.getBean("model", Model.class);
        model.setName("TEST2");
        System.out.println(model.getName());
    }
}

 

Lombok 적용후 생성자 생략 가능

@Component
@RequiredArgsConstructor
@Data
public class Model {

    private String id;
    private String name;
    private final Model2 model2;

    /*
    @Autowired
    public Model(Model2 modle2){
        this.model2 = modle2;
    }
    */

    public static void main(String[] args) {
        ApplicationContext ac = new AnnotationConfigApplicationContext(modelConfig.class);

        Model model = ac.getBean("model", Model.class);
        model.setName("TEST23");
        System.out.println(model.getName());
    }
}
728x90
반응형

댓글