스프링 파일 강사님이 다시 배포한 것으로 사용(기존의 것 오류발생)
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();
}
}