C#.4- 조건/반복문

D·2021년 4월 4일

C#공부

목록 보기
4/9

선택문

제어문,분기문이라고 하며 프로그래밍의 조건에 따른 분기를 바꿔주는 기능을 하는 기능이다. C#에서는 크게 2가지의 선택문을 제공한다.

  • if-else
  • switch-case

if-else

if 문의 기본적인 구조는 다음과 같다

if(조건값)
{
	참일경우 내부의 코드를 실행함.
}



기본적으로 소괄호 안의 코드가 참값을 가질때 내부의 코드를 실행하며 if문을 중첩으로 사용해서 작성하는것도 가능하다.

다만 if문을 많이 중첩해서 사용할 경우 여러번 비교검사를 수행하기 때문에 프로그램 퍼포먼스에 영향을 주기 때문에 모든 문을 if문으로 할필요 없이 if의 조건문이 false값을 가질때에는 else를 써서 처리해주면 된다.


else문은 또한 else if문으로 if문과 별개로 조건문을 가질수 있다.

Switch-Case 문

하나의 식에 대해서 여러가지 조건값을 출력할수 있어야 될때 쓰며 기본적으로 Switch-case문은 처음 시작할때의 Switch문과 적어도 1개 이상의 case문 그리고 default문으로 구성된다.



↑0부터 4까지 진행하면서 switch문을 5번 왕복하면서 각각의 결과를 출력한다.

내부에 들어갈수 있는 case문의 개수는 제한이 없으며 C# 6.0이하 버전에서는 정수,문자,논리값만 들어갈수 있었으나 C# 7.0부터는 Null이 아닌 모든 식을 Switch문에 사용가능하게 변경되었다. case문에 들어가는 식은 같은식이 2번이상 들어갈 수 없다.

C#의 Case문은 무조건 break문이나 코드를 명시적으로 종료해줄수있는 점프문을 써야된다. 점프문을 쓰지 않을경우 컴파일러가 Case문에서 다른 Case문으로 이동할수 없다고 경고를 띄운다. 왜냐면 C같이 break문이 없어도 컴파일이 되는 언어의 경우 break문이 없을경우 아래 문까지 전부 실행하고 넘어가기 때문이다.

이외에 Case문의 식에 일치하는 결과가 없을경우 실행하는 default문이 있다. 보통 Switch문 가장 마지막에 작성하며 case문에 일치하는 식이 없을경우 default문의 코드가 실행된다.

일반적으로 if-else와 switch-case문의 퍼포먼스적 차이는 거의 없지만 switch-case문 쪽이 컴파일러에서 최적화 하기 더 좋은구조라 복잡한 구조일경우 switch-case문이 더 퍼포먼스가 높을수 있다.

반복문

for

for문은 기본적으로 다음과 같은 구조를 가진다

for(초기화;조건문;반복문)
{
	실행할 코드
}

초기화 코드에서는 for문에서 사용할 변수등을 초기화 하는 코드가 들어가며 조건문은 for문이 검사할 조건이 들어가며 반복문은 for문안의 코드가 실행될때마다 수행될 코드가 들어간다.

위 사진에서 보면 다음과 같다

  • int i=0 - for문 내에서 사용할 변수를 만들고 이 변수의 초기화 해주는 문구. i는 오직 for문 내에서만 정의된 변수라 for문 내부에서만 사용할수 있다
  • i<=4 - 조건문. i가 4보다 작거나 같을 경우에만 for문이 반복된다
  • i++ - 반복문. for문 내 코드를 1회 실행한 다음 실행할 코드
  • 이하 switch문. - For문을 반복할 동안 실행할 코드

for문 또한 중첩해서 작성할수 있으며 조건문이 그냥 true일경우 무한루프가 된다.

while, do

while문의 구조는 다음과 같다

while(조건문)
{
	실행할 코드
}

while의 경우 조건문이 True일 경우 조건문이 false가 될때 까지 중괄호 안의 코드를 계속해서 반복하며 실행한다

do-while문의 구조는 다음과 같다

do
{
	실행할 코드
}while(조건문)

do while은 실행할 코드를 먼저 한번 실행 시킨 뒤에 후에 조건을 검사하는 반복문이다.

즉 while문 단독으로 쓸경우 시작 시점에서 조건문을 검사하지만 do-while로 쓸경우 코드를 이미 실행시키고 난 시점에서 조건문을 검사한다. 만약 while의 조건문에 true를 넣어줄 경우 무한루프문이 된다. 이경우 break등의 점프문을 통해서 루프를 탈출한다.

foreach

foreach는 배열과 인덱스 내부의 요소에 대해서 반복실행하는 문이다.

foreach(<자료형> 변수 in 배열/인덱스)
{
	실행할 코드
}


foreach문은 단순한 배열,인덱스 문의 경우 for문보다 퍼포먼스가 떨어질수 있으나 for문을 많이 쓰는 복잡한 루프문의 경우 foreach가 컴파일러 단에서 최적화가 들어가서 퍼포먼스 면에서 더 뛰어난 모습을 보여주기도 하며 무었보다 복잡한 차원의 배열의 경우 for문을 쓸경우 코드가 길어지지만 foreach를 쓸경우 매우 단순하게 줄일수 있다.

대신에 중첩 for문을 쓸경우 다 차원 배열에 대해서 더 다양하게 제어할수 있다는 장점 또한 있다.

점프문

점프문은 실행중인 코드를 빠져나오는 용도를 위한 코드다. 여러가지 실행결과를 가지는 점프문이 있으며 보통 실행중인 코드지점을 다른곳으로 옮겨준다

return

return문은 return문이 있는 함수를 종료하고 호출된 메서드에 제어권을 넘겨주는 문이다. 제어를 반환할때 매개변수를 반환할수 있으며 만약 함수출력이 void로 선언되어있을 경우 반환할 요소가 없는 관계로 따로 들어가지 않는다.

break

break문은 switch문과 반복문들을 중단하는 용도로 사용된다.

C#의 switch-case 문은 매 case 마다 무조건 break를 넣을것을 조건으로 하고있다.

continue

continue문은 반복문에서 이후 등장하는 코드를 넘기고 다음 반복을 실행하게 하는 문구다.

goto

goto는 코드의 특정 지점에서 다른 지점으로 강제로 이동하게 만드는 문이다. goto문의 구조는 goto문과 레이블로 나뉘어 있고 goto를 쓸경우 특정 레이블의 위치로 코드 실행순서를 옮겨준다

레이블:

//실행될 코드들

goto 레이블
//이렇게 될경우 레이블: 위치로 옮겨서 다시 코드가 실행된다.



goto는 무한루프나 아주 복잡한 반복문에서도 한번에 뛰쳐나올수 있을정도로 간편하게 쓸수 있지만 너무 납용될 경우 코드 가독성에 있어서 매우 악영향을 미치며 사용자가 임의로 코드 실행 순서를 바꾸는것이기 때문에 컴파일러가 코드를 최적화 하는것에 있어서 방해된다. 따라서 goto를 쓰는것이 이득일때에만 쓰는것이 좋다는 의견이 많으며 아예 쓰지 말라고 하는 의견도 있다. 또한 java처럼 아예 goto문을 지원하지 않는 언어도 있다.

출저

0개의 댓글