[OOP] OOP 5가지 설계 원칙

hegleB·2023년 1월 25일

SOLID 원칙

  • 디자인 패턴은 특별한 상황에서 발생하는 문제에 대한 구체적인 솔루션이라면 객체지향 설계 원칙은 좀 더 일반적인 상황에서 적용이 가능한 설계 기준이다.
    단일 책임 원칙, 개방 폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존성관계 역전 원칙 5가지가 있다. 이러한 원칙을 지키면 객체지향의 장점을 극대화 시킬 수 있다.

SRP(단일 책임 원칙)

  • "한 클래스는 하나의 책임을 가져야한다"라는 원칙이다.
  • 예를 들면 커뮤니티 사이트에서 회원 정보를 관리할 때, 회원의 정보와 회원이 작성한 게시물에 대한 정보까지 하나의 클래스에서 관리하면 게시물에 대한 변경이 있을 때, 회원 클래스를 수정해야한다. 이처럼 변경사항이 있을 때, 그와 관련된 부분만 수정할 수 있도록 설계해야하는 원칙을 말한다.
  • 단일 책임 원칙에서 가장 중요한 것은 각각의 클래스가 가지는 책임의 범위를 적절하게 잘 조절하는 것이다.

OCP(개방 폐쇄 원칙)

  • "확장에는 열려있고 변경에는 닫혀있다"라는 원칙이다.
  • 여기서 확장은 기능을 변경하거나 확장하는 것을 의미하고 변경은 확장된 기능을 사용하는 코드를 수정하는 것을 의미한다.
  • 다형성을 활용해서 인터페이스를 구현한 새로운 클래스를 만들고 거기에 새로운 기능을 구현해주는 방식이다.
  • 예를 들어, 게시판에 업로드를 하는 부분에 대한 기능 확장이 있을 때, 업로드 기능을 사용하는 부분에서는 기존에 사용하던 방식을 그대로 사용할 수 있도록 하는 것을 말한다.
  • 하지만, 구현 객체를 변경하려면 클라이언트 코드를 변경해야하기 때문에, 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다

LSP(리스코프 치환 원칙)

  • "인터페이스를 구현한 구현체 즉, 하위 클래스는 인터페이스의 규약을 모두 지켜야한다"라는 원칙이다.
  • 인터페이스를 구현한 구현체의 신뢰성을 올리기 위한 원칙으로 상위 타입의 객체를 하위 타입의 객체로 형변환을 해도 정상적으로 작동할 수 있도록 하기 위해서 적용한다.

ISP(인터페이스 분리 원칙)

  • "인터페이스를 적당한 크기로 나눠서 인터페이스를 더 명확하고 대체 가능성을 높여야한다"라는 원칙이다.
  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 더 좋다는 의미이다.
  • 예를 들어, 커뮤니티 사이트에서 북마크 기능을 개발할 때, 회원용 북마크와 게시글 북마크가 개발한다고 하자. 이 때, 북마크 기능 전체 범용 인터페이스 보다는 회원용 북마크 인터페이스, 게시글용 북마크 인터페이스를 분리하여 만드는 것이 더 좋다

DIP(의존 관계 역전 원칙)

  • "추상화에 의존해야지, 구체화에 의존하면 안된다"라는 원칙이다.
  • 이 원칙은 의존성 주입에 따르는 방법 중 하나이다. 또한, OCP와도 연관이 있는 원칙이기도 하다.
  • 클라이언트 코드가 구현 클래스가 아닌 인터페이스를 바라보게 해서, 인터페이스에서 어떤 구현 클래스를 사용할지 선택하게 하는 방식이다.
  • 이러한 방식으로 개발하는 이유는 역할에 의존하지 않고 구현에 해당하는 구현체에 의존하게 되면 변경할 떄 불필요한 코드 수정이 많아지기 떄문이다.
  • OCP와 마찬가지로 다형성만으로는 구현 객체를 변경할 때, 클라이언트 코드도 변경해야하기 때문에 DIP를 지키기 어렵다.
profile
성장하는 개발자

0개의 댓글