티스토리 뷰

C#

?? 키워드와 goto문

란텔 2015. 5. 29. 19:24

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
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday