안녕하세요, 어서 오세요 이번 강의에서는 스위치 성명에 관해 얘기할 거예요
if문의 대안이지만 보통
특정한 상황에서만 사용되죠
멋진 구문이 있어요 if문에 반복을 할 수 있도록요
조건부 연산자와 if else 문은 두 대안 사이에서
선택하는 프로그램을 쉽게 작성하게 해주죠
질문을 하고 결정을 내리는 건 아주 쉬워요
하지만 종종 프로그램은
여러 대안 중 하나를 선택해야 하죠
이건 본질적으로 if else
if else if else if if죠
좀 복잡하죠, if문으로 이걸 구현할 수 있으니까요 대안이 몇
가지 있다면요 하지만 100개의
if가 더 있을 수도 있어요 지루하고 잦은 실수죠
정말 골치 아파요 상투적인 코드를 작성하는 것과 같죠
이 구문의 대안과 스위치에서 할 수 있는
모든 건 if에서 할 수 있어요
하지만 더 깨끗하고 쉽고 효율적이기도 해요
어떤 변수의 값이 다른 값에 대해 성공적으로 비교되면 switch 문을
사용하세요
여기서 의미하는 건 if문이 있고 else if, else if, else if, else
if, else if 스위치 문을 사용한다는 거죠
부울 식이 좀 더 복잡하면요
switch문을 쓰면 안 돼요 스위치 문이란
상수 같은 값과 비교할 때만 사용할 수 있어요
그렇게 복잡한 표현은 아니에요
스위치 문을 사용하는 게 훨씬 더 편리하고 효율적이죠 대부분의 언어도
이 구성체를 갖고 있어요 아주 좋아요 많은 언어들이
C#에 기반해 구축될 거예요
미리 프로그래밍을 해두셨다면
이런 구조에 익숙해지실 겁니다
원래 C로 나왔거나 그 전의 언어니까요
스위치 문의 구문을 보죠 스위치 키워드 있잖아요
스위치 안에는 왼쪽과 오른쪽 괄호가 있는데
식을 나타내죠 첫 부분의 if문과 비슷한데
if 키워드 대신 switch 키워드예요
그리고 왼쪽 괄호가 있죠
왼쪽 괄호가 필요해요 왼쪽 브래킷이 스위치 본체와 연결되죠
맨 아래에 있는 오른쪽 브래킷이 스위치 본체와 연결되어 있죠
또 다른 중요한 것은 이 키워드 케이스예요
케이스는 if문과
비슷해요 스위치는 실제로
식을 보게 됩니다 그게 참이든
거짓이든 상관없이요
스위치는 그냥 변수 같은 걸 보는 걸 수도 있어요
그런 다음 case문에서 해당 변수를 평가하죠
if 값 1이 식과 같고 if
n이 식과 같으면요
이렇게 볼 수도 있어요 스위치가
맨 위에 있고 케이스는 각각 if문으로 스위치
식과 값을 비교하는 거죠
케이스도 키워드예요 케이스 뒤에 콜론도 보이시죠
케이스가 있고 값이 있어요
그 안에 여러 개의 프로그램 문이 있어요
끝에는 브레이크 키워드도 있어요 그것도 키워드예요 키워드가 3개군요
아니, 4개네요 switch 키워드, case 키워드 브레이크
키워드 하단에 디폴트가 있죠
알아두셔야 할 중요한 것들이에요. 상세한 사례를 살펴볼
테지만 다른 사례도 있어요 그냥 if else if else else else if 같은 거죠
값 1이 등호면 코드를 실행하세요
그렇지 않다면 값 2가 식과 같다면
그걸 평가하세요 그렇지 않다면 3이 식과 같다면 그걸 평가하세요
그렇지 않다면 값 n이 식과 같으면 그 블록 안의 코드를 실행하세요
케이스 블록은 콜론으로 시작해서 중간으로 끝나죠
그런 브레이크가 없으면 다른
케이스로 넘어가요 그 얘길 다시 하죠
마지막으로 중요한 건 이 기본 키워드예요 이건 본질적으로 else if,
else if, else if 그 다음이죠
다른 케이스가 식에 따라 평가되지 않는다면 이건 설정되는 거죠
제가 언급한 세부 사항에 대해 얘기해보죠
괄호 안에 있는 식은 성공적으로 값과 비교되죠
다시 구문으로
돌아가면 식은 모든 값과 비교되죠
어떤 값이든 그에 일치하면 그 값 안의 코드를 실행해요
사례는 간단한 상수나 상수 표정으로 평가해야 합니다
상수에 따라 평가되는 표정이죠
x 더하기 y를 켤 수도 있어요 x가
5라면 10을 켤 테니까요 그럼 그 값이 10과 비교되죠
하지만 보통은 어떤 숫자와 동일한 변수를 켜죠
값이 식의 값과 같은 케이스가 발견되면 케이스에
따른 구문이 실행되죠
하나 이상의 문장이 포함되면 괄호 안에서 닫힐 필요가 없어요
그러니까 하나 이상의 구문이
포함되면 대소문에는 중괄호가
필요 없다는 거죠
if문을 기억하세요 항상 중괄호가 있어야
합니다 이건 경우가 아니죠 한 줄씩 연결할 수 있어요 브레이크가 중요하죠
브레이크 문은 특정 사건의 종료를 알려주고
그 문의 실행이 종료되도록 합니다 튀어나오죠
거기서 브레이크가 없으면 다음 사건은 실패해요
그래서 모든 케이스에서 브레이크 문을 포함해야 하죠 브레이크가 없다는 건 보통
버그가 있다는 뜻이죠
휴식을 포함하는 유일한 이유는 코드를 실행하고자 하는
여러 조건이 있을 때죠 여러 사례가 있을 경우 기본적으로
식이 이 경우, 이 경우 저
경우라면 같은 걸 하라고 하는 거죠 그런
다음 브레이크를
빼요
그러니 브레이크를 주의하세요 다음 사건에서 특정
블록이 실행되든 안 되든 문제가 생길 수 있거든요
기본값이라 불리는 특별 옵션 케이스가 실행됩니다 식의
값이 어떤 경우와도 일치하지 않으면요 어떤 사건도 사실이 아니면
실패할 수 있어요
여기 좋은 예제가 있어요 열핵을 평가하기 위해 스위치를 만들 거예요
이 경우엔 평일이라고 하는 열거형 유형이 있는데
모든 주중에 의해 지정된 거죠
그런 다음 형식인 월요일에 변수를 생성해 월요일에 설정하고 오늘로
바꾸는 거죠
오늘의 값에 따라 변수, 사례 문 중
하나가 실행될 거예요
오늘이 일요일과 같다면 일요일을 프린트하고
점프할 거예요.
오늘이 월요일과 같다면 오늘을 월요일로 출력하고 점프아웃할 거예요
어떤 것과도 같지 않으면
기본 케이스로 가겠죠 이 예제를 코드블록에서 실행해보죠
여기 샘플 코드가 있어요 오늘 날짜가 월요일과 같기 때문에
볼 수 있습니다. 월요일은 평가되고
오늘 결과물이 월요일인 것을 볼 수 있어요.
그럼 이 코드를 빌드해 실행해보죠 그게 오늘 우리가 볼 거예요 오늘이
월요일이죠
왜냐하면 오늘은 월요일이기 때문이죠 오늘 변수를 평가하고
싶은 표현을 입력하고 평가하는 거죠
기억하셔야 할 것은 스위치 문을 괄호로
시작한다는 겁니다 16번째 줄에서 괄호로 시작하고
29번째 줄에서 스위치 이름을 끝내죠
케이스 문 안에 괄호 없이 줄을 여러 개 넣을 수 있어요
이제 월요일 이후 브레이크 문에서
어떤 일이 일어나는지 보죠
브레이크는 케이스에서 바로 튀어나오거든요 하지만 제거하면 발생하는
일은 화요일로 넘어가게 되고
printfs 둘 다 실행되는 걸 보게 됩니다 오늘은
월요일이고 오늘은 화요일이죠
프로그램을 실행하면 오늘은
월요일이고 오늘은 화요일이죠
그게 중단 선언의 중요성이죠
브레이크가 울리죠
월요일과 화요일에도 같은 출력을 원할 경우 유용할 수 있죠
예를 들어 가끔 사례문을 이런 식으로
보실 수 있어요 사례 화요일이요 동일한 출력을 원하기 때문이죠
변수가 무엇이냐는 중요하지 않아요
그런 걸 볼 수도 있지만 다른 실행을 가진 개별 케이스
문이 있을 땐 그런 브레이크를 추가해야 해요
그럼 일요일, 월요일, 화요일만 보는 거네요
오늘 값을 일요일과 동일하게 설정하면 어떻게 될까요?
그에 부합하는 케이스가 없으니까요
무슨 일이 일어나느냐면 기본값으로 떨어집니다 뭐든 프린트할 거예요
다시 실행해보죠
오늘은 일요일이에요
다른 변수로 설정했어요 그냥 수요일로 설정하고
싶어요 일요일에 사건이 있었어요
이제 어떤 것이든 프린트할 수 있어요 어떤 케이스와도
일치하지 않았거든요
스위치를 위해 해야 할 일은 구문을 외우는 것뿐이죠
식은 괄호로 들어가고요 그걸 평가할 거예요
사건마다 표정이 일치해야 해요 보통 변수를 쓰니까 특정 상수
값으로 평가되는 정수나 식이어야 해요
그리고 각각에 대한 케이스가 있고 기본값으로 모든 케이스가 있어요 브레이크도 잊지 마세요
다시 돌아가서 케이스와 함께 스위치 생성자의 다른
예제를 살펴보죠
다음 예제는 좀 달라요
여기서 우리가 하는 건 사용자로부터 데이터를 받은 다음 그걸 전환하는 거죠
이 예제에서 메인 함수에선 부동 소수점 몇 개를
생성하고 문자연산자를 생성합니다 그런 다음 사용자에게
값을 입력하라고 하죠 연산자와 값 2요
구분하기 위해 형식 스펙타이어를 사용하죠 모두 ampersand 주소를 갖고 있어요
연산자의 글자에 따라 +마이너스든 별표든 스위치 케이스에선
그걸 포함해야 하죠
사용자가 +를 입력하면 여기
다음 열 스위치 생성자를 보시면 연산자에 스위칭하죠
연산자의 값을 비교합니다. 연산자의 값은 각각의 case문과
비교하고요. 이 사례 문들은 작은 따옴표로
둘러싸여 있어요 글자를 비교하기 위해서죠
숫자나 변수를 특정
상수에 비교하거나 문자를 특정 상수에 비교할 수 있어요
그리고 각각의 case 문 안에 특정 형식을 프린트하죠
1 더하기 2와 1 빼기 2의 값이요
프린트에서는 계산을 수행하죠
그리고 중요한 돌파구가 보이죠 다른
사건에서 뒤처지지 않으려면 꼭 필요한 정보예요
그리고 마지막 케이스 문에서 전진/분할이 있는 곳엔 if
문도 있어요
케이스에는 괄호가 없습니다 왜냐하면 케이스마다
괄호 없이 여러 개의 문을 가질 수 있기 때문이죠
마지막 경우 값 2가 0이면 0으로
나누지 않는다는 걸 확인하죠
0으로 나누지 않으면 실제로 분과를 수행하게 되죠
그 사건이 끝날 무렵 또 다른 단서가 나왔어요
기본 케이스에서는 연산자를 입력했는데 우리가 다룰 줄 모르는 거죠
스위치 문장은 아주 효율적이에요
여러 가지 값을 특정 변수에 비교하고
다른 걸 하고 싶을 때 쓰는 건 아주 빠르죠
마지막으로 말씀드리고 싶은 건 의사 결정에 관한 입장 표명이에요
직접적인 결정문은 아닙니다
레이블을 이용해 다른 줄의 코드로 넘어가는 것에 더 가깝죠 하지만
C#에서도 사용 가능합니다 그래서 말씀드리고 싶었어요
이동 문에는 두 부분이 있습니다 레이블과 키워드죠
포트란이나 다른 기본 언어로
프로그래밍한 적이 있는 분들은 이걸 잘 아실 겁니다
꽤 많이 사용했죠
c로 넘어오면 사실 쓸 필요가
없어요 꽤 유용한 경우가 몇 번
있었는데 그건 잠시 후에 설명드리죠 하지만 주로 가는 건 코드로 점프하는
겁니다 아무 코드나 줄로 갈 수 있어요
사람들이 사용하기 싫어하는 이유 중 하나는 이해하기 어렵기 때문이에요
프로그램을 순차적으로 유지하려면 while 루프에서
한 줄씩 if문을 사용해야 해요
while 루프에서 if문만으로도 충분히 안 좋아요
그런데 소스 코드의 라인 27에 있는데 키워드 때문에 아무
이유 없이 라인 800으로 넘어가게 되면 갑자기 엄청난 양의 코드를 건너뛰게
되죠 유지하고 따라가기가 아주 어려워요
가야 할 두 부분과 레이블 이름이요 라벨의 이름은 같은 규칙에
따라 지어집니다 문자와 숫자 문자로요 숫자는 안 되고
밑줄로 시작할 수 있어요
밑줄로 시작하세요
키워드만 사용하면 되죠 식별자 2부로
가고요 2부는 레이블이에요
그 코드 줄로 넘어가기 위해서는 그 코드 줄에 레이블을 붙여야 해요
2부를 말하는 성명이 있어야 해요
이것의 예를 보여드리죠 하지만 절대 사용하면 안 돼요
유지 관리와 관련된 문제들이 있거든요
하지만 여러분이 프로그래밍을 해 봤고 사용에 익숙하다면 말씀드리고 싶었어요
c에서는 많이 사용하지 않아도 돼요
유용할 것 같은 유스 케이스가 하나 있었어요
요전 날 동료 프로그래머와 작업했는데
중첩된 루프나 중첩된 if문을
많이 갖고 있더군요
하지만 루프가 더 좋은 예가 되겠죠 루프들, 암호를 반복해요 중첩된 루프가 많았어요
그리고 다섯 번째처럼 가장 안쪽에 있는 루프에서 몸이
안 좋아서 모든 루프에서 점프하고 싶어 했어요
그런 루프에서 벗어나기 위해 가곤 했어요
고리에서 탈출하려면 브레이크 암호를 사용해야 하는데
브레이크는 가장 안쪽에서만 탈출할 수 있어요
여러 개의 플래그를 설정하고 여러 개의 if문을 가지고 있지
않은 한 효과적인 방법은 없습니다 모든 루프를 종료하기 위해서
그는 그리로 가곤 했죠 그게 꽤 유용하다고 생각한 한 사례였죠
작성해야 할 코드 양을 줄이고 무슨 일이 벌어지는지 꽤 명확했으니까요
중첩된 루프에서 뛰어내린 건 특정한 증상을
겪었기 때문이에요
그것도 한 케이스죠 하지만 대부분의 경우 정말 들어갈 필요가 없어요
말씀드린 이유 때문에 아주 문제가 많죠 여기저기 뛰어다니면 코드를 따르기가 힘들어요
하지만 이동은 다른 언어에서 사용하는 것과 똑같죠
레이블 이름의 키워드도 있어요
코드에서 일어나는 일은 레이블과 함께 그 코드 줄로 넘어가는 거죠
코드는 다 건너뛰어도 돼요
이 예제에서는 top이라는 레이블이 있고 콜론이
있어요. 그게 바로 레이블이죠
top에는 몇 가지 문구가 있네요. 그 맨 아래에 if문이
있어요 char = y라고 하면 위로 올라가고요.
다시 한 번 여러분의 코드에서 어떻게 뛰어다닐 수 있는지 보셨죠 그래서 따르기가 아주 어려워요
기본적으로는 사용하지 마세요 중첩된 루프가 아주 많거나 모든 루프에서
점프하고 싶지 않다면요 고마워요