pickle 모듈
·
[Language] - Python
개요직장에서 PyQt 작업하는 도중 QTableWidget에 들어있는 데이터를 복사해야 하는 경우가 생겼다. 필자는 데이터를 일일이 파싱하여 붙여넣는 과정이 매우 번거롭다고 생각했다. 그래서 QTableWidget 객체 자체를 복사하면 어떨까? 라는 의문을 가졌다. 그리고 처음으로 시도한 것은 copy 모듈을 사용하여 객체를 깊은 복사(deep copy)를 시도했다. 그러나, "Can't Pickle" 이라는 문구와 함께 복사가 되지 않았다. 복사가 되지 않는 이유를 찾아보니, PyQT의 클래스는 기본적으로 Qt(C++ 베이스)를 기반으로 하고 있고, model-view 패턴으로 이루어져 있기 때문에 pickle로는 메모리 상태만 복원이 가능할 뿐, 복사가 불가능하다는 글을 읽었다. 본론으로 돌아와 계속..
접근제한자 (Access Modifier)
·
[Language] - Python
개요이번 포스트에서는 파이썬의 접근제한자에 대해 다뤄보겠다. 파이썬을 사용하며 조금 익숙해질때 쯔음.. 무언가 이상한 점을 느꼈다. 왜 파이썬에서는 public, protected, private이라는 키워드를 본적이 없지? 일단 결론부터 얘기하면 파이썬에 접근제한자에 대한 키워드는 없다. 정답은 명명규칙에 있었다.멤버(함수, 변수)명 앞에 _를 한 번 쓰면 protected멤버(함수, 변수)명 앞에 _를 두 번 쓰면 private주의할 점은 멤버명 뒤에 _를 두 번 쓰면 다시 public이 된다. publicmember, member__, _member__, __member__protected_member, _member_private__member, __member_ 예시class Aa: _..
django 서버 구동 및 관리자 페이지 탐방
·
[Framework] - Django
이번에는 django 서버를 구동 및 관리자 페이지에 대해서 보겠다. 서버를 구동하기 위해서는 역시나 manage.py를 통해 구동한다. 루트 디렉터리에서 다음과 같이 명령어를 입력해보자.python manage.py runserver [IP주소]:[PORT]옵션으로 IP주소와 포트 번호를 입력하면 구동 위치가 바뀐다. 필자는 기본으로 진행을 하겠다. 성공적으로 구동되었다면 체크된 url을 브라우저에서 실행시켰을 때 축하한다는 문구가 출력될 것이다. 그렇다면 이제 관리자 페이지에 접속하기 위한 준비를 해보자. python manage.py migrate위의 명령어는 생성된 마이그레이션을 적용하는 명령어이다. 이 부분에 대해서는 뒤에서 자세하게 다룰 예정이니 일단 이 명령어를 실행하도록 한다. (최초 실행..
싱글턴 패턴 (Singletone Pattern)
·
[CS] - Design Pattern
짧지만... 첫 직장에서 Unity를 개발했다. 생전 처음으로 Unity를 접해본 나는 Component, GameObject등 다양한 타입의 객체들이 있었는데 무작정 작동을 하는데에만 신경을 쓴 나머지 같은 객체의 생성자를 불필요하게 남발한 적이 있다. 그리고, 필자는 책임님한테 무지하게 혼났다능..ㅠㅠ 그리고 디자인패턴에 관심을 가지게 되어 처음으로 공부한 패턴이다. 이 글을 보는 분은 나같은 화를 당하지 않았으면 하는 마음이다.. 각설하고, 싱글턴 패턴은 위에서 쓴 강조표시 그대로 객체의 생성을 단 한번만 하는게 초점이라고 생각한다. 그럼 코드를 보기 전에 상상해보자. "단 한번"이라는 조건이 붙어있기 때문에 해당 객체가 존재한다면? 생성자를 호출하지 않고, 존재하지 않을때에만 즉, 메모리상에 해당..
정적 메소드 staticmethod, classmethod, instancemethod
·
[Language] - Python
개요이번에는 파이썬의 메소드 3종류를 알아보겠다. @staticmethod, @classmethod 데코레이터를 메소드 위에 작성하면 해당 메소드는 정적 메소드로 분류된다. 데코레이터를 사용하지 않으면 instancemethod에 해당된다. 정적 메소드는 인스턴스를 생성하지 않아도 호출이 가능하다. 즉, self 키워드를 사용하지 않아도 정의할 수 있으며, 인스턴스가 아닌 클래스 자체에 종속된 멤버이다. @staticmethodclass A: num = 10 @staticmethod def plus(x): return x + A.numplus() 메소드의 return 값을 확인해보면 해당 메소드는 자신의 멤버(속성 및 메소드)를 참조할 방법이 없기 때문에 직접 클래스명(A...
가변인자 args, kwargs
·
[Language] - Python
개요 Python 프로그래밍을 하다보면 함수에 정해진 파라미터 외에도 동적으로 인자를 전달해야 하는 경우가 발생한다. 이러한 인자를 가변(可變)인자라고 하는데, 가능할 가(可) 변할 변(變)을 의미한다. 쉽게 말해, 런타임 도중 정해진 갯수만큼의 인자가 넘어가는 것이 아닌 로직에 따라 변할 수 있는 길이의 인자가 함수의 파라미터로 전달되는 것을 의미한다. Python에서 지원하는 가변인자의 종류는 크게 2종류이다.args : arguments, 인자의 iterables만 전달되는 형태kwargs : keyword arguments, 인자의 매개변수명과 인자가 딕셔너리의 키-밸류로 구성되어 전달되는 형태 argsdef arg_func(*args): for idx, arg in enumerate(ar..
Django 시작하기
·
[Framework] - Django
이번에는 django 웹 프레임워크를 설치하고 환경을 세팅하겠다. 우선, django를 사용하는 것은 "가상환경"에서 하는것을 추천한다. 왜? django의 버전에 대응하기 위함이다. 물론 django뿐만 아니라 다른 패키지들 또한 버전 대응에 용이하려면 가상환경에서 프로젝트를 수행하는 것이 용이하다.가상환경 설치에 관련된 내용은 virtualenv에 관한 포스트를 보면된다. 많은 포스트들을 보면 커맨드창에서 가상환경을 활성화 시키고 서버를 키거나, 패키지를 관리(pip)하는 등.. 여러 작업을 하는데 필자는 Pycharm의 terminal기능을 애용한다. Pycharm에서는 애초에 프로젝트 단위로 이미 설치된 가상환경을 세팅할 수 있다. 터미널을 추가하자마자 해당 가상환경이 활성화되어 있는 상태이고, ..
GoF 디자인 패턴
·
[CS] - Design Pattern
디자인 패턴을 배운적이 없는 신입사원.. 무지는 죄이기에 고생하고 있다. 스스로 정리해보고자 여러곳에서 찾아보고 이해한 내용을 정리하고자 한다. 틀린 내용은 언제나 지적환영. 디자인 패턴은 크게 3가지로 분류된다. 1. 생성패턴 (Creational Pattern)객체를 생성과 관련된 패턴.e.g) 추상팩토리, 빌더, 팩토리 메소드, 프로토타입, 싱글턴 2. 구조패턴 (Structural Pattern)클래스나 객체들을 조합하여 더 큰 구조를 만드는 패턴.e.g) 어댑터, 브릿지, 컴포지트, 데코레이터, 퍼사드, 플라이웨이트, 프록시 3. 행위패턴 (Behavioral Pattern)클래스나 객체 사이의 알고리즘이나 책임 분배에 관련된 패턴.e.g) 책임연쇄, 커맨드, 인터프리터, 이터레이터, 미디에이터..