본문 바로가기
객체지향

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

by Heesu.lee 2020. 11. 4.

SOLID 원칙

클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리
  • SRP (Single Responsibility Principle)
  • OCP (Open / Closed Principle)
  • LSP (Liskov Substitution Principle)
  • ISP (Interface Segregation Principle)
  • DIP (Dependency Inversion Principle)

SRP 단일 책임 원칙

하나의 클래스는 하나의 책임만 가져야 한다.

하나의 책임의 기준은 
때론 그 역할이 클 수도, 작을 수도 있기 때문에
사실 모호할 수 있다.

책임의 범위를 구분 지을 땐 변경 범위를 생각하자

변경이 있을 때 해당 변경으로 인한 파급 효과가 적다면 단일 책임 원칙을 잘 따른 것이라 할 수 있다.

OCP 개방 - 폐쇄 원칙

소프트웨어 요소는 확장에는 열려(Open) 있고, 변경(수정)에는 닫혀(Close) 있어야 한다.

기존 코드를 변경하지 않으면서, 기능을 확장할 수 있도록 설계가 되어 있어야하는 것을 의미한다.

개방 - 폐쇄 원칙의 핵심은 인터페이스를 활용한 다형성에 있다.

그렇지만, 사실 실제로 기능 추가 시 클라이언트 코드 수정이 빈번히 일어나는 경우가 많다.

객체를 생성하고, 연관 관계를 맺어주는 별도의 조립, 설정자가 필요하다

LSP 리스코프 치환 원칙

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

즉, 다형성에서 하위 클래스는 자신이 구현해야하는 인터페이스의 규약, 명세를 반드시 지켜야 한다는 의미를 가진다.

ISP 인터페이스 분리 원칙

하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스를 만드는 것이 낫다.

즉, 특정 클라이언트를 위한 인터페이스를 여러개 만드는 것이 범용적인(역할이 큰) 인터페이스 하나보다 나은 경우를 의미한다.
예) 자동차 인터페이스인 경우 운전 인터페이스, 정비 인터페이스로 분리하여 작성

DIP 의존관계 역전 원칙

의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 의미를 가진다.

즉, 해당 역할(인터페이스)을 구현한 크래스에 의존하지 말고, 그 역할(인터페이스) 자체에 의존해야한다는 것을 말한다.

객체가 구현체를 봐라보게 된다면 이는 유지 보수에 있어 큰 어려움을 가질 수 있다.

그보다 그 역할 자체에 객체가 집중한다면 보다 유연하게 구현체를 변경할 수 있기에 유지 보수에 강점을 가질 수 있다.

 


객체 지향과 스프링

스프링은 DI (Dependency Injection), 컨테이너를 이용한 객체 지향의 다형성 + OCP, DIP 를 가능하게 지원한다.

스프링의 위 기술을 통해 클라이언트 코드의 변경 없이 기능을 확장시킬 수 있으며, 
이는 곧 부품을 쉽게 교체하듯이 개발이 가능할 수 있게끔 한다.

 


참조

  • 이 글은 김영한님의 강좌 스프링 핵심 원리 - 기본편을 바탕으로 작성되었습니다.

'객체지향' 카테고리의 다른 글

오브젝트 - 역할, 책임, 협력  (0) 2021.04.24
오브젝트 - 객체지향 프로그래밍  (0) 2021.04.22
오브젝트 - 객체, 설계  (0) 2021.04.14

댓글