티스토리 뷰
class Program { static void Main(string[] args) { Korean k = null; k = k ?? new Korean("cnsdl"); Console.WriteLine(k); } } class Korean { public string name { get; set; } public Korean(string name) { this.name = name; } public override string ToString() { return this.name; } }
?? 키워드
마치 삼항 연산자와 비슷한(같은건 아님) 성질을 지니고 있습니다.
단지 ?? 키워드는 그 대상을 기본타입이 아닌 객체의 변수를 대상으로 한정짓고 있습니다.
코드를 보시면 Korean이라는 객체를 초기에 null로 초기화 시키고
그 다음에
k ?? new Korean("cnsdl");
이런 코드가 오는데요
이것이 뜻 하는 것은 k라는 참조변수가 null일 경우에는 new Korean("cnsdl"); 라는 인스턴스를 생성하여 k변수에 참조시키고
k가 null이 아니면 k그대로의 참조 인스턴스를 가져간다고 이해하시면 됩니다.
삼항연산자를 사용해도 똑같은 결과를 낼 수 있습니다.
k = (k == null) ? new Korean("cnsdl") : k;
goto문
for (int i = 2; i < 10; i++) { for (int j = 1; j < 10; j++) { if (i == 6) goto LOOP2; Console.Write("{0} * {1} = {2}", i, j, i * j); } Console.WriteLine(); } LOOP2: Console.WriteLine("5단 까지만 출력");
goto문을 만나면 선언된 Loop2(레이블문 이라고 함)로 제어권이 넘겨지게 됩니다.
- 레이블문은 식별에자 콜론(:)을 붙여서 사용합니다.
- 레이블 문은 관례상 대문자로 선언한다고 합니다.
goto문은 잘 사용이 되지 않는다고 들었습니다. 초기 어셈블리 언어에서는 if와 goto만으로 모든 반복을 구현할 수 있었지만
더 구조적인 것들(for,if,while 등)이 나오면서 이것들에 비해 가독성이 떨어진다면서 잘 사용하지 않는 구문이 되었습니다.
하지만 이중반복문을 벗어날 때 goto문을 사용하면 유용하다고 합니다.
goto문을 안쓰고 break문을 써도 되지만 그럴 경우 break문을 두번 선언해서야 이중 반복문을 빠져 나올 수 있기 때문에
코드가 약간이지만 더 늘어나게 됩니다.
'C#' 카테고리의 다른 글
is 와 as 키워드(상속관계 및 형변환 가능 유무 판별) (0) | 2016.01.22 |
---|---|
상속(inherit) (0) | 2016.01.16 |
깊은 복사, 얕은 복사, ref, out 예약어 (0) | 2014.12.28 |
[BaseClassLibrary]직렬화/역직렬화 (0) | 2014.12.05 |
C# 예외처리 (0) | 2014.11.19 |