분류 전체보기
-
[Golang] 구조체 (struct)언어/Golang 2017. 2. 15. 20:03
구조체는 필드들을 묶어놓은 것으로 다른 언어들의 구조체, 클래스, 레코드 등과 비슷한 역할을 합니다. 구조체를 이용하면 더 복잡한 자료형을 정의할 수 있습니다. 자료를 네트워크를 통하여 전송하거나 파일에 저장하고 불러오는 경우에는 직렬화 및 역직렬화 기법을 활용해야 합니다. JSON은 이런 직렬화 및 역직렬화 형식 중에 하나로, 복잡한 구조체를 어떻게 JSON 형태로 직렬화하고 역직렬화할 수 있는지도 확인해봅니다.구조체란?필드들의 모음 혹은 묶음을 구조체라고 합니다. 명명된 구성요소들을 필드라고 합니다. 배열이 서로 같은 자료형의 자료들을 묶어놓은 것이라면 구조체는 서로 다른 자료형의 자료들도 묶을 수 있습니다.선언var task = struct { title string done bool due *ti..
-
[Golang] 메서드(Method)언어/Golang 2017. 2. 15. 19:47
Go 언어는 객체지향 프로그래밍(OOP)을 고유의 방식으로 지원합니다. 타 언어의 OOP의 클래스가 필드와 메서드를 함께 갖는 것과 달리 Go 언어에서는 struct가 필드만을 가지며, 메서드는 별도로 분리되어 정의됩니다.Go 메서드는 특별한 형태의 func 함수입니다. 메서드는 함수 정의에서 func 키워드와 함수명 사이에 "그 함수가 어떤 struct를 위한 메서드인지"를 표시하게 됩니다. 흔히 receiver(리시버)로 불리는 이 부분은 메서드가 속한 struct 타입과 struct 변수명을 지정하는데, struct 변수명은 함수 내에서 마치 입력 파라미터처럼 사용됩니다. 예를 들어, 아래 예제는 Rect라는 struct를 정의하고 area() 라는 메서드를 정의하고 있습니다. func와 area(..
-
[Python] 병렬처리 (Concurrent.futures)언어/파이썬 & 장고 2017. 2. 15. 17:13
Python3.2 에서 concurrent.futures 모듈이 추가되었습니다. 이 모듈은 멀티스레드와 멀티 프로세스에 대한 고수준 API를 포함하고 있으며 스레드 풀/프로세스 풀 기반의 동작을 기본적으로 지원합니다.파이썬 제약 : GILPython은 두 개 이상의 스레드가 동시에 실행될 때 두 개 이상의 스레드가 하나의 자원을 동시에 액세스할 때 발생할 수 있는 문제점을 방지하기 위해 GIL(Global Internal Lock)이라는 것을 도입했습니다. 즉, 스레드가 실행될 때, 프로그램 내의 리소스 전체에 락이 걸립니다. 결국 Python 구현에서는 동시에 몇 개의 스레드가 실행이 되던 간에 GIL에 의해서 한 번에 하나의 스레드만 실행됩니다. 멀티 스레드의 경우 문맥교환(Context Switch..
-
[Python] Tip - 큰 따옴표, 작은 따옴표 (Double Quote, Single Quote)언어/파이썬 & 장고 2017. 2. 15. 15:16
파이썬에서 문자열을 지정하는데에는 큰 따옴표(")와 작은 따옴표(')가 있습니다. 두 가지가 존재하지만 어떤 것을 사용하던 전부 똑같습니다.single = 'abcde가' double = "abcde가" assert single == double print("single == double") assert single is double print (single is double) # 결과 # single == double # True 규칙은 아니지만 큰 따옴표와 작은 따옴표를 섞어쓰면 혼란을 야기할 수도 있으므로 아래와 같이 규칙을 정해 사용을 권합니다.큰 따옴표 " (Double Quote)텍스트작은 따옴표 ' (Single Quote)기호, 식별자3개의 큰 따옴표 """docstrings, 정규표현식기..
-
[Python] Postgresql - SSL error decryption failed or bad record mac 에러 해결법언어/파이썬 & 장고 2017. 2. 14. 16:39
ssl error decryption failed or bad record mac 에러... 이전에 uWSGI에서도 문제가 발생한 적이 있었습니다. 이번에는 PostgreSQL 파이썬 모듈인 psycopg2에서 발생했습니다. 원인을 찾아보니 이러한 에러가 발생한 것은 PostgreSQL쪽이 아니라 ProcessPoolExecutor (병렬처리) 부분이였습니다. 원인DB connection과 cursor를 전역변수로 선언한 다음, 병렬처리를 실행하려 할 때 아래와 같이 함수에서 공통적으로 cursor, conn을 사용하려 하면 위와 같은 에러가 발생합니다.from concurrent.futures import ProcessPoolExecutor def concurrent(list): for i in lis..
-
[DB]Connection PoolDB 2017. 2. 11. 23:19
Connection Pool이란?서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재합니다. 일반적인 Connection Pool을 이용하면 동시 접속자 수를 벗어나게 될 경우 에러(예외)가 발생하게 됩니다. 예외가 발생하면 그 접속자는 더이상 처리를 하지 못하므로, 사이트 이용자는 다시 접속을 시도해야하는 불편함이 있습니다. 이를 해결하기 위해 탄생한 것이 Connection Pool 입니다. Connection Pool이란 동시 접속자가 가질 수 있는 Connection을 하나로 모아놓고 관리한다는 개념입니다. 누군가 접속하면 자신이 관리하는 Pool에서 남아있는 Connection을 제공합니다. 하지만 남아있는 Connection이 없는 경우라면 해당 클라이언트는 대기 상태로 전환시킵니다. 그리..
-
[Java] static 사용 예제언어/Java 2017. 2. 10. 11:13
스타크래프트의 마린(유닛)을 예로 들었습니다.마린의 최고체력은 static을 붙여야겠죠. 현재체력은 붙이면 안되고요. 모든 마린들의 최고체력은 같으니까요. 현재체력은 마린(인스턴스)마다 다르겠죠. 마린의 공격력 역시 static을 붙여야겠죠? 모든 마린의 공격력은 같아야하니까요. 마린의 공격력을 향상시키는 upgradeWeapon()함수가 있다면 이 함수는 static변수인 마린의 공격력을 향상시키는 일을 한다고 가정하고요. 이 함수에는 static을 붙여야 합니다. 이 함수는 static변수에 대한 작업을 하니까요. 만일 마린의 체력을 소모시키는 steamPack()메서드에는 static을 붙일 수 있을까요? 붙일 수 없습니다. 현재체력을 감소시키는 일을 해야하니까... 인스턴스 변수에 대한 작업을 해..
-
[Java] 자바 용어 정리언어/Java 2017. 2. 10. 11:01
클래스(Class)클래스란 어떤 특정 종류의 모든 객체들에 대해 일반적으로 적용할 수 있는 변수와 메소드를 정의하고 있는 소프트웨어적인 설계도(blueprint) 또는 프로토타입(prototype). 실세계에 존재하는 객체들이 가질 수 있는 상태와 행동들에 대해 소프트웨어적으로 추상화(abstraction)한 것추상클래스추상 클래스는 객체가 가지는 특성들을 추상화시켜 놓았을 뿐 아직 구체화 시키지 못한 클래스이므로, 이 추상클래스를 상속하는 하위 클래스에서 좀 더 구체화 시키도록 하는 것입니다. 따라서, 추상클래스를 상위 클래스로 하여 상속하는 하위 클래스는 추상클래스인 상위 클래스에서 완전히 구현하지 못한 부분들을 완전하게 구현해 주어야만 하위 클래스에 대한 객체 생성이 가능하고, 그렇지 못할 경우 하..
-
[Golang] 명명된 함수형 (Named Function)언어/Golang 2017. 2. 8. 20:48
명명된 자료형과 마찬가지로 함수 또한 사용자가 정의할 수 있습니다. type BinOp func(int, int) int두 정수를 넘겨받아 정수 하나를 반환하는 함수형을 BinOp형으로 정의하였습니다. 명명된 함수형도 자료형 검사를 실행합니다. func Test(f BinOp) { fmt.Println(f(3, 4)) }위의 함수를 호출할 때, 아래와 같이 호출한다고 가정합니다. Test(func (a, b int) int { return a+b })Test는 BinOp형을 인자로 받는데, 호출 시에는 그냥 정수 둘을 받ㄱ 정수 하나를 반환하는 함수를 넘겨줬습니다. 위의 코드는 컴파일 에러를 발생하지 않습니다. func(a, b int) int 자료형이 명명되지 않은 자료형이기 때문입니다. 양쪽 모두 명..
-
[Golang] 명명된 자료형 (Named Type)언어/Golang 2017. 2. 8. 20:26
go에서는 자료형에 새로 이름을 붙일 수 있습니다. 사실 rune형은 int32의 별칭입니다. 이런 자료형을 명명된 자료형(Named Type)이라고 합니다. type rune int32 엄밀히 말해서 int32 역시 명명된 자료형에 속합니다. 그러면 명명되지 않은 자료형 (Unnamed Type)은 어떤 것들이 있을까요type runes []rune type MyFunc func() int위와 같이 runes와 MyFunc는 이름 자체만으로 자료형을 지칭하는 것이기에 명명된 자료형이 되고, []rune과 func() int는 이름만으로 자료형을 지칭하는 것이 아니기 때문에 명명되지 않은 자료형으로 구분됩니다. 명명된 자료형과 명명되지 않은 자료형 모두에 type 예약어를 사용하여 새 이름을 붙여줄 수 ..