================================================
스프링 설치
Help
Eclipse Marketplace
Find -> Spring
일반을 설치 후 Add On을 설치
================================================
[Spring 프레임워크 개요]
프레임워크 == 골격 (뼈대)
-> 예시) 리모콘, 인형
개발자들끼리 기준
유지보수 용이
장점)
1. 유지보수 용이
2. 개발시간단축, 비용절감
3. 개발자의 역량이 획일화 & 실력 상향 평준화
4. 재사용 용이
================================================
스프링 프레일워크
: IoC와 AOP를 지원하는 경량의 프레임워크 ★★★ 면접
Spring Legacy 프로젝트로 생성
com.[회사이름].app
폴더에 파랑색 불이 들어와야함
충돌 하는것들 제거 :
src/main/resources
- META-INF (제거) 안씀
- log4j.xml (제거) 필요없음
src -> main -> webapp
WEB-INF 아래 spring과 view 제거
web.xml에서 <web-app> 기본 엘리먼트만 냅두고 모두 제거후 저장
pom.xml 에서 java-version 맞춰야함
Springframework는 4.2.4.RELEASE로 변경
<java-version>11</java-version>
<org.springframework-version>4.2.4.RELEASE</org.springframework-version>
폴더 우클릭 Property -> Maven아래에 Project Facets
Java Runtime에 Apache Tomcat 연결
Apply, Apply and Close
3. 프로젝트 설정 (Java, Tomcat)
4. 패키지, 폴더 정리
5. web.xml + pom.xml설정
========================================
src main으로 2개
src test로 2개
main에 webapp부분은 jsp 파일
========================================
스프링 프레임워크
: IoC와 AOP를 지원하는 경량의 프레임워크
not POJO(Servlet, 리스너, 필터) <<== 무거움
POJO가 경량이라는거임
프레임워크는 POJO들을 기반으로 작업이 되는 프레임워크다
: 우리는 이미 JSP 팀 프로젝트에서 경량으로 작업함
Servlet을 FrontController 한개만 생성하여 사용중 이였음 << FC는 Servlet일 수 밖에 없음 (1개고정)
API, 비동기처리 기능등을 구현할때에 Servlet을 추가로 사용함
MVC2 방식 자체가 Spring 방식이였음
Spring에서 추가로 사용한 API, 비동기처리를 하더라도 일반 POJO로 할거임
=================================================
IoC는 Inversion of Control
제어의 역행 (IoC)
제어권을 프레임워크가 갖게 됨
개발자가 new(객체화, 인스턴스화)를 제어하는것이 아니라
프레임워크에게 제어권을 넘겨주는 것
★★★★★★ 코드에 new가 작성되어있으면 유지보수가 불리해짐
우린 앞으로 new를 사용하지 않을 거임
new를 프레임워크에게 일임 해 줄 것임
new를 할때 마다 결합도가 높아지므로 유지보수가 불리
★★왜 new가 작성되어 있으면 결합도가 높아질까?★★ 이걸 아는것이 중요함
=> 1. 문제 - 결합도가 높은 코드
=> 2. 해결01 - 다형성 활용하기 implements의 경우 상속이라고 하기 보단 다형성이라고 함
=> 3. 해결03 - SW 개발 디자인 패턴을 활용
3가지 설명해보세요 ★
(MVC, Factory, 싱글톤)
Factory 패턴이란?
: 객체를 생성하는 코드를 캠슐화하여
(== new와 관련된 코드를 캡슐화(은닉,hiding)하여)
사용자로부터 필요한 객체의 이름을 받아
객체 자체를 반환하는 로직
=================================================
package test;
// 특별한 말이 없다면, Bean == 객체
public class BeanFactory {
public Object getBean(String beanName) { // 메서드 시그니처
if(beanName.equals("갤럭시")) {
return new GalaxyPhone();
}
else if(beanName.equals("아이폰")) {
return new IPhone();
}
return null;
}
}
팩토리 :
객체를 반환하는 클래스 : BeanFactory
Object로 반환 (어떤 클래스든 받을 수 있음)
장점 : 코드를 단 할글자도 변경하지 않아도 결과(화면)가 달라진다! 이런것을 프로그램이라고 한다
컴파일을 또 하지 않아도 되기 때문에 속도도 좋아진다
Run Configuration -> Main옆에 Arguments에 아이폰 쓰면 아웃풋이 아이폰 나옴
Phone phone=(Phone)bf.getBean(args[0]);
arguments에 쓰는게 메인에 꽃힘
====================================
web.xml은 톰캣과 관련된 설정
pom.xml여기서는 Spring 프레임워크한테 설정을 줌
JAR파일에 대한 관리 해달라고 줌
1. web.xml
톰캣관련설정파일
2. pom.xml
스프링관련설정파일
.jar 파일들에 대한 관리
====================================
<bean>으로 new를 개발자대신 해줌
<bean class = "test.IPhone" id ="apple"/>
== IPhone apple = new IPhone(); 라는 뜻
: 디폴트로 pre-loading 방식을 사용함(즉시로딩방식)
설정을하면 lazy-init 방식을 할수도있음(지연로딩방식)
: 디폴트로 객체를 1개만 메모리에 생성하고 해당 객체를 재사용함
== 싱글톤(singleton) 패턴
스프링관련된 xml 파일은 applicationConfiguration이라고 함
<?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 class="test.GalaxyPhone" id="galaxy">
<constructor-arg ref="mw" />
</bean>
<bean class="test.GalaxyWatch" id="gw" lazy-init="true" />
<bean class="test.MiWatch" id="mw" lazy-init="true" />
<bean class="test.IPhone" id="apple" destroy-method="destroyMethod" lazy-init="true" />
</beans>
xml에선 주석을 달지 않는것이 일반적
beans라는 엘리먼트 안에 new를 해 달라는걸 bean태그로 함
어떤 것을 뭐라 부를지 해줌