스프링 기초개념

1 분 소요

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 injectionconstruction injection이 있다.

IoC컨테이너

  • IoC : 제어의 역행
  • xml파일과 annotation을 이용.
  • 마치 주문서에 따라 부품을 생성하고 부품을 조립하여 Container에 담는 것-이라고 이해할 수 있다.
  • 컨테이너가 개발자를 대신하여 객체의 생성과 객체들 사이의 의존관계를 처리해준다.

image

  • DI를 이용하여 객체를 직접 생성하지 않고(직접 생성시에 유지보수시 내부코드를 수정해야하는 일이 발생한다), 외부에서 객체(이해하기 쉽게 말하자면 ‘부품‘)를 생성한 후 해당 객체를 주입하는 방식 → 프로그램 결합도를 낮춰 유지보수를 편리하게 할 수 있다. 을 알아보았다.

image

  • 스프링 프레임워크의 특징 중 하나인 IoC컨테이너개발자를 대신하여 "주문서"(쉽게 이해하기 위해 사용하는 용어)(Tv: lg제품 이런식으로 설정해주는 파일)에 따라 객체를 생성하고 조립하여 컨테이너에 담아준다**.

  • 이 주문서는 어떤 객체(부품으로 이해하면 쉽다)를 사용할 건지 등의 내용이 들어간다.
    • Bean : 스프링 컨테이너에 의해 생성되는 자바의 객체.

스프링을 이용하여 주문서를 만들 때 xml파일, annotaion 등의 방식으로 만들 수 있다.


참고자료

  • 스프링 퀵 스타트 - 채규태
  • 유튜브 - 뉴렉쳐 spring 강좌
  • 이미지 출처

책과 유튜브 강좌를 보고 개인적으로 이해할 수 있도록 나만의 언어로 정리합니다.

카테고리:

업데이트:

댓글남기기