SOLID 원칙

이하연·2021년 8월 18일
0

[oop] 객체지향

목록 보기
3/7

프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 소프트웨어를 만드는데 도움이 되고자 적용할 원칙들이 필요합니다.

객체 지향 설계 5대 원칙 SRP,OCP,ISP,LSP,DIP의 앞자를 따서 부르는 SOILD 원칙에 대해서 말씀드리겠습니다.

SRP ( Single Responsiblity Principle )

  • 단일 책임 원칙

  • 클래스나 함수 등 소프트웨어 설계부품은 단 하나의 책임(기능)만 가져야 합니다.

  • 설계를 잘한 프로그램은 기본적으로 새로운 요구사항, 프로그램 변경에 영향을 받는 부분이 적습니다. 이는 응집도가 높고 결합도가 낮은 프로그램을 뜻합니다.

  • 따라서, 한 클래스가 책임이 많아지는건 클래스 내부의 함수끼리 강한 결합을 발생한다는 것이고 이는 유지보수 비용이 증가하게 됨으로 이러한 책임을 분리시킬 필요가 있습니다.

  • 예를 들어

    사칙연산 함수를 가지고 있는 계산 클래스가 존재한다고 하면, 이 상태의 계산 클래스는 오직 사칙연산 기능만을 책임집니다. 이 클래스를 수정한다면 사칙연산 함수와 관련된 문제입니다.

OCP ( Open Closed Principle )

  • 개방-폐쇄 원칙

  • 확장에는 열려있고 수정에는 닫혀있는 방식으로

    이는 기존의 코드를 변경하지 않으면서 기능을 수정하거나 추가할 수 있도록 하는 원칙입니다.

  • OCP를 만족한 설계는 변경에 유연하므로 유지보수 비용을 줄여주고 코드의 가독성 또한 높아지는 효과를 얻을 수 있다.

  • 예를 들어

    캐릭터를 하나 생성한다고 할때, 각각의 캐릭터가 움직임이 다를 경우 움직임의 패턴 구현을 하위 클래스에 맡긴다면 캐릭터 클래스의 수정은 필요가 없고, 움직임의 패턴만 재정의 하면 됩니다.

ISP ( Interface Segregation Principle )

  • 인터페이스 분리 원칙
  • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 합니다.
  • 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫습니다.
  • 이는 자신이 사용하지 않는 기능(인터페이스)에는 영향을 받지 말아야한다는 것을 의미합니다.

LSP ( Liskov Substitution Principle )

  • 리스코프 치환 원칙 ( 일반화 관계 )
  • 자식 클래스는 언제나 자신의 부모 클래스에서 가능한 행위를 수행할 수 있어야 합니다.
  • 부모 클래스와 자식 클래스 사이의 행위에는 일관성이 있어야 합니다.
  • 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야합니다.
  • 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야합니다.

DIP ( Dependency Inversion Principle )

  • 의존 역전 원칙
  • 의존 관계를 맺을 때 변화하기 쉬운 것이나 자주 변화하는 것에 의존하기 보다는 변화하기 어려운 것이나 변화가 거의 없는 것에 의존해야합니다.
  • 구체적인 클래스보다는 인터페이스나 추상 클래스와 관계를 맺으면 좋습니다.
  • 여기서 말하는 변화하기 쉬운것이란 구체적인 것을 말하고, 변화하기 어려운 것이란 추상적인 것을 말한다. 객체지향적인 관점에서 보자면 변화하기 쉬운것이란 구체화 된 클래스를 의미하고, 변화하기 어려운 것은 추상클래스나 인터페이스를 의미한다. 따라서 DIP를 만족한다는 것은 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미합니다.

0개의 댓글