라벨이 python_oop인 게시물 표시

Python ABC-1

Python ABC abc의 역할 직접 class를 상속받지 않고도 isinstance, issubclass를 통해 subclass로 인지되는 가상 subclass 를 만들 수 있게한다. Python의 Abstract base class는 hasattr , magic method와 같은 방법보다 인터페이스를 정의함으로서  duck-typing을 보완 한다. isinstance(x, collections.Iterable)이 hasattr()나 그에 동등한 로직의 try...except 블록의 코드보다 더 이해하기 쉽다. (의도가 명확하다.) 즉, a라는 클래스가 A라는 상위 클래스의 인터페이스를 알맞게 구현하기만 한다면 a는 A의 subclass이다. abstract class/ 추상 클래스 세부 구현이 누락된 Class concrete class/ 구상 클래스 완전한 속성과 메서드가 구현된 Class Open-closed principle SOLID원칙 중 Open-closed 원칙을 만족한다. Open-closed원칙을 지키지 않은 코드는 <Open-closed principal> 기능을 추가할 때마다 기존 코드의 변경이 발생한다. - 새로운 class나 기능의 확장에 대해서는 열려있고 - 수정에 대해서는 폐쇄적이어야한다. 개방-폐쇄 원칙을 준수하는 코드는 객체지향의 장점인 다형성과 확장성을 만족한다. 잘 활용한다면 새로운 변경사항에 대해 유연하며 유지보수 비용 감소의 장점으로 이어진다. Polymorphic Open-closed principle 1990년경 Bertrand Meyer가 작성한 개방-폐쇄 원칙은 추상 인터페이스(abstracted interfaces)를  참조하기 위해 재정의되었다. abstract base class로부터 상속을 권고한다. 인터페이스 스펙은 상속을 통해 재사용될 수 있지만 재구현까지는 할 필요가 없다. 기존 인터페이스는 수정에 대해, 그리고 새 구현에 대해 폐쇄돼있으며 최소한의 abstracted...

Python Glossary

Python Glossary https://docs.python.org/3/glossary.html Python 공식 문서의 Glossary에서는  Python의 주요 용어들을 설명한다. 객체지향 파이썬을 배울 때면 객체지향 프로그래밍 트렌드에서 쓰이는 용어들을 접하게 되는데. Glossary를 정독하고 SOLID 원칙과 파이썬의 객체지향설계를 구현한다면 파이썬의 라이브러리 구조나, 모듈 설계 방법을 더 잘 이해할 수 있음.

Python 접근제한자 public, protected, private

접근제한자는 어떤 클래스의 변수, 인스턴스 변수 , 메서드 사용을 제한한다. python 에는 public, protected, private이 있다. java에는 public, protected, private, default가 있다. public 외부 환경이 클래스의 멤버에 접근 가능하다. (var) protected 자신 클래스 내부 or 상속받은 자식 클래스에서  접근 가능하다. _ 언더바 1개 ( _var ) private 자신 클래스 내부에서만 접근가능하다. __ 언더바 2개 (__var) 파이썬에서 접근제한은 변수나 메서드 이름을 mangling하여 저장함으로서 접근 제한 구현을 하고있기 때문에 엄밀하게 제한이 된 것은 아니며 파이썬 인터프리터에서 접근제한자 오용 오류를 띄우지는 않는다. IDE에 따라 경고 메시지를 띄워주는 경우는 있다. class Student: __homeschool = "j_School" # private class attribute __teacher = "Andrew Drake" # private class attribute def __init__(self, name, age): # instance attribute self.name = name # instance public attribute self.__age = age # instance private attribute # def __ display(self): # private method # print("This is private method") class ChildStudent(Student): __another_school = "b_School" __teacher = "MJ" std = Student("Kim Seung Joo", 20) print(s...

매직 메서드와 빌트인 함수의 차이

<매직 메서드> 프로그래밍 언어에서 사전에 정의해놓은 이름을 가지는 메서드 메서드라는 이름답게, 주로 클래스로부터 생성된 객체가 호출할 수 있는 함수이다. <Python에서의 매직 메서드> 매직 메서드는 순수 파이썬만 이용할 때, 파이썬 라이브러리 또는 프레임워크를 사용할 때, Custom class를 구현할 때 알아두어야하는 개념들이다. 애플리케이션에 따라  매직 메서드들을 오버라이딩하기도하고 필요에 따라 사용하지 않는 경우도 있기 때문에 OOP 설계를 위해서는 파이썬 공식문서의 데이터 모델을 정독해야겠다. <Python에서의 매직 메서드 예시>  매직 메서드의 예시함수들은 다음과 같다. __init__(): 생성자 함수.  인스턴스 초기화 할 때 호출된다. 즉, 객체 생성시 호출된다.  __call__(): 인스턴스가 호출됐을 때 실행. 클래스 안에 이 함수를 쓰면 클래스로부터 생성된 객체를 호출가능하게 만들어준다. __repr__(): 호출하면 객체에 대해 설명하는 텍스트를 주로 리턴한다. custom class의 경우 좋은 포맷을 구현해 놓았다면  디버깅할 때 수월하게할 수 있다. __setattr__(): 속성과 그 대응하는 값을 추가할 때 사용 __hash__(): 빌트인 함수 hash()에 의해 호출되며 integer를 리턴한다. 같은 객체인지의 비교를 위해 사용한다. 사용하고자하는 class가 __eq__() 메서드를 구현하지 않았다면 __hash__() 또한 구현하지 않아야한다. 아래 예시 코드는 public, protected, private 속성, 메서드값을 알아보기 위해 작성한 코드인데 매직 메서드를 설명할 수도 있어서 같은 코드를 사용하였다. 출력값은 해당 객체에 어떤 프로퍼티와 메서드들이 구현되어있는지 리스트 형태로 보여준다. dir() 빌트인 함수를 통해 출력하였다. class Student: __homeschool = "j_School" # priv...

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code TIL 6 : 6장. 객체와 자료구조

백엔드 개발자가 Djnago fullstack 사이드 프로젝트를하며 ( html, css, vanillaJS 그리고 JS프레임워크 )