잡동사니에도 사랑을

[21.11.10] 본문

SPRING

[21.11.10]

luvforjunk 2021. 11. 9. 19:10
728x90
반응형

[문제3]

Project : chapter02 / chapter02_SpringMaven

Package : sample05

 

Class : HelloSpring.java

Interface : SungJuk.java

추상메소드 : public void execute();

 

아래의 4개의 클래스는 Setter Injection

Class : SungJukInput.java

             SungJukOutput.java

             SungJukModify.java

             SungJukDelete.java

          

Class : SungJukDTO2.java

             name, kor, eng, math, tot, avg (같은 이름은 입력하지 마시오)

 

List list = new ArrayList() 사용하시오.

[chapter02]

List는 applicationContext.xml에서 빈으로 생성

[chapter02_SpringMaven]

- List는 @Component / spring.conf 에서 생성해서 리턴

 

[실행]

menu() - HelloSpring.java

**************

   1. 입력

   2. 출력

   3. 수정

   4. 삭제

   5. 끝

**************

 

1번인 경우 - SungJukInput.java

이름 입력 :

국어점수 입력 :

영어점수 입력 :

수학점수 입력 :

 

xxx님의 데이터를 입력 하였습니다

 

2번인 경우 - SungJukOutput.java

이름국어영어수학총점평균

홍길동9510097xxxxx.xx

또치908575xxxxx.xx

 

3번인 경우 - SungJukModify.java

수정할 이름 입력 : 코난

찾고자하는 이름이 없습니다

 

수정할 이름 입력 : 홍길동

이름국어영어수학총점평균

홍길동9510097xxxxx.xx

 

국어점수 입력 :

영어점수 입력 :

수학점수 입력 :

 

xxx님의 데이터를 수정 하였습니다

 

4번인 경우 - SungJukDelete.java

삭제할 이름 입력 : 코난

찾고자하는 이름이 없습니다

 

xxx님의 데이터를 삭제 하였습니다

 

1. xml

2. annotation

3. spring configuration

 

스피링 자체는 인터페이스 설계로 들어가는데, 메인은 각 프로젝트 당 하나씩만 들어가는 게 맞다.

하지만 이번 예제는 HelloSpring을 뉴 시키지 않는다.

 

 

////////applicationContext.xml

<!-- 중략 -->

<!-- sample05 -->
	<!-- main -->
	<bean id="helloSpring" class="sample05.HelloSpring"></bean>
	
	<bean id="sungJukInput" class="sample05.SungJukInput">
		<property name="sungJukDTO2" ref="sungJukDTO2"></property>
	</bean>
	<!-- 
	Input을 통해서 DTO를 불러오고 싶은데, 
	생성자를 통해서 가져오는 방법1 setter를 통해서 가져오는 방법2 두 가지가 있다 
	Input.java에서 DTO2 setter를 잡아준 뒤 xml에서 명시한다
	-->

	<bean id="sungJukOutput" class="sample05.SungJukOutput"></bean>
	
	<bean id="sungJukDTO2" class="sample05.SungJukDTO2"></bean>
</beans>

 

 

 

////////HelloSpring.java

package sample05;

import java.util.Scanner;

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");

		HelloSpring helloSpring = (HelloSpring) context.getBean("helloSpring");
		helloSpring.menu(context);
		System.out.println("프로그램을 종료합니다");

	}

	private void menu(ApplicationContext context) { // // xml에 있는 값을 불러오려면? context가 필요하다
		Scanner scan = new Scanner(System.in);
		int num;
		SungJuk sungJuk = null;

		while (true) {
			System.out.println("*************");
			System.out.println(" 1. 입력");
			System.out.println(" 2. 출력");
			System.out.println(" 3. 수정");
			System.out.println(" 4. 삭제");
			System.out.println(" 5. 끝");
			System.out.println("*************");
			System.out.print("입력 : ");
			num = scan.nextInt();
			if (num == 5)
				break;

			if (num == 1) {
				sungJuk = (SungJuk) context.getBean("sungJukInput");
				// 1번을 누르면 객체가 생성이 되고 sungJuk.execute로 빠져나간다.
				// 객체 주소값이 input으로 들어가야함

				// sungJuk.execute();

			} else if (num == 2) {
				sungJuk = new SungJukOutput();
				// 클래스 양이 적을 때 1:1 관계를 하지만,
				// 클래스 양이 많을 때는 부모와 자식 관계, 다형성의 관계로 잡아야 한다.

				// sungJuk.execute(); - 동일한 문장이 위에도 나온다. 두번 써줄 필요 없이 아래로 밀어주자.
			}

			sungJuk.execute(); // initialize가 되지 않았다는 에러가 뜨니, 위에서 null값을 넣어주자
			// 왜 initialize를 해주는 걸까? garbage값을 처리해주기 위해

		} // while

	}

}

 

 

 

////////SungJukOutput.java

package sample05;

public class SungJukOutput implements SungJuk {

	@Override
	public void execute() {
		
	}
}

 

 

 

////////SungJukInput.java

package sample05;

import java.util.Scanner;

import lombok.Setter;

public class SungJukInput implements SungJuk {
	@Setter
	private SungJukDTO2 sungJukDTO2;
	// 아래의 내용을 주석거는 대신 Setter를 annotation해준다.

	/*
	 * public void setSungJukDTO2(SungJukDTO2 sungJukDTO2) { this.sungJukDTO2 =
	 * sungJukDTO2; }
	 */

	@Override
	public void execute() {
		Scanner scan = new Scanner(System.in);
		System.out.println("이름 입력 : ");
		String name = scan.next();
		System.out.println("국어 입력 : ");
		int kor = scan.nextInt();
		System.out.println("영어 입력 : ");
		int eng = scan.nextInt();
		System.out.println("수학 입력 : ");
		int math = scan.nextInt();

		int tot = kor + eng + math;
		double avg = tot / 3.0;

		// dto클래스에 보관하려고 한다.
		SungJukDTO2 sungJukDTO2 = new SungJukDTO2();

	}

}

 

 

 

////////SungJukDTO2.java

package sample05;

import lombok.Setter;

@Setter
// Setter Getter Generate해줘도 무방하다
public class SungJukDTO2 {
	private String name;
	private int kor, eng, math, tot;
	private double avg;

	public String toString() {
		return name + "\t" + kor + "\t" + eng + "\t" + math + "\t" + tot + "\t" + String.format("%.2f", avg);
	}
}

 

728x90
반응형