본문 바로가기

SpringBoot

스프링 : 객체지향 프로그래밍 설계원칙 [SOLID]

객체지향프로그래밍 - 객체를 통해 데이터를 처리, 메시지를 주고받는 방식의 개발방법론. 이를통해 프로그램의 수정을 유연하도록 유도.

 

* 좋은 객체지향프로그래밍이란?

- 다형성 : 다른 객체로 변환이 가능하도록 유도. 확장성, 클라이언트에 영향없이 새로운 기능 구현 가능

=> 인터페이스와 인터페이스를 구현한 클래스로 분리. 클래스가 변경되어도 인터페이스를 통해 동일한 작업을 수행할 수 있다.

오버라이딩을 통한 다형성 구현

다형성의 본질 : 인터페이스를 구현한 객체 인스턴스를 실행시점에 유연하게 변경할 수 있다.

-> 클라이언트 변경 없이 서버의 구현기능을 변경할 수 있음.

 

* 인터페이스를 안정적으로 잘 설계하여야한다. 즉, 인터페이스가 자주 바뀌지 않도록 안정적으로 기획하여야함.

* 스프링과 객체지향

- 스프링에서의 IoC, DI는 다형성을 활용하여 역할과 구현을 편리하게 다룰 수 있도록 지원한다.

- 스프링은 다형성을 극대화.

 

SOLID 객체지향 설계의 5가지 원칙

 

1. SRP : 단일 책임 원칙

- 하나의 클래스는 하나의 책임. 객체의 생성, 사용을 분리.

2. OCP : 개방, 폐쇄 원칙

- 확장에는 열려있으나 변경에는 닫혀있어야 함.

- 다형성을 통해 구현. [인터페이스 활용]

- OCP만족을 위해 스프링 DI컨테이너 사용

3. LSP : 리스코프치환원칙 

- 프로그램의 객체는 프로그램의 정확성을 유지하면서 하위타입의 인스턴스로 변경.

4. ISP : 인터페이스 분리 원칙

- 특정 클라이언트가 많은 역할을 수행할 경우 클라이언트를 위해 인터페이스를 여러개로 나누는게 낫다.

5. DIP : 의존관계 역전 원칙

- 추상화에 의존, 구체화에 의존하지 않는다.

 

스프링

- DI ; 의존관계, 의존성 주입

- DI컨테이너 : 자바객체간 의존관계 형성지원. 클라이언트의 코드 변경 없이 기능을 확장.

 

* 모든 설계에 있어서 역할(인터페이스)와 구현(클래스)을 분리하여야 한다.

- 이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋다!(확장성)