본문 바로가기

수업 복습하기/Spring

Day 01 - lombok 다운 및 설정 + lombok01

728x90
728x90

= 롬복 등록하기 =

https://projectlombok.org/

 

Project Lombok

 

projectlombok.org

사이트에 들어가서, 중앙 상단에서 약간 우측에 다운로드 버튼 눌르기

여기에서 specify location을 눌러서,

보통 프로젝트 진행하는 폴더에 eclipse 폴더로 간 후에  select를 누르고, 오른쪽 아래에  install / update를 해줍니다.

 

그리고 나서 해야할 일

 

pom.xml에 붙여줘야하는 것들이 있다.

https://mvnrepository.com/

여기에 들어가서, lombok 검색 후>1project lombok > 1.18.22버전을 들어가서 

저기 창을 클릭하면, 자동으로 복사가 된다.

복사 된 이후에 pom.xml에 가서 11줄 근처에 dependencies아래에 붙여넣으면 된다.

		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.22</version>
			<scope>provided</scope>
		</dependency>

버전을 바꿔줘서 등록 했기 때문에, 참고하기~

 

 


= log4j.xml 수정하기 =

< src/test/resources 폴더 내에 있는 log4j (다른 폴더랑 헷갈리지 말기) >

 

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

 

두번째 줄에 붙여넣기!

사실 이부분에 이걸 복사해서 붙여넣으면 에러가 뜨는데, 에러가 떠도 잘 돌아가니까 무시하고 그냥 진행하면 된다.

 


= 롬복 기초 01 =

스프링을 사용하는 이유 : 예전에는 왼쪽과 같은 방식으로 진행을 했다면,

이제는 스프링을 활용하면 오른쪽과 같은 형태의 진행이 가능하다

 

= p01lombok =

< App.java >

package lecture.p01lombok;

import java.util.logging.Level;

import lombok.extern.java.Log;

@Log
public class App {
	public static void main(String[] args) {
		Customer c1 = new Customer();
		
		c1.setAddress("gangnam");
		c1.setId(1);
		c1.setCity("jeju");
		c1.setName("Korea");
		
		System.out.println(c1.getAddress());
		System.out.println(c1.getCity());
		System.out.println(c1.getId());
		System.out.println(c1.getName());
		
		System.out.println(c1.toString());
		System.out.println(c1);
		
		Customer c2 = new Customer(2,"usa","ny","queens");
		System.out.println();
		
		Employee emp1 = new Employee(1,"kim","Korea");
		System.out.println(emp1);
		
//		log.log(Level.INFO, emp1.toString());
		
		log.severe(emp1.toString());
		log.warning(emp1.toString());
		log.info(emp1.toString());
		log.config(emp1.toString());
		
	}

}

< Customer.java >

package lecture.p01lombok;

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

@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Customer {
	private int id;
	private String name;
	private String city;
	private String address;
	
}

@NoArgsConstructor = 파라미터없는 생성자도 만들어진다.

< Employee.java >

package lecture.p01lombok;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Employee {

	private int id;
	private String name;
	private String notes;
}

보통 주로 사용하는 어노테이션 @data

getmethod() / setmethod() / toString() / +equals() /  hash() 까지 만드러준다.

 

< Supplier.java >

package lecture.p01lombok;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Supplier {

	// 필드 작성 및 
	// lombok 어노테이션으로
	// getter, setter, toString
	// 생성자 등을 만들기
	
	private int id;
	private String name;
}

기본적인 롬복 사용법과 함께, 필드가 어떻게 작성되는지 보고 시도해보기!


= p02lombok =

< App.java >

package lecture.p02lombok;

import lecture.p01lombok.Employee;
import lombok.extern.log4j.Log4j;

@Log4j
public class App {
public static void main(String[] args) {
	Employee e1 = new Employee(3, "seoul","korea");
	
	log.info(e1.toString());
	
	log.debug(e1);
	log.info(e1);
	log.warn(e1);
	log.error(e1);
	log.fatal(e1);
}
}

가지고있는 정보들을 어디까지 노출 시킬 것인지 그 단계를 보여준다!


= p03core =

< App.java >

package lecture.p03core;

public class App {
	public static void main(String[] args) {
		
		MyServlet s1 = new MyServlet();
		s1.setDao(new MyDao()); // 
		
		s1.doGet();
	}
}

< MyDao.java >

package lecture.p03core;

public class MyDao {

	public void update() {
		// TODO Auto-generated method stub
		
	}

}

< MyServlet.java >

package lecture.p03core;

import lombok.Setter;

@Setter
public class MyServlet {
	MyDao dao = new MyDao();

	public void doGet() {
		// 0. 사전 작업
		
		// 2. request handle

		// 3. business logic
		dao.update();
		// 4. add attribute

		// 5. forward / redirect
	}
}

객체를 만들고 값을 할당하는 일을 스프링이 대신해주게 하는 행동을 확인한다~

객체 생성은 원래 우리가 0. 사전작업에 가깝게 넣고 봤는데,

이제 그냥 일반 class에 넣고작동시켜도 충분히 가능하다.

스프링이 설명서를 읽고 객체를 만들었다! 라는 의미


= p04core =

< App.java >

package lecture.p04core;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import lombok.extern.log4j.Log4j;

@Log4j
public class App {
	public static void main(String[] args) {

		String contextFilePath = "lecture/p04core/context.xml";
		ApplicationContext context = new ClassPathXmlApplicationContext(contextFilePath);

		MyServlet s1 = context.getBean(MyServlet.class);
		MyDao d1 = context.getBean(MyDao.class);

		log.warn(s1);
		log.warn(d1);
		
		log.warn(s1.getMyDao());
	}
}

< MyDao.java >

package lecture.p04core;

public class MyDao {

}

< MyServlet.java >

package lecture.p04core;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class MyServlet {

	private MyDao myDao;
		
}

< context.xml >

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean class="lecture.p04core.MyServlet">
		<property name="myDao" ref="myDao"></property>
	</bean>

	<bean id="myDao" class="lecture.p04core.MyDao"></bean>
	//id나 name으로 둘다 쓰인다.
	</beans>

Dependency injection (의존성 주입)

컨트롤을 우리가 직접하지 않고, 스프링에게넘겨줘서 inversion of control이라는 용어를 쓴다.

객체를 만들고 할당하는 일을 직접 하지 않고, 그 제어를 스프링에게 넘긴다 라는 의미로 ioc라고하며, 

제어의 역전, 제어의 반전이라고 직역을 한다~

 

마이 서블릿이 가지는 dao와, 실제 dao가 객체값이 같은 것을 확인할 수 있다.


= p05coreExcercise =

< App.java >

package lecture.p05coreExcercise;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import lombok.extern.log4j.Log4j;

@Log4j
public class App {

public static void main(String[] args) {
	String configLocation = "lecture/p05coreExcercise/context.xml";
	ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
	
	Computer c1 = context.getBean(Computer.class);
//	Memory m1 = context.getBean(Memory.class);
	Memory m1 = (Memory) context.getBean("memory");
	log.warn(c1);
	log.warn(m1);
	
	log.warn(c1.getMemory());
}
}

< computer.java >

package lecture.p05coreExcercise;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Computer {
	private Memory memory;
}

< Memory.java >

package lecture.p05coreExcercise;

public class Memory {

}

< context.xml >

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--  Computer 빈, Memory 빈 만들기 -->
<!--  Computer 빈에 Memory 빈 주입 -->
<!-- 위에서 name memory는 메소드 setmemory와같다 -->
<bean class="lecture.p05coreExcercise.Computer">
	<property name="memory" ref="memory"></property>
</bean>

<bean id="memory" class="lecture.p05coreExcercise.Memory"></bean>
</beans>

클래스로도 꺼낼 수 있고, 메모리라는 빈으로 넣어서 쓸 수 있다. 이름을 꺼낼때는 형변환을 해줘야하거나,

다른 메소드를 활용해야한다.

null값이 아닌지 확인해보면서, 두개의 객체가 잘 생성되었는지 확인해봐야한다.


전반적으로 객체를 만들어보고, 객체가 잘 생성되었는지 확인해보는 업무를 배웠다.

이면에 항상 일어나는 일이니까 알아보는거고, 간단한 어노테이션을 사용해서 이런 일들이 일어나게하는건

내일 수업 때 진행하기로~

728x90