개발 보안

잘 사용하면 간견할 제어문

아엠그라운드 2022. 4. 3. 09:00

제어문 (Control Statements)

C#에서는 C++에서 제공하는 제어문들을 제공하지만 몇가지 차이점이 있다. 그 중의 하나가 조건식이다. CC++에서는 아래와 같이 불린식이 아니어도 조건식으로 사용 가능하였으나 C#에서는 반드시 불린식이어야 한다.

 

if ( x ) // 컴파일 오류

if ( x = 0 ) // 컴파일 오류

 

switch 문에도 차이가 있는데, C++에서는 case 문 사이에 break 문이 없으며 자동으로 다음 case에 해당하는 문장들을 수행하는데 반해 C#에서는 컴파일 오류가 발생한다. 반드시 제어를 이동시키는 문 (break , goto case , return )을 사용하여야 한다.

 

switch (x)

{

case 1: Console.WriteLine("hoho");

case 2: Console.WriteLine("haha");

default: Console.WriteLine("hehe");

}

 

C++에서와 같은 결과를 얻으려면 위의 switch 문을 아래와 같이 수정하여야 한다.

switch (x)

{

case 1: Console.WriteLine("hoho"); goto case 2;

case 2: Console.WriteLine("haha"); goto default;

default: Console.WriteLine("hehe"); break;

}

 

, case에 해당하는 실행문이 없으면 다음 case 문에 해당하는 실행문을 실행시킨다. 아래의 경우 모든 경우에 똑같이 default에 해당하는 문장들을 수행한다.

switch (x)

{

case 1:

case 2:

default:Console.WriteLine("hoho");

Console.WriteLine("hehe");

Console.WriteLine("haha");

break;

}

 

C++switch와 다른 또 하나의 차이는 C++의 경우 정수 형식에 대해서만 switch를 사용할 수 있는 반면 C#의 경우 문자열 변수에 대해 switch를 사용할 수 있다는 것이다. 아래의 에를 참고하기 바란다.

string s;

 

switch(s.ToLower()) {

case "apple":

return 1

case "banana":

return 2

case "carrot":

return 3

default:

throw new InvalidArgumentException();

}

 

C#에는 C++에 없는 반복문 foreach를 제공한다. foreach 문은 배열이나 개체 컬렉션에 있는 각 요소에 대해 실행문 그룹을 반복하여 실행합니다. 배열의 값을 합산하는 코드를 foreach문을 사용하여 작성하면 아래와 같다.

 

int [] array = {88, 67, 56, 77, 99, 90, 44 }

int total =0;

 

foreach(int number in array) total += number;

 

배열의 요소를 참조하는 반복변수는 읽기만 가능하고 수정은 불가능하다. 만약 아래와 같이 코딩하면 컴파일러는 “foreach 반복 변수이므로 'someElement'에 할당할 수 없습니다.”라는 오류 메시지를 출력하게 된다.

foreach (double someElement in MyArray) {

Console.WriteLine(someElement);

someElement *= 2; // Error! read-only access

}

 

배열뿐만아니라 개체 컬렉션에 대해서도 foreach문을 적용할 수가 있는데, 이 경우에는 컬렉션은 IEnumerable 인터페이스를 구현하든지 GetEnumerator 메소드를 제공하여야 한다. 이에 대해서는 차후에 설명토록 하겠다.