' [C/C++] 9.4강 - switch & break | 제어문, 조건 관리하기

Programming/C & C++

[C/C++] 9.4강 - switch & break | 제어문, 조건 관리하기

mdisprgm 2022. 1. 15. 22:22
728x90

(1) switch

switch.

전기 스위치 할 때 그 스위치로 이해해도 될 것 같다.

 

사실 if가 switch를 완벽히 대체할 수는 있지만

 

일부 상황에서는 switch가 코드도 짧아지고

 

가독성이 올라가는 경우가 있기 때문에 알아두면 좋다.

 

 

(2) if를 사용했을 때

사람의 행동에 대해서 확인하는 예제이다.

 

지난 포스팅에 쓴 enum도 사용하였다.

#include <stdio.h>

enum Actions {
	SitDown,
	StandUp,
	LayDown
};

int main() {
	enum Actions action = StandUp;

	if (action == SitDown) {
		printf("앉았습니다\n");
	}
	else if (action == StandUp) {
		printf("일어섰습니다\n");
	}
	else if (action == LayDown) {
		printf("누웠습니다\n");
	}
}

 

Actions라는 enum 열거형을 선언하였고

 

main에서 action에 따라 다른 출력값을 보이고 있다.

 

저기선 actionStandUp 이므로 "일어섰습니다"가 출력된다.

 

 

이렇게 항상 같은 변수에 대해 == 연산자를 사용하여 확인할 때 switch가 유용하게 사용될 수 있다.

 

switch를 사용하여 같은 코드를 써보면 아래와 같다.

#include <stdio.h>

enum Actions {
	SitDown,
	StandUp,
	LayDown
};

int main() {
	enum Actions action = SitDown;

	switch (action) {
	case SitDown:
		printf("앉았습니다\n");
		break;
	case StandUp:
		printf("일어섰습니다\n");
		break;
	case LayDown:
		printf("누웠습니다\n");
		break;
	}
}

 

if에 쓰는 조건처럼 괄호에 변수를 넣어주고

 

case 값:

break;

 

case 값2:

break;

 

case 값3:

break;

를 해주면 된다.

그러면 각 경우에 맞는 코드들이 실행될 것이다.

 

따라서 두 번째 코드도 똑같이 "일어섰습니다" 라고 나온다.

 

break;를 써주는 이유는 간단하다.

 

값이 일치하는 case를 만나게 되면

 

코드 진행(rip ?) 이 그곳으로 JUMP하게 된다.

 

그래서 action이 StandUp일 때 printf("일어섰습니다\n"); 부분으로 갔다가

 

switch가 끝나지 않고 다음 줄까지 이어져 printf("누웠습니다\n");도 실행되는 것이다.

 

break;를 뺀 코드를 실행한 결과를 보면 이렇다.

 

 

 

(3) default

가능성 있는 값이 너무 많거나 깜빡하여 case에 적어주지 못할 수 있다.

 

그럴 때는 case (값): 대신 default: 를 실행하게 된다.

#include <stdio.h>

enum Actions {
	SitDown,
	StandUp,
	LayDown,
	Jump
};

int main() {
	enum Actions action = Jump;

	switch (action) {
	case SitDown:
		printf("앉았습니다\n");
		break;
	case StandUp:
		printf("일어섰습니다\n");
		break;
	case LayDown:
		printf("누웠습니다\n");
		break;
	default:
		printf("알 수 없는 행동입니다\n");
		break;
	}
}

enum ActionsJump를 추가하였고 action에 Jump를 대입하였더니

 

SitDown, StandUp, LayDown 중 하나도 일치하는 경우가 없어

 

"알 수 없는 행동입니다\n"이 출력된다.

 

 

(4) case에 들어가는 값은 상수여야 한다

switch를 사용할 시 주의할 점은

 

case 에 들어갈 값이 컴파일 타임에 결정되어야 한다.

 

즉, 상수여야 한다는 말이다.

변수를 집어넣게 되면 위 사진처럼 에러가 뜬다.

 

switch에서 비교할 값은 변수여도 된다.

 

 

 

끝.

 

728x90

'