Post

객체지향 설계

1. 객체지향 설계

컴퓨터 프로그래밍에서 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것이다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다.

SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩토링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다.

이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다.

2. 객체지향 5원칙

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

모든 클래스는 각각 하나의 기능만 가진다는 의미이다.

해당 클래스가 제공하는 모든 서비스는 단 하나의 책임을 수행하는데 집중되어야 한다는 원칙이다.

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

소프트웨어의 모든 구성요소(클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙이다.

요구사항의 변경이나 추가 사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며 쉽게 확장이 가능하여 재사용할 수 있어야 한다는 뜻이다.

로버트 마틴은 OCP는 관리가 쉽고 재사용 가능한 코드를 만드는 기반이며, OCP를 가능케 하는 중요한 메커니즘은 추상화(Abstraction)와 다형성(Polymorphism)이라고 설명한다. OCP는 객체지향의 장점을 극대화하는 아주 중요한 원리이다.

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

부모 클래스를 가리키는 포인터에 해당 클래스를 상속하는 자식 클래스를 할당하더라도 모든 기능이 정상적으로 작동해야 하며 자식 클래스의 상세 내부를 부모 클래스는 알 필요가 없다는 뜻이다.

MIT 컴퓨터 공학 교수인 리스코브가 제안한 설계 원칙으로 서브 클래스가 확장에 대한 인터페이스를 준수해야 함을 의미한다. 한마디로 부모 클래스를 상속한 자식 클래스는 부모 클래스의 역할을 정확히 해내야 한다는 뜻이다.

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

자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙이다.

하나의 큰 인터페이스를 상속받기보다는 인터페이스를 구체적이고 작은 단위들로 분리해 꼭 필요한 인터페이스만 상속하자는 의미이다. SRP가 클래스의 단일책임을 강조했다면 ISP는 인터페이스의 단일책임을 강조한다.

인터페이스 하나의 크기가 크다는 것은 한 번에 지켜야 할 약속이 많아진다는 것을 의미한다.

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

프로그래머는 ‘추상화에 의존해야지, 구체화에 의존하면 안 된다.’ 의존성 주입은 이 원칙을 따르는 방법의 하나다.

상위 모듈은 하위 모듈에 의존해서는 안 된다. 둘 다 추상화에 의존해야 한다. 추상화는 구체적인 것에 의존해서는 안 된다. 구체적인 것은 추상화에 의존해야 한다.

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.