반응형

전체 글 60

Effective Python. 재사용 가능한 @property 메서드에는 디스크립터를 사용하자.

"Better Way 29. 게터와 세터 메서드 대신에 일반 속성을 사용하자."에서 소개된 @property의 가장 큰 문제점은 재사용성이다. 다시 말해, @property로 데코레이트하는 메서드를 같은 클래스에 속한 여러 속성에 사용하지 못한다. 또한, 관련 없는 클래스에서도 재사용할 수 없다. 아래의 예시를 보자. 글쓰기(writing)와 수학(math)의 시험 점수를 관리하는 Exam이라는 클래스를 만든다고 해보자. class Exam: def __init__(self): self._writing_grade = 0 self._math_grade = 0 @staticmethod def _check_grade(value): if not (0

Effective Python. @property, @{property}.setter 사용

보통 자바와 같은 언어에 익숙한 사람이라면, 아래와 같이 getter / setter 함수에 익숙할 것이다. class OldResistor: def __init__(self, ohms): self._ohms = ohms def get_ohms(self): return self._ohms def set_ohms(self, ohms): self._ohms = ohms 이렇게 setter와 getter를 사용하는 것은 다음과 같이 사용할 수 있다. r0 = OldResistor(50e3) r0.set_ohms(10e3) r3.set_ohms(r0.get_ohms() + 5e3) 간단하고, 클래스의 인터페이스를 정의하는데 도움이 되고, 사용법을 검증할 수 있게 하고, 경계를 정의하기 쉽게 해준다. 그러나 파이..

Effective Python. 메타클래스와 속성

메타클래스를 이용하면 파이썬의 class 문을 가로채서 클래스가 정의될 때마다 특별한 동작을 제공할 수 있다. 또, 메타클래스 못지 않게 설명하기 어렵지만, 강력한 기능은 속성 접근을 동적으로 사용자화 하는 파이썬의 내장 기능이다. 아래의 챕터들을 통해, 해당 내용들을 설명하고자 한다. Better Way 29. 게터와 세터 메서드 대신에 일반 속성을 사용하자. Better Way 31. 재사용 가능한 @property 메서드에는 디스크립터를 사용하자. Better Way 32. 지연 속성에는 __getattr__, __getattribute__, __setattr__을 사용하자. Better Way 33. 메타클래스로 서브클래스를 검증하자. Better Way 35. 메타클래스로 클래스 속성에 주석을 ..

객체 지향적 사고, 객체 지향적 프로그래밍 Part 1.

객체 지향적인 프로그래밍을 한다고 했을 때 떠오르는 것들 SOLID Single Responsibility Principle Open Closed Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle GoF Factory Pattern Strategy Pattern Decorator Pattern Visitor Pattern … 구조적(절차지향적) 프로그래밍 vs 객체지향 프로그래밍 이 둘의 가장 큰 차이점은, 객체 지향 프로그래밍에서는 “Shift of responsibility”(책임의 이동) 라는 개념이 적용되었다는 것이다. 그것이 핵심이다. 예를 들어, “모든 학생들에..

60분만에 이해하는 DynamoDB 모델링: DynamoDB Modeling

사실 이 제목은 내가 지은 것은 아니고, AWS re:invent에서 발표될때, "Data modeling with Amazon DynamoDB in 60 minutes" 라는 제목으로 소개가 되서 따라 적어보았다; 도입. 어쨌든 이번 포스트에서 소개하고자 하는 내용은 "어떻게 하면 더 효율적으로 DynamoDB를 모델링 할 수 있을까"에 관한 것이다. RDBMS를 다루면서, 테이블들의 관계를 나타내고 모델링 하는 것은 많이들 경험을 해봤거나, 들어봤을 것이다. 그러나 NoSQL 기술에 해당하는 DynamoDB는 어떻게 모델링하는 것이 좋을까. 게다가 엄밀히는, (MongoDB 같은) 기존에 잘 알려진 NoSQL과는 좀 다른 특성을 가진 DynamoDB는 어떻게 모델링하는 것이 좋은지 살펴보자. Dyna..

AWS/DynamoDB 2020.06.24

[MacOS] Address already in use 에러났을 때

로컬 환경에서 개발하고, 테스트 하다보면 종종 마주하는 에러. 어떠한 오류에 의해, 특정 주소(포트)에서 실행되고 있는 프로그램이 정상 종료되지 않은 것이므로, 간단하게 그냥 직접 종료시켜주면 되는 것이다. 1. 해당 포트가 열려있는지 검사 (찾고자하는 포트의 번호가 8000번 이라고 가정해보자) 일반적으로 아래의 두 가지 모두 가능하다. 특히 두번째 방법의 경우, Mac OS EI Capitan 이후의 버전을 사용하고 있거나, 자신의 로컬에 있는 netstat이 -p 옵션을 지원하지 않는 경우 쓸 수 있다. netstat -vanp tcp | grep 8000 또는, sudo lsof -i :8000 2. 강제 종료 kill -9 끝.

etc 2020.05.13

싱글톤의 모든 것. Singleton A to Z

싱글톤의 모든 것. 까지는 좀 구라고. '이 정도 알면 어디가서 싱글톤이 뭔지는 안다고 할 수 있다' 정도가 아닐까 싶다. 1. 전통적인 싱글톤 방식 public class Singleton { private static Singleton uniqueInstance; // other instance variable in here public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } } 문제점: 멀티스레드 환경에서, if 문에 두 스레드(혹은 그 이상)가 동시에 들어가서 인스턴스가 두 개(혹은 그 이상)가 만들어질 수 있음. 2..

Lambda를 활용한 저비용 분산 캐시

올 2월, USENIX에서 발표된 아주 따끈따끈한 논문을 하나 소개하고자 한다. 제목은 "InfiniCache: Exploiting Ephemeral Serverless Functions to Build a Cost-Effective Memory Cache" 뭐 어려운 말로 적혀있는 것 같지만, 요약하면, "Lambda를 활용한 저비용 분산 캐시" 쯤 될 것 같다. Lambda를 왜 활용하는 걸까. 무슨 이득이 있을까. AWS에서 (분산) 캐시를 사용하는 가장 간단한 방법은 Managed Service인 ElastiCache를 사용하는 것이다. 클라이언트는 ElastiCache를 쓰기 위해서 특별한 노력이 필요하지 않고, 그저 인스턴스를 생성해서, 만들어진 Endpoint를 통해 명령을 보내고 결과를 받..

AWS/Lambda 2020.04.06

파이썬 메타클래스 쉽고 깊게 이해하기, Python Metaclass A to Z

Prerequisite 파이썬 메타클래스를 이해하기전에 먼저 확실하게 구분하고 가야하는 것이 있는데, "객체와 인스턴스의 차이"이다. 우리가 객체 지향 언어를 배울 때, 대개 클래스라는 '틀'부터 객체라는 '실체'가 만들어진 것이라고 배운다. 이때 그 '실체'를 우리는 객체라고도 하고, 인스턴스라고도 하는데, 사실 정확히 따지면 약간의 어감상 차이가 있다. 그리고 그 약간의 차이를 정확하게 인지하고 있어야, 파이썬의 메타클래스를 이해하는데 더욱 도움이 된다. 객체와 인스턴스 클래스로 만든 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 이렇게 생각해 보자. a = Cookie() 이렇게 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉, 인스턴스라는 말은 특..

반응형