본문 바로가기

카테고리 없음

c# ?. 과 ?? 연산자 이해가 잘 안된다?

c#에 간만에 컴백했더니 새로운 것들이 많이 생겼다(?) ?연산자는 if를 한줄에 표기하는 단축 연산자로만 알고있었는데 말이다... 

 

진짜 초초 간단히 설명하자면 null 체크를 짧게 줄여주는 연산자

 

대충 검색해서 이것저것 읽어보면서 어떤 기능을 하는지는 이해했다.. 그런데 c# 이 프로그래밍 언어도 언어의 일종이기 때문에 반복해서 사용해보지 않으면 금방 까먹거나, 제대로(?) 사용할 수 없다.

 

때문에 한번 읽고, 보고 이해했더라도( 그렇게 믿더라도..) 꼭 손으로 직접 쳐보는걸 추천한다. 아니면 이렇게 기록겸 포스팅 하면서 한번 더 테스트코드 만들고 설명하면서 복합적으로 반복적으로 강제적으로 익숙해지는것도 좋다. 잊지말자 우린 망각의 동물. 

 

 

일단 게임에 늘상 나오는 단골손님. 몬스터 클래스를 간단하게 정의하면서 예제를 만들어보겠다. 멤버변수로 hp를 그리고 멤버함수로 Attack()를 가지고 있다.

함수 내부는 매개변수로 받은것을 로그 남기는것으로만 구현.


// 게임에 늘상 나오는 몬스터 클래스 생성     
public class Monster
{
    public int hp = 0;
    public Monster(int num)
    {
        this.hp = num;
    }

    public void Attack( string attackType )
    {
        Debug.Log( $"{attackType} 공격!");
        // 사실 이 $도 처음에 신기했다.
        // 옛날엔 다 string.format으로 했었는데.. ㅠㅠ sorry, i'm old ..
    }
}

 

MS의 official 설명은 기계번역이라 그런가, 천재들이 써서 그런가, 용어들에 대한 이해력이 부족해서 그런가 이해가 잘 안된다.. ㅠㅠ 그래서 내 용어로 다시 한번써보면서 복습한다. 

원문 URL: 

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/null-coalescing-operator

 

 

내가 이해한바로 좀더 알기쉽게 설명하자면..

C = A ?? B  란? 

A 가 null이 아니면 C에 A를 대입하고
A가 null 이면 C에 B를 대입한다.


더 줄이면

C에  A가 존재하면 A를 , null 이면 B 를 대입한다.

=

어쩔때 쓸까?
A를 대입하려 했는데 A가 null 일때를 대비해서
(예외처리겸) B를 준비한다는 개념!

=
if (A != null ) C = A
else C = B





결론적으로 위의 내용을 줄여쓰면


C = A ?? B

인것이다.

 

이래도 이해가 잘안된다..? 머리가 좋지 않은, 이해력이 모자란 나같은 프로그래머 녀석은 테스트, 테스트!! 테스트로 익혀야 합니다! 수학책보다 수학익힘책이 필요하다! 

반복 만이, 반복 많이(오타아님) 살길이다.
테스트 코드를 짤 수 있다면 이해를 한것이다! isn't it?

 

그래서 내 설명을 읽어봤다면 그래도 개인적으로 간단한 코딩을 해보시는걸 추천!!!

        Monster a = new Monster(100);
        Monster b = new Monster(200);
        
        //1번 케이스  (a != null)

        var test1 = a ?? b;
        Debug.Log($" (a != null) 이면 a 그대로 대입 : hp= {test1.hp}");


        //2번 케이스  (a == null)
        a = null;

        var test2 = a ?? b;
        Debug.Log($" (a == null) 이면 b를 대입 : hp= {test2.hp}");


        


        Debug.Log("a 삭제시.......");
        a = null;

        if (a != null) 
            a.Attack("1");

        a?.Attack("1");

 

 

코딩후 바로 실행해서 결과를 보면서 이해하자. 결과는....

?. 과 ?? 연산 테스트 코드 결과

 

 

 

 

??= 연산자도 있는데..

A ??= null 일때
A에 대입해야할 것 이라는 의미...

싱글턴이나, 객체가 null일때 default 값을
지정해줄때 사용하면 좋을거 같다

ex)

 Monster instance = null;

void Create()
{      
	// SingleTon 이나 이렇게 null 일때 default 값을 생성해줄때 사용하면 좋을거 같다. 
	instance ??= new Monster(123);
}

 

 

 

이건 official 설명페이지의 예제가 군더더기 없이 깔끔하고 이해하기 쉬운것 같아서 퍼온다. (내 이해력이 딸릴뿐.. 다른것도 그런 것 같긴합니다... ; ㅁ;)

MS-공식-설명

 

 

이렇게 ??  , ??=  연산자를 살펴봤다. 이해에 도움이 되었다면 좋겠다. 좋았다면 공감 한번 눌러주시면 좋겠다. 근데 나도 나중에 또 보러 올것 같긴 하다.. 한방에 이해는 어렵네;; 

 

 

c#-?-??-연산자-문법