본문 바로가기

OOP5

객체 지향 설계 - SOLID 원칙 SOLID란 로버트 마틴이 2000년대 초반 명명한 객체 지향 프로그래밍 및 설계의 다섯가지 기본 원칙을 마이클 페더스가 약어를 따서 다시 소개한 것이다. SOLID 원칙은 개발 과정에서 소스코드의 가독성을 높이고 확장하기 쉽게 하기 위해 끊임없이 리팩토링할 수 있는 지침이다. 이하 다른 포스팅에 각 원칙에 대해 정리 SRP(Single Responsibility Principle) 단일 책임 원칙: 한 클래스는 하나의 책임만 가져야 한다. https://deep-dive-dev.tistory.com/87 [클린 소프트웨어] PART 2 - CHAPTER 9 - 개방 폐쇄 원칙(OCP) 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. OCP.. 2022. 2. 15.
[클린 소프트웨어] PART 2 - CHAPTER 12 - 인터페이스 분리 원칙(ISP) ISP; Interface-Segregation Principle 인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 가장 간단한 예시를 들자면, abstract class Door { abstract fun lock() abstract fun unlock() } class TimerDoor() : Door() { override fun lock() { // do something } override fun unlock() { // do something } } 여기서 TimerDoor 객체에 특정 시간이 지나면 자동으로 문이 닫히는 기능을 넣는다고 가정했을 때 Door 추상 클래스에 아래와 같이 timeout 메서드를 넣으면 안됨 👉 그러면 Door를 상.. 2022. 2. 15.
[클린 소프트웨어] PART 2 - CHAPTER 10 - 리스코프 치환 원칙(LSP) 서브타입(subtype)은 그것의 기반 타입(base type)으로 치환 가능해야 한다. LSP; Liskov Substitution Principle 1988년 바버라 리스코프(Barbara Liskov)가 처음으로 작성해서 리스포크 치환 원칙이라고 불린다. 그녀는 다음과 같이 말했다. 타입 S의 각 객체 o1과 타입 T의 각 객체 o2가 있을 때, T로 프로그램 P를 정의했음에도 불구하고 o1이 o2로 치환될 때 P의 행위가 변하지 않으면, S는 P의 서브타입니다. 이 원칙은 반대로 위반한 결과를 생각하면 더 쉽다. 어떤 함수 f가 인자로 클래스 B를 참조하고 있따고 생각해보자. B의 파생 클래스 D가 B를 가장해 f에 넘겨졌을 때 f가 의도한대로 동작하지 않는다면 D는 f에 대해 취약하며 LSP를 .. 2022. 2. 8.
[클린 소프트웨어] PART 2 - CHAPTER 9 - 개방 폐쇄 원칙(OCP) 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. OCP; Open-Closed Principle OCP를 따르는 모듈은 다음과 같은 두 가지 속성을 갖는다. Open: 확장에 대해 열려있다. 요구사항이 변경될 때, 이 변경에 맞개 새로운 행위를 추가해 모듈을 확장할 수 있다. Close: 수정에 대해 닫혀있다. 모듈의 행위를 확장하는 것이 그 모듈의 소스코드 변경을 초래하지 않는다. 하나의 변경이 의존적인 모듈에서 단계적인 변경을 초래할 때 경직성의 악취를 풍긴다. OCP에서는 이후 일어날 변경이 더 시앙의 수정을 유발하지 않도록 하라고 충고한다. 이미 제대로 동작하고 있던 원래 코드를 변경하는 것이 아닌 새로운 코드를 덧붙임으로써 요구사항.. 2022. 2. 7.