본문 바로가기
정리

객체지향 설계 원칙 SOLID

by HTT 2023. 4. 12.

SOLID(객체지향언어를 이용해서 좋은 클래스를 설계하기 위한 5가지 원칙)     

 

SRP(Single Responsibility Principle - 단일책임의 원칙)

 

- 한 클래스는 하나의 책임(기능)만 적용할 수 있도록 설계한다. 변경을 할 때 수정할 내용이 거의 없으면 단일책임원칙을 잘 적용한 것이다(캡슐화).

- 계층을 나누는 이유가 이러한 이유 때문이다.

- MVC패턴의 예

- ex) 무언가를 등록하는 클래스라면 이 클래스는 등록관련 문제를 수정할 때만 수정돼야 한다.

 

OCP(Open Close Principle - 개방 폐쇄의 원칙)


- 소프트웨어는 확장(기능추가)에는 열려있어야하고 변경(기존에 실행이 잘 되는 코드에는)에는 닫혀있어야 한다.
- 기존의 코드를 변경하지 않고 기능을 추가할 수 있어야 한다.

- 정책이나 요구사항이 변경되어도 코드가 수정되면 안 된다.
- 다형성을 이용해서 인터페이스와 구현을 분리한다.

 

LSP(Liskov substitution principle, 리스코프 치환 원칙)


- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

 

ISP(Interface Segregation Principle, 인터페이스 분리 원칙)


- 구현체 스스로가 사용하지 않는 기능에 영향받지 않아야 한다(하나의 기능에 집중해야 한다).
- 인터페이스 분리 원칙은 인터페이스는 자신의 쓰임새와 사용에 맞게끔 분리해야 한다는 원칙이다.

 

DIP(Dependency Inversion Principle - 의존관계 역전의 원칙)


- 개발을 할 때는 추상에 의존해야 한다. 즉 상위 인터페이스를 이용해서 개발하도록 작성해야 한다.
- 구현된 클래스(하위클래스)에 의존하면 안 된다(추상화에 의존해야 하지 하위클래스를 직접 쓰지 말아야 한다).

=> 변화가 없는 클래스에 의존해야 한다.

- 의존성 주입(DI) 활용하기
ex) CustomerDAO dao = new MybatisCustomerDAO();    → XX     
      CustomerDAO dao;   → O

'정리' 카테고리의 다른 글

제네릭(Generic)?  (0) 2023.04.18
컬렉션 프레임워크(collection framework)  (0) 2023.04.16
Oracle  (0) 2023.04.11
이너조인과 아우터조인  (0) 2023.04.10
AOP (Aspect Oriented Programming, 관점 지향 프로그래밍)  (0) 2023.04.07

댓글