ballqs 님의 블로그
[C#] 문법 정리 - 1 본문
Java라는 언어를 알고 C#에 접근을 했더니 익숙하면서도 좀 다른 느낌을 받았다.
다만 익숙했기 때문에 조금의 이질감만 공부를 더하면 적응하는데 시간이 얼마 안걸리는 듯 했다.
이에 진행하면서 몰랐던 부분을 아래와 같이 정리하고자 한다.
1. 이벤트 핸들러에서 (s, e) => {} 는 필수인가?
C#에서는 버튼 클릭 같은 이벤트를 처리할 때 델리게이트(delegate) 방식으로 이벤트 핸들러를 등록한다.
this.BtnSave.Click += (s, e) => { this.BtnSaveClick(); };
여기서 s, e 는 이벤트 핸들러의 매개변수이다.
- s 는 이벤트가 발생한 객체(Sender)
- e 는 이벤트에 대한 추가 정보가 담긴 EventArgs 객체
이벤트 핸들러는 정해진 시그니처를 따르기 때문에 (s , e)를 포함해야 한다. 만약에 매개변수를 사용하지 않는 다면 아래와 같이 사용할 수도 있다.
this.BtnSave.Click += (_, _) => { this.BtnSaveClick(); };
2. ?(nullable)와 FirstOrDefault()의 의미
RadioButton? rbNo = this.Controls.Find(rbNoName, true).FirstOrDefault() as RadioButton;
?의 의미
RadioButton? 은 Java에서 많이 봐왔던 컬렉터들!! nullable 참조 타입을 의미한다. 즉 rbNo가 null 일 수도 있다는 뜻이다.
C# 8.0부터 nullable reference types(NRT) 개념이 추가되었으며, ?를 붙이면 해당 변수가 null을 가질 수 있다는 것을 명시적으로 표시하는 역할을 한다.
※FirstOrDefault()의 의미
FirstOrDefault()는 LINQ 메서드로, 리스트에서 첫 번째 요소를 반환한다.
- 첫 번째 요소가 있으면 그 값을 반환
- 없으면 null(기본값) 반환
즉, this.Controls.Find(rbNoName, true)이 비어 있다면 FirstOrDefault()는 null을 반환한다.
Java로 비유하자면 getordefault() 와 같은 기능이다.
3. ?.ToString() ?? ""의 의미
this.MemoEtcRemark.Text = dr["etc_remark"]?.ToString() ?? "";
- ?.(Null-conditional 연산자)
dr["etc_remark"]가 null이면 ToString()을 호출하지 않고 null을 반환한다. - ??(Null-coalescing 연산자)
왼쪽 값이 null이면 ""(빈 문자열)을 반환한다.
즉, dr["etc_remark"]가 null이면 this.MemoEtcRemark.Text = ""가 됩니다.
4. using 키워드의 역할
using (var ms = new System.IO.MemoryStream(imageBytes))
{
image = Image.FromStream(ms);
}
C#의 using 문은 자원을 자동으로 해제하는 역할을 합니다.
- Java의 try-with-resources와 비슷하게 동작하며, IDisposable 인터페이스를 구현한 객체를 사용한 후 자동으로 Dispose()를 호출한다.
- MemoryStream 같은 스트림 객체는 사용 후 반드시 해제해야 메모리 누수를 방지할 수 있다.
5. JObject, JArray 앞의 J는 무엇인가?
JObject Parameter1 = new();
JObject Data = new();
JArray Datas = new();
- JObject와 JArray는 JSON 데이터를 다루기 위한 클래스이다.
- Newtonsoft.Json 라이브러리에서 제공되며, JSON 오브젝트(JObject)와 JSON 배열(JArray)을 다룰 수 있다.
- J는 JSON의 약자!!
마무리
이 이외에도 모르는 부분이 많이 있는데 모아뒀다가 작성하기로 한다....
언어는 하나에 국한되기 보다는 여러개를 알면 좋다고는 하지만 머리가 아프네...
'코딩 공부 > C#' 카테고리의 다른 글
[C#] Window Form에서 모든 Panel를 돌면서 RadioButton 건들기 (0) | 2025.02.21 |
---|