언어
-
[Golang] Database/sql언어/Golang 2016. 11. 26. 16:27
PackageSQL 데이타베이스를 사용하기 위해서는 표준패키지 database/sql을 사용합니다. database/sql 패키지는 관계형 데이타베이스들에게 공통적으로 사용되는 인터페이스들을 제공하고 있습니다.database/sql 패키지는 여러 종류의 SQL 데이타베이스를 지원하는데, 각각의 데이타베이스 Driver와 함께 사용됩니다.MySQL: https://github.com/go-sql-driver/mysqlMSSQL: https://github.com/denisenkom/go-mssqldbOracle: https://github.com/rana/oraPostgres: https://github.com/lib/pqSQLite: https://github.com/mattn/go-sqlite3DB2:..
-
[Golang] Defer언어/Golang 2016. 11. 25. 17:45
defer문은 주변 함수가 반환될 때까지 함수의 실행을 연기시킵니다. 지연호출의 인수는 즉시 평가되지만 주변 함수가 반환 될 때까지 함수 호출이 실행되지 않습니다. 예시1package main import "fmt" func main() { defer fmt.Println("world") fmt.Println("hello") } // 결과 hello world예시2package main import ( _ "github.com/lib/pq" "database/sql" ) func main() { // sql.DB 객체 db 생성 db, err := sql.Open("mysql", "root:pwd@tcp(127.0.0.1:3306)/testdb") // db 차후에 닫기 defer db.Close() /..
-
[Golang] fmt print언어/Golang 2016. 11. 11. 14:01
go에서 표준출력 및 입력을 하기 위해선 fmt라는 패키지를 사용해야 합니다. 기능에 따라 여러 print이 존재하여 처음 접하면 어느 것을 사용할 지 햇갈립니다. 또한 데이터를 출력 및 받고자 할 때 데이터 타입에 따라 사용해야 하는 포맷이 다르기 때문에 확인을 하고 사용해야 합니다.fmt.Fprint (OS)print 앞에 F가 붙으면 파일 입출력에 해당합니다. fprint는 파일에 쓰는 용도입니다.func Fprint, Fprintf, Fprintln문법/* Fprint */ // Fprint가 여러번 호출되도 한 줄로 이어서 파일에 쓰임 fmt.Fprint(파일, 파일에쓰고자 하는 데이터) /* Fprintln */ // Fprintln 여러번 호출될 때마다 마지막 줄에 줄넘김 (CRLF)가 추가..
-
[Python] \xef\xbb\xbf 제거언어/파이썬 & 장고 2016. 11. 3. 14:10
윈도우에서 내린 csv파일을 파이썬에서 읽어들일 때 맨 첫 번째 줄에 \xef\xbb\xbf 이 붙어 있는 것을 확인할 수 있습니다. 이것은 UTF8-BOM이라는 것을 나타내는 문자열입니다. 파이썬에서는 다음과 같이 해당 문자열을 출력하지 않고 파일을 읽어들일 수 있습니다.import codecs with codecs.open("file.txt", "r", encoding="utf-8-sig") as f: for line in f: # ... 만약 파이썬 버전이 2.7 이상이라면 codecs보단 io를 사용하는 것을 권장합니다. (빠르고 더 정확함)import io with codecs.open("file.txt", "r", encoding="utf-8-sig") as f: for line in f: #..
-
[Python] Tip - 재사용 가능한 @property 메서드에는 디스크립터를 사용언어/파이썬 & 장고 2016. 10. 29. 17:42
파이썬에 내장된 @property의 큰 문제점은 재사용성입니다. 다시 말해 @property로 데코레이트하는 메서드를 같은 클래스에서 속한 여러 속성에 사용하지 못합니다. 또한 관련 없는 클래스에서도 재사용할 수 없습니다.class Homework: def __init__(self): self._grade = 0 @property def grade(self): return self._grade @grade.setter def grade(self, value): if not (0
-
[Python] Tip - 게터와 세터 메서드 대신 일반 속성을 사용언어/파이썬 & 장고 2016. 10. 29. 16:21
다른 언어의 경우 게터와 세터 메서드를 명시적으로 구현하여 사용합니다. 하지만 파이썬에서는 명시적인 게터와 세터를 구현할 일이 거의 없습니다. 클래스의 변수들의 접근제어자를 public으로 할 경우 쉽게 접근할 수 있습니다. 또한 나중에 속성을 설정할 때 특별한 동작이 일어나야 하면 @property 데코레이터와 이에 대응하는 setter 속성을 사용하는 방법으로 바꿀 수 있습니다. class Resistance: def __init__(self): self._data = 10 @property def data(self): return self._data @data.setter def data(self, val): self._data = val self.current = self._data * 10 re..
-
[Python] 메타클래스와 속성언어/파이썬 & 장고 2016. 10. 29. 16:07
메타클래스는 파이썬의 기능목록에서 자주 언급되지만 실제로 메타클래스가 무엇을 하는지 이해하는 사람은 소수에 불과합니다. 메타클래스라는 이름은 어렴풋이 클래스 위에 있고 클래스를 넘어선다는 개념을 암시합니다. 간단히 설명하면 메타클래스를 이용하면 파이썬의 class문을 가로채서 클래스가 정의될 때마다 특별한 동작을 제공할 수 있습니다.속성 접근을 동적으로 사용자화하는 파이썬의 강력한 내장 기능이 있습니다. 파이썬의 객체 지향 구조와 함께 이용하면 이 기능들은 간단한 클래스를 복잡한 클래스로 쉽게 바꿔주는 훌륭한 도구가 됩니다.그러나 이런 강력한 기능에는 많은 함정이 있습니다. 동적 속성은 객체들을 오버라이드하다가 예상치 못한 부작용을 일으키게 할 수 있습니다. 메타클래스는 처음 접하는 사람은 도저히 이해할..
-
[Python] Tip - 공개 속성보다는 비공개 속성을 사용언어/파이썬 & 장고 2016. 10. 29. 16:01
파이썬에는 클래스 속성의 가시성(visibility)이 공개(public)와 비공개(private) 두 유형밖에 없습니다.class MyObject: def __init__(self): self.public_field = 5 self.__private_field=10 def get_private_field(self): return self.__private_field foo = MyObject() assert foo.public_field == 5 assert foo.__private_field == 10 # 에러 클래스 메서드도 같은 class 블록에 선언되어 있으므로 비공개 속성에 접근할 수 있습니다.class MyObject: def __init__(self): self.__private_field..
-
[Python] hasattr()언어/파이썬 & 장고 2016. 10. 29. 14:56
hasattr(object, name)Object내에 name에 해당하는 attribute가 있으면 True, 없으면 False를 리턴.class foobar(): data = [1, 2, 3, 4] def __init__(self, val): self.val = val >>> x = foobar >>> y = foobar(['a', 'b']) >>> z = foobar([1, 2]) >>> hasattr(x, 'data') True >>> hasattr(y, 'data') True >>> hasattr(x, 'val') False >>> hasattr(y, 'val') True >>> delattr(x, 'data') >>> hasattr(x, 'data') False >>> hasattr(y, 'da..
-
[Python] isinstance()언어/파이썬 & 장고 2016. 10. 29. 14:53
isinstance(1, int) # 1이 int형인지 알아봅니다. 결과는 True 입니다. isinstance(1.2, float) # 1.2가 float형인지 알아봅니다. 결과는 True 입니다. isinstance(1.2, int) # 1.2가 int형인지 알아봅니다. 결과는 False입니다. isinstance("hi", str) "hi"가 스트링인지 알아봅니다. 결과는 True입니다. isinstance(mylist, list) # mylist가 list형인지 알아봅니다. 결과는 True입니다. simclass = CSimple() isinstance(simclass, CSimple) # simclass가 CSimple 클래스인지 확인합니다. 결과는 True입니다.