전체 글 18

[Python] Overloading 개념

Overloading 이란? 프로그램에서 오버로딩(overloading)이란 동일한 이름의 함수를 매개변수 타입, 개수에 따라 다른 기능으로 동작 가능하게 한다. 파이썬에서는 공식적으로 오버로딩(overloading)을 지원하지 않으며 외부 페키지 multipledispatch를 이용해서 구현해야 한다. 사용 목적 동일 메소드 재정의 네이밍 기능 예측 코드절약, 가독성 향상 메소드 파라미터 기반 호출 방식 파이썬이 지원하지 않는 다고 말한 예제 class SampleA: def add(self, x, y): return x + y def add(self, x, y, z): # - ", sa..

Python 2023.02.12

[Python] SOLID 의존성 역전 원칙(DIP)

SOLID 이란? 클린 코딩 디자인중 하나인 SOLID 원칙에 대해서 천천히 알아보자. S: 단일 책임 원칙 O: 개방/폐쇄의 원칙 L: 리스코프 치환 원칙 I: 인터페이스 분리 법칙 👈 현위치 D: 의존성 역전 원칙 👈 현위치 의존성 역전 의존성 역전 원칙(Dependency Inversion Principle)는 코드가 깨지거나 손상되는 취약점으로 보호해준다. 의존성 원칙이란 쉽게 말해 "보다 고수준 모듈(클래스)은 보다 저수준 모듈(클래스)에 대해 의존하면 안된다는 것이고, 의존하지 않는다는 것은 저수준 모듈의 변경이나 추가 등에 있어서 변경점이 없어야 한다" 예제를 통해 알아보자 # DIP를 위반한 코드 class DBConnection: def __init__(self, db): self.db ..

Python 2023.02.09

[Python] SOLID_인터페이스 분리(ISP)

SOLID 이란? 클린 코딩 디자인중 하나인 SOLID 원칙에 대해서 천천히 알아보자. S: 단일 책임 원칙 O: 개방/폐쇄의 원칙 L: 리스코프 치환 원칙 I: 인터페이스 분리 법칙 👈 현위치 D: 의존성 역전 원칙 👈 현위치 인터페이스 분리 원칙 * 용어 정리 인터페이스 : 객체가 노출하는 매서드의 집합이다. 즉 객체가 수신하거나 해석할 수 있는 모든 메시지가 인터페이스를 구성하며 이것들은 다른 클라이언트에서 호출 할 수 있는 요청들이다. 인터페이스 분리 원칙(Interface Segregation Principle)은 다중 메서드를 가진 인터페이스가 있다면 더 적은 수의 메서드를 가진 여러 개의 메서드로 분할하는 것이 좋다는 것이다. 가능한 작은 단위로 인터페이스를 분리하면 각 클래스가 명확한 동작..

Python 2023.02.09

[Python] SOLID_리스코프 치환 원칙(LSP)

SOLID 이란? 클린 코딩 디자인중 하나인 SOLID 원칙에 대해서 천천히 알아보자. S: 단일 책임 원칙 O: 개방/폐쇄의 원칙 L: 리스코프 치환 원칙 👈 현위치 I: 인터페이스 분리 법칙 D: 의존성 역전 원칙 리스코프 치환 원칙(LSP) 리스코프 치환 원칙(Liskov substitution principle)은 설계 시 안정성을 유지하기 위해 객체 타입이 유지해야하는 일련의 특징을 말한다. 하위 클래스는 상위 클래스에서 정의한계약을 따르도록 디자인 해야 한다. 간단하게 이야기 하자면 2가지 특징을 가져야 한다 1. 매개변수의 타입이 부모/자식 클래스가 같아야 한다. overriding을 한다고 해서 매개변수 타입이 달라지면 일관성이 떨어진다. 2. 반환되는 타입이 같아야 한다. 도구를 사용해 ..

Python 2023.02.08

[Python] SOLID_개방/폐쇄 원칙(OCP)

SOLID 이란? 클린 코딩 디자인중 하나인 SOLID 원칙에 대해서 천천히 알아보자. S: 단일 책임 원칙 O: 개방/폐쇄의 원칙 👈 현위치 L: 리스코프 치환 원칙 I: 인터페이스 분리 법칙 D: 의존성 역전 원칙 개방/폐쇄 원칙 간단히 말해서 확장 가능하고, 새로운 요구사항이나 도메인 변화에 잘 적응하는 코드를 작성 해야 한다. 예제 내용 : 다른 시시템에서 발생하는 이벤트를 분류하는 기능 안티 페턴을 통한 이해 class Event: def __init__(self, raw_data): self.raw_data = raw_data class UnknownEvent(Event): """데이터만으로 식별할 수 없는 이벤트""" pass class LoginEvent(Event): """로그인 이벤트"..

Python 2023.02.07

[Python] SOLID_단일 책임 원칙(SRP)

SOLID 이란 클린 코딩 디자인중 하나인 SOLID 원칙에 대해서 천천히 알아보자. S: 단일 책임 원칙 👈 현위치 O: 개방/폐쇄의 원칙 L: 리스코프 치환 원칙 I: 인터페이스 분리 법칙 D: 의존성 역전 원칙 단일 책임 원칙 단일 책임 원칙(Single Responsibiliy Principle - SRP)는 클래스가 단 하나의 챔임을 져야 한다는 원칙이다. 클래스는 유일한 책임이 있다는 것은 하나의 구체적인 일을 담당한다는 의미 이다. 안티 페턴을 통한 이해 예제 내용 : 로그 파일이나 데이터베이스와 같은 소스에서 이벤트 정보를 읽어 로그 별로 필요한 액션(기능)을 분류하는 APP을 만들어 보자 class SystemMonitor: def load_activity(self): """소스에서 처리..

Python 2023.02.06

[Python] 이터러블 객체

이터러블 객체란? 파이썬에는 기본적으로 반복 가능한 객체가 있습니다. 예를들어 list, tuple, set, dict 이것 들은 다 for문을 돌릴 수 있다는 특징이 있습니다. 그러나 이러한 for문은 위 객체에만 돌릴수 있는 것은 아닙니다. __iter__ or __next__ 매직 매소드가 구현이 되어 있느지를 통해 이터레이터를 판단할 수 있다. 또한 객체가 시퀀스이고 __lne__과 __getitem__을 모두 가졌는지 여부에 따라 for문에서 사용할 수 있는 객체를 만들수 있다. 이러터블 객체 만들기 일정 기간의 날짜를 하루 간격으로 반복하는 객체의 코드를 예시로 이해보겠습니다. 중요한 것은 __iter__, __next__ 매직 메서드를 중점으로 보자. from datetime import t..

Python 2023.02.01

[Python] Context Manager 일반적으로 쓰이는 예시

먼저 보는 Context Manager 예시 일반 적인 사용 예시로는 아래와 같이 파일 Handler에 사용 된다. with open('alice-in-wonderland.txt', 'rw') as infile: line = infile.readlines() do_something_more() context manager을 사용하지 않는다면 try문으로 구현 해야 한다. try: infile = open('alice-in-wonderland.txt', 'r') line = infile.readlines() do_something_more() finally: infile.close() 또 다른 예시로는 Thread Lock가 있습니다. lock을 acquire하면 해당 쓰레드만 공유 데이터에 접근할 수 있..

Python 2023.01.31

[DRF] Serializers 개념

🧙 이번 포스팅은 DRF의 Serializers 개념에 대해 알아 보도록 하겠습니다. 참고로 모든 내용은 https://www.django-rest-framework.org/api-guide/serializers/ 페이지에 다 있습니다. ✅ DRF의 처리 과정은 간략하게 다음과 같이 3단계로 이루어 집니다. 1. data를 DB로 부터 가져온다. 2. Serialize 합니다. 3. 클라이언트에게 response합니다. 그래서 우리는 2번 "Serialize 합니다."를 분석 파악을 해보는 시간을 가지겠습니다. 아래와 같이models와 Serializer이 있다고 가정하겠습니다. ✍ Comment / models.py class Comment(models.Model): post = models.Forei..

DRF & Django 2022.08.08