Languages(59)
-
[C#] 메소드를 좀 더 간결하게 만들자! : 람다식(Lambda Expression)
*이 글은 책을 바탕으로 공부한 글입니다. 람다식 (Lambda Expression) 람다식은 익명 메소드를 만들기 위해 사용한다. 람다식으로 만드는 익명 메소드는 무명 함수(Anonymous Function)라고도 부른다고 한다. 메소드가 입력(매개변수)과 출력(반환값)을 가지고 있는 것처럼 람다식 또한 마찬가지다. 기본적인 람다식을 선언하는 형식은 다음과 같다. 매개변수_목록 => 식 => 연산자는 입력 연산자이다. 이 연산자는 그저 매개변수를 전달하는 역할만 한다. 람다식에서는 =>를 중심으로 왼편에는 매개변수가, 오른편에는 식이 위치한다. // 익명 메소드를 만드려면 대리자가 필요하다. delegate int Calculate(int a, int b); ... static void Main(str..
2022.03.28 -
[C#] 객체에 일어난 사건 알리기! : 이벤트(Event)
*이 글은 책을 바탕으로 공부한 글입니다. 어떤 일이 발생하는 것을 알 수 있는 방법은 크게 두 가지가 있다. 일이 발생하는지 계속 감시하기 일이 발생하면 알려달라고 하고 다른 일 하고 있기 두 번째는 뭔가 익숙하지 않나? 저번 글에서 다뤘던 콜백(Callback) 내용이다. 이것에 관해, C#에서는 대리자(Delegate)라는 녀석이 존재하지만, 이벤트(Event)라는 녀석도 존재한다. 하나만 있으면 될 것 같은데, 왜 C#에서 이 둘을 제공하고 있고 어떤 점이 다른지에 대해 차근차근 알아보도록 하자. 이벤트(Event) 제일 흔하게 볼 수 있는 이벤트가 아마 알람 시계가 아닐까 싶다. 우리는 알람 시계의 시간을 설정 해놓고, 다른 일을 하고 있다가 시간이 되면 알람 소리를 들어서 시간이 다 된 것을 ..
2022.03.28 -
[C#] 대리자(Delegate)에 대해 좀 더 알아보기 - 2
*이 글은 책을 바탕으로 공부한 글입니다. 1. 일반화 대리자 (Generic Delegate) 대리자는 일반 메소드뿐만 아니라 일반화 메소드도 참조할 수 있다. 물론 이 경우에 대리자 또한 일반화 메소드를 참조할 수 있도록 형식 매개변수를 이용하여 선언되어야 한다. delegate void Memo(T memo); 참조할 메소드 또한 당연히 일반화 메소드로 작성해줘야 한다. static void WriteMemo(T memo) { Console.WriteLine($"{memo.GetType()} 형식의 메모"); Console.WriteLine($"내용은 {memo}\n"); } 테스트를 해보면 이제 다음과 같이 뜨는 것을 볼 수 있다. static void Main(string[] args) { Me..
2022.03.27 -
[C#] 콜백 함수(Callback)는 무엇이고 대리자(Delegate)는 뭘까?
*이 글은 책을 바탕으로 공부한 글입니다. 개요 콜백(Callback)이란 개념을 처음 들은 것은 유니티를 공부할 때였다. 게임이란 분야 특성상, 비동기 처리가 주를 이루는 시점에 콜백이란 개념은 필수적으로 등장하는 것 같았다. 그 당시에는 배경 지식이 아무것도 없었기 때문에 읽어봐도 무슨 말인지 몰랐다. 지금도 물론 완벽하게 아는 것은 아닐 수도 있다. 그래도 책을 보며 공부한 것을 토대로 내가 이해한 내용들을 정리해볼 생각이다. 이 글을 읽는 다른 분들께 도움이 되셨으면 좋겠고, 틀린 점이 있다면 지적도 해주셨으면 한다. 1. 콜백 (Callback)이란? 정의 개념으로 본다면, 피호출자가 호출자를 다시 호출하는 것이라고 한다. 이 말만 들으면 무슨 말인지 이해가 잘 안 됐다. 그래서 책과 구글에 있..
2022.03.27 -
[C#] 프로그램이 어떠한 상황에서도 잘 견딜 수 있도록! : 예외 처리(Exception Handling)
*이 글은 책을 바탕으로 공부한 글입니다. 프로그램을 사용하는 사용자들은 정말 창의성이 돋보이는 여러가지 방법들을 적용하기도 한다. 술집 프로그램을 만들어서 사용자에게 주문을 받을 준비를 합니다. 사용자가 들어오자, 화장실이 어딨냐고 묻습니다. 술집은 모두 불에 타버렸고, 그렇게 전부 사라졌습니다. SNS에서 가끔 볼 수 있는 프로그래밍 유머인데, 지금 딱 비유하기 적당한 상황인 것 같다. 만약 데이터베이스의 트랜잭션과 같은 부분에서 오류나 다운이 발생했을 때, 처리해주는 부분이 없다면 피해는 치명적일 것이다. 이렇듯, 프로그램이 오류를 일으키거나 심지어 다운까지 일어나지 않도록 잘 처리하는 것이 필요하다. 이것을 예외 처리(Exception Handling)이라고 한다. 예외 처리 (Exception ..
2022.03.26 -
[C#] foreach 문 적용이 가능한 객체 만들기 : IEnumerable
foreach foreach 문은 for 문처럼 인덱스 변수가 필요 없다. 배열이나 리스트같은 컬렉션에서만 사용이 가능하다. foreach 문이 객체 내의 요소를 순회하기 위해서는 foreach 문과의 약속을 지켜야만 한다. 그 약속은 IEnumerable 인터페이스를 상속하는 클래스 구현이다. 즉, 어떤 클래스라도 IEnumerable 인터페이스를 상속하기만 하면 foreach 문을 사용할 수 있다는 얘기가 된다. IEnumerable 인터페이스 인터페이스를 상속받는 클래스는 반드시 인터페이스의 모든 내용을 구현해야 한다는 것은 기억할 것이다. IEnumerable 인터페이스가 갖고 있는 메소드는 단 하나 뿐이며, 상속받는 클래스는 다음 메소드를 구현해야 한다. IEumerator GetEnumerat..
2022.03.25