목표
- Spring IoC, DI가 무엇인지 이해한다
- Spring DI의 장단점을 이해한다
- Bean이란 무엇이고 container에서 어떻게 관리되고 생명주기는 어떻게 되는지 이해한다
IoC(Inversion of Control)란 무엇인가
- 문자 그대로 해석하면 ‘제어의 역전’이라는 뜻
- 개발자가 직접 객체를 관리하지 않고 스프링 컨테이너에서 직접 객체를 생성하여 해당 객체에 주입 시켜주는것.
- 개발자가 직접 의존성을 제어하던것을 어떤 매개체에게 의존성의 주체를 일임하여 제어의 역전이 발생. 여기서 매개체를 IoC container라고 한다.
- IoC contatiner : 제어권을 사용하여 의존성을 관리, 인스턴스를 생성하여 주입, 메모리를 해제하는 역할까지 함
DI(Dependency Injection)이란?
- 의존성 주입이란 ioc container라는 매개체를 두고 필요한 모듈을 등록해둠(Bean)
- 그리고 사용처에서 직접 생성하는것이 아니라 필요할때마다 컨테이너에서 의존성이있는 모듈들을 주입해줌
- 의존하는 모듈들의 생성과 해제, 일련의 제어과정을 ioc container기능을 포함하는 프레임워크에게 일임함으로써 제어의역전이 발생함
DI의 장점
- 의존성 감소
- 코드의 양 감소
- 테스트 용이
객체지향 프로그래밍이란?
- 프로그램을 상태(state)와 행위(behave)로 이루어진 객체라는 기본단위로 나누고, 이 객체들간의 상호작용을 통해 프로그램을 설계하고 개발하는것
- 절차지향: 어떤기능을 어떤 순서로 처리하는가에 초점을 맞춘 모델링
- 객체지향: 객체를 도출하고 각각의 역할을 정의해 나가는것에 초점을 맞춤
- 재사용이 용이하고, 생산성이 높으며, 유지보수가 용이한 장점
- 설계에 시간이 오래걸리고 실행속도가 느린 단점
객체 지향 프로그래밍의 특징
- 추상화(Abstraction)
- 객체들의 공통적인 특징(기능, 속성)을 도출하는 것
- 객체지향적 관점에서는 '클래스를 정의하는것'을 추상화라고 할 수 있다. - 캡슐화(Encapsulation)
- 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 숨길 수 있다.
- 객체가 독립적으로 역할을 할 수 있도록 속성과 기능을 하나로 하나로 묶어 관리하는 것.
- 외부와 상호작용시 상태를 메소드를 이용하여 통신을 한다. - 상속성(Inheritance)
- 하나의 클래스가 가진 특징(메소드, 데이터)를 다른 클래스가 그대로 물려받는것.
- 이미 작성된 클래스를 받아서 새로운 클래스를 생성하는것.
- 기존 코드를 재활용해서 사용함으로 객체지향 방법의 중요 기능중 하나 - 다형성(Polymorphism)
- 역할(interface)과 구현(implements)를 분리하여 오버라이딩(overrideing)을 통해 서비스의 구현 기능을 유연하게 변경, 확장이 가능
- 하나의 변수 또는 함수가 상황에 따라 다른 의미로 응답하는 것.
- 스프링같은 DI컨테이너를 이용하면 다형성을 극대화 하여 OCP, DIP 설계원칙을 잘 지키면서도 구현체를 편리하게 변경, 확장이 가능하다.
SOLID 객체지향 5원칙이란?
- Single Responsibility P : 하나의 모듈은 한가지 책임을 가져야한다.
- Open Close P : 확장에는 Open되어있고 수정에는 Close되어야 함. 요구사항이 변경될때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할수 있어야하며, 기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하거나 변경할수 있어야함.
- Liskov Substitution P :하위 클래스는 상위 클래스를 대체할수 있어야함. 상위타입의 퍼블릭 인터페이스를 통해 서브클래스를 사용할수 있어야한다는 원칙.
- Interface Segregation P : 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하는것. 인터페이스는 세분화하여 클라이언트의 목적에 맞는 인터페이스만 제공해야함
- Dependency Inversion P : 변하기 쉬운것에 의존하기 보다는 추상화된 인터페이스나 상위클래스에 의존하여 객체의 변화에 영향을 받지않게 함. 상위클래스, 인터페이스, 추상클래스는 변할 확률이 적기때문에 이런것에 의존해야한다는 원칙.
'코딩조각' 카테고리의 다른 글
Index 의 Cluster Index와 Non-Cluster Index를 구분하는 가장 쉬운 방법 (0) | 2022.12.10 |
---|---|
STOMP란? pub/sub 이란? (0) | 2022.11.27 |
[CS]OSI 7계층이란? (0) | 2022.11.21 |
[Java]Interface 와 Collection Framework (0) | 2022.11.16 |
[Spring] Transaction의 성질 (0) | 2022.09.20 |