Spring01 day 58

stan·2023년 8월 4일
0

Spring

목록 보기
1/22

================================================

스프링 설치

Help
Eclipse Marketplace
Find -> Spring
일반을 설치 후 Add On을 설치

================================================

[Spring 프레임워크 개요]

프레임워크 == 골격 (뼈대)
-> 예시) 리모콘, 인형
개발자들끼리 기준
유지보수 용이

장점)
1. 유지보수 용이
2. 개발시간단축, 비용절감
3. 개발자의 역량이 획일화 & 실력 상향 평준화
4. 재사용 용이

================================================

스프링 프레일워크
: IoC와 AOP를 지원하는 경량의 프레임워크 ★★★ 면접

  1. 개념 -> 실습 -> 개념정리

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>
  1. Spring 플러그인 설치
  2. 프로젝트 생성(MVC 템플릿)

폴더 우클릭 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)하여)
사용자로부터 필요한 객체의 이름을 받아
객체 자체를 반환하는 로직

=================================================

BeanFactory

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이라고 함

applicationContext

  <?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태그로 함
어떤 것을 뭐라 부를지 해줌

profile
이진 입니다

0개의 댓글