자바 공부/[자바] 기본 공부

[SPRING] Lombok 라이브러리

햅2024 2024. 12. 11. 21:34

1. Lombok 라이브러리 설치

  • Lombok은 인도네시아의 섬 이름, 동남아의 작은 고추 이름
  • getter/setter를 자동으로 생성
  • toString() 메서드 자동 생성
  • Eclipse Spring Starter로 dependency에 lombok을 포함시켜도 제대로 동작하지 않는 경우가 많다
    => 별도로 설치해야 함
    • google에서 lombok을 검색한다
    • download한다
      https://projectlombok.org/download
    • jdk의 bin에 해당 파일을 copy 한다. 
    • 실행되면 eclipse 설치 디렉토리를 찾는다
    • eclipse가 설치된(eclipse.exe가 있는) 폴더를 선택한다
    • install/update 버튼을 누르면 설치된다.

 

lombok.jar이 안 열릴 경우 : 더블클릭해서 안 열릴 경우 -> CMD

더보기

cd D:\devtools\jdk-21.0.5\bin 입력

java -jar lombok.jar


2. 의존성 주입 (Dependency Injection)

  • 의존성 (Dependency)
    • 하나의 객체가 다른 객체 없이는 역할을 할 수 없다.
    • A객체는 B객체 없인는 동작이 불가능한 경우
      => 'A객체가 B객체에 의존적이다'
  • 주입 (Injection)
    • 외부에서 밀어넣는 것을 의미
    • A가 B가 필요할 때 B를 넣어준다.
      A의 입장에서는 어떤 객체인지 모른다.
    • A>>>>>>>>>>>>>>>B
      A객체에서 B객체를 직접 생ㅅ어
    • 의존성 주입
      A>>>>>>>> ??? >>>>>>>BA
      A객체는 B가 필요하다는 신호만 보내고
      B객체를 주입하는 것은 외부에서 이루어짐
      의존성 주입을 위해 ??? 존재가 필요하다.
      ??? : ApplicationContext 
      => 필요한 객체를 생성하고, 필요한 객체들을 주입해주는 역할
    • 따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고
      이러한 객체를 엮는(Wiring) 작업의 형태로 개발한다. 

 

src/main/java -> com.koreait.board -> new -> Package

pakage에 새 클래스 추가

 

public class 위에 @Data를 입력한 후 저장하면 자동으로  import lombok.Data; 가 임포트 됨.

 

com.koreait.board.util Package를 생성한다

MyUtil.java

package com.koreait.board.util;

public class MyUtil {
	public final static String BLUE = "\033[94m";
	public final static String END = "\033[0m";
	public final static String BOLD = "\033[1m";
}

 


 

 

src/test/java -> com.koreait.board 에 똑같이 com.koreait.board.bean 패키지를 생성한다

 

@Slf4j => log.info() 사용 가능

@SpringBootTest => @Test가 붙은 함수만 디버깅됨

package com.koreait.board.bean;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import com.koreait.board.util.MyUtil;

import lombok.extern.slf4j.Slf4j;

@SpringBootTest
@Slf4j
public class DependencyTest {
	
	@Test
	public void testDependency() {
		 log.info(MyUtil.BLUE + MyUtil.BOLD + "Test Start" + MyUtil.END); 
	}
	
	public void testDummy() {
		log.info("Dummy Test");
	}
}

 

 

package com.koreait.board.bean;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import com.koreait.board.util.MyUtil;

import lombok.extern.slf4j.Slf4j;

@SpringBootTest
@Slf4j
public class DependencyTest {

	public ClassRoom cr;
	
	@BeforeAll //모든 테스트 수행 전 한 번만 수행할 일
	public static void Init() {
		log.info("Init for Test");
	}
	
	@BeforeEach //모든 테스트 메서드마다 수행 전
	public void Init2() {
		log.info("Init2 for Test");
	}
	
	@Test
	public void testDependency() {
		 log.info(MyUtil.BLUE + MyUtil.BOLD + "Test Start" + MyUtil.END); 
		 log.info("ClassRoom : " + cr);
	}
	
	public void testDummy() {
		log.info("Dummy Test");
	}
}

 

@Component 

객체 자동생성

@Autowired

자동 생성 연결

 

Chair.java

package com.koreait.board.bean;

import org.springframework.stereotype.Component;

import lombok.Data;

@Component
@Data
public class Chair {
	private String name;
	private String numofLegs;
	
	public Chair()
	{
		this.name = "chair";
		this.numofLegs = "4";
	}
}

 

Desk.java

package com.koreait.board.bean;

import org.springframework.stereotype.Component;

import lombok.Data;

@Component
@Data
public class Desk {
	private String name;
	private String material;
	
	public Desk()
	{
		this.name = "IKEA";
		this.material = "Wood";
	}
}

 

ClassRoom.java

package com.koreait.board.bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.koreait.board.util.MyUtil;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Component //객체 자동생성
@Data
@Slf4j

public class ClassRoom {
	private int no;
	
	@Autowired
	private Desk desk1;
	@Autowired
	private Desk desk2;
	@Autowired
	private Chair chair1;
	@Autowired
	private Chair chair2;
	
	public ClassRoom() {
		this.no = 1;
		log.info(MyUtil.BLUE + "NEW Class Room Open!!" + MyUtil.END);
	}
}

 

DependencyTest.java

package com.koreait.board.bean;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.koreait.board.util.MyUtil;

import lombok.extern.slf4j.Slf4j;

@SpringBootTest
@Slf4j
public class DependencyTest {

	@Autowired
	public ClassRoom cr;
	
	@Test
	public void testDependency() {
		 log.info(MyUtil.BLUE + MyUtil.BOLD + "Test Start" + MyUtil.END); 
		 log.info("ClassRoom : " + cr);
	}
	
}

 

 

	@Test
	public void testDependency() {
		 log.info(MyUtil.BLUE + MyUtil.BOLD + "Test Start" + MyUtil.END); 
		 
		 Desk myDesk = new Desk();
		 myDesk.setName("Norway");
		 myDesk.setMaterial("Iron");
		 cr.setDesk1(myDesk);
		 
		 log.info("ClassRoom : " + cr);

	}

board (2).zip
0.03MB