오늘 수업 후기
원래도 힘들어 하지만 더 힘들다...!
오늘 수업 정리정리
Maven은 왜 쓰냐
spring 쓸 때 선생님이 패키지 두개 만들어서 비교 한다고 했는데
예를 들면 chapter02 그리고 chapter02 _springmaven 이런 식으로 만드셨다.
그래서 왜 쓰는거지? 궁금해서 뒤늦게 찾아봄 ;;;;
Maven
- 메이븐은 내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다.
- 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운 받아 준다.
- 따라서 메이븐을 사용하면 jar 파일을 공유하고 카톡으로 보내는 등의 쓸모없는 짓을 할 필요 없이 pom.xml에 필요한 것을 명시해 놓으면 라이브러리를 아주 쉽게 관리할 수 있다.
- 메이븐은 프로젝트의 전체적인 라이프 사이클을 관리하는 도구이며 최근에는 메이븐과 같은 라이브러리 관리 프로그램인 Gradle이 많이 사용되고 있다.
여튼 보고 나니 jar 파일 없이 한다는 걸 알게 되었다.
수업 중 실습
[문제1]
Project : chapter02
Package : sample02
Interface : Calc.java
추상Method : public void calculate();
Class : HelloSpring - main()
CalcAdd.java - 필드 x, y 설정 (생성자로 처리 )
CalcMul.java - 필드 x, y 설정 (setter)
[실행결과]
25 + 36 = xx
→ xml에서 CalcAdd를 빈(add)으로 Constructor Injection
25 * 36 = xx
→ xml에서 CalcMul를 빈(mul)으로 Setter Injection
이 경우 파일을 하나씩 만들어보자!
Calc.java
package sample02;
public interface Calc {
public void calculate();
}
인터페이스 파일이며 만든 후 추상메소드 public void calculate(); 이 부분을 추가해줬다.
그다음 CalcAdd.java
package sample02;
public class CalcAdd implements Calc {
private int x, y;
public CalcAdd(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public void calculate() {
System.out.println(x + "+" + y + "=" +(x+y));
}
}
CalcAdd.java -
파일을 만들기 전
인터페이스 파일 add꼭 해줘야 함
choose interfaces에서 이름이 비슷하면 다른 프로젝트 파일을 가져올 수 있으니 확인 필요
필드 x, y 설정 (생성자로 처리 )로 처리 하라고 되어 있어서
먼저 x,y 선언 후 우 클릭- source - generate Constructor using Fields를 누르면 자동적으로 만들어짐
CalcMul.java
package sample02;
import lombok.Setter;
@Setter
public class CalcMul implements Calc {
private int x , y;
// public void setX(int x) {
// this.x = x;
// }
// public void setY(int y) {
// this.y = y;
// }
@Override
public void calculate() {
System.out.println(x + "x" + y + "=" +(x*y));
}
}
lombok을 통해서 setter을 가져옴
HelloSpring.java
package sample02;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloSpring {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Calc calc;
calc =(Calc) context.getBean("calcAdd");
calc.calculate();
calc = context.getBean("calcMul", Calc.class);
calc.calculate();
}
}
솔직히 이 코드 이해가 잘 안됨 그래서 지피티한테 물어봄
- sample02 패키지에 HelloSpring 클래스가 정의됩니다.
- org.springframework.context.ApplicationContext와 org.springframework.context.support.ClassPathXmlApplicationContext를 import 합니다.
- public static void main(String[] args) 메소드가 정의됩니다.
- ApplicationContext 인터페이스를 구현한 ClassPathXmlApplicationContext 클래스를 이용하여, 스프링 컨테이너를 생성합니다. applicationContext.xml 파일을 이용하여 스프링 컨테이너를 초기화합니다.
- Calc 인터페이스 타입의 변수 calc를 선언합니다.
- context를 이용하여 calcAdd 빈 객체를 가져옵니다. 가져온 빈 객체를 calc 변수에 대입합니다.
- calc 객체의 calculate() 메소드를 실행하여 덧셈 연산을 수행합니다.
- context를 이용하여 calcMul 빈 객체를 가져옵니다. 가져온 빈 객체를 calc 변수에 대입합니다.
- calc 객체의 calculate() 메소드를 실행하여 곱셈 연산을 수행합니다.
이 코드는 applicationContext.xml 파일에 정의된 CalcAdd와 CalcMul 빈 객체를 사용합니다. 이 빈 객체는 Calc 인터페이스를 구현한 클래스의 인스턴스를 생성하여, 덧셈과 곱셈 연산을 수행하는 기능을 제공합니다. HelloSpring 클래스에서는 ApplicationContext를 이용하여 이 빈 객체를 가져와서, calculate() 메소드를 호출하여 덧셈과 곱셈 연산을 수행합니다. 이를 통해 스프링 프레임워크의 IoC 컨테이너와 의존성 주입(DI) 기능을 간단하게 이해할 수 있습니다.
'Spring, Springboot' 카테고리의 다른 글
5월 8일자 수업 Spring Boot 스프링 JPA <chapter03 > (0) | 2023.05.08 |
---|---|
5월 3일자 수업 react (0) | 2023.05.04 |
의존 객체 주입 (constructor-arg, property) 개념 (0) | 2023.04.07 |
Spring 설치 이후 환경설정 (0) | 2023.04.05 |
[Spring] 설치하기 (0) | 2023.04.04 |