Spring
Spring IoC (Inversion of Control) 콘트롤 전도(반전) 역전
EJB (Enterprise javaBean) Container 에 의존하는 객체 (복잡하고 개발자가 쓰기 어렵다는것?)
POJO ( Plain Old java Object) 자바개발자가 마음대로 정의 할수 있는 객체, Object 를 간단히 수퍼클래스로 둔 보통의
평법의 순수 자바 클래스라고 볼수 있다고 한다.
POJO 의 필수 요소
- Light-weight (possibly) : 가볍게
- Flexible : 유연성
- Simple : 간단 명료
- Supported by Separate optional compnents such as hibernate or Spring
- 즉 , Spring , Hibernate, Ibatis 등에서 객체를 가볍게, 간단히 유연하게 어떤 Object 에 대해 추상화 할수 있는 객체를 만들어야 한다.
AOP (Aspect Oriented Programming ) 관점지향 프로그래밍
Aspect : 양상,관점,모습,면,방향,방면,용모,외양,방위,상,별의 상
ex) a mountain with a beatiful aspect : 모습이 아름다운 산
consider a question in all its aspects (from every aspedt) 문제를 모든 각도에서 고찰하다.
Avalon : 은 영국(United Kingdom Of Great britain and Northern Ireland)의 어디엔가에 있었다고 여겨지는 전설상의 섬이다.
고대 영어로 사과를 뜻하는 Abal 에서 유래한 말로 추정
실제로 켈트족(인도유럽어족의 한 일파인 켈트어파를 쓰는 유럽의 민족) 출신의 시인 탈리에신은
아바론을 사과의 섬 ( isle if the apples ) 로 불렀다.
: 아서왕(King Arthur ) 의 전설에 아발론은 아서왕의 시신이 잠들어있는 장소이다.
캄란 전투에서 사생아 모드레드에 의해 치명상을 입은 아서 왕은 자신의 평안과 위안을 위해 아버지 다른 누이이자,
유리엔왕의 왕비 모르간, 북 갤리스의 왕비, 그리고 호수의 왕비(비비안 , 또는 니뮤에) 등 세명의왕비들에 의해 배로
옴겨져 이섬에서 최후를 맞이했다고 한다.
Morgana le Fay ( 모르가나 르 페이) 요정 모르가나 ,모르간 , 모건이라 불리며 아서왕의 아버지가 다른 누이이다.
Lady of the Lake (vivian) 비비안은 프랑스의 귀부인으로 랜슬롯 을 거두어 기른것이 바로 그녀이다.
IoC Container and AOP - Inversion of Control 과 관점지향 프로그래밍
Spring 은 다른 프로젝트에서 개발된 Conponent 를 조립해서 응집력 있는 Application 의 개발이 가능하도록 도와주는
IoC Container 이며 , 다른말로 경람급 컨테이너 (Lightweight Container ) 라고도 한다.
IoC Container 는 다른종류는 PicoContainer and Apache of Avalon 그리고 HiveMind 등
IoC Container 가 Container 에 대한 의존성을 최소화 하면서 Component 를 엮어주는 일을 수행하는 밑바탕에는 제어 역행화
(Inversion of control) 라는 개념이 깔려있다. 제어 역행화는 리팩토링의 저자인 마틴 파울러의 홈페이지에 잘 정의 되어있다.
제어역행화(Inversion of control) 라는 용어는 직관적이지 못하기 때문에, 다른말로 연관성 삽입(Dependency Iniection) 이라고
불려진다. 연관성삽입 패턴은 컴포넌트의 설정을 그것의 사용에서 분리해야 한다는 원칙(The princple of separating configuration from use)
에서 출발한다. 그러한 우너칙을 위한 또 다른 사례는 J2EE 패턴 중 서비스 로케이터(Service locator) 패턴이다.
의존성 삽입 패던을 이해하기 위해 간단한 예를 하나 살펴보자. 어느 특정 감독이 만든 영화를 검색해서 그 결과를 전달해주는
컴포넌트를 사용하는 것이다. 코드에서 보여지는 FindAll() 이라는 Method(방법) 을 가지는 Finder 객체가 필요ㅕ하단 사실을
알 수 있다.
일반적으로 이럴 떄 기능 확장을 위해 MoviewFinder 와 같은 Interface 를 작성하게 된다.
Public Interface MoviewFinder
{
List FindAll();
}
영화 정보가 콜론으로 구분된 CSV 파일에 기록되어 있다면 , VoviewFinder Interface 를 구현한 ColonDelimitedMovieFiner Class
가 필요할 것이다. 또한 그 정보는 VoviewLister 에 생성자를 이용해서 초기화 될 것이다.
Class MovieLister
Preivate MoviewFinder Finder;
Public MoviewLister()
{
Finder = new ColonDelimitedMovieFinder ("Movies1.txt");
}
전체적인 시스템 구조는 MovieLister Classs 는 MovieFinder Interface 정보만을 이용해서 기능을 구현할 수 있지만 , 해당기능을
사용하기 위해 MovieFuinderImpl Class 중에서 ClonDelimitedMovieFinder 를 이용한다는 구체적인 설정 정보가 Class 의 Code 에
포함되어 있다. 이것은 Data 가 DB 나 XML 로 변경되어 RDBMovieFinder 나 XMLVovieFinder 로 교체 될 경우 코드를 수정해서
다시 빌드해야 한다는 사실을 의미한다.
댓글
댓글 쓰기
질문이나 의견은 요기에 남겨주세요 ^^,,