SOLID > 개요

본 글은 로버트 C.마틴 저자(송준이 엮음)의 [클린 아키텍처: 소프트웨어 구조와 설계의 원칙] 도서를 참고하였습니다.


1. SOLID란?

  • 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것
  • 소스코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침
  • 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부
  • 함수와 데이터 구조를 클래스로 배치하는 방법, 그리고 이들 클래스를 서로 결합하는 방법을 설명함
    • ‘클래스’라는 단어를 사용했다고 해서 SOLID 원칙이 객체 지향 소프트웨어에만 적용된다는 의미는 아님
    • 클래스는 단순히 함수와 데이터를 결합한 집합을 의미하고, 언어에 따라 클래스가 아닌 다른 명칭으로 불릴 수 있음

2. SOLID 원칙의 목적

중간 수준(프로그래머가 이들 원칙을 모듈 수준에서 작업할 때 적용할 수 있다는 뜻)의 소프트웨어 구조가 아래와 같도록 만드는데 있다

  • 변경에 유연함
  • 이해하기 쉬움
  • 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트들의 기반이 됨

3. 객체 지향 프로그래밍

  • 1966년 욜레 요한 달(Ole Johan Dahl)과 크리스텐 니가드(Kristen Nygaard)에 의해 등장
    • ALGOL 언어의 함수 호출 스택 프레임(stack frame)을 힙(heap)으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견
  • 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 중첩 함수는 메서드가 되었음
  • 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장하게 되었음
  • 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과함

Reference