Java/OOP

[OOP] C6. SOLID: 효율적인 객체지향 설계를 위한 5대 원칙

JoonYong 2024. 1. 29. 18:26

0. 객체 지향 설계 5원칙 SOLID

  • SOLID는 객체 지향 설계 5원칙을 앞 글자를 따서 만든 말이다.
  • 소프트웨어의 결합도는 낮추고, 응집도는 높이는 고전 원칙을 객체 지향의 관점에서 재정립한 것이라고 할 수 있다.
결합도
모듈(클래스) 간의 상호 의존 정도를 나타낸다.
결합도가 낮으면 모듈 간의 상호 의존성이 줄어들어 객체의 재사용이나 수정, 유지보수가 용이하다
.

응집도
하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성을 말한다,
응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아서 재사용이나 기능의 수정, 유지보수가 용이하다.

1. Single Responsibility Principle (단일 책임 원칙)

SRP 위반
각각의 역할에 대한 책임이 분리

  • 클래스는 단 한개의 책임을 가져야 한다.
  • 클래스를 변경하는 이유는 단 하나여야 한다.
  • 클래스가 여러 책임을 가지게 되면 그 클래스를 수정해야 하는 이유가 여러 개가 될 수 있으며, 이로 인해 버그의 위험이 증가하게 됩니다.(유지보수 비효율적)

2. Open-Closed Principle (개방-폐쇄 원칙)

  • 소프트웨어 요소는 확장에 대해서는 개방적이고, 변경에 대해서는 폐쇄적이어야 한다
  • 즉, 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙입니다.
  • 이를 지키지 않으면 instanceof 와 같은 연산자를 사용하거나, 다운 캐스팅 발생

3. Liskov Substitution Principle (리스코프 치환 원칙)

  • 부모 클래스와 자식 클래스 사이의 행동이 일관성 있어야 한다는 것을 말합니다.
  • 즉, 자식 클래스는 그의 부모 클래스로 대체 가능해야 합니다.

4. Interface Segregation Principle (인터페이스 분리 원칙)

  • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 것을 말합니다.
  • 즉, 필요하지 않은 기능에는 의존 관계를 맺지 않아야 합니다.

5. Dependency Inversion Principle (의존관계 역전 원칙)

 

 

※ 고수준 모듈은 뭐고, 저수준 모듈은 또 뭘까?
고수준 모듈 : 어떤 의미 있는 단일 기능을 제공하는 모듈 (interface, 추상 클래스)
저수준 모듈 : 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능의 실제 구현 (메인클래스, 객체)

 

  • 의존관계 역전 원칙이란 "추상화에 의존해야지, 구체화에 의존하면 안 된다" 는 원칙입니다.
  • 자신보다 변하기 쉬운 것에 의존하지 않는 것이 DIP의 핵심이다.