객체지향프로그래밍 - 객체를 통해 데이터를 처리, 메시지를 주고받는 방식의 개발방법론. 이를통해 프로그램의 수정을 유연하도록 유도.
* 좋은 객체지향프로그래밍이란?
- 다형성 : 다른 객체로 변환이 가능하도록 유도. 확장성, 클라이언트에 영향없이 새로운 기능 구현 가능
=> 인터페이스와 인터페이스를 구현한 클래스로 분리. 클래스가 변경되어도 인터페이스를 통해 동일한 작업을 수행할 수 있다.
다형성의 본질 : 인터페이스를 구현한 객체 인스턴스를 실행시점에 유연하게 변경할 수 있다.
-> 클라이언트 변경 없이 서버의 구현기능을 변경할 수 있음.
* 인터페이스를 안정적으로 잘 설계하여야한다. 즉, 인터페이스가 자주 바뀌지 않도록 안정적으로 기획하여야함.
* 스프링과 객체지향
- 스프링에서의 IoC, DI는 다형성을 활용하여 역할과 구현을 편리하게 다룰 수 있도록 지원한다.
- 스프링은 다형성을 극대화.
SOLID 객체지향 설계의 5가지 원칙
1. SRP : 단일 책임 원칙
- 하나의 클래스는 하나의 책임. 객체의 생성, 사용을 분리.
2. OCP : 개방, 폐쇄 원칙
- 확장에는 열려있으나 변경에는 닫혀있어야 함.
- 다형성을 통해 구현. [인터페이스 활용]
- OCP만족을 위해 스프링 DI컨테이너 사용
3. LSP : 리스코프치환원칙
- 프로그램의 객체는 프로그램의 정확성을 유지하면서 하위타입의 인스턴스로 변경.
4. ISP : 인터페이스 분리 원칙
- 특정 클라이언트가 많은 역할을 수행할 경우 클라이언트를 위해 인터페이스를 여러개로 나누는게 낫다.
5. DIP : 의존관계 역전 원칙
- 추상화에 의존, 구체화에 의존하지 않는다.
스프링
- DI ; 의존관계, 의존성 주입
- DI컨테이너 : 자바객체간 의존관계 형성지원. 클라이언트의 코드 변경 없이 기능을 확장.
* 모든 설계에 있어서 역할(인터페이스)와 구현(클래스)을 분리하여야 한다.
- 이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋다!(확장성)
'SpringBoot' 카테고리의 다른 글
SpringBoot]스프링 컨테이너와 스프링 빈 (0) | 2021.02.17 |
---|---|
IoC, DI, 컨테이너 (0) | 2021.02.17 |
스프링프레임워크 ] 빈+컨테이너, IoC패턴 (0) | 2021.02.04 |
서블릿 생명주기 (0) | 2021.02.04 |
웹 애플리케이션 컨테이너 (0) | 2021.02.04 |