안녕하세요, 어서 오세요 이번 강의에서는 while과 while 루프에 관해 얘기해 볼게요
for 루프도 얘기했죠 코드를 반복하게 해주는 거예요
c#에 다른 구문도 있어요 while and do while 다른 구문으로
같은 일을 하는 거죠
while 루프는 문자열 집합을 반복하는 메커니즘입니다
지정된 논리식이 참인 한 실행이 계속되도록 해 주죠
여기도 마찬가지고요 if문은 특정 코드를 실행하고 while문은
특정 코드를 실행합니다 부울 평가에 여러 번 근거해서요
for 루프에서 할 수 있는 모든 건 while 루프에서도
할 수 있어요 다른 구문일 뿐이죠
while 루프는 이렇게 생겼어요
아주 높은 수준에서 슈도코드를 살펴보면
이 조건이 참인 동안 이걸 계속하세요
좀 더 세계적인 예와 관련지어 보죠
배가 고플 때 샌드위치를 먹는 거죠
코드를 반복하세요 배고프면 계속 샌드위치 먹을 거잖아요
while 루프의 일반적인 구문은 다음과 같아요
차체에 있는 한 문장에 대한 구문을 보여주고
있어요 그러니 괄호나 중괄호를 제공할 필요가 없죠
전 중괄호와 괄호를 같은 용어로
쓰는 경향이 있어요
이게 구문입니다 하나의 문과 여러 개의 문이죠
다중 문장, 괄호가 있어야 하고 단일
문장은 없어요 옵션이죠 가질 수 없거나 가질 필요가 없죠
식은 for 루프와 if 문처럼 괄호
안에 들어가죠 여기 표현은 for 루프와
달라요 단일 출구 조건이거든요
말이 그렇다는 거죠 루프 컨트롤 변수를 초기화하지 않아요
괄호 사이에 있는 루프 컨트롤 변수를 수정하지 않아도 돼요
말이 그렇다는 거죠
while 루프의 지속 조건은 처음에 테스트하죠
이게 루프의 정점이죠
이건 테스트 루프예요 그 말은 본체에서
0번 또는 여러 번 실행될 수 있다는 거죠
이것도 관련이 있어요 do while 루프는 약간 다른 걸 하거든요
식이 거짓으로 시작되면 본체의 어떤
루프 문도 실행되지 않아요
그래서 상단에 있는 거예요
첫 번째 질문에 안 고프다고 대답하면 샌드위치는
절대 못 먹을 거예요 커피나 코드 다음 줄로 바로
넘어가는 거죠 루프의 본체에 들어가지 않을 거예요
루프 조건이 참으로 시작한다면
루프가 끝난다면 루프 본체에 이를 바꾸는 메커니즘이
있을 거예요 그렇지 않으면 무한 반복이 될 거예요
for 루프는 하나의 문으로 루프를 제어하는 변수를 수정하죠 while 루프에서도
같아요 차체에서 해야 한다는 것만 빼면요
while 루프는 어딘가에서
변수를 초기화해 제어합니다 그런 다음
코드 안에서 수정하죠
말씀드린 대로 while 루프는 for 루프가 하는 모든 걸 할 수 있어요 다른 구문일 뿐이죠
for 루프는 많을수록 짧죠 모든 걸 한 줄로 할 수 있죠 while
루프에선 그 세 가지를 별개의 줄에서 해야 하지만요
이 예제에선 int
= 0이 나왔죠 이게 루프 컨트롤 변수예요 while 루프 문의 외부죠
for문을 사용한다면 for 루프 안으로 들어갈 겁니다 첫 번째 세미콜론 전에요
루프 초기화가 변수를 제어하는 곳이죠
while 키워드가 있고 괄호 안에 부울 식이 있어요
이건 for 루프와 동일합니다 두 번째 세미콜론
바로 앞의 두 번째 문이죠
참인지 거짓인지 확인하는 거예요 참이든 거짓이든 루프의 본체로 들어가는 거죠
count가 5보다 작으면 count를 출력하고요.
그 다음 코드 줄은 아주 중요합니다 ++
카운트죠 루프 컨트롤 변수를 수정하니까요
더하기 더하기 카운트를 해야 합니다 아니면 루프를 절대 빠져나오지 않죠 상단에
조건이 있거든요 카운트가 5보다 작으면이요 카운트가 항상 1이면 무한 루프가
되죠
+ 더하기 카운트는 아주 중요해요
플러스 더하기 카운트는 증분 연산자라는 걸 기억하세요
count = count + 1이라고만 하면 돼요
이 루프는 5번 실행될 거예요
이렇게 하면 count 1과 count
2 count 3과 count 4, count 5로 실행이 될 거에요.
일단 카운트가 6이 되면 루프를 빠져나와 본문에서
어떤 구문도 종료하지 않아요
for 루프를 생각해야 해요
루프 제어 변수일 뿐이죠 루프 제어 변수의
변수는 실제 루프 선언에 없어요
for 루프처럼 전부 한 줄에 있지 않아요
여기 또 다른 예가 있어요 루프를 끝내기 위해 논리를 제어하는 거죠
여기 첫 번째 예제에서 이건 counter control 루프예요
항상 같은 횟수인 5를 실행할 거예요
다음 예제에선 루프가 100번 또는 0번
실행될 수 있어요
여기 while 키에서 평가하고 있는 조건은 = 1이 아닌 곳은 모두
사용자가 입력하는 것에 좌우됩니다 = 사용자가
입력하는 것이니까요
이 루프는 0번 실행할 수도 있고 100번 실행할 수도 있어요
키보드의 입력값에 달렸죠
센티넬 통제 루프라는 거예요 역제어가 안 돼요
변할 수 있는 논리와 변수를 기반으로 하죠
NUM이 1이 아닌 동안 키보드에 입력한
값을 NUM에 저장하죠
사용자가 키보드에서 1을 입력하지 않으면 이 루프는 절대 나오지 않아요
while에도 같은 유형의 구문이 있어요
루프 컨트롤 변수는 num이에요 위에 0을 초기화하고 읽기를
수정합니다 사용자가 키보드에 입력한 것에 따라 루프를 입력하는지
확인하기 위해서요
while 키워드 괄호 안에 음 1이
있는지 확인할 수 있어요
while 루프 본체에는 브래킷이 있는데 브래킷은
거기 있을 필요가 없어요 단일 문장이니까요 하지만 거기 두고 싶어요
그런 다음 다음 입력값을 읽고 num에 저장하죠
사용자가 다음 입력에 대해 1을 입력하면 루프 밖으로 점프하죠
그렇지 않으면 계속 실행하면서 정보를 입력하라고 할 거예요
do while 루프는 while 루프의 for
루프와 약간 다릅니다 테스트 후 루프로 간주되거든요
while 루프에서 본체는 조건이 참인 동안 실행되죠
do while 루프에서 대상은 조건 없이 처음으로 실행되고 do while
루프는 테스트가 아래에 있기 때문에 적어도 한
번은 루프를 실행한다는 뜻이에요
몸통은 항상 한 번 이상 실행하죠 더
할 수도 있지만 항상 한 번이에요 0번은 절대 안 하죠
출구를 시험하는 조건은 바닥에 있거든요
이걸 테스트 후 루프라고 하죠 출구 통제 루프라고도 하죠
while 루프를 사용합니다 적어도 한 번 루프가 들어오길
원한다면요
일반적으로 do while 루프를 사용할
필요는 없어요 for 루프에서도 같은 걸 할 수 있으니까요 원한다면
코드를 루프 밖에 두기만 하면 되죠
Do while 루프는 별로 필요하지 않아요 하지만 그걸 사용하고 싶은 사례가 있죠
최초 집행 후 시신은 조건이
충족됐을 때만 처형되죠 루프의 첫 번째 반복이 끝나면 보통
루프처럼 행동할 거예요 조건이 거짓이면 튀어나오죠
이렇게 생긴 거예요 do는 맨 위에 있고 조건에
대한 테스트는 맨 밑에 while 키워드와 함께 있죠
do는 새 키워드고
괄호를 쓸지 안 쓸지는 본문에 여러 개의 문장이
있느냐 없느냐에 달렸죠
차체에 문장이 하나뿐이면 괄호가 없어져요 위쪽에 있는 것만 하면 돼요 루프의
아래쪽에 while이 있죠
그 와중에 괄호 안에 불리언 평가가 있어요 여러분이 확인하는
조건이죠 하지만 저 조건이 하단에
있기 때문에 항상 적어도 한 번은 그 문을 실행하도록 보장되죠
왼쪽 예제는 한 개의 문이고 오른쪽 예제는 여러
개의 문이에요 괄호와 중괄호가 있죠
이 두 번째 예제에서도 암호 프롬프트 같은 게 있을 수 있다고 했죠 사용자 입력을 읽으라고요
입력이 암호와 같지 않은 동안에요
하지만 적어도 한 번은 암호를 프롬프트하겠죠
while 루프 예가 또 있네요
첫 번째 예는 루프가 한 번 또는 여러
번 실행되지만 0번은
절대 안 된다는 거죠
사용자가 뭘 입력하느냐에 달렸죠 항상 최소한 한 번은 실행되지만 이건
키보드에서 입력을 읽는 거죠 scanf 함수가 보이죠.
사용자가 20을 입력하지 않는 한 이 루프를
실행할 거예요
while 루프는 counter 제어 루프일 수도 있어요 일정한 횟수로 실행된다는 뜻이죠
이 예제에선 4번 실행될 거예요
int = 4가 있죠 상단에 do가 있고 브래킷이
있어요 차체
안에 여러 개의 문이 있으니까요
루프 컨트롤 변수를 증가시킵니다 넘버 + +요
검사 조건은 여전히 하단에 있어요 이걸 4번 실행할 거예요
while 키워드는 오른쪽 중괄호와 같은 줄에 있지 않아도 되죠
보통은 그렇지만 꼭 그런 건 아니에요
그리고 하단의 while 키워드는 세미콜론으로 끝나요 그것도 아셔야 해요
루프에 대해 모두 배웠죠 for 루프, while, do while
어떤 루프를 사용해야 할까요?
어떤 루프를 사용할지 먼저 결정해야 하는 건 사전 테스트인지
퇴비 테스트인지예요 최소 한 번은 실행하길 원하세요? 최소
한 번은 실행하기 싫으세요? 적어도 한 번 이상 실행하고 싶다면
do while을 사용하세요 그게 조건이 아니라면 for나
while 또는 do while을 사용하세요
따라서 어떤 루프를 사용할지 결정하는 건 대부분
사전 테스트 루프가 되죠 루프 동작은 하지 마세요
대부분의 경우 그게 더 나은 선택이죠 훨씬 읽기 쉬워요
루프를 하기 전에 미리 보는 게 좋아요
반복은 하지 마세요 맨 위에 상태를 확인하는 게 좋아요
가독성을 위해서 루프가 테스트 중이라면 훨씬 더 직관적이죠
그래서 루프를 처음에 확인하게 하고 for 또는 while을 사용하세요
많은 경우 테스트가 처음에 충족되지 않으면 루프를 완전히 건너뛰는 게 중요해요
그렇기 때문에 테스트가 위에 있어야 하죠 항상 한 번씩 실행하는 건 좋지 않아요
대부분은 실행하고 싶지 않을 수도 있어요
그러니 잠시 그걸 쓰세요
이제 문제는 어떤 것을 한동안 사용하느냐는 거죠
개인적인 취향의 문제죠 그건 중요하지 않아요 강의
초반에 말했듯이 그 시간에 할 수 있는 건 그 시간에 할 수 있으니까요
for 루프가 더 좋다면 for가 좀 더 빠를
수도 있어요 모든 루프가 수정과 초기화, 종료
조건을 제어하니까요
하지만 선택은 여러분 몫이에요
저는 보통 for 루프를 써서 반대로 조종해요
하지만 같은 걸 사용할 수 있어요 for 루프를 사용해
시간처럼 보이게 하려면 첫 번째와
세 번째 식이 없어요 단일
식만 있죠 for 세미콜론 test 세미콜론은 while test와 같아요
이건 그동안 for도 같은 걸 할 수 있다는 걸 보여드리는 겁니다 구문만
약간 바꾸는 거죠
while 루프를 사용하지만 for 루프처럼 작동하고 싶다면
초기화 접두사를 붙여서 본문에 업데이트 문구를 추가하세요
그래서 여러분이 할 일은 이런 겁니다 보통 while 루프에선 이걸 항상 하죠
하지만 이건 for 루프에 해당하죠 초기화는 컨트롤 변수의 루프
외부에 있습니다 루프 컨트롤 변수요
테스트 조건은 괄호 안에 있어요 while
루프의 본문에서 반복문 컨트롤 변수를 업데이트하는 거죠
for 루프 초기화 테스트 업데이트와 같은 거죠 다음은
body예요 그게 그거죠
말씀드린 것처럼 for 루프를 좀 더 사용합니다 counter 제어 루프요
하지만 그날 기분에 따라 포와 포를 번갈아 쓸 거예요
for 루프가 좀 더 적절할 수도 있어요 한 줄로 변수를
초기화하고 업데이트하려면요
while 루프는 다른 조건일 때 더 좋아요
카운터 컨트롤 루프는 센티넬 컨트롤 루프죠 while 루프일 수도 있고요
여기 while 루프의 예가 있어요 센티넬 제어 루프와 for
루프로 같은 걸 하죠 for 루프는 counter 제어 루프고요
사용자가 입력하는 것에 따라 루프가 여러 번
실행되지만 for 루프는 counter 컨트롤되죠
작업 중의 시간이죠 깨끗해야 할 텐데요
이런 루프에 익숙해지세요 코드를 반복해야 하니까요
중첩된 루프에 관해 잠깐 얘기했고 루프를 끝내기 위한 약간의 다른 메커니즘도
얘기했죠 중단 또는 계속을 이용해서요
고마워요