Spring IoC의 원리 (다형성, 팩토리 패턴)

dev_joo·2025년 8월 20일

Spring 노트 필기

목록 보기
2/10

IoC 제어의 역전

객체를 생성하고 객체들 사이의 의존관계를 처리하는 작업들을 개발자의 소스코드로 처리하지 않고 컨테이너가 처리하게 해 소스에 객체 생성과 의존관계에 대한 코드를 작성하지 않게 되어 결과적으로 낮은 결합도(타 클래스와 연결된 정도)의 컴포넌트를 구현할 수 있게 하는 것

Polymorphism(다형성)

동작은 같지만 메소드 Signature가 다른 여러개의 클래스가 같은 메소드를 가지게끔 강제하여 결합도가 낮은 코드를 작성하기 위한 객체지향 언어의 핵심 개념

구현 방식

1) 모든 클래스가 공통으로 가져야 할 메소드 Signature를 인터페이스에 추상 메소드로 작성
2) 각자의 클래스가 해당 인터페이스를 상속받아 추상메소드를 재정의하여 구현하도록 강제

결과적으로 여러개의 클래스의 메소드가 같은 Signature를 가지게 되어 객체를 교체할 때 로직의 변화없이 객체 생성 부분만 수정하면 된다.

하지만 다형성 방식만으로는 수정할 로직의 변화만 없고, 아직 객체 생성 부분은 수정해줘야한다.


Factory 패턴

결합도를 낮추기 위한 또 다른 방법으로, 클래스 객체를 교체할 때, 소스를 수정하지 않도록 클라이언트에서 사용할 객체 생성을 캡슐화하여 소스코드에서 객체활용 부분과 클래스 사이를 느슨한 결합상태로 만들어 준다.

구현 방식

1) 여러 클래스 객체를 생성하는 역할의 Factory 클래스를 만든다. 예를 들어 아래 getBean()메소드는 매개변수로 받은 beanName에 해당하는 객체를 생성하여 리턴하는 메소드이다.
2) Factory 클래스의 객체를 생성하고 다른 클래스를 생성할 때 인자를 통해 클래스 생성 메소드를 호출한다.

// TV tv = new SamsungTV();
BeanFactory factory = new BeanFactory();
TV tv = (TV) factory.getBean(arg);

예시 코드만 봤을 때 Factory 생성자를 추가로 작성해주고 매개변수를 지정해줘야한다는 점이 더 복잡해졌다고 오해했지만, 여기서 핵심은 매개변수로 넘겨주는 객체 이름이 변수로 되어있어 소스코드 외부에서 생성할 객체를 전달받을 수 있다는 것이다.

즉, 객체를 교체할 때 소스코드를 일절 수정하지 않고 외부의 설정파일만 수정하여 객체를 교체할 수 있다.
대부분의 IoC 컨테이너는 각 컨테이너에서 관리할 객체들을 위한 설정 파일이 존재한다.

컨테이너 종류설정파일
Servlet 컨테이너web.xml
EJB 컨테이너ejb-jar.xml
Spring 프레임워크applicationContext.xml
profile
풀스택 연습생. 끈기있는 삽질로 무대에서 화려하게 데뷔할 예정 ❤️🔥

0개의 댓글