다시 오신 걸 환영해요
제어 흐름에 관해 좀 더 얘기할 거예요
반복 코드로 바로 들어가보죠
먼저 루프에 대해 얘기하도록 하죠
for 루프는 반복
코드에 관한 거예요 다시 말씀드리지만 반복
코드는 중복을 방지하는 방법입니다
한 번에 하나 이상의 코드를 실행할 수 있죠
C# 프로그래밍 언어는 특정 구문을 위해 설계돼 있어요
코드를 반복하고 싶을 때 사용할 수 있도록요
어떤 조건이 충족될 때까지 문의 블록을 반복할 수 있어요
for 루프와 비슷해요 부울 식을 평가하는
거죠 조건이요 영원히 도망칠 순 없어요
루프에서 영원히 실행된다는 건 무한 루프라는 뜻이죠
다시 해야 할 때는 정해져 있어요
모니터링이나 청취를 위해서요
루프가 반복되는 횟수는 계정으로 제어할 수 있어요
루프에는 두 종류가
있어요 카운터 제어 루프와 센티넬 제어 루프죠
counter control 루프는 루프가 10번,
20번, 30번 특정 시간 동안 실행된다는 걸 의미하죠
루프 안에서 같은 문 블록을 여러 번
반복하죠
counter 제어가 아닌 또 다른 유형의 루프를 가질 수 있어요
5번 실행될 수도 있고 100번, 20번을 원할 수도
있죠 모두 조건, 변수 같은 것에 달려 있어요 예를 들어 루프를 실행할 수 있어요
사용자가 종료할 때까지 반복해서 실행하겠다고
하는 루프요
중단으로 변수가 생길 때까지는요 역제어가 안 돼요 의존적이지 않아요
10번 실행될 수도 있고 100번 실행될 수도 있죠
두 가지 유형의 루프예요 두 가지 모두 예제를 제공할 것입니다
하지만 높은 수준에서 코드를 언제 반복하고 싶은지 생각해 보세요
코드를 5번 반복할 수도 있어요 특정 시간, 최종
시간에요 사용자가 입력한 특정 조건에
따라 코드를 입력할 수도 있고요 센티넬이라고 하죠
for 루프에 for 키워드가 있어요 정해진 횟수만큼 실행하는
데 사용되죠 보통은 방어용으로 쓰이지만 꼭 그럴 필요는 없죠
카운터 루프나 센티넬로 사용할 수 있어요
마음대로 해요 하지만 대다수의 사례는 통제가
안 되는 경우가 꽤 있어요
예를 들어 1부터 10까지 숫자를 디스플레이하고 싶다면 for 루프를 사용하면 되죠
10줄의 코드를 같은 printf문으로
작성해서는 안 되죠 다른 숫자를 보여주면서요
정말 비효율적이네요 시간이 오래 걸려요
for 루프를 이용해 코드를 반복하는 거죠
이렇게 하면 될 거예요
for 루프가 어떻게 생겼는지 구문을
소개할게요
for 키워드가 있고 괄호가 있어요
괄호는 for 루프에서 발생하는 다른 것들을
식별하죠
그리고 괄호 안에 괄호 안에 문장이 있어요
브래킷은 루프의 몸체를 나타냅니다 브래킷이
if문의 몸체를 나타내는 것처럼요
단일 문장이 있다면 괄호는 필요 없지만 항상 사용하는
좋은 연습이죠
이 예제에서 for 키워드 보이시죠? 그걸 제일 먼저 식별해야 해요
연산, 실행 시간, 그리고 for 키워드 다음에 괄호 사이에 나타나는
것도 제어할 수 있습니다 더 자세하게 살펴볼 것인데요
그 안에는 기본적으로 3가지 다른 식이 있어요
세미콜론으로 분리되어 있어서 알아볼 수 있어요
세미콜론은 이게 식문이라고 하죠
이 세 가지가 뭘 하는지 설명할게요
반복하고 싶은 동작은
루프의 본체 안에서 여러 번 발생하죠
이 예에서 루프의 본문은 printf예요
조건이 참으로 평가되면 계속 그 숫자를 프린트할 거예요
단일 문장에선 중괄호를 빼도 돼요
좀 더 자세히 살펴보죠
for 루프의 일반적인 패턴은 이런 유형의 문이 있다는 거죠
for가 있고 시작 조건이 있어요 슈도코드죠
포 루프를 설명하고 있어요
시작 조건이 첫 번째죠 첫 번째 세미콜론 이전의 모든 거요
두 번째는 끝에 세미콜론이 있는
연속 조건이고 괄호 사이의 마지막은 반복당 동작이에요
각각을 설명하고 싶어요 그런 다음 차체 안에 루프 문이 있어요
루프 문은 아주 쉬워요 몸 안에서만요
그게 실행될 코드입니다 매번 반복되죠
그건 기본이죠
여러 개의 문장이 있다면 중괄호를 끊을 수도 있고 단일 문장이 있다면
중괄호를 생략할 수도 있어요
시작 조건, 첫 번째 세미콜론 전에 괄호 안에
있는 첫 번째 것은 보통 그렇지만 항상은 아니죠
루프 컨트롤 변수라 불리는 변수를 초기화해요
저게 여러분이 시작하게 될 변수입니다 각 반복을 보면서요
루프 제어 변수는 일반적으로 counter입니다
항상은 아니고요 그걸 강조하고 싶은데 그럴
필요는 없어요 하지만 for 루프에선 대부분
counter로 그 루프가 반복되는 횟수를 기록하죠
그게 시작 조건과 루프 제어 변수가 하는 일이죠
선언과 같은 형식의 변수들을 선언하고 초기화할 수 있습니다
선언은 쉼표로 구분되어 있죠 여기서 여러 개의 초기화를 할 수 있죠,
변수
어떤 c 컴파일러를 사용하느냐에 따라
for문에서는 변수를 선언할 수 없을 수도 있어요
C99 컴파일러 아래에 있는 걸 사용한다면 for 문의
외부에 변수를 선언해야 합니다 그런 다음 시작 조건이 나와 있는 여기서
초기화하면 되죠 하지만 이
예제들은 살펴볼 거예요
하지만 시작 조건은 변수를 초기화하는 거죠
루프 컨트롤 변수죠 그런 이유로 이름을 붙였어요 초기화했을
때 루프가 얼마나 자주 실행될지 통제하니까요
다음으로 얘기하고 싶은 건 지속 조건, 지속 조건입니다
for 루프에서 첫 번째 세미콜론 전이죠
이건 논리적인 표현이에요
참으로 혹은 거짓으로 평가되는 조건이죠
이때 루프에 뛰어들거나 루프를 빠져나오죠
루프가 계속 실행되는지를 결정하죠
이 조건에 참 값을 갖는 한 루프는 계속 실행되고
본체에 있는 모든 구문은 실행되죠
전형적으로 루프 컨트롤 변수의 값을 확인하죠
그래서 시작 조건에서 루프 컨트롤 변수를 초기화하고
연속 조건을 보는 거죠
어떤 논리나 연산이든 넣을 수 있어요 여러분이 뭘 하는지 알고 있기만 하다면요
지속적인 조건은 루프의 끝이 아니라 처음 시작할 때 시험하죠
이걸 사전 테스트 루프라고 하죠
반복문에서 차이점을 발견하실 겁니다 테스트 후 반복문이죠
이 말은 루프 문이 한 번 실행될 수도 있고 0번 실행될
수도 있다는 거죠
계속되는 조건의 평가가 참인지 거짓인지에 달렸죠
거짓으로 평가된다면 절대 실행할 수 없죠
그게 사실로 판명되면 그 사체를 최소한 한 번은 처형해야 해요
for 루프 끝부분에 있습니다 두 번째 세미콜론 다음에요
보통 루프 컨트롤 변수의 수정을 하죠
루프 카운터나 센티넬 루프라면 증가하거나
감소하겠죠 사용자에게 입력을 더 요청할 수도 있어요
변수를 하나 이상 수정할 수도 있어요
루프 제어 변수를 수정할 수 있고 다른 변수도 수정할 수 있어요
쉼표 단위로 구분하면 돼요
제가 말씀드린 모든 걸 요약하자면
그걸 묘사하는 이 작은 테이블이 있죠
하지만 그에 대해 얘기하기 전에 작은 예제를 보죠
여기 예제가 있어요 for 키워드가 있어요
그러면 int I = 1 j = 2가 보이시죠 여기서
변수를 초기화하고 있어요
쉼표로 분리된 2개의 변수를 여기서 초기화하고 있어요 for
루프에선 일반적으로 하나만 초기화하죠 루프 제어 변수요
하지만 이 경우엔 I와 j를 초기화하고 있어요
세미콜론 다음에 조건이 있어요
언제 들어오고 언제 루프를 종료할지를요
제가 5보다 작으면 입력할 수 있어요
부울식 평가는 참이냐 거짓이냐죠
두 번째 세미콜론 다음에는
루프 컨트롤 변수나 관련된 다른 변수들을 수정할 거예요
여기 플러스, 플러스 I가 있죠 증가화
운영자요 접두사 I 그런 다음 j는 j 더하기 2와 같다고 할당하죠
보통 x 조건이 되어 루프 컨트롤
변수를 수정하죠
루프 본문은 단일 문만 있어서 괄호가 필요 없어요
I 곱하기 J 값을 출력하고 있어요
이 코드에서 생성되는 출력은
한 줄에 2, 8, 18, 32 그리고 50이죠
루프의 첫 번째 반복에서 I는 1이 되고 j는 2가 되죠
I 곱하기 j는 1 곱하기 2라고 합니다 그리고 디스플레이하죠
제가 5보다 크지 않은 걸 확인합니다 1보다 크죠
다시 돌아가서 두 번째로 실행할 거예요
마지막 문에서 변수 I도 수정할 거예요
루프의 두 번째 반복에서 저는 2가 되겠죠
j는 2 더하기 2가 됩니다 즉 4죠
이제 2 곱하기 4는 8이죠 그걸 표시할
거예요 그런 다음 I가 5보다 큰지
확인하죠 아뇨, 아직 2살이에요
I를 수정해서 다음 반복을 위해 3이 되게
하고 j를 수정해서 4 더하기 2가 되게 합니다
즉 6이죠
그리고 루프의 세 번째 반복에선
I 곱하기 J를 해요 3 곱하기 6이라고 하고 18을 표시하죠
네 번째 반복을 실행하기 전에 I가 5보다 큰지 확인해요
아뇨, 4시예요 그런 다음 그걸 증가시켜 5라고 하죠 5와 같으니 여전히 실행되겠죠
32개, 50개씩 칠할 거예요
이건 for문이고요 이걸 실행해 코드 브라우저에서
실행하고 이것저것 바꿔보는 거죠
하지만 우린 지금 코드 한 줄에 3개의 개별 작업을 하고 있어요
루프 제어 변수나 다른 변수를 초기화하고 있어요
첫 번째 세미콜론 다음에 불리언 식을 갖게 됩니다 종료 조건 다음에요
그런 다음 for문의 마지막 부분으로 루프 컨트롤 변수와
원하는 다른 변수를 수정해요
우리가 할 일을 요약하자면 제가 책에서
찾은 차트를 보여드릴게요 이게 모든 걸 요약해요
첫 번째 세미콜론은 루프 컨트롤 변수를 초기화하죠
첫 번째 세미콜론 다음엔 조건을 하죠 불리언식 표현이요
두 번째 세미콜론 다음엔
루프 컨트롤 변수를 수정하죠 이게 전형적인 예죠
이건 counter control 루프예요 1에서 시작해 10까지 가죠
10번 실행될 거예요
열쇠는 10보다 작아야 해요 그래서 관계형 연산자를 조건으로 보게 될 겁니다
if 문에서 관계형 연산자를 조건으로 본 것처럼요
여기서 핵심은 루프 제어 변수를 수정하지 않으면 절대 끝나지 않는다는 거죠
플러스 플러스 카운트는 아주 중요해요
++ 사용 전후에 관한 한 저 ++가 변수 전후든 변수 이후든
걱정할 필요가
없어요 반복의 반복 후에만
증가 또는 감소할 테니까요 그러니 ++ 카운트나 ++
카운트나 상관없어요
컴파일러를 위해 실행하고 있는 C의 버전에 따라
for 루프 내에서 변수
카운트를 선언할 수 있거나 int = 1 혹은 for 루프
밖의 카운트라고 지정하고 첫 번째 세미콜론에서 초기화할 수 있죠
C99가 for 루프의 같은 부분에 초기화와
선언을 추가했어요
기본적으로 for 루프가 작동하는 방식이죠
이제 예제를 살펴보죠 for 루프의 유연성을 보여드릴게요
여기 예제에서 몇 개의 정수를 합해볼게요
이 예제에서는 사용자에게 합계를 내고 싶은 정수 개수를 입력하라고 할 거예요
count라는 변수에 저장할 거예요
for 루프가 있어서 모든 걸 살펴볼
수 있어요 여러 번 반복한 숫자에 따라서요
여기 4에 서명이 있고 int I = 1이면 서명이
있을 필요가 없죠 루프 컨트롤 변수를 시작할게요
그런 다음 셀 때 보다 작으면 종료한다고 하죠 그런 다음 루프
재료 + + I를 수정하는 거예요
이게 실행될 거예요 사용자가
입력한 숫자는 10이나 20이죠
SUM = SUM + 1이라고 입력하면 돼요
for 루프가 강력한 이유는 많은 변수를 수정할
수 있기 때문이죠
for 루프 본문에 그 합계 더하기 I를 넣을 필요도 없죠
마지막 문장 끝에 넣으면 돼요
I를 1로 증분하는 것에 덧붙여서 SUM + = I + + 더하기라고 하죠
코드 한 줄로 모든 걸 했어요 유연성을
보여드리는 거죠 for문에서 변수를 수정할
수 있기 때문이에요 그런 몸매를 유지할 필요가 없어요
코드블록에서 이 예제를 살펴보겠습니다 어떻게 조작하고
어떤 결과가 나오는지 보여드리기 위해서요
강의에서 보여드린 예가 여기 있네요 이걸 컴파일해 보고 싶어요
이걸 컴파일하면 오류가 있는 게 보이실 거예요
for문 안에서 변수를 선언할 수 없다고 하네요 컴파일러가 옛날 버전이라
그래요 C89을 돌리고 있어요
이런 건 안 먹겠죠
하지만 이런 형식의 오류를 해결하려면 for 루프
밖에서 그걸 제거해야 해요 그냥 서명 안 한 I라고 하면 돼요
그런 다음 for 루프 안에서 초기화합니다,
이렇게요 이제 빌드를∙∙∙ 이
형식 스펙티파이어를 좀 없애야겠네요
제가 컴파일 성공해서 이 프로그램을 실행하면
루프가 어떻게 작동하는지 보실 수 있어요
합계를 원하는 정수를 입력하라고 할 거예요 5를 입력하면 1과 2와
3과 4와 5를 합산해 15가 되죠
디버그를 위해 할 수 있는 것은 for 루프에 괄호를 추가하는 것입니다 몇 번
실행되는지 알아보겠습니다 프린트 문을 추가할 수 있습니다 꼭 디버그를
할 필요는 없습니다 어떻게 되고 있는지 보겠습니다 루프 내부라고 할 수 있죠
루프가 5번 실행된다는 걸 알려주죠 I to
count를 실행할 테니까요
제가 보여드리고 싶은 건 이게 몇 번 실행되느냐는 거예요 빌드하고 실행할 때
각 반복마다 어떻게 되는지 볼 수 있어요
그래서 저는 8천으로 할게요
루프 안, 루프 안 라인 피드를 추가 안 했어요 읽기 힘들지만 인사이드 루프는
8번 디스플레이돼요
루프 안에 있는 숫자를 모두 합산하면 답은 36, 1 더하기 2
더하기 3 더하기 4 더하기 5 더하기 6 더하기 7 더하기 8이에요
이걸 가지고 놀 수 있어요 루프 컨트롤 변수를
초기화해요 퇴장할 수 있는지 확인하죠 사용자가 입력한 걸 누르면
종료할 거예요 사용자가 8을 입력하면
8번 실행하고 I를 수정해야 해요 I를 수정하지 않았다면 영구 루프가 됐을 거예요
프로그램을 실행하면 영원히
실행되죠
이 번호를 입력하면 프로그램이 절대 안 끝나요
enter 6를 치고 enter 키를 누르면 어떻게 되는지
보세요 프린트 루프예요 절대 안 나가요
무한 반복이에요 마지막이 아주 중요해요 루프 컨트롤 변수를 수정해야죠
루프 제어 변수가 출구를 결정합니다 이 경우엔 I죠
for 루프가 꽤 많이 사용되죠
사용하기 아주 쉽고 루프 안에서 3가지 다른 일을 할 수 있게 해주죠
루프 제어 변수를 초기화하고 종료 조건에
대해 루프 제어 변수를 확인한 다음 루프 제어
변수를 수정하세요
루프에서 그 세 가지를 해야 합니다 단일 문장에서 할 수 있어요
무한 루프에 대해 잠깐 얘기할게요
무한 루프를 보여드린 거예요 절대 그만두면 안 돼요
for 루프 문에 매개 변수를 둘 의무는 없어요
의도적으로 무한 루프를 쓸 수 있어요
여러분이 그렇게 하는 방법은 그냥 세미콜론을 넣는 거죠
두 개의 세미콜론이 있는 for 루프가 있을 거예요
그걸 본다면 무한 반복문을 작성하는 거예요
일반적으로 무한 루프는 원치 않아요
하지만 루프를 지속하는 조건이 없을 때가 있죠
루프는 영원히 계속될 거예요 데이터를 모니터링할 때 유용하죠
데이터를 모니터링한다면 거기에 뭔가 있을 수 있죠
영원히 반복되는 루프는 보통 수면도 포함됩니다
뭔가를 모니터링하기 위해 프로그램 실행을 잠시 멈추는 거죠
무한 반복이 가능한 또 다른 예는 연결을 듣는 경우예요
기다리면서 연결을 듣거나 뭔가를 보기 위해 끌어당긴다면
그렇게 할 수도 있죠
당기면 안 되고 남의 말을 들으면 안 된다는 사람도 있지만
그건 또 다른 주장이죠
무한한 루프에 대한 유일한 경우죠
루프 컨트롤 변수를 수정해서 최대한 무한 루프를 피하세요
도움이 됐으면 좋겠네요 이건 포루프예요
도전 과제 중 하나에 for loop을 활용해서 좀 더 친숙해질 거예요
고마워요