SpringBoot/day45 / 23.11.08(수) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 11월 8일
0
post-thumbnail

P02_DI


com.di.ex04


Day.java

package com.di.ex04;

import java.util.Calendar;

public abstract class Day {
	public abstract String dayinfo();
	
	public static Day getInstance() {
		Calendar calendar = Calendar.getInstance();
		
		int day = calendar.get(Calendar.DAY_OF_WEEK);
		switch (day) {
		case 1:
			return new Sunday();
		case 2:
			return new Monday();
		case 3:
			return new Tuesday();
		case 4:
			return new Wednesday();
		case 5:
			return new Thursday();
		case 6:
			return new Friday();
		default:
			return new Saturday();
		}
	}
}

Sunday~Saturday.java

package com.di.ex04;

public class Sunday extends Day{

	@Override
	public String dayinfo() {
		return "일요일";
	}
}

applicationContext.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 id="day" class="com.di.ex04.Day" factory-method="getInstance"></bean>
</beans>

DayTest.java

package com.di.ex04;

import org.springframework.context.support.GenericXmlApplicationContext;

public class DayTest {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex04/applicationContext.xml");
		
		Day today = (Day)context.getBean("day");
		
		System.out.println("오늘 요일 : " + today.dayinfo());
		
		context.close();
	}
}

Main-run-console

오늘 요일 : 수요일


com.di.ex05


DateVO.java

package com.di.ex05;

public class DateVO {
	private String name;
	private String birth;
	
	public DateVO(){}
	
	public DateVO(String name, String birth) {
		super();
		this.name = name;
		this.birth = birth;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBirth() {
		return birth;
	}
	public void setBirth(String birth) {
		this.birth = birth;
	}

	@Override
	public String toString() {
		return name + " 님의 생일 : " + birth;
	}
}

applicationContext.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 id="userA" class="com.di.ex05.DateVO">
		<property name="name">
			<value>유저 A</value>
		</property>
		<property name="birth">
			<value>2023-11-08</value>
		</property>
	</bean>
	<bean id="userB" class="com.di.ex05.DateVO">
		<property name="name" value="유저 B"/>
		<property name="birth" value="2009-12-21"/>
	</bean>
</beans>

DateTest.java

package com.di.ex05;

import org.springframework.context.support.GenericXmlApplicationContext;

public class DateTest {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex05/applicationContext.xml");
		
		DateVO userA = (DateVO)context.getBean("userA");
		System.out.println(userA);
		System.out.println();
		DateVO userB = (DateVO)context.getBean("userB");
		System.out.println(userB);
		
		context.close();
		
	}
}

Main-run-console

유저 A 님의 생일 : 2023-11-08

유저 B 님의 생일 : 2009-12-21


com.di.ex06


Emp.java

package com.di.ex06;

public class Emp {
	private String name;
	private int salary;
	
	public Emp() {
		super();
	}
	
	public Emp(String name, int salary) {
		super();
		this.name = name;
		this.salary = salary;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getSalary() {
		return salary;
	}
	public void setSalary(int salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return name + " - 급여 : " + salary;
	}
}

Developer.java

package com.di.ex06;

public class Developer extends Emp{
	private String dept;

	public Developer() {
	}

	public Developer(String name, int salary) {
		super(name, salary);
	}

	public String getDept() {
		return dept;
	}

	public void setDept(String dept) {
		this.dept = dept;
	}

	@Override
	public String toString() {
		return super.toString() + " - 부서 : " + dept + "(개발부)";
	}
}

applicationContext.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 id="developer" class="com.di.ex06.Developer">
		<constructor-arg value="deptA"/>
		<constructor-arg value="3000"/>
		<property name="dept" value="AI"></property>
	</bean>
</beans>

EmpMain.java

package com.di.ex06;

import org.springframework.context.support.GenericXmlApplicationContext;

public class EmpMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex06/applicationContext.xml");
		
		Emp devA = (Emp)context.getBean("developer");
		System.out.println(devA);
		context.close();
				
	}
}

Main-run-console

deptA - 급여 : 3000 - 부서 : AI(개발부)


com.di.quiz


Point.inter

package com.di.quiz;

public interface Point {
	public void calcTot();
	public void calcAvg();
	public void showPoint();
}

PointDTO.java

package com.di.quiz;

public class PointDTO {
	private String name;
	private int kor;
	private int eng;
	private int math;
	private int tot;
	private double avg;
	public PointDTO() {
	}
	public PointDTO(String name, int kor, int eng, int math) {
		super();
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMath() {
		return math;
	}
	public void setMath(int math) {
		this.math = math;
	}
	public int getTot() {
		return tot;
	}
	public void setTot(int tot) {
		this.tot = tot;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	@Override
	public String toString() {
		return name + " - "+kor;
	}
	
	
}

PointImpl.java

package com.di.quiz;

public class PointImpl implements Point{
	PointDTO dto = new PointDTO();

	public PointImpl(PointDTO dto) {
		super();
		this.dto = dto;
	}
	
	@Override
	public void calcTot() {
		int tot = dto.getKor() + dto.getEng() + dto.getMath();
		dto.setTot(tot);
		System.out.println("총점 : " + dto.getTot());
	}

	@Override
	public void calcAvg() {
		double avg = dto.getTot()/3.0;
		dto.setAvg(avg);
		System.out.println("평균 : " + dto.getAvg());
	}

	@Override
	public void showPoint() {
		System.out.println("이름 : " + dto.getName());
		System.out.println("국어 : " + dto.getKor());
		System.out.println("영어 : " + dto.getEng());
		System.out.println("수학 : " + dto.getMath());
		System.out.println("평균 : " + dto.getAvg());
	}
	
	
}

applicationContext.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 id="manA" class="com.di.quiz.PointDTO">
		<constructor-arg value="manA"/>
		<constructor-arg value="60"/>
		<constructor-arg value="70"/>
		<constructor-arg value="80"/>
	</bean>
	<bean id="pointImpl" class="com.di.quiz.PointImpl">
		<constructor-arg ref="manA"/> <!-- 객체 담을 때는 ref -->
	</bean>
</beans>

PointTest

package com.di.quiz;

import org.springframework.context.support.GenericXmlApplicationContext;


public class PointTest {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/quiz/applicationContext.xml");
		
		PointImpl data = (PointImpl)context.getBean("pointImpl");
		data.calcTot();
		data.calcAvg();
		data.showPoint();
		context.close();
	}
}

Main-run-console

총점 : 210
평균 : 70.0
이름 : manA
국어 : 60
영어 : 70
수학 : 80
평균 : 70.0



P03_annotation

Annotation.txt

# annotation
- 코드 사이에 주석처럼 스이면서 특별한 의미, 기능을 수행하는 기술

# 주요 annotation
- @Autowired
  > 의존관계를 자동으로 설정
    @Autowired 이 붙은 인스턴스 변수는 해당 변수의 타입과 일치하는
    컨텍스트 내의 빈을 찾아서 인스턴스 변수에 주입

- @Qualifier(value="bean name")
  > 빈 객체 중 특정 빈을 사용하도록 선언

- @Component
  > 클래스에 선언하며, 해당 클래스를 자동으로 빈으로 등록  
  
- @Resource(name="bean name")
  > 애플리케이션에서 필요로 하는 자원을 자동으로 연결할 때 사용 
    name 속성에서 자동으로 연결된 빈 객체의 이름을 설정
    @Autowired 는 타입으로, @Resource 는 이름으로 연결
    
- @Configuration
  > 클래스에 선언하며, @Bean 을 해당 class 의 method 에 적용하면 
  @Autowired 로 bean 을 부를 수 있다.

com.anno.ex01


Tire.inter

package com.anno.ex01;

public interface Tire {
	public String getBrand();
}

KoreaTire.java

package com.anno.ex01;

import org.springframework.stereotype.Component;

@Component
// <bean id="koreaTire" class="com.anno.ex01.KoreaTire"/> 와 동일
// @Component 인 경우 bean 이름의 default 는 koreaTire 로 자동 설정
// 가장 앞 글자를 소문자로
public class KoreaTire implements Tire{

	@Override
	public String getBrand() {
		// TODO Auto-generated method stub
		return "한국 타이어";
	}
}

applicationContext.xml

next ->

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!--  
	# .xml 파일 생성 시 'context' namespace 체크하고, 
	https://www.springframework.org/schema/context/spring-context-4.3.xsd 항목 체크
	
	# @Component 를 사용하려면 아래의 태그를 작성해야 한다
	- base-package 는 어느 범위에 있는 객체를 생성해 줄 것인지를 선언
	  팩키지 내의 클래스 위에 @Component 작성해야 함
-->
	<context:component-scan base-package="com.anno.ex01"/>
</beans>

Car.java

package com.anno.ex01;

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

@Component("carA") 
public class Car {
	@Autowired
	// @Autowired 붙은 인스턴스 변수는 해당 변수의 타입과 일치하는 컨텍스트 내의 빈을 찾아
	// 인스턴스 변수에 주입
	private Tire tire;

	public Car() {
		System.out.println("- Car() -");
	}

	public Car(Tire tire) {
		super();
		this.tire = tire;
		System.out.println("- Car(Tire) -");
	}

	public Tire getTire() {
		return tire;
	}

	public void setTire(Tire tire) {
		this.tire = tire;
	}
	
	public void checkTire() {
		System.out.println(tire.getBrand() + " 사용");
	}
	
}

CarMain.java

package com.anno.ex01;

import org.springframework.context.support.GenericXmlApplicationContext;

public class CarMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/anno/ex01/applicationContext.xml");
		
		Tire tireA = context.getBean("koreaTire", Tire.class);
		System.out.println(tireA.getBrand());
		
		Car carA = context.getBean("carA", Car.class);
		carA.checkTire();
		
		context.close();
	}
}

Main-run-console

- Car() -
한국 타이어
한국 타이어 사용


com.anno.ex02


Food.java

package com.anno.ex02;

public class Food {
	private String name;
	private int price;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Food [name=" + name + ", price=" + price + "]";
	}
}

MyFood.java

package com.anno.ex02;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

@Component
public class MyFood {
	
	@Resource(name="favorite")
	private Food favoriteFood;
	@Resource(name="unfavorite")
	private Food unfavoriteFood;
	
	public Food getFavoriteFood() {
		return favoriteFood;
	}
	public void setFavoriteFood(Food favoriteFood) {
		this.favoriteFood = favoriteFood;
	}
	public Food getUnfavoriteFood() {
		return unfavoriteFood;
	}
	public void setUnfavoriteFood(Food unfavoriteFood) {
		this.unfavoriteFood = unfavoriteFood;
	}
	@Override
	public String toString() {
		return "[favoriteFood : " + favoriteFood + " - unfavoriteFood : " + unfavoriteFood + "]";
	}
	
	
}

applicationContext.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"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<context:component-scan base-package="com.anno.ex02"/>
	<bean id="favorite" class="com.anno.ex02.Food">
		<property name="name" value="삼겹살"/>
		<property name="price" value="16000"/>
	</bean>
	<bean id="unfavorite" class="com.anno.ex02.Food">
		<property name="name" value="고무"/>
		<property name="price" value="1000"/>
	</bean>
</beans>

FoodMain.java

package com.anno.ex02;

import org.springframework.context.support.GenericXmlApplicationContext;

public class FoodMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/anno/ex02/applicationContext.xml");
		
		MyFood user = context.getBean("myFood", MyFood.class);
		System.out.println(user);
		
		context.close();
		
	}
}

Main-run-console

[favoriteFood : Food [name=삼겹살, price=16000] - unfavoriteFood : Food [name=고무, price=1000]]


com.anno.ex03


Student.java

package com.anno.ex03;

public class Student {
	private String name;
	private String addr;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return name + " - 주소 : " + addr + " - 나이 : " + age;
	}
}

applicationContext.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"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<context:component-scan base-package="com.anno.ex03"/>
	<bean id="student" class="com.anno.ex03.Student" p:name="stuA" p:age="20" p:addr="서울시"/>
	<bean id="grade" class="java.lang.Integer">
		<constructor-arg value="1"/>
	</bean>
</beans>

School.java

package com.anno.ex03;

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

@Component("mySchool")
public class School {
	@Autowired
	private Student man;
	
	@Autowired
	private int grade;

	@Override
	public String toString() {
		return man + " - " + grade;
	}
}

SchoolMain.java

package com.anno.ex03;

import org.springframework.context.support.GenericXmlApplicationContext;

public class SchoolMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/anno/ex03/applicationContext.xml");
		
		School stuA = context.getBean("mySchool", School.class);
		System.out.println(stuA);
		context.close();
		
	}
}

Main-run-console

stuA - 주소 : 서울시 - 나이 : 20 - 1


com.anno.ex04


MyMessage.java

package com.anno.ex04;

import org.springframework.stereotype.Service;

@Service // 내부에서 자바 로직 처리, DAO가 DB에서 받아온 데이터를 전달받아서 처리
public class MyMessage {
	private String message;

	public MyMessage() {
		this.message = "즐거운 하루";
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
}


applicationContext.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"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<context:component-scan base-package="com.anno.ex04"/>
</beans>

MessageMain.java

package com.anno.ex04;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MessageMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/anno/ex04/applicationContext.xml");
		
		MyMessage msg = context.getBean("myMessage", MyMessage.class);
		System.out.println(msg.getMessage());
		
		context.close();
	}
}

Main-run-console

즐거운 하루


com.anno.ex05


UserService.inter

package com.anno.ex05;

public interface UserService {
	public void show();
}

UserServiceImpl.java

package com.anno.ex05;

public class UserServiceImpl implements UserService{

	@Override
	public void show() {
		// TODO Auto-generated method stub
		System.out.println("service!");
	}
	
}

AppConfig.java

package com.anno.ex05;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // @Bean 을 사용하는 클래스에는 반드시 사용해야 함
public class AppConfig {
	@Bean // 메서드가 생성한 객체를 빈 객체로 등록
	public UserService myService() {
		return new UserServiceImpl();
	}
}

ServiceMain.java

package com.anno.ex05;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class ServiceMain {
	public static void main(String[] args) {
		// XML 파일 대신 Java 클래스를 이용하여 빈을 정의
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
		
		// 스캔 할 팩키지 설정
		// <context:component-scan base-package="com.anno.ex05"/> 와 같음
		context.scan("com.anno.ex05"); 
		
		// bean 등록
		context.refresh();
		
		// getBean() 에서는 가져올 클래스만 지정하면 됨
		UserService service = context.getBean(UserServiceImpl.class);
		service.show();
		
		context.close();
	}
}

Main-run-console

service!
profile
Fintech

0개의 댓글