일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- python priority queue
- leetcode풀기
- 코틀린기초
- LeetCode
- leetcode 풀기
- 파이썬 프로그래머스
- 알고리즘풀이
- 파이썬 알고리즘
- 잇츠디모
- python xor
- binary search
- 파이썬알고리즘
- 릿코드 풀기
- 파이썬 알고리즘 풀기
- 릿코드풀이
- 파이썬릿코드풀기
- 릿코드풀기
- python zip_longest
- 릿코드
- 알고리즘풀기
- 상가수익률계산기
- 파이썬알고리즘풀기
- python Leetcode
- python 릿코드
- 파이썬릿코드
- leetcode풀이
- 파이썬 릿코드
- python sorted
- 릿코드 파이썬
- python 알고리즘
- Today
- Total
목록시스템 설계 및 디자인/객체지향 SOLID (6)
소프트웨어에 대한 모든 것
의존성 역전 법칙 (Dependency Inversion Principle) 고차원 모듈은 저차원 모듈에 의존하지 말아야한다. --> 상위클래스는 하위 클래스에 의존해서는 안된다는 원칙 변경이 잦은 Concrete 클래스에 의존하지 말고 인터페이스나 추상 클래스에 의존 관계를 맺도록 설계 의존성 역전 법칙은 클래스들 사이에 abstraction layer를 생성해서 클래스 사이의 커플링을 줄이는 것을 목표로 한다. 의존성 역전 법칙 예시 외환 거래 예시를 통해서 의존성 역전 법칙에 대해서 알아 봅니다. class FXConverter: def convert(self, from_currency, to_currency, amount): print(f'{amount} {from_currency} = {amou..
인터페이스 분리 원칙 (Interface Segregation Principle) OOP에서 인터페이스는 object가 반드시 가져하는 methods의 집합입니다. 파이썬은 abstract classes를 인터페이스로 사용합니다. 인터페이스 분리 원칙에 따르면 인터페이스는 가능한 작게 만들며 한 가지만 수행해야 합니다. 인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜서 리팩토링, 수정, 재배포를 쉽게 할 수 있습니다. 인터페이스 분리 원칙 예제 운송수단 aircraft, car 클래스가 있다고 합시다. 이 둘의 추상 클래스 vehicle를 만듭니다. from abc import ABC, abstractmethod class Vehicle(ABC): @abstractmethod def go(s..
리스코프 치환 원칙 (Liskov substitution principle) 리스코프 치환 원칙은 자식 클래스는 그의 부모 클래스를 대체할 수 있어야 한다고 합니다. 자식 클래스가 오류를 일으키지 않고 부모 클래스를 대신할 수 있도록 하는 것을 목표로 합니다. 자식 클래스는 부모 클래스의 행동 규약을 위반하면 안되는 것입니다. 어떤 경우에 리스코프 치환 원칙이 위반 될까요? 자식 클래스가 부모 클래스의 변수 타입을 변경 자식 클래스가 부모 클래스의 함수의 리턴 타입이나 파라미터를 변경 자식 클래스가 부모 클래스의 함수를 원래 의도와 다르게 오버라이딩 글 보다는 코드로 이해하는 것이 더 빠릅니다. from abc import ABC, abstractmethod class Notificatioin(ABC):..
개방/폐쇄 원칙 (Open-closed principle) 클래스는 확장에는 열려있고 수정(변경)에는 닫혀 있어야 한다. 기존 코드를 변경하지 않으면서, 기능을 수정하거나 추가할 수 있도록 설계되어야 한다는 원칙 개방/폐쇄 원칙은 기존의 시스템의 존재하는 코드의 수정없이 새로운 features(or use cases)를 쉽게 추가할 수 있습니다. 예제를 통해서 살펴 보겠습니다. class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f'name={self.name}, age={self.age}' class PersonStorage: def save_to_database(sel..
객체는 단 하나의 책임만 가져야 한다는 원칙 단일 책임 원칙 목적 클래스를 변경하는 이유는 단 하나여야 한다. 응집력이 높고 강력한 classes, methods, functions을 생성한다. 클래스 composition(구성) 사용 촉진 코드 중복을 피함 단일 책임 원칙 위반 악취 한 클래스가 너무 많은 책임을 가지고 있다. 책임을 제대로 식별하지 않고 여러 클래스에 흩뿌려 놓는 것 또한 문제가 있다 Person 클래스 예제를 살펴 보겠습니다. class Person: def __init__(self,name): self.name = name def __repr__(self): return f'name={self.name}' @classmethod def save(cls, person): print(..
객체 지향 5대 원칙 SOLID는 소프트웨어 디자인을 유지 보수하기 쉽고 유연하게 만듭니다. SOLID 5대 원칙: Single Responsibility Principle (단일 책임 원칙) Open/Closed Principle (개방/폐쇄 원칙) Liskov Substitution Principle (리스코프 치환 원칙) Interface Segregation Principle (인터페이스 분리 원칙) Dependency Inversion Principle (의존 역전 원칙) 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 개방/폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 리스코프 치환 원칙 부모 클래스를 상속한 자식 클래스는 부모 클래스의 역할을 정확히 ..