8. descriptor(디스크립터)
descriptor (디스크립터)란 파이썬 핵심 기능 중에 하나로, __get__, __set__, 또는 __delete__ 메소드 중 한 개 이상으로 구현되어 있는 객체를 말한다. 이렇게 구현된 디스크립터는 다른 객체의 속성으로 정의할 수 있으며, 그 속성에 대한 읽기, 쓰기, 삭제 연산을 할 때 동작에 따라 각각 구현된 메소드가 호출이 된다. 즉, 일반적인 상황에서는 속성 B를 찾를 찾기 위해 A의 namespace를 일일이 조회를 한다고 할 때, 디스크립터를 사용하면, A.B로 조회가 가능하다는 것이다. 이전에 배웠던, getter, setter를 high 레벨에서 사용한다면, 디스크립터는 보다 low 레벨에서 사용한다. 이렇게 low 레벨에서 사용할 수 있다면, 원하는 타이밍에 내 의도에 맞는 로..
6. method overriding, method overloading(메소드 오버라이딩, 메소드 오버로딩)
1. method overriding(메소드 오버라이딩) method overriding(메소드 오버라이딩)은 상위 클래스(부모 클래스, 슈퍼 클래스)를 상속받는 하위 클래스(자식 클래스, 서브 클래스)에서 재정의하여 사용하는 것을 의미힌다. 부모 클래스의 메소드를 추상화, 재정의할 수 있고, 확장, 또는 다양한 방식으로 동작하도록 변주를 줘 구조적 접근이 가능하다. 쉽게 말하면, 상속받은 부모 클래스의 원래 기능을 유지하면서 자식 클래스에 새로운 기능을 덧붙일 때 사용한다. method overriding 을 활용하면 가독성 증가, 오류 가능성 감소, 메소드 이름 절약, 유지 보수성 증가 등의 장점이 있다. method overriding 의 기본적인 방식은 아래와 같다. 자식 클래스인 c1에서 부모 ..
5. getter, setter, property
앞선 글에서 이야기 했듯이, python에서의 private 변수는 강제로 변수를 클래스 이름까지 작성해가면서 수정하지 않는 한, 접근할 수 없다. 이 떄, 간편한 방법으로 나온 것이 get, set 메소드(getter, setter)를 활용하는 방법이다. 위처럼 get, set 메소드를 활용하면, "_example__y" 처럼 직접 작성하지는 않지만, 이 역시도 지양하는 방법이다. 어쨌든, 직접 인스턴스를 만들어 set 메소드를 통해 직접 지정해야하고, 수정하고 싶은 private 변수마다 get, set를 다 작성해야하므로 코드의 양이 방대하게 늘어나 가독성이 떨어질 수 있다. 이보다 더 간결하고, 가독성 높은 방법이 property 데코레이터를 사용하는 것이다. getter, setter, dele..
2. Lambda, Map, Reduce, Filter
python에는 lambda라는 익명 함수 개념이 존재한다. 일반함수는 재사용을 하기 때문에 메모리에 누적, 저장이 되는 반면, lambda는 이름이 없는 익명함수라서 저장이 되지 않는다. 이런 점 때문에 주로 시퀀스형 전처리 과정에 lambda와 map, reduce, filter 함수를 같이 사용하는 경우가 많다. 이 글에서는 lambda와 map, reduce, filter 함수를 살펴보자. 1. Lambda pyhton에서는 def를 사용하여 함수를 생성, 호출하는 과정을 지나야 함수를 사용할 수 있다. 이런 과정을 건너뛰어 메모리의 절약과 간편함이라는 장점을 가지고 있는 함수가 lambda 함수이다. 일반적으로 위의 과정을 거쳐 함수가 생성된다. 이에 반해 lambda 함수를 사용할 경우, 한 ..