ballqs 님의 블로그

[C#] 문법 정리 - 1 본문

코딩 공부/C#

[C#] 문법 정리 - 1

ballqs 2025. 2. 21. 17:51

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의 약자!!

 

마무리

이 이외에도 모르는 부분이 많이 있는데 모아뒀다가 작성하기로 한다....

언어는 하나에 국한되기 보다는 여러개를 알면 좋다고는 하지만 머리가 아프네...