2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

C#에서 Null-conditional Operator(?.)는 무엇인가요?

_____
C 에서 Null-conditional Operator(?.)에 대한 FAQ

Q1: Null-conditional Operator(?.)란 무엇인가요?
A1: Null-conditional Operator(?.)는 C 6.0에 도입된 연산자로, 객체가 null인지 확인한 후 안전하게 멤버에 접근할 수 있게 해줍니다. 객체가 null이면 예외를 던지지 않고 null을 반환합니다.

---

Q2: Null-conditional Operator를 사용하는 이유는 무엇인가요?
A2: null 참조 예외(NullReferenceException)를 방지하고, null 체크를 위한 별도의 if문 없이 간결하게 코드를 작성하기 위해 사용합니다.

---

Q3: 사용 예시는 어떻게 되나요?
A3:
```csharp
Person person = null;
string name = person?.Name; // person이 null이면 name은 null이 됨
```
`person`이 null이면 `?.` 이후 멤버 접근을 하지 않고 null을 반환합니다.

---

Q4: Null-conditional Operator는 어떤 타입과 사용할 수 있나요?
A4: 클래스, 구조체(참조 가능한 경우), 배열, 델리게이트 등 객체의 멤버, 인덱서, 이벤트에 사용할 수 있습니다.

---

Q5: Null-conditional Operator와 Null 병합 연산자(??)를 같이 사용할 수 있나요?
A5: 네, 자주 함께 사용됩니다. 예를 들어, null일 때 기본값을 지정할 때:
```csharp
string name = person?.Name ?? "Unknown";
```

---

Q6: Null-conditional Operator로 이벤트 핸들러 호출 시 어떤 장점이 있나요?
A6: 멀티스레딩 환경에서 null 체크와 호출을 안전하게 한줄로 할 수 있어 race condition 가능성을 줄여줍니다.
```csharp
MyEvent?.Invoke(this, EventArgs.Empty);
```

---

Q7: Null-conditional Operator에 단점이나 주의할 점이 있나요?
A7: null이 반환될 수 있으므로 후속 코드에서 null 체크를 잊으면 또 다른 오류가 발생할 수 있습니다. 또한, 값 타입 멤버에 사용 시 nullable 형식으로 결과가 반환됩니다.

---

Q8: Null-conditional Operator와 기존 null 검사 차이점은?
A8: 기존에는 객체가 null인지 검사하는 if문을 직접 작성해야 했으나, `?.` 연산자를 쓰면 훨씬 간결하고 가독성 높은 코드가 가능합니다.

---

Q9: Null-conditional Operator를 연속해서 사용할 수 있나요?
A9: 네, 가능합니다.
```csharp
var city = person?.Address?.City;
```
`person` 또는 `Address`가 null이면 `city`는 null이 됩니다.

---

Q10: Null-conditional Operator가 없으면 어떤 식으로 코드를 작성해야하나요?
A10:
```csharp
string name = null;
if(person != null)
{
name = person.Name;
}
```
이런 식으로 null 검사와 접근을 나누어야 합니다.

---

요약:
C 의 Null-conditional Operator(?.)는 객체가 null인지 자동으로 검사하여 안전하게 멤버에 접근할 수 있게 해주는 문법으로, null 참조 예외를 방지하고 코드의 간결성과 가독성을 높여줍니다.
C 에서 Null-conditional Operator(?.)는 객체가 null인지 여부를 확인하고, null이 아닐 경우에만 해당 객체의 멤버에 접근할 수 있도록 도와주는 연산자입니다.

이 연산자는 C

6.0에서 도입되어, null 참조로 인한 예외를 방지하고 코드의 가독성을 높이는 데 기여합니다.

Null-conditional Operator의 필요성 C 에서 객체의 멤버에 접근할 때, 해당 객체가 null인 경우 `NullReferenceException`이 발생할 수 있습니다.

예를 들어, 다음과 같은 코드가 있다고 가정해 보겠습니다.

```csharp Person person = null; string name = person.Name; // 이 줄에서 NullReferenceException 발생 ``` 위 코드에서 `person`이 null이기 때문에 `person.Name`에 접근하려고 하면 예외가 발생합니다.

이를 방지하기 위해 null을 체크하는 코드를 추가해야 합니다.

Null-conditional Operator의 사용법 Null-conditional Operator는 `?.` 기호를 사용하여 구현됩니다.

이 연산자를 사용하면, 객체가 null일 경우에는 null을 반환하고, null이 아닐 경우에는 해당 멤버에 접근할 수 있습니다.

다음은 위의 예제를 Null-conditional Operator를 사용하여 수정한 코드입니다.

```csharp Person person = null; string name = person?.Name; // name은 null이 됩니다.

``` 이 코드에서 `person`이 null이므로 `name` 변수는 null로 설정됩니다.

만약 `person`이 null이 아닌 경우에는 `person.Name`의 값이 `name`에 할당됩니다.

Null-conditional Operator의 활용 Null-conditional Operator는 다양한 상황에서 유용하게 사용될 수 있습니다.

예를 들어, 객체의 속성뿐만 아니라 메서드 호출이나 인덱서에도 사용할 수 있습니다.

1. 메서드 호출 ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } public void PrintInfo() { Console.WriteLine($"Name: {Name}, Age: {Age}"); } } Person person = null; person?.PrintInfo(); // 아무런 출력도 하지 않음 ``` 위 코드에서 `person`이 null이므로 `PrintInfo()` 메서드는 호출되지 않습니다.



2. 인덱서 사용 ```csharp public class Team { public List Members { get; set; } } Team team = null; var firstMemberName = team?.Members?[0]?.Name; // firstMemberName은 null이 됩니다.

``` 여기서 `team`이 null이므로 `Members`에 접근하지 않고, `firstMemberName`은 null로 설정됩니다.

Null-conditional Operator와 Null-coalescing Operator Null-conditional Operator와 함께 자주 사용되는 것이 Null-coalescing Operator(`??`)입니다.

이 연산자는 왼쪽 피연산자가 null일 경우 오른쪽 피연산자를 반환합니다.

두 연산자를 함께 사용하면 더욱 안전한 코드를 작성할 수 있습니다.

```csharp string name = person?.Name ?? "Unknown"; // person이 null이면 "Unknown"이 할당됨 ``` 위 코드에서 `person`이 null인 경우, `name`에는 "Unknown"이라는 문자열이 할당됩니다.

결론 C 의 Null-conditional Operator(?.)는 null 참조로 인한 예외를 방지하고, 코드의 가독성을 높이는 데 매우 유용한 기능입니다.

객체의 멤버에 안전하게 접근할 수 있도록 도와주며, 메서드 호출이나 인덱서에도 적용할 수 있습니다.

이를 통해 개발자는 보다 간결하고 안전한 코드를 작성할 수 있으며, null 체크를 위한 추가적인 코드 작성을 줄일 수 있습니다.

작성자: 이민주 [비회원] | 작성일자: 1년 전 2024-09-09 08:39:17
조회수: 132 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.