SOLID 객체 지향 원칙

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

  • SRP 단일 책임 원칙
  • OCP 개방-폐쇄 원칙
  • LSP 리스코프 치환 원칙
  • ISP 인터페이스 분리 원칙
  • DIP 의존 관계 역전 원칙

SRP 단일 책임 원칙

  • 한 클래스는 하나의 책임만 가진다.
  • 중요한 기준은 변경이다. 변경이 있을때 여러 코드를 헤집는다면 이 원칙을 지키지 않은것. 파급효과가 적으면 원칙을 잘 따른것.

책임의 범위를 잘 조절하는게 개발자의 역량 이 원칙을 제대로 지키면 변경이 필요할 때 수정할 대상이 명확해진다. 시스템이 커질수록 장점이 극대화됨.

OCP 개방-폐쇄 원칙(✨)

  • 프로그램은 확장에 열려있으나 변경에는 닫혀있어야한다?
  • 다형성을 활용해서 지킬 수 있다.
  • 인터페이스를 기반으로 새로운 기능을 구현

구현 객체를 변경할때 클라이언트 코드를 고치지 않아야함. -> 객체를 생성하고 연관관계를 맺어주는 설정자가 필요.

확장: 요구사항 변경에 따른 기능을 확장하거나 추가할 수 있다. 수정: 기존의 코드를 건드리지 않고 확장을 할 수 있다.

LSP 리스코프 치환 원칙

  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다.
  • 컴파일의 단계를 단순히 말하는 것이 아닌, 인터페이스 규약을 지켜야한다는 의미. 구현체는 기능적으로 보장해야한다. 느리더라도 앞으로 갈 것

ISP 인터페이스 분리 원칙

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • 자동차 인터페이스를 여러개로 쪼갬 -> 운전, 정비 인터페이스로 분리
  • 정비 인터페이스를 변경해도 운전 클라이언트에 영향을 주지 않음.
  • 인터페이스가 명확해지고, 대체 가능성이 높아진다.

클라이언트의 목적과 용도에 맞는 인터페이스를 제공하는것. 기능을 구현할때 각 기능에 맞는 인터페이스를 만들어 제공함으로서 지킬 수 있겠다.

DIP 의존관계 역전 원칙

  • 프로그래머는 추상화에 의존해야한다. 구체화 X (의존성 주입은 이 원칙을 따르는 방법)
  • 구현 클래스보다 추상 인터페이스에 집중해야 한다는 뜻
  • 역할에 의존해야 한다. 그래야 유지보수가 용의

비즈니스와 관련된 로직이 하위 세부 사항에 의존하지 않는 걸 의미.

결론

결과적으로 위 원칙에서 얘기하는 바는 추상화와 다형성을 추구하자는 말이다. 구체에 종속되지 말고 추상에 의존하여 객체지향적인 코딩을 하여야겠다.