woolta

객체지향 5대 원칙 (SOLID)

wooltaUserImgb00032 | Java | 2019-09-22

객체지향 5대 원칙이란?

객체지향 5대 원칙이란 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)을 말하며 앞의 철자를 따서 SOILD 원칙이라고 부른다.



1. 단일 책임의 원칙 (Single Responsiblity Principle, SRP)

소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임만을 가져야 한다.

모든 클래스는 하나의 책임만을 가지며 그 책임은 완전히 캡슐화 되어야 한다. 즉 한개의 클래스가 제공하는 모든 기능들은 단 한가지의 책임만 지도록 해야 한다. 이렇게 할 경우 응집도는 높고 결합도는 낮은 프로그램을 만들 수 있다.
예를들어 회원인증 클래스가 있는데 해당 회원인증 클래스에서 회원정보검색하는 메소드가 있다면 이는 단일 책임의 원칙을 위배 한 것이다. 회원인증 클래스와 회원정보 클래스를 구분해서 각각의 책임을 단일화 시켜야 한다.



2. 개방/폐쇄 원칙(Open/Closed Principle, OCP)

기존 코드의 변경 없이 기능의 추가 or 수정이 가능 하도록 설계해야 한다.

개방폐쇄 원칙은 확장에 대해 열려있어야 하고, 수정에 대해서는 닫혀 있어야 한다 는 원칙이다. 이 방법은 설계 할때 쉽게 변화는 것과(확장) 변하지 않는 것을 구분 한 후 작업하는 방법이다. 이를 위해 자주 사용되는것이 바로 인터페이스(Interface) 와 전략 패턴(Strategy Pattern) 이다.



3. 리스코프 치환 원칙(Liskov Substitutions Principle, LSP)

자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.

MIT 컴퓨터 사이언스 교수인 리스코프가 제안한 설계 원칙으로. 부모 클래스와 자식 클래스 사이의 행위에는 일관성이 있어야 한다 는 원칙이다. 즉, 인터페이스만 알면 구현체를 몰라도 사용 가능해야 한다는 것이다. 또한 리스코프 치환 원칙(LSP) 에서는 지켜야 할 규칙이 있다.

  1. 상속 관계에서 IS-A 관계가 성립해야 한다.
  2. 자식 클래스의 상세 내용을 부모 클래스는 알 필요가 없다.



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

하나의 광범위한 인터페이스 보다 여러개의 구체적인 인터페이스가 낫다.

인터페이스 분리 원칙은 변화의 유연성을 확보 하기 위함으로 큰 덩어리의 인터페이스를 구체적이고 작은 단위로 분리시켜서 꼭 필요한 메소드 로만 사용 가능하도록 한다. 해당 원칙을 준수한다면 시스템의 내부 의존성 관계를 느슨하게 하여 리팩토링과 수정 에 쉬운 설계를 할 수 있게 된다.
간단한 예로 file 인터페이스를 입력, 출력 으로 나누어 인터페이스를 구현해서 좀더 구체적 단위로 사용할 수 있다. 참고 사항으로 공유 리파지토리 패턴 을 보면 더욱 유용하게 설계 할 수 있다.



5. 의존성 역전 원칙(Dependency Inversion Principle, DIP)

추상 클래스는 파생 클래스를 참조해서는 안되며, 파생 클래스나 추상 클래스는 오직 추상 클래스만을 참조해야한다.

의존성 역전 원칙에서는 다음과 같은 요소를 지켜야 한다.

  1. 상위 모듈은 하위 모듈에 종속되어서는 안된다.
  2. 추상화는 세부사항에 의존하지 않는다.

즉 의존성 역전 원칙을 만족하는 것은 의존관계를 맺을때 의존하는 대상은 구현 클래스가 아닌 인터페이스 or 추상클래스 가 되야 한다 라는 것을 의미 한다.


출처: SOLID-원칙 , 객체지향 5대 원칙

Copyright © 2018 woolta.com

gommpo111@gmail.com