스프링 파일 강사님이 다시 배포한 것으로 사용(기존의 것 오류발생)
 Spring tool suit 3 사용
→ 내장된 톰캣 존재함
사용할 파일은 Spring Legacy Project
프론트 엔드
- AngularJS, React, Bootstrap, Vue.js, etc(Node.js, Nexacro[MiPlatform, XPlatform], WebSquare)
백엔드
- Structs, Spring, Spring Boot, 전자정부, etc(Laf/J, DevOn)
- 스프링 부트를 사용해도 됨.(설정이나 가르치기 쉬움)
- JSP->Structs->Spring 순으로 발전
스프링의 주요 특징 중 하나로 여기서는 객체간의 의존을 의미함
DI는 의존하는 객체를 직접 생성하는 대신 의존객체를 전달 받는 방식으로 외부에서 객체를 생성하여 주입함
⇒ 각 객체간의 의존성을 스프링 컨테이너가 자동으로 연결해주는 것으로 Bean 설정 파일에 의존관계가 필요한 정보를 추가하면 스프링 컨테이너가 자동적으로 연결함.
. 으로 접근 하는 방법
setter()나 construct()로 접근 하는 방법

두 가지 방법 다 B와 C는 A객체에 의존적
모듈 간의 결합도가 낮아지고 유연성이 높아짐
메소드나 객체의 호출 작업을 개발자가 결정하는것이 아니라 외부에서 결정되는 것
제어의 흐름을 바꿈
의존성을 역전 시켜 객체간의 결합도를 줄이고 유연한 코드 작성가능. 유지보수 편해짐

여기서 IOC 컨테이너는 객체가 담겨있는 컨테이너이며, A에서 IOC컨테이너 속의 객체들을 제어 할 수있음(역전 발생)
Spring Legacy project 생성

 

package com.javalec.spring_2_1;
public class Calculation {
	private int firstNum;
	private int SecondNum;
	
	public void add() {
		System.out.println("add");
		System.out.println(firstNum+"+"+SecondNum+"="+(firstNum+SecondNum));
	}
	public void sub() {
		System.out.println("sub");
		System.out.println(firstNum+"-"+SecondNum+"="+(firstNum-SecondNum));
	}
	
	public void mul() {
		System.out.println("mul");
		System.out.println(firstNum+"*"+SecondNum+"="+(firstNum*SecondNum));
	}
	
	public void div() {
		System.out.println("div");
		System.out.println(firstNum+"/"+SecondNum+"="+(firstNum/SecondNum));
	}
	
	public int getFirstNum() {
		return firstNum;
	}
	public void setFirstNum(int firstNum) {
		this.firstNum = firstNum;
	}
	public int getSecondNum() {
		return SecondNum;
	}
	public void setSecondNum(int secondNum) {
		SecondNum = secondNum;
	}
	
}package com.javalec.spring_2_1;
public class MainClass {
	public static void main(String[] args) {
		Calculation calculation = new Calculation();
		calculation.setFirstNum(10);
		calculation.setSecondNum(2);
		
		calculation.add();
		calculation.sub();
		calculation.mul();
		calculation.div();
	}
} 
calculation객체가 MainClass에 의존적이다. ⇒ IoC(Inversion of Control, 제어의 역전)
 

package com.javalec.spring_ex2_1;
public class Circle {
	private int radius;
	
	
	public int getRadius() {
		return radius;
	}
	public void setRadius(int radius) {
		this.radius = radius;
	}
	public void Circle_area() {
		System.out.println("원의 면적은 "+radius*radius*3.14);
	}
}package com.javalec.spring_ex2_1;
public class Rectangel {
	private int width;
	private int height;
	
	
	public int getWidth() {
		return width;
	}
	public void setWidth(int width) {
		this.width = width;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public void Rectangel_area() {
		System.out.println("사각형의 면적은 "+ (width*height));
	}
}package com.javalec.spring_ex2_1;
public class Draw {
	public static void main(String[] args) {
		Circle circle = new Circle();
		Rectangel rectangel = new Rectangel();
		
		circle.setRadius(10);
		rectangel.setWidth(20);
		rectangel.setHeight(30);
		
		
		circle.Circle_area();
		rectangel.Rectangel_area();
	}
} 
package com.javalec.spring_ex_2_2;
public class Season {
	private int month;
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	
	public void Season_if() {
//		if (2<month && month<6) {
//			System.out.println("봄");
//		}else if (5<month && month<9) {
//			System.out.println("여름");			
//		}else if (8<month && month<12) {
//			System.out.println("가을");			
//		}else if(month<3 || month==12 ) {
//			System.out.println("겨울");
//		}
//	
//		
		switch (month) {
		case 3:
		case 4:
		case 5:
			System.out.println("봄");
			break;
		case 6:
		case 7:
		case 8:
			System.out.println("여름");
			break;
		case 9:
		case 10:
		case 11:
			System.out.println("가을");
			break;
		case 12:
		case 1:
		case 2:
			System.out.println("겨울");
			break;
		default:
			break;
		}
	}
}package com.javalec.spring_ex_2_2;
public class Won2dollar {
	private int won;
	public int getWon() {
		return won;
	}
	public void setWon(int won) {
		this.won = won;
	}
	
	public void process() {
		System.out.println("$"+won/1200.0);
	}
}package com.javajavalecelc.spring_ex_2_2;
public class SeasonDallar {
	public static void main(String[] args) {
		
		Season season = new Season();
		Won2dollar won2dollar = new Won2dollar();
		season.setMonth(9);
		season.Season_if();
		won2dollar.setWon(3300);
		won2dollar.process();
	}
} 
package com.javalec.spring_ex2_3;
public class Three {
	private int three;
	
	public int getThree() {
		return three;
	}
	public void setThree(int three) {
		this.three = three;
	}
	public void process() {
		if (three%3 ==0) {
			System.out.println("3의 배수입니다.");
		}else {
			System.out.println("3의 배수가 아닙니다.");
		}
	}
}package com.javalec.spring_ex2_3;
public class DivAndRemains {
	private int Num;
	public int getNum() {
		return Num;
	}
	public void setNum(int num) {
		Num = num;
	}
	
	public void process() {
		int ten =Num/10;
		int one =Num%10;
		
		if (ten == one) {
			System.out.println("10의 자리와 1의 자리가 같습니다.");
		}else {
			System.out.println("10의 자리와 1의 자리가 다릅니다.");
		}
	}
}package com.javalec.spring_ex2_3;
public class ThreeDivAndRemains {
	public static void main(String[] args) {
		Three three = new Three();
		DivAndRemains divandremains = new DivAndRemains();
		
		three.setThree(129);
		three.process();
		
		divandremains.setNum(77);
		divandremains.process();
	}
} 
package com.javalec.spring_ex2_4;
public class Rectangle {
	private int x;
	private int y;
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	
	
	public void process() {
		if ((100<= x && x<=200) && (100<= y && y<=200)) {
			System.out.println("("+x+","+y+")는 사각형 안에 있습니다.");
		}else {
			System.out.println("("+x+","+y+")는 사각형 안에 없습니다.");
		}
	}
	
}package com.javalec.spring_ex2_4;
public class Median {
	private int a;
	private int b;
	private int c;
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;
	}
	public int getB() {
		return b;
	}
	public void setB(int b) {
		this.b = b;
	}
	public int getC() {
		return c;
	}
	public void setC(int c) {
		this.c = c;
	}
	
	public void process() {
		if ( (b<a && a<c)|| (c<a && a<b)) {
			System.out.println("입력된 정수가 "+a+"와 "+b+"와 "+c+"의 중간값은 "+a);
		}else if ((a<b && b<c)|| (c<b && b<a)) {
			System.out.println("입력된 정수가 "+a+"와 "+b+"와 "+c+"의 중간값은 "+b);
		}else {
			System.out.println("입력된 정수가 "+a+"와 "+b+"와 "+c+"의 중간값은 "+c);
		}
	}
}package com.javalec.spring_ex2_4;
public class RectangleMedian {
	public static void main(String[] args) {
		
	Rectangle rectangle = new Rectangle();
	Median median = new Median();
	
	rectangle.setX(150);
	rectangle.setY(150);
	rectangle.process();
	
	median.setA(20);
	median.setB(100);
	median.setC(33);
	
	median.process();
	}
	
} 
package com.javalec.spring_ex2_5;
public class Multiple {
	private int Num;
	
	
	public int getNum() {
		return Num;
	}
	public void setNum(int num) {
		Num = num;
	}
	public void process() {
		boolean multiple = false;
		if (Num%3 == 0) {
			System.out.println("3의 배수이다.");
			multiple=true;
		}
		if (Num%5 ==0) {
			System.out.println("5의 배수이다.");
			multiple=true;
		}
		if (Num%8 ==0) {
			System.out.println("8의 배수이다.");
			multiple=true;
		}
		
		if (!multiple) {
			System.out.println("어느 배수도 아니다.");
		}
	}
}package com.javalec.spring_ex2_5;
public class Triangle {
	private int Num1;
	private int Num2;
	private int Num3;
	public int getNum1() {
		return Num1;
	}
	public void setNum1(int num1) {
		Num1 = num1;
	}
	public int getNum2() {
		return Num2;
	}
	public void setNum2(int num2) {
		Num2 = num2;
	}
	public int getNum3() {
		return Num3;
	}
	public void setNum3(int num3) {
		Num3 = num3;
	}
	
	
	public void process() {
		if (Num1+Num2<=Num3 || Num1+Num3<=Num2||Num2+Num3<=Num1) {
			System.out.println("삼각형이 되지 않습니다.");
		}else {
			System.out.println("삼각형이 됩니다.");
		}
	}
	
}package com.javalec.spring_ex2_5;
public class MultipleTriangle {
	public static void main(String[] args) {
		
	Multiple mul = new Multiple();
	
	Triangle tri = new Triangle();
	mul.setNum(240);
	mul.process();
	
	
	tri.setNum1(4);
	tri.setNum2(3);
	tri.setNum3(5);
	tri.process();
	}
} 
package com.javalec.spring_ex2_6;
public class Asterisk {
	private int n;
	public int getN() {
		return n;
	}
	public void setN(int n) {
		this.n = n;
	}
	
	
	public void process() {
		StringBuffer strBuf = new StringBuffer();
		for (int i = n; i >0; i--) { // n만큼 반복
			
			for (int j = 0; j < i; j++) {// j가 i(n)만큼 반복
				strBuf.append('*');
			}
			strBuf.append("\n");
		}
		System.out.println(strBuf.toString());
	}
}package com.javalec.spring_ex2_6;
public class Capital {
	private String str;
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
	
	public void process() {
		StringBuffer strBuf = new StringBuffer();
		
		char c ='A';
		char c2 = str.charAt(0);
		
		for (char i = c2; i >= c; i--) {
			for (char j = c; j <= i; j++) {
				strBuf.append(j);
			}
			strBuf.append("\n");
		}
		System.out.println(strBuf.toString());
	}
	
}package com.javalec.spring_ex2_6;
public class AsteriskCapital {
	public static void main(String[] args) {
		Asterisk asterisk = new Asterisk();
		asterisk.setN(5);
		asterisk.process();
		
		
		Capital capital = new Capital();
		capital.setStr("F");
		capital.process();
	}
}스프링을 사용하지 않은 프로젝트의 경우

스프링을 사용한 프로젝트의 경우

String configLoc = "classpath:applicationCTX.xml";
: 스프링 XML(객체 정보가 들어있음) 객체 정보를 받기 위해서 속성으로 classpath를 받는다.(환경 위치)
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc);
:클래스의 매개변수로 받음(configLoc) → 객체 정보를 해석 → ctx로 담음
MyCalculator myCalculator = ctx.getBean("myCalculator", MyCalculator.class);
: getBean 메소드를 사용함.MyCalculator.class를 참조 변수로 사용
 
 <bean id="calculator" class="com.javalec.ex.Calculator"/>
<bean id="myCalculator" class="com.javalec.ex.MyCalculator">
	
	<property name="calculator">
		<ref bean="calculator"/>
	</property>
	
	<property name="firstNum" value="10"/>
	<property name="secondNum" value="2"/>
</bean>지금까지 한 방식대로 만들면
package com.javalec.spring_3_1;
public class Calculator {
	public void addition(int f, int s) {
		System.out.println("addition()");
		int result = f+s;
		
		System.out.println(f+"+"+s+"="+result);
	}
	
	public void subtraction(int f, int s) {
		System.out.println("subtraction()");
		int result = f-s;
		
		System.out.println(f+"-"+s+"="+result);
	}
	
	public void multplication(int f, int s) {
		System.out.println("multplication()");
		int result = f*s;
		
		System.out.println(f+"*"+s+"="+result);
	}
	
	public void division(int f, int s) {
		System.out.println("division()");
		int result = f/s;
		
		System.out.println(f+"/"+s+"="+result);
	}
}package com.javalec.spring_3_1;
public class MyCalculator {
	private Calculator calculator;
	
	private int firstNum;
	private int secondNum;
	
	public void add() {
		calculator.addition(firstNum, secondNum);
	}
	
	public void sub() {
		calculator.subtraction(firstNum, secondNum);
	}
	
	public void mul() {
		calculator.multplication(firstNum, secondNum);
	}
	
	public void div() {
		calculator.division(firstNum, secondNum);
	}
	
	
	
	public Calculator getCalculator() {
		return calculator;
	}
	public void setCalculator(Calculator calculator) {
		this.calculator = calculator;
	}
	public int getFirstNum() {
		return firstNum;
	}
	public void setFirstNum(int firstNum) {
		this.firstNum = firstNum;
	}
	public int getSecondNum() {
		return secondNum;
	}
	public void setSecondNum(int secondNum) {
		this.secondNum = secondNum;
	}
	
}package com.javalec.spring_3_1;
public class MainClass {
	public static void main(String[] args) {
		MyCalculator myCalculator = new MyCalculator();
		myCalculator.setCalculator(new Calculator());
		
		
		myCalculator.setFirstNum(10);
		myCalculator.setSecondNum(2);
		
		myCalculator.add();
		myCalculator.sub();
		myCalculator.mul();
		myCalculator.div();
		
		
	}
}객체 정보를 담고있는 CTX.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">
	<!-- calculator Bean 객체 생성 -->
	<bean id="calculator" class="com.javalec.spring_3_2.Calculator"></bean>
	
	
	<bean id="myCalculator" class="com.javalec.spring_3_2.MyCalculator">
		<property name="calculator"> 
		<!--  calculator는  private Calculator calculator;의 calculator를 말함. -->
			<ref bean="calculator"/> 
			<!-- 여기서 말하는 bean="calculator" => 7번째 줄의  id="calculator" -->
		</property>
		<property name="firstNum" value="10"></property> <!-- property로 name과 value 세팅 -->
		<property name="secondNum" value="2"></property>
		<!-- 참조변수를 따라감.  -->
	</bean>
</beans>package com.javalec.spring_3_2;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
	public static void main(String[] args) {
//		MyCalculator myCalculator = new MyCalculator();
//		myCalculator.setCalculator(new Calculator());
//		
//		myCalculator.setFirstNum(10);
//		myCalculator.setSecondNum(2);
		
		
		String configLoc =  "classpath:applicationCTX.xml";//매개변수로 해서 
		AbstractApplicationContext ctx =  new GenericXmlApplicationContext(configLoc);//업캐스팅 발생
		MyCalculator myCalculator2 = ctx.getBean("myCalculator", MyCalculator.class);
//		<bean id="myCalculator" class="com.javalec.spring_3_2.MyCalculator">의 myCalculator가 들어감(참조변수로)
//		위치 어디인지 몰라 헤맬것 같아서 적어놓음 ctx.getBean("myCalculator", MyCalculator.class)의 "myCalculator"를 말하는 거임!!!!!
//		applicationCTX.xml 의 10~19까지의 객체 정보를 가지고 옴
		 
//		만약에  MyCalculator myCalculator2 = ctx.getBean("myCalculator", MyCalculator.class);의
//		"myCalculator"를 "myCalculator2" 로 바꾸면 오류가 발생함. "myCalculator2"로 하고싶으면
//		<bean id="myCalculator" class="com.javalec.spring_3_2.MyCalculator">의 id="myCalculator"를
//		id="myCalculator2" 로 바꿔야함
		
		myCalculator2.add();
		myCalculator2.sub();
		myCalculator2.mul();
		myCalculator2.div();
		
		
	}
} 
package com.javalec.spring_ex_3_1;
public class Circle {
	public void area(int radius) {
		System.out.println("원의 면적은 "+(3.14*radius*radius));
	}
}package com.javalec.spring_ex_3_1;
public class MyCircle {
	private Circle circle;
	
	private int radius;
	public void ar() {
		circle.area(radius);
	}
	
	
	
	public Circle getCircle() {
		return circle;
	}
	public void setCircle(Circle circle) {
		this.circle = circle;
	}
	public int getRadius() {
		return radius;
	}
	public void setRadius(int radius) {
		this.radius = radius;
	}
	
	
}<?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">
	<!-- Circle Bean 객체 생성 -->
	<bean id="circle" class="com.javalec.spring_ex_3_1.Circle"></bean>
	
	
	
	<bean id="mycircle" class="com.javalec.spring_ex_3_1.MyCircle">
		<property name="circle">
			<ref bean="circle"/>
		</property>
		<property name="radius" value="10"></property>
	</bean>
</beans>package com.javalec.spring_ex_3_1;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainCircle {
	public static void main(String[] args) {
		String configLoc = "classpath:circleCTX.xml";
		AbstractApplicationContext ctx =  new GenericXmlApplicationContext(configLoc);
		MyCircle myCircle = ctx.getBean("myCircle",MyCircle.class);
		
		myCircle.ar();
	}
}
package com.javalec.spring_ex3_2;
public class Rectangle {
	public void area(int width, int height) {
		System.out.println("사각형의 면적은 "+width*height);
	}
}package com.javalec.spring_ex3_2;
public class MyRectangle {
	private Rectangle rectangle;
	int width;
	int height;
	
	public void ar() {
		rectangle.area(width, height);
	}
	
	
	
	public Rectangle getRectangle() {
		return rectangle;
	}
	public void setRectangle(Rectangle rectangle) {
		this.rectangle = rectangle;
	}
	public int getWidth() {
		return width;
	}
	public void setWidth(int width) {
		this.width = width;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
}<?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="rectangle" class="com.javalec.spring_ex3_2.Rectangle"/>
	
	<bean id="myRectangle" class="com.javalec.spring_ex3_2.MyRectangle">
		<property name="rectangle">
			<ref bean="rectangle"/>
		</property>
		<property name="width" value="4"></property>
		<property name="height" value="6"></property>
	</bean>
</beans>package com.javalec.spring_ex3_2;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainRectangle {
	public static void main(String[] args) {
		String configLoc = "classpath:rectangleCTX.xml";
		AbstractApplicationContext ctx =  new GenericXmlApplicationContext(configLoc);
		MyRectangle myRectangle = ctx.getBean("myRectangle",MyRectangle.class);
		
		myRectangle.ar();
	}
} 
package com.javalec.spring_3_ex_3_3;
public class Season {
	public void rsltSeason(int month) {
		
		switch (month) {
		case 3: 
		case 4: 
		case 5: 
				System.out.print("입력된 정수가 "+month+"은 계절이 봄");
			break;
		case 6:
		case 7:
		case 8:
			System.out.println("입력된 정수가 "+month+"은 계절이 여름");
			
			break;
			
		case 9:
		case 10:
		case 11:
			System.out.println("입력된 정수가 "+month+"은 계절이 가을");
			break;
			
		case 12:
		case 1:
		case 2:
			System.out.println("입력된 정수가 "+month+"은 계절이 겨울");
			break;
		default:
			break;
		}
	}
}package com.javalec.spring_3_ex_3_3;
public class MySeason {
	private Season season;
	
	int month;
	public void result() {
		season.rsltSeason(month);
	}
	
	
	public Season getSeason() {
		return season;
	}
	public void setSeason(Season season) {
		this.season = season;
	}
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	
}<?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="season" class="com.javalec.spring_3_ex_3_3.Season"/>
	<bean id="mySeason" class="com.javalec.spring_3_ex_3_3.MySeason">
		<property name="season">
			<ref bean="season"/>	
		</property>
		<property name="month" value="9"></property>
	</bean>
</beans>package com.javalec.spring_3_ex_3_3;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainSeason {
	public static void main(String[] args) {
		String configLoc = "classpath:seasonCTX.xml";
		AbstractApplicationContext ctx =  new GenericXmlApplicationContext(configLoc);
		MySeason mySeason = ctx.getBean("mySeason",MySeason.class);
		
		mySeason.result();
	}
}