스프링 기초개념
Spring이란?
스프링 프레임워크의 특징
- 경량(Lightweight) →
POJO형태의 객체를 관리. - IoC(Inversion of Control) → 객체 생성과 관리를 컨테이너가 담당.
- AOP(Aspect Oriented Programming) → 높은 응집도
- 컨테이너(Container) → 낮은 결합도
결합도(Coupling)가 낮은 프로그램을 구현하기 위한 방법
- 다형성 →
인터페이스로 구현 -
Factory디자인패턴 이용 - 결합도(Coupling)란? 하나의 클래스가 다른 클래스와 얼마나 연결되어있는지 정도를 나타내는 표현.
DI(Dependency Injection)
class A{
private B b;
public void A(){
b = new B();
}
}
- 붙박이형.
A객체를 생성하면 그 안에서B객체가 생성된다. 마치 완제품과 같다. → 부품을 바꿔 끼기가 어렵다. 새로 완제품을 사거나 내부를 까서 뜯어고쳐야 된다.
class A{
private B b;
public void setB(B b){
this.b = b;
}
}
- 조립형.
-
A객체가 생성될 때 직접B객체를 생성하지 않고, 외부에서setter()메소드를 이용하여B객체를 조립(생성)한다. 즉A객체에B라는 부품을 끼워넣는 것과 같다. - 우측의 조립형과 같은 방식으로 코드를 짤 경우 결합도가 낮아진다.
A a = new A();
B b = new B(); //부품객체 -> dependency
a.setB(b); //부품을 꽂아넣는다 ->injection
- 왜 이러한
injection dependency를 사용하는가? → 내부코드를 수정하지 않고, 외부 코드를 통하여 내부 코드를 수정할 수 있다는 장점이 있다. 즉 결합력이 낮아져 코드의 유지보수가 수월해진다. - 장점 : 부품을 쉽게 바꿀 수 있다. → 만약 B부품 대신 C부품을 사용하려면
setter()를 이용하여 C부품을 꽂아넣으면 된다. 위 코드는 간단한 예제이므로setB()인데 어떻게 C부품을 꽂아넣어? 라고 생각할 수 있지만, 인터페이스와Factory패턴을 이용하여 보완하면, 이런 방식으로 B부품을 C부품으로 대체할 수 있게 된다. - 단점 : 부품을 조립해야만한다. →
setter()를 누군가 해줘야 한다.- 이런 setter()와 같은 작업들을
spring을 사용하면IoC컨테이너가 담당해준다. setter injection과construction injection이 있다.
- 이런 setter()와 같은 작업들을
IoC컨테이너
- IoC : 제어의 역행
xml파일과annotation을 이용.- 마치 주문서에 따라 부품을 생성하고 부품을 조립하여
Container에 담는 것-이라고 이해할 수 있다. - 즉 컨테이너가 개발자를 대신하여 객체의 생성과 객체들 사이의 의존관계를 처리해준다.
DI를 이용하여 객체를 직접 생성하지 않고(직접 생성시에 유지보수시 내부코드를 수정해야하는 일이 발생한다), 외부에서 객체(이해하기 쉽게 말하자면 ‘부품‘)를 생성한 후 해당 객체를 주입하는 방식 → 프로그램 결합도를 낮춰 유지보수를 편리하게 할 수 있다. 을 알아보았다.
- 스프링 프레임워크의 특징 중 하나인
IoC컨테이너는 개발자를 대신하여"주문서"(쉽게 이해하기 위해 사용하는 용어)(Tv: lg제품 이런식으로 설정해주는 파일)에 따라 객체를 생성하고 조립하여 컨테이너에 담아준다**.
- 이 주문서는 어떤 객체(
부품으로 이해하면 쉽다)를 사용할 건지 등의 내용이 들어간다.Bean: 스프링 컨테이너에 의해 생성되는 자바의 객체.
스프링을 이용하여 주문서를 만들 때 xml파일, annotaion 등의 방식으로 만들 수 있다.
참고자료
- 스프링 퀵 스타트 - 채규태
- 유튜브 - 뉴렉쳐 spring 강좌
- 이미지 출처
책과 유튜브 강좌를 보고 개인적으로 이해할 수 있도록 나만의 언어로 정리합니다.


댓글남기기