Enterprise급 개발?
→ 직역 시 기업을 대상으로 하는 개발
→ 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는,
매우 큰 규모의 환경을 엔터프라이즈 환경이라 지칭
기존 사용자가 모든 작업을 제어하던 것을 특별한 객체에 모든 것을 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대핸 제어권이 넘어간 것을
Inversion of Control, 제어의 역전이라 지칭
의존성(Dependency)
→ 객체지향 프로그램(OOP)에서 하나의 객체가 다른 객체를 사용하고 있음을 의미
개방 폐쇄 원칙(Open-Closed Principle)
→ S/W Entity(Class, Module, Function ..etc)는 확장에 대해서는 열려 있어야
하지만 변경에 대해서는 닫혀있어야 한다는 원칙
→ 해당 Class의 기존 동작을 변경하지 않고 Class의 동작을 확장하는 것이 목표
→ 유지 보수 및 수정이 쉬운 코드를 작성하는데 필수적
유연한 확장이 가능 → OCP의 ‘확장에는 열려있다’
변경없이 재사용 가능 → OCP의 ‘변경에는 닫혀있다’
DI의 활용
DI의 3가지 유형
public class MemberService {
private MemberDAO memberDAO;
public MemberService(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
}
public class MemberService {
private MemberDAO memberDAO;
public void setMemberDAO(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
// 스프링 내에서는 이를 @Autowired 로 해결 할 수 있다
// @Autowired : legacy 프로젝트의 MVC 모델에서 사용하여
// root-context.xml 에 빈을 설정할 때 사용
// xml 에 <context:annotation-config />를 입력하여
// annotation 정보를 가져와야함
@Autowired
MemberDAO memberDAO
// 위의 코드를 매우 단순하게 줄인 모습
}
초기화 인터페이스(Initialize Interface)를 이용한 DI
- 의존성을 주입하는 함수를 포함한 interface를 작성
- 이 interface를 구현하도록 함으로써 이를 통해 DI
- Spring에서 지원하지 않는 방식
쓰면서도 아직 정보가 부족하다는 생각이 많이 든다 시간이 날 때 제대로 다시 정리해서 POJO 부터 샅샅이 찾아보고 조금 더 공부를 해야겠단 생각이 들었다..교재에 반영된 예시들로 인해 이해는 잘 되는 것 같지만, 아직 spring의 특징에 대해서 설명하지 않은 부분들이 너무나 많다..(예를 들면 Portable Service Application 이나 Aspect Oriented Programming 등) 다음에는 우선 제일 핵심이 되고 중요한 DI를 구체적으로 어떻게 활용하는지 알아봐야겠다
출처
스프링 입문을 위한 자바
https://khj93.tistory.com/entry/Spring-Spring-Framework%EB%9E%80-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC