객체지향의 SOLID

김효중·2025년 5월 8일

개요

객체지향은 다음의 핵심 개념의 기반한다.

  • 캡슐화 : 데이터와 기능을 묶고 내부 정보를 감추어 외부에서의 접근을 제한
  • 상속 : 기본 클래스를 기반으로 새로운 클래스에서 재사용
  • 다형성: 동일한 인터페이스나 메서드가 다양한 방식을 동작
  • 추상화: 핵심만 노출하고 불필요한 정보는 감춤

SOLID 원칙은 이런한 객체 지향언어에서 유지보수하기 쉽고, 확장 가능한 코드 만들기 위한 핵심 설계 원칙이며 각 원칙은 객체 지향 프로그램을 구성하는 방법론이다.

S: 단일 책임 원칙

  • 클래스는 하나의 역할(책임)만 가져야 한다.
  • 클래스를 변경해야할 이유가 오직 하나여야 한다.

예를 들어 플레이어 객체가 있고 입력처리, 이동, 사운드 출력을 할 경우
단일 책임 원칙을 준수하면 하나의 스크립트가 아닌 입력처리, 이동, 사운드 출력의 각각의 스크립트로 작성하는것이 예시이다.

O: 개방 폐쇠 원칙

  • 클래스는 확장에는 열려 있고, 수정에는 닫혀 있어야한다.
  • 기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있어야한다.

예를 들어 도형의 넓이를 구하는 계산기 클래스가 있는 경우 만약 도형별로 다른 함수를 사용한다면
도형이 늘어나는 계산기 클래스를 수정하여 새로운 함수를 추가해야한다.

개방 폐쇠 원칙을 준수한다면 각각의 도형은 Shape라는 클래스를 상속받고 해당 클래스는 넓이를 구하는 가상함수를 상속 받고 개별로 이를 구현한다.
그렇게 되면 계산기 클래스를 수정하지 않고 각각의 도형이 상속받은 함수를 호출하기만 하며된다.

L: 리스코프 치환 원칙

  • 자식 클래스는 부모의 역할을 대체할 수 있어야한다.
  • 하위 클래스는 상위 클래스의 모든 기능을 보장한다.

예를 들어 탈것이라는 클래스가 전진, 후진, 좌회전, 우회전의 기능을 가지고
각각이 이를 상속 받는다면 자동차, 트럭은 대체할 수 있지만, 기차는 이를 대처하지 못할 수 있다.
그렇기에 상속에서는 부모의 기능을 모두 동작할 수 있게하는 상속 구조를 가져야한다.

I: 인터페이스 분리 원칙

  • 자신이 사용하지 않는 메서드에 의존하지 않아야한다.
  • 큰 인터페이스보다 작고 특화된 인터페이스를 지향한다.

하나의 인터페이스가 모든 기능을 가지지말고 작은 단위로 나눠야한다.
이를 통해 코드간의 결합도를 낮출 수 있고 수정이 용이하다.

D: 의존성 역전 원칙

  • 상위 모듈은 하위 모듈에 의존해서는 안되고 추상(인터페이스)에 의존해야한다.

하위 모듈의 멤버로 가지고 그것을 사용하게 되면 하위 모듈만을 위한 구조를 가지게 된다.
이때 하위 모듈을 인페이스화 하면 해당 인터페이스를 상속 받은 다양한 하위 모듈도 사용할 수 있게 된다.

profile
도전하는 개발자

0개의 댓글