언어
-
[Python] Tip - 믹스인 유틸리티 클래스에만 다중 상속을 사용언어/파이썬 & 장고 2016. 10. 26. 21:00
파이썬은 다중 상속을 다루기 쉽게 하는 기능을 내장한 객체지향 언어입니다. 다중 상속으로 얻는 편리함과 캡슐화가 필요하다면 대신 믹스인(mix-in)을 작성하는 방안을 고려해야 합니다. 믹스인이란 클래스에서 제공해야 하는 추가적인 메서드만 정의하는 작은 클래스를 말합니다. 믹스인 클래스는 자체의 인스턴스 속성(attribute)를 정의하지 않으며 __init__ 생성자를 호출하도록 요구하지 않습니다.Mix-In 상세 설명 파이썬에서의 믹스인은믹스 인은 특별한 종류의 다중 상속입니다. 믹스인이 사용되는 두 가지 주요 상황이 있습니다.한 클래스에 대해 많은 선택 기능을 제공할 때# 많은 다른 클래스에서 하나의 특정 기능을 사용하려고합니다. class HasMethod1(object): def method(s..
-
[Golang] 기본 디렉터리 설정언어/Golang 2016. 10. 26. 15:57
설치는 https://golang.org/dl/에서 받으시면 됩니다. 기본 디렉토리Go 언어는 모든 부분이 패키지로 구성되어 있고, 인터넷에 있는 소스 코드를 받아와서 바로 사용하기 때문에 기준 디렉터리가 필요합니다.다음과 같이 company 디렉터리를 예로 들면 company아래에 bin, pkg, src 디렉터리가 들어있습니다.bin: 소스 파일(패키지)를 컴파일하여 실행 파일(바이너리)이 생성되는 디렉터리입니다.pkg: 패키지를 컴파일하여 라이브러리 파일이 생성되는 디렉터리입니다. pkg 디렉터리 아래에는 _ 형식으로 디렉터리가 생성됩니다. 64비트 리눅스라면 linux_amd64 디렉터리 아래에 라이브러리 파일이 생성됩니다.src: 내가 작성한 소스 파일과 인터넷에서 자동으로 받아온 소스 파일이 ..
-
[Golang] Golang이란?언어/Golang 2016. 10. 26. 14:55
Go 언어는 빠른 성능, 안정성, 편의성, 쉬운 프로그래밍을 목표로 개발되었으며 범용 프로그래밍 언어입니다.내용구글이 2009년에 만든 프로그래밍 언어입니다. 이름이 이름인 만큼 검색이 불편해 보통 golang이라고 많이 이야기합니다. Go 언어의 사용자들은 고퍼(Gopher)라고 부르며, 고퍼들을 위한 연례행사인 고퍼콘(Gophercon)이 세계 각국에서 매년 열리고 있습니다. 전반적으로 C에서 영향을 많이 받았으며, 컨테이너 기반 가상화 도구인 Docker를 개발하는데에 사용된 언어입니다. 또한 Go 언어를 이용해서 안드로이드와 iOS 앱을 제작할 수 있게 적용 중입니다. 또한 Python이 그렇듯 웹 개발에도 쓰이고 있고 특히 서버 사이드 언어로서 좋은 평가를 받고 있습니다. 또한, Go가 자체적으..
-
[Python] Tip - 거대한 (대용량) 데이터를 함수로 처리할 때 고려할 점언어/파이썬 & 장고 2016. 10. 25. 14:16
만약 리스트나 딕셔너리와 같은 컨테이너 타입에 10만, 100만 혹은 1억 이상의 데이터가 들어있다고 가정합니다. 이 부분자체에서 이미 엄청난 메모리를 소비합니다. 이러한 거대한 값이 들어있는 변수를 함수의 인수로 전달한다고 하면 어떤지 알아보겠습니다. 먼저 맨 처음 생각 한 것이 이 거대한 값이 들어있는 변수에 대한 메모리 주소공간을 전달하는 것이 아닌 값 자체를 전부 전달한다고 생각했습니다. 그래서 아래와 같이 생각을 해봤습니다.컨테이너 변수를 global 변수로 선언먼저 파이썬에는 글로벌 변수라는 것이 없습니다. (이 말은 모든 모듈을 자동적으로 사용할 수 있습니다.) 만약 있다 해도 글로벌 변수로 해당 데이터를 잡아버리면 프로그램이 죽을 때까지 거대한 메모리를 계속해서 잡고 있기 때문에 글로벌변수..
-
[Python] Tip - super()로 부모클래스를 초기화언어/파이썬 & 장고 2016. 10. 22. 22:27
super를 사용하지 않고 자식클래스에서 부모클래스를 초기화 할 때 다음과 같은 방법을 사용합니다.class Parent: def __init__(self,num): print('parent', num) class Child(Parent):ㄷ def __init__(self): Parent.__init__(5) 클래스가 다중상속을 받는다면 (보통 피해야되지만) 예기치 못한 동작을 일으킵니다.class Parent: def __init__(self, value): self.value = value class Parent1: def __init__(self): self.value *= 2 class Parent2: def __init__(self): self.value += 5 class Child(Pare..
-
[Python] Tip - 객체를 범용으로 생성하려면 @classmethod 다형성을 사용언어/파이썬 & 장고 2016. 10. 22. 20:18
파이썬에서는 객체가 다형성을 지원할 뿐만 아니라 클래스도 다형성을 지원합니다. 다형성은 계층 구조에 속한 여러 클래스가 자체의 메서드를 독립적인 버전으로 구현하는 방식입니다. 다형성을 이용하면 여러 클래스가 같은 인터페이스나 추상 기반 클래스를 충족하면서도 다른 기능을 제공할 수 있습니다.예를 들어 맵리듀스 구현을 작성할 때 입력 데이터를 표현할 공통 클래스가 필요하다고 가정합니다. 다음은 서브클래스에서 정의해야 하는 read메서드가 있는 입력 데이터 클래스입니다.class InputData: def read(self): raise NotImplementedError class PathInputData(InputData): """ 디스크에 있는 파일에서 데이터를 읽어오는 InputData의 서브클래스 "..
-
[Python] Tip - 인터페이스가 간단하면 클래스 대신 함수언어/파이썬 & 장고 2016. 10. 22. 19:21
파이썬 내장 API의 상당수는 함수를 넘겨서 동작을 사용자화하는 기능이 있습니다. API는 이런 후크(hook)를 이용해서 사용자가 작성한 코드를 실행 중에 호출합니다. 다음 예제는 list 타입의 sort 메서드는 정렬에 필요한 각 인덱스의 값을 결정하는 선택적인 key 인수를 받습니다. lambda 표현식을 key 후크로 넘겨서 이름 리스트를 길이로 정렬합니다.names = ['aocrates', 'archimedes', 'plato', 'aristotle'] names.sort(key=lambda x: len(x)) print(names) # 결과 # ['plato', 'aocrates', 'aristotle', 'archimedes'] 다른 언어에서라면 후크를 추상 클래스로 정의할 것이라고 예상할..
-
[Python] Tip - 딕셔너리와 튜플보다는 헬퍼 클래스로 관리언어/파이썬 & 장고 2016. 10. 21. 21:40
파이썬에 내장되어 있는 딕셔너리 타입은 객체의 수명이 지속되는 동안 동적인 내부 상태를 관리하는 용도로 좋습니다. 여기서 '동적'이란 예상하지 못한 식별자들을 관리해야 하는 상황을 뜻합니다. 예를 들어 이름을 모르는 학생 집단의 성적을 기록하고 싶다고 할 때, 학생 별로 미리 정의된 속성을 사용하지 않고 딕셔너리에 이름을 저장하는 클래스를 정의할 수 있습니다.class SimpleGradebook: def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = [] def report_grade(self, name, score): self._grades[name].append(score) def average_..