대학원 일기

[Design Patterns] 객체 지향 디자인의 기본 5원칙(SOLID) 본문

Computer programming/Design patterns

[Design Patterns] 객체 지향 디자인의 기본 5원칙(SOLID)

대학원생(노예) 2021. 12. 25. 03:05

서론

   객체 지향 설계에서 요구 사항에 따라 소스 코드를 쉽게 변경하고, 다른 사람과 협업할 때 복잡한 구조를 단순화하여 설계하는 디자인 패턴의 중요성을 파악하고, 객체지향 디자인의 기본 원칙들과 디자인 패턴의 개념과 종류에 대해 알아보겠다.

 

 

객체지향 디자인 패턴

디자인 패턴이란?

  소프트웨어를 설계하거나 프로그램을 개발할 때, 반복적으로 일어나는 문제 혹은 복잡한 코드들을 재사용하기 좋은 형태로 특정 규약을 만들어서 정리하여 복잡한 코드 집합의 구조적인 문제를 해결하는 방법이다.

  즉, 효율적인 코드를 만들기 위한 방법이라고 기억하면 된다.

 

객체지향 디자인의 기본 5원칙(SOLID)

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

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

왼: SLP 위반한 사례, 오: 올바른 사례

  • 클래스를 구현할 때 한 가지 기능에만 중점을 두어야 함.
  • 두 가지 이상의 기능이 필요하다면 클래스를 나누어야 함.

2. 개방-폐쇠 원칙(OCP: Open-Closed Principle)

소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 개방(open)되어 있어야 하고, 수정에는 폐쇄(close)되어 있어야 한다.

 

  • 클래스나 모듈의 기능을 확장하더라도 기본 클래스는 수정하지 않도록 설계해야 함.
  • 기본 클래스는 수정하지 않고, 클래스를 확장해 새로운 기능을 구현할 수 있어야 함.

3. 리스코프 치환 원칙 (LSP: Likov Subsituation Principle)

상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다. 즉, 상속받는 클래스는 기본 클래스의 역할을 완전히 치환할 수 있어야 한다.

 

→ 딸(사촌 누나)은 아버지(삼촌, 할아버지)의 역할을 수행할 수 없음.

 

  • 부모 클래스 타입의 객체가 속성의 변경 없이 자식 클래스 타입으로 치환되었을 때 정상적으로 동작해야하는 것을 의미함.
  • 파생된 클래스는 기본 클래스를 완전히 확장해야 함.
  • 코드 수정 또는 추가 없이도 파생된 클래스는 기본 클래스를 대체할 수 있어야 함.
  • 상위 클래스는 공통 속성이나 추상화된 기능만을 가지고 있어야 함.

4. 인터페이스 분리 법칙 (ISP: Interface Segregation Principle)

클래스가 사용하지 않는 인터페이스는 의존하지 않아야 한다.

 

  • 클래스에서는 반드시 해당 기능과 관련있는 메소드만을 작성해야 함.
  • 인터페이스를 구현하는 클래스는 무조건 인터페이스의 메소드를 구현해야 하므로 필요없는 메소드일 경우, 분리해야 함.

5. 의존 역전 법칙 (DIP: Dependency Inversion Principle)

상위(슈퍼) 모듈은 하위(서브) 모듈에 의존적이지 않아야 한다.

 

  • 세부 구현이 추상화에 의존해야 함.
  • 추상화가 세부사항에 의존하면 안됨.
  • 클래스를 참조할 일이 있을 때 직접 참조하면 안되고 추상 클래스를 만들어서 참조해야 함.

추상 클래스: 실체 클래스의 공통적인 부분(변수, 메서드)를 추출해서 선언한 클래스 (추상 클래스는 객체 생성 불가능)

Comments