[용어 정리] SOLID란?

[용어 정리] SOLID란?

아무리 객체 지향 4대 특성인 캡슐화, 상속, 추상화, 다형성을 잘 한다고 해서 설계를 잘 하는것은 아니다.
물론 4대 특성의 묘미를 잘 살릴수록 설계가 좋다. 하지만 설계 원칙이라는게 엄연히 존재하고, 또 나름 중요하기 때문에 각 원칙의 맨 앞 알파벳만 따와 'SOLID'라고까지 했을까..

SOLID원칙들은 결국 자신 클래스 안에 응집도는 내부적으로 높이고, 타 클래스들 간 결합도는 낮추는 High Cohesion - Loose Coupling원칙을 객체 지향의 관점에서 도입한 것이다.
결국 모듈 또는 클래스 당 하나의 책임을 주어 더욱더 독립된 모듈(클래스)를 만들기 위함이다.
이렇게 설계된 소프트웨어는 재 사용성이 높아지고, 수정을 최소화 해도 되기 때문에 결국 유지 보수가 용이해진다.

자 그럼 객체 지향 설계 5대 원칙이 각각 무엇인지 알아보자
  • SRP(Single Responsibility Principle) 단일 책임 원칙
  • OCP(Open Closed Principle) 개방 폐쇄 원칙
  • LSP(Liskov Substitution Principle) 리스코프 치환 원칙
  • ISP(Interface Segregation Principle) 인터페이스 분리 원칙
  • DIP(Dependency Inversion Principle) 의존 역전 원칙


SRP(단일 책임 원칙)


클래스의 역할과 책임을 너무 많이 주지 마라

즉, 클래스를 설계할 때 어플리케이션의 경계를 정하고, 추상화를 통해 어플리케이션 경계 안에서 필요한 속성과 메서드를 선택 해야 한다.


OCP(개방 폐쇄 원칙)


자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.



LSP(리스코프 치환 원칙)

하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야 한다.

LSP는 인터페이스와 클래스 관계, 상위 클래스와 하위 클래스 관계를 얼마나 잘 논리적으로 설계했느냐가 관건이다.

LSP는 하위 클래스가 상위클래스의 역할을 대신 할 때 논리적으로 맞아 떨어져야 한다.

ISP(인터페이스 분리 원칙)

상황과 관련 있는 메서드만 제공하라.



DIP(의존 역전 원칙)

자신보다 변하기 쉬운 것에 의존하지 마라

즉, 하위 클래스나 구체 클래스게 의존하면 안된다.


출처

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?