프로그래밍 관련
파이썬 강좌 번외편. 클로저(Closure)
2019. 11. 21.이번 강좌는 클로저(Closure)에 대해 알아보도록 하겠습니다. 클로저는 위키백과의 정의를 빌어온자면 '컴퓨터 언어에서 클로저는 일급 객체 함수의 개념을 이용하여 스코프에 묶인 변수를 바인딩 하기 위한 일종의 기술이다.'라고 합니다. 파이썬을 처음 접하시는 분이라면 이 말이 무슨 말인지 전혀 감도 오지 않을 것입니다. 먼저 우리는 일급 객체 함수가 무엇을 말하는지 알아볼 필요가 있습니다. 일급 객체(First-class function) 파이썬에서 함수는 일급 객체입니다. 이는 우리가 평소에 숫자나 문자열, 클래스를 다루는 것처럼, 함수도 다른 객체와 동일하게 취급할 수 있다는 말과 같습니다. 즉, 함수를 매개변수로 넘기거나 다른 변수에 대입할 수 있으며, 반환값으로도 사용이 가능합니다. 심지어 리스트..
C# 메모. 크로스 스레드 문제
2019. 4. 9.윈폼에서 개발하다 보면 아래와 같은 오류에 부딪히게 될 때가 있다. 이러한 크로스 스레드(Cross-thread) 문제를 해결하는 방법은 주로 아래와 같이 3가지 방법이 있다. CheckForIllegalCrossThreadCalls를 통해 해결 System.Windows.Forms.Control.Invoke를 통해 해결 System.ComponentModel.BackgroundWorker를 통해 해결 CheckForIllegalCrossThreadCalls 가장 간단한 해결 방법이다. 아래와 같이 코드 한 줄만 작성하면, UI 스레드 외의 스레드를 통해 컨트롤의 Handle에 접근하는 경우를 잡아내지 않도록 만들 수 있다. CheckForIllegalCrossThreadCalls = true; 그러나 ..
C# 메모. 패턴 매칭(Pattern Matching)
2019. 4. 7.패턴이 있는 Is 표현식(Is-expressions with patterns)아래 예제에서는 상수 패턴(const pattern)과 타입 패턴(type pattern)을 사용한 표현식을 볼 수 있다. public void PrintStars(object o) { if (o is null) return; // 상수 패턴 "null" if (!(o is int i)) return; // 타입 패턴 "int i" WriteLine(new string('*', i)); } 위 예제를 보면 패턴 변수라는 녀석이 등장한다. 표현식 중간에서 패턴 변수를 선언할 수 있고, 자신을 둘러싸고 있는 블럭 내에서 사용할 수도 있는 것을 볼 수 있다. 전에 만나봤던 out 변수란 녀석과 비슷하다. 패턴을 Try로 시작하는 메서..
C# 메모. out 변수(Out variables)
2019. 4. 6.기존에는 out 매개변수를 통해 메서드를 호출하려면 먼저 변수를 넘겨주기 위해서 변수를 먼저 선언해야 했다. 보통 전달받는 메서드가 초기화하기 때문에, 이런 변수들을 넘겨주기 전에 초기화하지 않는다. 이와 같은 이유로, var를 사용해 변수를 선언하지 못하고 변수의 타입을 명시적으로 적어주어야만 했다. public void PrintCoordinates(Point p) { int x, y; // 미리 선언해야 함 p.GetCoordinates(out x, out y); WriteLine($"({x}, {y})"); } 하지만 C# 7.0에 와서는 out 변수라는 기능이 추가되면서, 전달인자를 넘겨줄 때 변수를 선언할 수 있게 되었다. public void PrintCoordinates(Point p) {..
파이썬 강좌 번외편. 재귀 함수
2019. 3. 29.우리는 함수 내에서 또 다른 함수를 호출할 수 있습니다. 그리고 물론 자기 자신을 호출할 수도 있습니다. 여기서 함수 내에서 자기 자신을 호출하는 함수를 재귀 함수라고 부릅니다. 이 재귀 함수는 팩토리얼이나 피보나치 수열을 만드는 등과 같은 다양한 수학 문제를 해결하는 데 매우 유용합니다. 예제를 보며 직접 한번 살펴보도록 하겠습니다. >>> def recursive(num): print(num) num += 1 recursive(num) # 자기 자신을 호출한다! >>> recursive(10) 10 11 12 13 … 위의 예제를 직접 실행시켜보면 함수 recursive()가 자기 자신을 호출하고, 호출된 함수가 다시 자기 자신을 호출하며 끊임없이 변수 num의 값을 출력하고 있는 것을 볼 수 있습니..