프로그래밍의 핵심, while문 완전 정복: 반복문의 마법 시작하기 mymaster, 2024년 06월 28일 프로그램을 만들다 보면 동일한 작업을 여러 번 반복해야 하는 경우가 많습니다. 예를 들어, 쇼핑몰에서 특정 상품을 찾을 때까지 상품 목록을 계속 스크롤하거나, 게임에서 캐릭터가 특정 위치에 도달할 때까지 계속 이동하는 것을 생각해 보세요. 이러한 반복적인 작업을 효율적으로 처리하기 위해 프로그래밍 언어는 반복문을 제공합니다. 그중에서도 while문은 특정 조건이 만족되는 동안 코드 블록을 반복 실행하는 강력한 도구입니다. 이 글에서는 컴퓨터 과학의 기초 지식이 없는 초보자도 이해할 수 있도록 while문의 개념부터 다양한 활용법, 그리고 주의 사항까지 자세하게 알려드리겠습니다. 이 글을 끝까지 읽으면 while문을 이용하여 더욱 다채롭고 효율적인 프로그램을 만들 수 있을 것입니다. 1. while문이란 무엇인가요? while문은 특정 조건이 참(True)인 동안 코드 블록을 반복해서 실행하는 제어 흐름 문장입니다. 즉, while문은 조건을 먼저 확인하고, 조건이 참이면 코드 블록을 실행합니다. 이후 다시 조건을 확인하고, 참이면 다시 코드 블록을 실행하는 방식으로 동작합니다. 조건이 거짓(False)이 되면 while문은 종료되고, 다음 코드 라인으로 프로그램 실행이 이동합니다. 1.1 while문의 기본 구조 while문은 다음과 같은 기본 구조를 가지고 있습니다. while 키워드: while문을 시작하는 키워드입니다. 조건: 반복 실행 여부를 결정하는 논리적인 표현식입니다. 괄호로 묶어서 표현하기도 합니다. 콜론(:): 조건문 뒤에 콜론(:)을 붙여서 while문의 코드 블록이 시작됨을 나타냅니다. 코드 블록: 조건이 참일 동안 반복해서 실행될 코드들을 들여쓰기하여 작성합니다. while 조건: # 조건이 참일 동안 실행될 코드 블록 # ... # ... 1.2 while문의 동작 방식 while문은 다음과 같은 단계로 동작합니다. 조건 확인: while문은 먼저 조건을 확인합니다. 조건이 참(True)인 경우: 코드 블록을 실행합니다. 코드 블록 실행이 끝나면 다시 while문의 시작 부분으로 돌아가 조건을 다시 확인합니다. 조건이 거짓(False)인 경우: while문을 종료합니다. while문 다음에 오는 코드를 실행합니다. 1.3 while문 예시: 숫자 세기 다음은 while문을 사용하여 1부터 5까지의 숫자를 출력하는 간단한 예시입니다. count = 1 while count <= 5: print(count) count = count + 1 print("반복문 종료!") 코드 설명: count = 1: 변수 count를 선언하고 1로 초기화합니다. 이 변수는 반복 횟수를 제어하는 데 사용됩니다. while count <= 5:: while문은 count가 5 이하인 동안 반복됩니다. print(count): 현재 count 값을 화면에 출력합니다. count = count + 1: count 값을 1 증가시킵니다. 이 부분이 없으면 count 값이 계속 1로 유지되어 무한 루프에 빠지게 됩니다. print("반복문 종료!"): while문이 종료된 후 실행될 코드입니다. 실행 결과: 1 2 3 4 5 반복문 종료! 2. 다양한 조건식 활용하기 while문에서는 비교 연산자, 논리 연산자, 멤버십 연산자 등 다양한 연산자를 사용하여 조건식을 만들 수 있습니다. 2.1 비교 연산자 비교 연산자는 두 값을 비교하여 참(True) 또는 거짓(False)을 반환합니다. while문의 조건식에 자주 사용되는 비교 연산자는 다음과 같습니다. 연산자 설명 예시 == 같음 x == y != 같지 않음 x != y > 초과 x > y < 미만 x < y >= 이상 x >= y <= 이하 x <= y 2.2 논리 연산자 논리 연산자는 여러 조건식을 연결하여 하나의 복합적인 조건식을 만드는 데 사용됩니다. 주로 사용되는 논리 연산자는 다음과 같습니다. 연산자 설명 예시 and 모든 조건이 참(True)일 때 참(True) 반환 x > 0 and y < 10 or 하나 이상의 조건이 참(True)일 때 참(True) 반환 x > 0 or y < 10 not 조건의 결과를 반전 (True -> False, False -> True) not x == y 2.3 멤버십 연산자 멤버십 연산자는 특정 값이 시퀀스(문자열, 리스트, 튜플 등)에 포함되는지 여부를 확인하는 데 사용됩니다. while문의 조건식에서 사용되는 멤버십 연산자는 다음과 같습니다. 연산자 설명 예시 in 왼쪽 피연산자가 오른쪽 피연산자에 포함되면 True ‘a’ in ‘apple’ not in 왼쪽 피연산자가 오른쪽 피연산자에 포함되지 않으면 True ‘b’ not in ‘apple’ 3. while문과 함께 사용되는 제어문 while문 내부에서는 코드 실행 흐름을 제어하기 위해 break, continue와 같은 제어문을 사용할 수 있습니다. 3.1 break 문 break 문은 while문을 포함한 반복문을 강제로 종료하는 데 사용됩니다. break 문이 실행되면 while문의 조건식과 관계없이 반복문이 즉시 종료됩니다. 예시: i = 1 while i <= 10: if i > 5: break # i가 5보다 커지면 반복문 종료 print(i) i += 1 print("반복문 종료!") 실행 결과: 1 2 3 4 5 반복문 종료! 3.2 continue 문 continue 문은 현재 반복을 중단하고 다음 반복을 시작하도록 합니다. continue 문이 실행되면 while문의 나머지 코드는 건너뛰고, 다음 반복 조건 확인으로 넘어갑니다. 예시: i = 0 while i < 10: i += 1 if i % 2 == 0: # 짝수인 경우 다음 반복으로 continue print(i) print("반복문 종료!") 실행 결과: 1 3 5 7 9 반복문 종료! 4. 무한 루프와 조건 설정 4.1 무한 루프란 무엇인가요? 무한 루프는 조건식이 항상 참(True)이거나, 반복문 내부에서 조건을 변경하지 않아 반복문이 무한히 실행되는 것을 말합니다. 무한 루프는 프로그램이 응답하지 않거나, 시스템 자원을 과도하게 사용하는 등의 문제를 일으킬 수 있으므로 주의해야 합니다. 예시: # 조건식이 항상 참인 경우 while True: print("무한 루프!") # 반복문 내부에서 조건을 변경하지 않는 경우 x = 10 while x > 0: print("무한 루프!") 4.2 무한 루프를 방지하는 방법 무한 루프를 방지하기 위해서는 다음과 같은 방법을 사용할 수 있습니다. 반복 횟수 제한: 반복문 내부에 카운터 변수를 사용하여 반복 횟수를 제한합니다. 카운터 변수가 특정 값에 도달하면 break 문을 사용하여 반복문을 종료합니다. count = 0 while True: print("반복:", count) count += 1 if count >= 5: break 조건 변경: while문의 조건식이 특정 조건에서 거짓(False)이 되도록 반복문 내부에서 변수 값을 변경합니다. x = 10 while x > 0: print("x:", x) x -= 1 # x 값을 1씩 감소시켜 조건이 False가 되도록 함 break 문 활용: 특정 조건에서 break 문을 사용하여 반복문을 종료합니다. while True: user_input = input("문자열을 입력하세요 (종료하려면 'quit' 입력): ") if user_input == 'quit': break print("입력한 문자열:", user_input) 5. while문 활용: 사용자 입력 받기 while문은 사용자로부터 특정 조건을 만족하는 입력을 받을 때 유용하게 사용될 수 있습니다. 5.1 특정 입력값 받을 때까지 반복 다음 예시는 사용자가 “quit”을 입력할 때까지 사용자 입력을 계속 받는 프로그램입니다. while True: user_input = input("문자열을 입력하세요 (종료하려면 'quit' 입력): ") if user_input == 'quit': break print("입력한 문자열:", user_input) print("프로그램 종료!") 코드 설명: while True:: 무한 루프를 생성하여 사용자 입력을 계속 받습니다. user_input = input(...): 사용자로부터 문자열을 입력받습니다. if user_input == 'quit':: 입력된 문자열이 “quit”인지 확인합니다. break: “quit”이 입력되면 무한 루프를 종료합니다. print("입력한 문자열:", user_input): 입력된 문자열을 화면에 출력합니다. print("프로그램 종료!"): 무한 루프가 종료된 후 메시지를 출력합니다. 5.2 유효한 숫자 입력 받기 다음 예시는 사용자가 1부터 100 사이의 숫자를 입력할 때까지 반복하는 프로그램입니다. while True: try: number = int(input("1부터 100 사이의 숫자를 입력하세요: ")) if 1 <= number <= 100: break else: print("잘못된 입력입니다. 1부터 100 사이의 숫자를 입력하세요.") except ValueError: print("잘못된 입력입니다. 숫자를 입력하세요.") print("입력한 숫자:", number) 코드 설명: while True:: 무한 루프를 생성하여 사용자 입력을 계속 받습니다. try...except ValueError:: 사용자 입력을 숫자로 변환하는 과정에서 발생할 수 있는 ValueError 예외를 처리합니다. 숫자가 아닌 값이 입력되면 except 블록이 실행됩니다. number = int(input("1부터 100 사이의 숫자를 입력하세요: ")): 사용자로부터 입력받은 문자열을 숫자(int)로 변환합니다. if 1 <= number <= 100:: 입력된 숫자가 1부터 100 사이의 값인지 확인합니다. break: 조건을 만족하는 숫자가 입력되면 무한 루프를 종료합니다. print("잘못된 입력입니다. ..."): 조건에 맞지 않는 값이 입력되면 오류 메시지를 출력합니다. print("입력한 숫자:", number): 무한 루프가 종료된 후 입력된 숫자를 출력합니다. 6. 중첩 while문: 반복문 안의 반복문 while문은 다른 while문 내부에 중첩하여 사용할 수 있습니다. 중첩 while문은 바깥쪽 while문의 각 반복마다 안쪽 while문이 완전히 실행됩니다. 6.1 구구단 출력하기 다음 예시는 중첩 while문을 사용하여 구구단 2단부터 9단까지 출력하는 프로그램입니다. i = 2 while i <= 9: j = 1 while j <= 9: print(f"{i} x {j} = {i*j}") j += 1 print("-" * 10) i += 1 코드 설명: i = 2: 바깥쪽 while문의 반복 횟수를 제어하는 변수 i를 2로 초기화합니다. while i <= 9: 바깥쪽 while문은 i가 9 이하인 동안 반복됩니다. j = 1: 안쪽 while문의 반복 횟수를 제어하는 변수 j를 1로 초기화합니다. while j <= 9: 안쪽 while문은 j가 9 이하인 동안 반복됩니다. print(f"{i} x {j} = {i*j}"): 현재 i와 j 값을 사용하여 구구단을 출력합니다. j += 1: 안쪽 while문의 반복 변수 j를 1 증가시킵니다. print("-" * 10): 각 단 사이에 구분선을 출력합니다. i += 1: 바깥쪽 while문의 반복 변수 i를 1 증가시킵니다. 6.2 별(*) 찍기 다음 예시는 중첩 while문을 사용하여 별(*) 모양을 출력하는 프로그램입니다. rows = 5 i = 1 while i <= rows: j = 1 while j <= i: print("*", end="") j += 1 print() # 줄 바꿈 i += 1 실행 결과: * ** *** **** ***** 코드 설명: rows = 5: 출력할 행의 수를 설정합니다. i = 1: 바깥쪽 while문의 반복 횟수를 제어하는 변수 i를 1로 초기화합니다. while i <= rows: 바깥쪽 while문은 i가 rows 이하인 동안 반복됩니다. j = 1: 안쪽 while문의 반복 횟수를 제어하는 변수 j를 1로 초기화합니다. while j <= i: 안쪽 while문은 j가 i 이하인 동안 반복됩니다. print("*", end=""): 별(*)을 출력하고, end=""를 사용하여 줄 바꿈 없이 이어서 출력합니다. j += 1: 안쪽 while문의 반복 변수 j를 1 증가시킵니다. print(): 안쪽 while문이 끝나면 줄 바꿈을 합니다. i += 1: 바깥쪽 while문의 반복 변수 i를 1 증가시킵니다. 7. while문의 장점과 단점 7.1 장점 반복 횟수를 유연하게 제어: while문은 조건식이 참인 동안 반복을 계속하기 때문에 반복 횟수를 유연하게 제어할 수 있습니다. 반복 횟수가 미리 정해지지 않은 경우에도 while문을 사용하여 특정 조건이 만족될 때까지 반복하도록 할 수 있습니다. 다양한 조건식 사용: while문은 비교 연산자, 논리 연산자, 멤버십 연산자 등 다양한 연산자를 조합하여 복잡한 조건식을 만들 수 있습니다. 이를 통해 다양한 상황에 맞게 반복 조건을 설정할 수 있습니다. 코드 간결화: for문에 비해 반복 횟수가 미리 정해지지 않은 경우 while문을 사용하면 코드를 더 간결하게 작성할 수 있습니다. 특히, 사용자 입력을 받아 반복 횟수를 결정하거나, 특정 조건이 만족될 때까지 반복해야 하는 경우 while문이 유용합니다. 7.2 단점 무한 루프 가능성: while문을 사용할 때 조건식을 잘못 설정하거나 반복문 내부에서 조건을 변경하지 않으면 무한 루프에 빠질 수 있습니다. 무한 루프는 프로그램 실행을 멈추게 하거나 시스템 자원을 과도하게 사용할 수 있으므로 주의해야 합니다. 코드 복잡성 증가: 중첩 while문을 과도하게 사용하면 코드의 복잡성이 증가하여 가독성이 떨어질 수 있습니다. 가능하면 중첩 횟수를 최소화하고, 코드를 명확하게 작성하여 가독성을 높이는 것이 중요합니다. 8. while문 vs. for문: 언제 무엇을 사용해야 할까요? while문과 for문은 모두 반복문이지만, 사용 목적과 동작 방식에 차이가 있습니다. 8.1 for문 for문은 시퀀스(문자열, 리스트, 튜플 등)의 요소를 순차적으로 가져와서 반복합니다. 반복 횟수가 미리 정해져 있거나, 시퀀스의 모든 요소를 처리해야 할 때 유용합니다. 예시: # 리스트의 모든 요소 출력 numbers = [1, 2, 3, 4, 5] for number in numbers: print(number) # 1부터 10까지 출력 for i in range(1, 11): print(i) 8.2 while문 vs. for문 선택 기준 반복 횟수를 알고 있고, 시퀀스의 모든 요소를 처리해야 할 때: for문 사용 반복 횟수가 미리 정해지지 않았거나, 특정 조건이 만족될 때까지 반복해야 할 때: while문 사용 9. 마무리하며: while문 활용의 중요성 while문은 프로그래밍에서 반복적인 작업을 효율적으로 처리하기 위한 필수적인 도구입니다. 조건이 참인 동안 코드를 반복 실행하는 while문의 특징을 이해하고 다양한 상황에 맞게 활용하면 더욱 효율적이고 강력한 프로그램을 만들 수 있습니다. while문을 사용할 때는 무한 루프에 빠지지 않도록 조건식을 신중하게 설정하고, break, continue와 같은 제어문을 적절히 사용하여 코드의 가독성을 높이는 것이 중요합니다. 이제 while문의 기본 개념부터 활용법, 주의 사항까지 모두 익혔으니, 다양한 예제를 통해 직접 코드를 작성하고 실행하면서 while문을 마스터해 보세요! 목차 Toggle 1. while문이란 무엇인가요?1.1 while문의 기본 구조1.2 while문의 동작 방식1.3 while문 예시: 숫자 세기2. 다양한 조건식 활용하기2.1 비교 연산자2.2 논리 연산자2.3 멤버십 연산자3. while문과 함께 사용되는 제어문3.1 break 문3.2 continue 문4. 무한 루프와 조건 설정4.1 무한 루프란 무엇인가요?4.2 무한 루프를 방지하는 방법5. while문 활용: 사용자 입력 받기5.1 특정 입력값 받을 때까지 반복5.2 유효한 숫자 입력 받기6. 중첩 while문: 반복문 안의 반복문6.1 구구단 출력하기6.2 별(*) 찍기7. while문의 장점과 단점7.1 장점7.2 단점8. while문 vs. for문: 언제 무엇을 사용해야 할까요?8.1 for문8.2 while문 vs. for문 선택 기준9. 마무리하며: while문 활용의 중요성 post