개요 개발을 하다보면 의존성 주입이 필요한 경우가 생긴다. 예를 들어 아래와 같은 코드에서 우리는 어떻게 의존성 주입을 적용해야 할까? 의존성 주입 이전 class PngConversion: def converse(data: Data): # png conversion algorithm return data class JPEGConversion: def converse(data: Data): # jpeg conversion algorithm return data class Transformer: def __init__(self, data: Data): self.converser = PngConversion() self.data = data def converse(self): self.converser.co..
언어/파이썬
GIL (Global Interpreter Lock) 여러 개의 스레드가 파이썬 바이트코드를 한번에 하나만 사용할 수 있게 락을 거는것, 파이썬 인터프리터를 제어할 수 있도록하는 뮤택스. 등장 배경 파이썬은 레퍼런스 카운팅 방식으로 메모리를 관리하는데, 여러개의 스레드가 동시에 객체를 참조할 경우 Race Condition 이 발생하여, 메모리 누수가 발생할 수 있음. 이러한 문제점을 해결하기 위해 GIL 개념이 도입됨 객체마다도 Lock 을 걸 수 있겠지만 비효율적이기 때문에 Global 한 락을 하나 설정하여 사용하는 방식으로 접근함 성능 차이 CPU Bound 단일 스레드 # 단일 스레드 수행시간 CNT = 1000000 def run(n): ret = 0 for i in range(n): ret ..
파이썬 메모리 관리 기법 기존 메모리 관리 문제점 C와 C++ 언어는 메모리 관리를 수동으로 해야하는데 이때 발생할 수 있는 문제점이 개발자가 개발하면 메모리 관리를 철저하게 하지 않으면 애플리케이션 성능이 엄청나게 떨어진다는 단점이 있음 필요없는 메모리를 비우지 않았을 때 사용중인 메모리 비우기 Python GC (Garbage Collector) Python 에서 가비지 컬렉션은 아래 두가지 개념을 사용함 레퍼런스 카운팅 (Reference counting) 세대별 가비지 컬렉션 (Generational garbage collection) CPython 에서의 Reference Counting CPython에서의 주요 garbage collection mechanism 은 reference count..
개요 파이썬의 모든 데이터는 객체 혹은 객체 간의 관계로 표현됩니다. 모든 객체는 Identity, Type, Value를 가지고 있습니다. Identity 특정 객체의 identity 는 선언된 이후 변하지 않습니다. 이는 메모리에 있는 주소 라고 생각할 수 있습니다. 파이썬의 is Operator는 두 객체의 Identity를 비교합니다. python built-in function 인 in() 함수를 사용하여 특정 객체의 Identity를 확인 할 수 있습니다. a = 5 print(id(a)) ** 출력 ** 94252923837056 Type 객체의 타입은 할당이 가능한 값과 연산을 정의합니다. (예시. 객체의 Length를 구할 수 있는가?) python built-in function인 ty..