반응형
Spring 정의
- Java언어 기반 Framework
- 객체지향언어가 가진 강력한 특징을 살려내는 Framework
- 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크
- 순수한 객체 지향 프로그램이 가능하게 해주는 프레임 워크
관심사의 분리
- 정의 : 관심이 같은 것끼리는 하나의 객체 혹은 친한 객체로 모이게 하고, 관심이 다른 것끼리는 가능한 떨어뜨려 영향을 끼치지 않게 만드는 것.
중복 코드의 메소드 추출
- 정의 : 공통의 기능을 담당하는 메소드로 뽑아 내는 것
상속을 통한 확장
- 부모 클래스에서 공통괸 로직의 흐름 (변하지 않는 부분)을 만든다
- 자식마다 달라지는 부분을 추가 구현
상속의 문제점
- 다중 상속을 지원하지 않기 때문에 확장의 한계
- 자식클래스는 부모 클래스에 강하게 종속 -> 부모 클래스가 변경 -> 자식 클래스도 모두 영향을 받는다.
- DB connection 클래스에서는 DAO 외에 다른 클래스 적용 불가능 -> 다중 상속으로 인해서 발생
인터페이스를 통한 확장(전략 패턴)
- 다중상속 가능
- 구체적인 클래스의 정보를 알 필요 없음
- 메소드 이름 변경될 걱정 하지 않아도 됨
- 전략 패턴 : 동적으로 알고리즘을 변경할 때 사용하는 디자인 패턴
Spring IoC
- 용어
Bean
: Spring이 라이플 사이클을 제어하는 객체BeanFactory
: Bean에 대한 제어를 담당하는 IoC 객체Application Context
: BeanFacotry 를 상속받은 Container로서, BeanFactory에 추가 부가 기능을 담당하고 있음
- IoC 정의 : Application Context가 객체의 라이플 사이클을 관리하는 기능
- Bean 등록 방법
// springbook/user/dao/DaoFactory
@Configuration
public class DaoFactory {
@Bean
public UserDao userDao() {
return new UserDao(connectionMaker());
}
@Bean
public ConnectionMaker connectionMaker(){
return new NConnectionMaker();
}
}
// main 문장...
ApplicationContext daoContext = new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = daoContext.getBean("userDao", UserDao.class); // 2nd param : for casting
// ...
- 동작 방식: Client가 getBean()으로 요청 하면 ApplicationContext 객체 내에 빈 목록을 조회 -> 해당 이름과 동일한 bean객체를 반환
- 장점
- 일관서 있는 방식으로 객체를 가져올 수 있음
- 객체를 직접 관리(생성, 삭제)를 하지 않아도 되기 때문에 유지 보수에 용의
의존관계 주입(DI)
- 정의 : 의존 오브젝트와 그것에 맞는 객체를 container로 부터 가져와서 넣어 주는 행위를 말한다.
- 구성
- 의존 객체 : 런타임 시점에서 의존 관계를 맺는 대상
- ex) A객체는 B객체의 Method를 사용함 -> A객체는 B객체를 의존하고 있음 -> B: 의존객체
- DI Container: 두 객체 사이에 런타임 의존관계를 설정해주는 의존 관계주입을 주도해 주는 존재
- 조건
- 런타임 시점에서 의존관계가 나타 나야한다.(interace를 통해서 의존 관계를 드러낼려고 해야함)
- 의존 관계를 container나 factory와 같은 제 3자로 부터 알게 되어야 한다.
- 의존 관계는 사용할 Object에 대한 참조 정보는 외부(Container)로 부터 받아와야 한다.
- 구현 방법
- 생성자 사용 : 생성자 파라미터를 만들어두고 이를 통해 요구되는 Object의 reference를 내부로 넘겨줌
- 메소드 사용
- setter 주입
- method 주입
DL(Depency Lookup)
- 정의 : 의존을 받으려는 객체가 능동적으로 의존 객체를 container로 부터 찾아서 받아 오는 것
- 단점 : 의존성 주입은 내가 어떤 객체를 가져오는지 신경 쓰지 않고 등록에만 신경 써주면 된다. -> 나중에 유지 보수할때 등록할 객체를 변경하면 된다. 하지만 lookup을 사용하면 가져오는 객체또한 신경 써야한다.
xml 방식과 bean등록은 여기서 다루지 않을 예정입니다.
반응형
'Spring > 개념' 카테고리의 다른 글
Spring Test Mock 사용법 및 특징 (1) | 2021.10.30 |
---|---|
Spring Boot로 MySQL replication 연동하기 (0) | 2021.10.06 |
04 Exception (0) | 2021.05.19 |
03 템플릿 (0) | 2021.05.08 |
02장 Test (0) | 2021.04.20 |