Java에서 while문 사용법과 실전 활용법

안녕하세요! 오늘은 Java의 기본적인 요소이면서도 강력한 기능을 가진 while문에 대해 함께 알아보려고 해요. 프로그래밍을 하다 보면 특정 작업을 여러 번 반복해야 하는 경우가 정말 많죠? while문은 바로 이런 반복 작업을 효율적으로 처리하는 데 필수적인 도구랍니다. while문의 기본 구조부터 시작해서, 조건식을 어떻게 설정하고 활용하는지, 그리고 다양한 실전 예시를 통해 여러분의 코딩 실력 향상에 도움을 드리고 싶어요. breakcontinue를 활용한 무한 루프 제어 방법까지, while문 활용의 A to Z를 쉽고 재미있게 배워보는 시간을 가져보도록 하겠습니다. 자, 그럼 while문의 세계로 함께 떠나볼까요?

 

 

while문의 기본 구조

자, 이제 Java의 while문에 대해 본격적으로 파고들어 볼까요? 마치 탐험가가 새로운 땅을 발견하는 것처럼, while문의 세계를 함께 탐험해 봐요! 😄

while문은 특정 조건이 참인 동안 코드 블록을 반복 실행하는 제어 흐름문입니다. 반복 횟수를 미리 알 수 없을 때, 조건에 따라 반복을 계속해야 할 때 정말 유용해요! 마치 마라톤처럼, 결승선(조건이 거짓이 되는 순간)에 도착할 때까지 계속 달리는 거죠. 🏃‍♀️🏃‍♂️

while문의 기본 구조

while문의 기본 구조는 놀랍도록 간단해요. 마치 레고 블록처럼 딱딱 맞춰져 있답니다. 다음과 같이 생겼어요.

while (조건식) {
    // 실행할 코드 블록
}

여기서 조건식은 boolean 값(true 또는 false)으로 평가되는 표현식입니다. 조건식이 참(true)인 동안, 중괄호 {} 안에 있는 코드 블록이 계속해서 실행돼요. 마치 시계의 초침처럼, 째깍째깍 움직이는 것을 상상해 보세요! 🕰️

while문 예시

예를 들어, 사용자로부터 숫자를 입력받아 그 숫자가 0보다 큰 동안 계속해서 제곱을 출력하는 프로그램을 작성해 볼까요? 🤔

import java.util.Scanner;

public class WhileExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자를 입력하세요: ");
        int number = scanner.nextInt();

        while (number > 0) {
            System.out.println(number * number); // 제곱 출력!
            System.out.print("다른 숫자를 입력하세요 (0 이하 입력 시 종료): ");
            number = scanner.nextInt();
        }

        System.out.println("프로그램 종료!");
    }
}

이 코드에서는 number > 0이라는 조건식이 핵심이에요. 입력받은 숫자가 0보다 큰 동안, while문 내부의 코드 블록이 실행되면서 숫자의 제곱을 출력하고, 다음 숫자를 입력받죠. 만약 0 이하의 숫자를 입력하면, 조건식이 거짓(false)이 되어 while문을 빠져나오고 “프로그램 종료!” 메시지가 출력됩니다. 참 쉽죠? 😊

while문은 조건식이 처음부터 거짓인 경우, 코드 블록을 한 번도 실행하지 않고 넘어갈 수도 있어요. 마치 유령처럼, 존재하지만 보이지 않는 것과 같죠!👻 반대로, 조건식이 항상 참인 경우에는 무한 루프에 빠질 수 있으니 주의해야 해요! ⚠️ 무한 루프는 마치 뫼비우스의 띠처럼, 끝없이 반복되는 함정과 같답니다. 하지만 걱정 마세요! 다음 섹션에서 무한 루프를 제어하는 방법을 배우게 될 거예요! 😉

자, 이제 while문의 기본 구조를 이해하셨나요? while문은 정말 강력한 도구이지만, 마치 날카로운 칼처럼 조심해서 다뤄야 해요. 하지만 걱정하지 마세요! 꾸준히 연습하고 활용하다 보면, while문을 자유자재로 사용할 수 있게 될 거예요! 다음 섹션에서는 while문의 다양한 활용 예시를 살펴보면서, while문의 매력에 푹 빠져 봅시다! ✨

 

조건식과 반복 실행

자, 이제 Java의 while 문에서 가장 중요한 부분, 바로 조건식반복 실행에 대해 자세히 알아볼까요? 마치 심장처럼 펌프질하며 혈액을 순환시키는 것처럼, 조건식은 while 문의 핵심 동력이라고 할 수 있어요! 얼마나 중요한지 감이 오시나요?

while 문의 작동 원리

while 문은 조건식이 참(true)인 동안 계속해서 코드 블록을 실행하는 반복문입니다. 조건식이 거짓(false)이 되는 순간, 반복문을 탈출하게 되죠! 마치 놀이기구를 타는 것과 같아요. 안전바가 풀리기 전까지는 계속해서 짜릿한 경험을 하지만, 안전바가 풀리는 순간 놀이기구에서 내려야 하잖아요?

조건식 만들기

조건식은 비교 연산자(>, <, >=, <=, ==, !=)를 사용하여 만들 수 있습니다. 예를 들어, 변수 i의 값이 10보다 작은 동안 반복을 계속하려면 i < 10과 같이 조건식을 작성하면 돼요. 참 쉽죠?


int i = 0;
while (i < 10) {
    System.out.println(i);
    i++; // i의 값을 1씩 증가시켜 조건식이 언젠가는 false가 되도록 합니다.
}

위 코드를 보면, i는 처음에 0으로 초기화되고, i < 10 조건식이 참인 동안 while 문 내부의 코드 블록이 실행되는 것을 알 수 있어요. System.out.println(i);를 통해 i의 값이 출력되고, i++를 통해 i의 값이 1씩 증가합니다. 만약 i++ 부분이 없다면? i는 계속 0으로 남아있게 되고, 조건식 i < 10은 항상 참이 되겠죠? 이렇게 되면 무한 루프에 빠지게 됩니다!

복잡한 조건식 만들기

while 문의 조건식에는 다양한 연산자를 조합하여 복잡한 조건을 만들 수도 있어요. 예를 들어, 변수 x가 0보다 크고 100보다 작은 동안 반복을 계속하려면 x > 0 && x < 100과 같이 논리 연산자 &&(AND)를 사용할 수 있죠. 또는 변수 y가 5 또는 10인 경우에 반복을 계속하려면 y == 5 || y == 10과 같이 논리 연산자 ||(OR)를 사용할 수 있습니다. 마치 레고 블록을 조립하듯이 다양한 연산자를 조합하여 원하는 조건식을 만들 수 있다는 것이 while 문의 매력이에요!


int x = 50;
while (x > 0 && x < 100) {
    System.out.println("x는 0보다 크고 100보다 작습니다!: " + x);
    x += 10; // x 값을 변경하여 조건이 언젠가는 false가 되도록 해야 합니다.
}

int y = 5;
while (y == 5 || y == 10) {
    System.out.println("y는 5 또는 10입니다.: " + y);
    y++; // y 값을 변경하여 조건이 언젠가는 false가 되도록 해야 합니다.
}

while 문 사용 시 주의사항

while 문을 사용할 때 가장 중요한 점은, 반복문 내에서 조건식의 값이 변하도록 해야 한다는 것입니다! 만약 조건식의 값이 변하지 않으면 무한 루프에 빠지게 되고, 프로그램은 영원히 실행될 거예요! 따라서 반복문 내에서 변수의 값을 변경하거나, break 문을 사용하여 반복문을 탈출하는 방법을 고려해야 합니다. 이 부분은 정말 중요하니까 꼭 기억해 두세요!

 

다양한 활용 예시

자, 이제 while 문의 기본적인 구조를 익혔으니, 실제로 어떻게 활용할 수 있는지 다양한 예시들을 살펴보도록 할게요! 단순 반복 출력을 넘어 좀 더 흥미로운 활용법들을 알아보면 while 문의 매력에 푹 빠지실 거예요~!

1. 사용자 입력 받기: 원하는 만큼!

while 문은 사용자가 특정 값을 입력할 때까지 반복해서 입력을 받도록 하는 데 유용하게 쓰일 수 있어요. 예를 들어, 사용자가 "끝"이라는 단어를 입력할 때까지 계속해서 문자열을 입력받고 싶다고 해 볼게요. 이럴 때 while 문을 어떻게 활용할 수 있을까요? 바로 이렇게 말이죠!

import java.util.Scanner;

public class UserInputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = "";

        while (!input.equals("끝")) {  // input이 "끝"이 아닐 동안 반복!
            System.out.print("문자열을 입력하세요 (끝내려면 '끝' 입력): ");
            input = scanner.nextLine();
            System.out.println("입력하신 문자열: " + input);
        }
        System.out.println("프로그램 종료!"); // while문을 빠져나왔다는 것은 "끝"을 입력했다는 의미!
    }
}

이 코드에서는 Scanner 클래스를 이용해서 사용자의 입력을 받고 있어요. input 변수가 "끝"과 같지 않을 동안 계속해서 입력을 받고, 입력받은 문자열을 출력하는 구조랍니다. 참 쉽죠? ^^

2. 숫자 맞히기 게임: 짜릿한 재미!

while 문을 사용하면 간단한 숫자 맞히기 게임도 만들 수 있어요. 1부터 100 사이의 랜덤한 숫자를 생성하고, 사용자가 그 숫자를 맞힐 때까지 계속해서 입력을 받는 게임을 만들어 볼게요. 얼마나 재밌을지 기대되시죠?!

import java.util.Random;
import java.util.Scanner;

public class NumberGuessingGame {
    public static void main(String[] args) {
        Random random = new Random();
        int randomNumber = random.nextInt(100) + 1; // 1~100 사이의 랜덤 숫자 생성!
        Scanner scanner = new Scanner(System.in);
        int guess = 0;
        int attempts = 0;


        while (guess != randomNumber) {
            System.out.print("1부터 100 사이의 숫자를 추측해보세요: ");
            guess = scanner.nextInt();
            attempts++;

            if (guess < randomNumber) {
                System.out.println("너무 작아요! ㅠㅠ");
            } else if (guess > randomNumber) {
                System.out.println("너무 커요! ㅠㅠ");
            }
        }

        System.out.println("축하합니다! " + attempts + "번 만에 정답을 맞히셨어요! ^^");
    }
}

Random 클래스를 이용해서 랜덤 숫자를 생성하고, Scanner 클래스로 사용자 입력을 받는 부분을 눈여겨보세요! 사용자가 정답을 맞힐 때까지 반복하며, 몇 번 만에 맞혔는지도 출력해준답니다. 정말 흥미진진하겠죠?

3. 파일 읽기: 끝까지 꼼꼼하게!

while 문은 파일의 끝까지 데이터를 읽어올 때도 유용하게 사용될 수 있어요. 파일에서 한 줄씩 데이터를 읽어와 처리해야 하는 경우, while 문을 사용하면 간편하게 구현할 수 있답니다.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;


public class FileReadingExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {  // try-with-resources를 사용하여 파일 닫기 자동화!
            String line;
            while ((line = reader.readLine()) != null) { // 파일의 끝까지 한 줄씩 읽어오기! null이면 파일 끝!
                System.out.println(line); // 읽어온 줄 출력!
            }
        } catch (IOException e) {
            System.err.println("파일 읽기 오류: " + e.getMessage()); // 오류 처리도 꼼꼼하게!
        }
    }
}

BufferedReaderFileReader를 사용해서 파일을 읽어오고, readLine() 메서드가 null을 반환할 때까지, 즉 파일의 끝까지 반복해서 읽어오는 구조예요. try-with-resources 문을 사용해서 파일을 자동으로 닫아주는 것도 잊지 않았죠? 자원 관리도 깔끔하게!

4. 배열 요소 출력: 처음부터 끝까지!

while 문을 사용하면 배열의 모든 요소를 순회하며 출력할 수도 있어요. 배열의 길이만큼 반복하면서 각 요소에 접근하는 방식이죠. for 문으로도 가능하지만, while 문으로도 충분히 구현 가능해요!

public class ArrayIteration {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        int index = 0;

        while (index < numbers.length) {
            System.out.println(numbers[index]); // 현재 인덱스의 요소 출력!
            index++; // 다음 요소로 이동!
        }
    }
}

index 변수를 사용해서 배열의 인덱스를 관리하고, 배열의 길이보다 작을 동안 반복하면서 각 요소를 출력하는 간단한 예시입니다. while 문의 활용도, 정말 무궁무진하지 않나요?!

이 외에도 while 문은 다양한 상황에서 유용하게 활용될 수 있어요. 위의 예시들을 참고해서 여러분만의 창의적인 활용법을 찾아보세요! while 문과 함께라면 프로그래밍의 세계가 더욱 넓어질 거예요!

 

무한 루프와 break, continue 활용

자, 이제 드디어 Java의 while문에서 가장 흥미진진한 부분이라고도 할 수 있는 무한 루프break, continue 활용에 대해 알아볼 시간이에요! 이 녀석들을 잘 활용하면 코드를 훨씬 간결하고 효율적으로 만들 수 있답니다.

무한 루프란?

무한 루프는 이름 그대로 조건식이 항상 참(true)인 while문이에요. 끊임없이 반복되기 때문에 주의해서 사용해야 하죠! 그렇지 않으면 프로그램이 멈추지 않고 영원히 실행되는 무시무시한 상황이 발생할 수도 있어요! 하지만 breakcontinue를 적절히 사용하면 이런 위험 없이 무한 루프의 강력한 힘을 마음껏 활용할 수 있답니다.

break

break는 반복문을 완전히 탈출하는 역할을 해요. 무한 루프 안에서 특정 조건을 만족하면 break를 사용해서 루프를 빠져나올 수 있습니다. 예를 들어, 사용자로부터 입력을 받는 프로그램에서 "exit"라는 문자열이 입력되면 프로그램을 종료하는 기능을 구현할 때 break를 사용할 수 있어요. 이렇게 하면 "exit"가 입력될 때까지 무한히 입력을 받는 무한 루프를 만들고, "exit"가 입력되면 break를 통해 루프를 탈출하여 프로그램을 종료하는 거죠!

continue

continue는 현재 반복을 중단하고 다음 반복으로 넘어가는 역할을 해요. 특정 조건을 만족하는 경우에는 해당 반복에서 실행할 코드를 건너뛰고 바로 다음 반복으로 넘어가도록 할 수 있죠. 예를 들어 1부터 100까지의 숫자 중 짝수만 출력하는 프로그램을 만들 때, continue를 사용하면 홀수일 경우 continue를 실행하여 다음 반복으로 넘어가고, 짝수일 경우에만 출력을 진행할 수 있습니다. 이렇게 하면 불필요한 조건문을 줄이고 코드를 더욱 깔끔하게 만들 수 있어요!

코드 예시


import java.util.Scanner;

public class InfiniteLoopExample {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        while (true) { // 무한 루프 시작!
            System.out.print("문자열을 입력하세요 (exit 입력 시 종료): ");
            String input = scanner.nextLine();

            if (input.equals("exit")) {
                System.out.println("프로그램을 종료합니다.");
                break; // "exit" 입력 시 루프 탈출!
            }

            System.out.println("입력된 문자열: " + input);
        }

        System.out.println("무한 루프 밖으로 나왔습니다!");


        for (int i = 1; i <= 100; i++) {
            if (i % 2 != 0) { // 홀수면 건너뛰기
                continue;
            }
            System.out.println(i); // 짝수만 출력
        }


        int count = 0;
        while (true) {
            count++;
            if (count > 100) {
                break;
            }
            if (count % 2 == 0) {
                System.out.println("짝수: " + count);
                continue; // 다음 반복으로!
            }
            System.out.println("홀수: " + count);
        }

        // continue 없이 짝수만 출력하는 경우
        count = 0;
        while (count <= 100) {
            count++;
            if (count % 2 == 0) {
                System.out.println("짝수: " + count);
            }
        }


        // break와 continue를 사용한 복잡한 예시 (가상의 게임 루프)
        int playerHealth = 100;
        while (true) {  // 게임 루프 시작
            // ... (게임 로직)

            if (playerHealth <= 0) {
                System.out.println("게임 오버!");
                break; // 게임 종료
            }

            // ... (더 많은 게임 로직)

            if (/* 특정 조건 */ true ) {
                System.out.println("이번 턴은 쉬어갑니다!");
                continue;  // 다음 턴으로
            }

            // ... (나머지 게임 로직)
        }
    }
}

breakcontinue를 잘 활용하면 코드의 가독성을 높이고 효율적인 프로그램을 만들 수 있어요! 다양한 상황에 적용해보면서 자신만의 코딩 스타일을 만들어보는 것도 좋을 것 같아요. 자, 이제 여러분도 while문 마스터가 되셨으니, 실제 프로젝트에서도 자신 있게 활용해 보세요!

 

자, 이렇게 while문의 기본 구조부터 실제 활용 예시까지 쭉 살펴봤어요! 어때요, 이제 좀 while문이랑 친해진 것 같나요? 처음엔 어려워 보였을 수도 있지만, 막상 알고 보면 생각보다 간단하고, 정말 유용한 친구라는 걸 알 수 있을 거예요. 마치 요술 램프처럼 말이죠! 원하는 만큼 반복 작업을 샤샤샥! 해치울 수 있으니까요. while문을 잘 활용하면 코딩 실력이 쑥쑥! 성장할 수 있답니다. 앞으로 여러분의 코딩 여정에서 while문이 든든한 동반자가 되어줄 거예요. 이제 여러분만의 창의적인 코드로 while문을 멋지게 활용해 보세요! 파이팅!

 

Leave a Comment