5장_코드 흐름 제어

CJB_ny·2022년 5월 19일
0

C#

목록 보기
7/9
post-thumbnail

C#은 위에허 부터 아래로 흐르는데

경우에 따라서 이 흐름을 바꿀 수도 있고 반복이 되도록 하게 가능함.


5.1 분기문


지금 a는 CLS가 조건문을 두번 비교를 하게됨

-> 성능 저하

그런데 b의 경우 왜 성능이 a를 비교하는 것보다 좋냐고하면은

b % 2 == 0 일 경우만 비교를 하고 조건식이 false라면 비교연산 하지않고

바로 else로 넘어가기 때문이다.

5.1.3 switch

스위치의 조건식에는 "정수 형식", "문자열 형식" 두가지만 지원한다.

(c, c++는 정수형식만 지원함ㅋㅋ)

break

현재 실행중인 코드의 흐름을 멈추고 현재 실행중인 코드의 바깥으로 실행 위치를 옮기는 역할을 한다.

C# 7.0 부터 데이터 형식을 조건으로 사용가능

가령

이런식으로 사용이 가능.

데이터 형식에 따라 분기를 할 경우 case절에서 데이터 형식 앞에 반드시 식별자를 붙여 주어야한다.

TryParse() VS Parse()

이런식으로 구현이 가능함.

  • Parse() : C# 기본 숫자 형식은 문자열을 숫자로 변환해줌.

  • TryParse : Parse()와 같은 기능함.

차이점

변환이 실패 할 경우 어떻게 다루는가 이다.

  • Parse()의 경우 예외를 던짐

예외가(에러?)가 던져지게 되면 프로그램은 현재 코드의 실행을 멈추고 흐름을 다른 곳으로 이동시킴.

  • TryPase()의 경우 변환의 성공 여부를 반환하기 때문에 현재의 코드 흐름을 유지가 가능하다.

TryParse()가 반환한 데이터는 두번째 매게변수에 저장됨.

out 키워드

현재는 그냥 출력 전용 매개변수임을 나타내는 정도로만 알고 있어라.

데이터 형식에 따라 분기하는 경우 추가 조건 검사

switch 문의 when을 사용이 가능함.

when으로 추가 조건 검사를 수행 가능하다.

이런식으로 사용이 가능하다.

에러 뜨는 이유 : 데이터 형식에 따라 분기를 할 경우만 해당됨!


(p158);


5.1.4 switch 식

이전에는 "switch문" 이번에는 "switch문"

식은 어떤 계산을 해서 결과를 내놓는다.

문은 어떤 일을 한다.
결과를 내든 안 내든

이런식의 switch문을

이런식으로 바꿀 수 있음.


p161 예제

이번 예제에서 건질게 "삼항연산자"이다.


5.2 반복문

  • while

  • do while

  • for

  • foreach

while

조건식에 false값을 가져야 빠져나옴,

5.2.3 for

for (초기화식; 조건식; 반복식;)
  • 초기화식 : 반복을 실행하기 전 딱 한번만 실행되는 곳

  • 조건식 : 반복문을 계속 수행할지를 결정하는 식.

  • 반복식 : 반복이 끝날 때마다, 실행.

5.2.5 foreach

  • 배열이나 컬렉션 개념 알고 있어야한다.

  • 배열 또는 컬렉션을 순회하며 각 데이터 요소에 차례대로 접근하도록 해줌.

foreach (데이터 형식 변수명 in 배열_또는_컬렉션)

5.2.6 for || while -> 무한

for ( ; ; )

while (true)

5.3 점프문

  • break

  • continue

  • goto

  • return

  • throw

흐름을 끊고 프로그램의 실행위치를 원하는 곳으로 도약

break

현재 실행중인 반복문이나 switch 문의 실행을 중단 하고자 할 때.

이럴경우는

현재 실행중인 반복문이 j의 반복문이라 j == 3일때 break; 헤서 나온다음에

i반복문 실행한다.

이런식으로.

5.3.3 goto

goto 레이블;
레이블 : // 이어질 코드

레이블

: 변수와는 조금 다름. 코드안의 위치를 나타내는 표지판 같은 역할.

goto는 저 레이블이 가르키는 위치로 바로 뛰어 넘어간다.

이딴식으로 사용이 가능하다.

프로그래머들이 좋아하지 않음. => 흐름을 자주 끊어서

그럼에도 불구하고 유용하게 쓰이는 경우 => 이중이상의 for문 뚫고 나올 경우

문제

1번

 for (int i = 0; i < 5; i++)
 {
 	for (int j = 0; j < i + 1; j++)
    {
    	Console.Write("*");
    }
    Console.WriteLine();
}

2번

int num = 5;
for (int i = 0; i < 5; ++i)
{
	for (int j = 0; j < num; ++j)
	{
		Console.Write("*");
	}
	--num;
	Console.WriteLine();
}

3번

이거 맞니?

4번

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글