본문 바로가기

반응형

전체 글

(425)
[Python] 파이썬 3의 Modern 함수들 본 포스트의 원문은 Bartek Ciszkowski의 Modern Functions in Python 3이다. annotation을 이용해 함수 인자에 타입을 지정하고 mypy를 이용해 타입 검사를 하는 것에 대한 내용이지만 정작 mypy에 대한 설치나 사용 방법들에 대해서는 설명이 빠져 있다. mypy 관련 내용은 포스트 아래에 링크해 두었으니 참고 바란다. 파이썬은 빠르고 효과적으로 작업할 수 있는 언어로 지난 수십 년 동안 번창했습니다. 많은 현대 회사와 마찬가지로 우리 회사도 시스템 스택의 대부분에서 파이썬을 상당히 광범위하게 사용하지만 많은 경우 아직 파이썬 2.7을 계속 유지하고 있습니다. 가혹한 현실이지만 파이썬 2.7은 이미 한물 갔습니다. 솔직히 말해서 - 때가 되었습니다! - 우리는 P..
[Python] 유용하지만 잘 알려지지 않은 고급 트릭 5가지 본 포스트는 Charudatta Manwatkar의 Hidden Gems of Python을 한글로 번역한 내용이다. 요즘 저에게는 재미로 파이썬 문서를 읽는 취미가 생겼습니다. 재미로 무엇인가를 읽을 때에 비로소 우리가 지금까지 놓치고 있었던 "오! 파이썬으로 이런 것도 할 수 있어요?"라고 할만한 흥미로운 것들을 찾는 경향이 있습니다. 1. Function 속성(attribute) 클래스 및 개체의 속성을 설정하는 방법과 유사하게 함수에도 속성을 설정할 수도 있습니다. def func(x): intermediate_var = x**2 + x + 1 if intermediate_var % 2: y = intermediate_var ** 3 else: y = intermediate_var **3 + 1 ..
[C#] 비동기 프로그래밍 - async/await 들어가며 이전 포스트에서는 C#의 'Task' 사용법에 대해 알아 보았다. 예를 들어 여러분이 Task를 이용해 GUI 프로그램을 만든다고 가정하자. GUI프로그램은 UI이벤트를 처리하기 위해 메인 스레드는 블로킹 되지 않고 항상 유저의 입력을 받을 수 있도록 블로킹 되지 않아야 하며, 따라서 시간이 오래 걸리는 작업들은 Task를 이용해 다른 스레드에서 한다. 그리고 작업들이 처리되어야 하는 순서가 있다면 - 연속 실행 또는 연속 작업이라고 함 - Task의 ContinueWith 메소드 또는 TaskAwaiter를 이용하여 Task가 완료 되면 등록된 다음 작업을 처리 한다. Task에 대한 설명은 [여기]에서 찾아 볼 수 있다. 이번 포스트는 Task의 사용법에 대해서는 따로 설명을 하지 않을 예정..
[Python] 당신이 모를 수도 있는 함수에 대한 4가지 고급 트릭 본 포스트는 Python Land’s deep dive on functions의 내용을 한글로 번역한 내용이다. 기본 파이썬 문법을 이해하고 있는 사람을 대상으로 하지만 각 섹션들마다 자세한 이해에 도움이 될만한 글들을 링크 걸어 두었으니 조금만 노력을 들이면 초보자들도 이해 할 수 있을것이라 생각한다. 하지만 아직 시작 단계이신 분들께는 여전히 어려운 주제일 수 있다. 그런 분들은 이 글과 함께 '파이썬 기초부터 시작하기'를 읽어 볼 것을 권해드린다. 당신은 함수의 키워드 아규먼트를 강제하거나, 함수 데코레이터를 생성하거나, 익명(람다) 함수를 생성하거나, 배열 또는 딕셔너리를 함수의 인수로 언팩(unpack)하는 방법을 알고 있습니까? 본 포스트는 파이썬 함수에 관한 4가지 고급 트릭을 다루고 있습니..
[C#] 비동기 프로그래밍 - Task 이번 포스트에서는 스레드와 스레드 풀의 제약 사항을 해결해줄 'Task'에 대해 살펴 보겠다. 들어가며 [C#] Thread [C#] ThreadPool 이전 까지 포스트에서 C#의 스레드에 대해 알아 보았다. 앞의 글을 안봤다고 다시 돌아가서 볼 필요는 없다. 앞의 글들은 단지 이번 포스트 "Task"를 설명하기 위한 준비작업이었을 뿐이다. 간단하게 앞의 내용을 요약하면, 스레드를 지속적으로 생성하고 삭제하면 오버헤드가 발생한다. 이것을 해결하기 위해 스레드 풀을 사용했지만, C# 스레드 풀의 제약 사항으로인해 작업이 완료 되기도 전에 프로세스가 종료 될 수 있다는 단점이 있었다(이유가 궁금하면 위 링크 되어있는 포스트들에 정리해놨으니 살펴보고 오도록하자). 이 모든 단점을 커버 해주는 것이 이번에 소..
[C#] 비동기 프로그래밍 - ThreadPool 들어가며 프로세스에서 스레드를 새로 만들었다 삭제하는 것을 반복하면 스레드 생성에 대한 오버헤드가 발생한다. 그래서 일반적으로 프로세스에 스레드 풀을 생성하고 스레드 작업이 필요한 경우 풀에서 스레드를 꺼내와 사용하고 작업이 끝나면 해제하는 것이 아니라 스레드 풀에 되돌려 주는 방식으로 성능의 향상을 꾀한다. C#에서는 이런 스레드풀을 언어 레벨에서 지원한다. 스레드 수행 할 작업을 스레드 풀의 큐에 넣으면 내부적으로 스레드를 생성하거나 기존 생성되어 있던 스레드를 가져와 작업을 수행 후 스레드를 삭제하는 것이 아니라 대기 상태로 유지 시킨다. CLR[?]은 이 스레드풀에 최적의 스레드 개수를 유지하도록 관리해준다. ThreadPool 사용 using System; using System.Threadin..
[C#] 비동기 프로그래밍 - Thread 이번 포스트에서는 C# 스레드 생성하고 사용하는 기본적인 방법에 대해서 살펴 보겠다. 스레드의 개념적인 부분은 이미 알고 있다고 가정하고 API 사용법에 대해서만 다룰 예정이다. Thread 생성 아래는 메인 스레드와 사용자가 생성한 스레드에서 각각의 번호를 만번씩 출력하는 예제이다. 스레드를 통해 동시에(concurrency) 코드를 진행하므로 1과 2가 섞여서 출력 되는 것을 확인 할 수 있다. using System; using System.Threading; // Thread를 위한 네임스페이스 class Program { public static void Foo() { for (int i = 0; i < 10000; i++) { Console.Write("1"); } } public static..
[C#] null 병합 할당(Null Coalescing Assignment) null 병합 연산자 C# 6.0에는 물음표 두개를 연달아 쓰는 null 병합 연산자라는 것이 있다. string s1 = null; string s2 = s1 ?? "hell"; // s1이 null이 아닌 경우 s1을 대입, null인 경우 "hello"를 대입 조사하는 대상이 null이 아닌 경우, 그 값을 넣고, null인 경우 물음표 뒤의 값을 대입하라는 의미다. null 병합 대입 C# 8.0 부터는 null 병합 대입이라는 것이 추가 되었다. 영어로는 "Null Coalescing Assignment"라고 한다. 위의 병합 연산자는 s1의 값을 다른 변수에 대입하는 것이었지만 null 병합 대입은 반대다. s1의 값이 null일 경우 s1에 다른 값을 대입하겠다는 의미다. 연산자는 ??= 를..

반응형