[C#] Lambda Function Capture
·
etc/C#
람다함수를 delegate에 등록해줄 때, 호출부의 지역변수를 사용하고 싶을때가 있다. 이를 변수를 Capture한다고 하는데 무슨 얘기냐 하면 다음 코드를 보자 class Program { static void Main(string[] args) { Action countZeroToFour = null; for(int i=0; i Console.WriteLine(i); } countZeroToFour.Invoke(); } } Action을 Invoke 했을 때, 0~4까지의 숫자를 차례대로 출력하게 하고 싶어서 위와 같이 작성했다. 실행 결과는? 5 5 5 5 5 전혀 다른 결과가 나온다. 프로젝트 진행중에 각 오브젝트에 이벤트를 할당해주면서 저런식으로 작성했었는데 계속 이상한 값이 들어가서 엄청 헤맸..
[C#] switch 제어문
·
etc/C#
switch 제어문은 거의 모든 프로그래밍 언어에 들어있는 기초적인 제어문이다. 우리의 특별한 C#은 switch제어문에서 조금 더 특별한 기능을 제공한다. switch 제어문의 원형 int num = 1; switch(num) { case 1: Console.WriteLine("One"); break; case 2: Console.WriteLine("Two"); break; case 3: case 4: Console.WriteLine("Three or Four"); break; default: Console.WriteLine("Out Of Range"); break; } One 이때 switch의 조건식으로는 모든 데이터 타입이 올 수 있다. 모든 객체의 조상인 object도 넣을 수 있다. objec..
[C#] 문자열 보간(Interpolation)
·
etc/C#
문자열 보간? 처음 봤을 때 뭔 느낌인지 몰랐다. 영어로 하면 Interpolation인데 더더욱 모르겠다. C#에서 문자열을 나타내는 방법 보통 많은 사람들이 알고있는 방법으로는 int a = 3; int b = 4; Console.WriteLine("{0} + {1} = {2}", a, b, a+b); 이렇게 문자열을 나타낸다. { } 안에 들어올 변수들의 순서를 넣은 다음, ,를 통해 실제 순서에 맞게 매칭해주면 된다. 문자열 보간을 사용하면 비슷한 방식이지만 가독성을 높일 수 있고 디버깅에 용이하게 바꿀 수 있다. int a = 3; int b = 4; Console.WriteLine($"{a} + {b} = {a+b}"); 위의 예제와 같이 { }를 통해 문자열을 나타낸다는건 동일하지만 "" 문..
[C#] Property(프로퍼티), C#만의 특별한 기능
·
etc/C#
C# 공부를 하면서 처음으로 당황했던 부분 맨 처음에는 이게 변수인지 함수인지 정체를 몰라서 당황했었다 Property에 대한 얘기를 본격적으로 하기 전에, OOP에서 자주 볼 수 있는 getter / setter 패턴에 대해 알아보자 getter / setter 란? OOP를 공부하다 보면 캡슐화, 은닉화, 등등 추상적인 얘기를 많이 듣는데 도대체 언제 어떻게 쓰이는건지는 알려주지 않아 뜬구름잡는 얘기같다는 생각이 들때가 있다. 그중 getter / setter 패턴은 클래스의 필드에 접근하도록 도와주는 기능을 하는 패턴이다. 보통 OOP의 규칙에 따라 특별한 이유가 없는 한 클래스의 필드는 private로 지정한다. OOP를 지향하는 C#에서는 접근 제한자를 설정하지 않으면 기본적으로 private로..
[C#] Null-Safety를 지원하는 C#
·
etc/C#
JAVA는 Null Safety를 지원하지 않는다. C#이나 코틀린등은 이와 반대로 Null Safety를 지원한다. Null-Safety란? 아마 코딩을 하다보면 한번쯤은 Null Pointer Exception(NPE)을 겪어보았을 것이다. NPE는 null인 object에 접근해서 필드를 가져오거나 메소드를 호출할 때 생기는 에러이다 당연히 object가 null이므로 런타임에 우리가 원하는 대로 동작을 할 수 없어 Exception을 뱉는것이다. NPE는 정말 까다로운 에러로 디버깅하기가 무척 힘들다. 이러한 NPE를 해결하기 위해 C#은 Null-Safety를 지원한다. Null-Safety를 이해하기 위해서는 Nullable 형식을 이해해야 한다. Nullable 우선 Nullable은 값 형..
[C#] Lambda Expression(람다 식) 이란?
·
etc/C#
C#을 비롯한 여러 언어들에서 람다 식을 지원하는데 이 람다 식이란 과연 무엇일까? 람다식의 기본 원형은 다음 두가지가 있을 수 있다. (parameter) => expression (parameter) => { statements }; 이렇게만 봐서는 전혀 모르겠으니 아래를 보자 람다 식은 도대체 뭘까? 람다 식을 보다 정확하게 이해하려면 우선 delegate(대리자)에 대해 알아야 한다. delegate에 대해 설명하는 글은 여기에 있다. // 링크 글을 읽었다 가정하고, delegate를 이용해 익명 메소드를 전달하는 방식 중 제일 단점은 매번 delegate라는 키워드로 함수를 감싸줘야 한다는것이다. 이 불편함을 해소하고자 Lamda Expression이 나오게 되었다. 람다식은 익명메소드의 완벽..