Java/Java 복습

[2026-05-26 ]객체지향 프로그래밍 void,cal 연습

jamk-diary 2026. 5. 27. 00:10

 

 

📝 재미니의 자바 미션: "동물원 관리 프로그램"

오늘 배운 Calculator나 Game 클래스처럼, 메인 클래스의 부담을 줄이고 역할을 나누는 연습을 해볼 거예요. 이번엔 동물들을 관리하고 밥을 주는 프로그램을 만들어 봅시다!

1. 요구사항 분석

  • MainClass (실행 클래스)
    • 프로그램의 시작점입니다.
    • 이곳에서 동물원(Zoo) 객체를 생성하고 프로그램을 실행합니다. 메인 코드는 아주 깔끔해야 해요!
  • Zoo (동물원 관리 클래스)
    • 멤버 변수: 동물의 이름(String animalName), 동물의 현재 배고픔 지수(int hunger — 초기값은 50)를 가집니다.
    • 메소드 3개 구현하기:
      1. init(): 사용자에게 "관리할 동물의 이름은 무엇인가요?"라고 물어보고 입력을 받아 animalName에 저장합니다.
      2. feed(): 사용자가 동물의 이름을 부르며 밥을 주면, 배고픔 지수(hunger)가 10만큼 감소하고 "냠냠! animalName이(가) 맛나게 먹었습니다."를 출력합니다. (단, 배고픔 지수는 0보다 낮아질 수 없습니다.)
      3. status(): 현재 동물의 상태를 출력합니다. (예: "호랑이님의 현재 배고픔 지수: 40")

2. 메인 클래스 가이드 (이렇게 호출되게 만들어 보세요!)

MainClass는 딱 아래와 같은 형태로만 동작하도록 Zoo 클래스를 설계해 보세요.

 
public class MainClass {
    public static void main(String[] args) {
        Zoo myZoo = new Zoo();
        
        myZoo.init();   // 1. 동물 이름 초기화
        myZoo.status(); // 2. 처음 상태 확인 (배고픔 50)
        myZoo.feed();   // 3. 밥 주기 (배고픔 10 감소)
        myZoo.status(); // 4. 바뀐 상태 확인 (배고픔 40)
    }
}

3. 코딩 척척박사 도전 가이드

  • 필기 노트에 적힌 Calculator 클래스 구조(void input(), void process() 등 역할을 나눈 것)를 머릿속으로 떠올려 보세요.
  • 사용자 입력을 받아야 하니 import java.util.Scanner;가 필요하겠죠?
  • 메인 함수에 작성하는 게 아니라, 꼭 Zoo라는 새로운 클래스를 만들어서 그 안에 변수와 메소드를 채워 넣어야 합니다.


    재미니의 응원 메시지 🐾 "처음에는 클래스를 새로 만들고 변수를 연결하는 게 헷갈릴 수 있어요. 틀려도 괜찮으니 편하게 코드를 적어보고, 막히는 부분이 생기면 언제든 질문해 주세요. 준비되면 코드나 질문을 들고 찾아와요!"

나 혼자 풀어보기 

public class Mainclass {

 

public static void main(String[] args) {

// TODO 동물원 관리 프로그램

 

Zoo cal = new Zoo();

cal.init ();

cal.status();

cal.feed();

cal.after();

cal.after();

}

 

}


미로는 지금 배가 고파요! 밥을 주세요!

먹이를 얼만큼 주시겠어요? -> -20

미로은 밥을 -20 만큼 먹었어요

냠냠... 꼬르륵... 미로은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> 60

미로은 밥을 60 만큼 먹었어요

냠냠!미로은 이제 배가 불러요!

 


import java.util.Scanner;

 

public class Zoo {

 

String animalName;

int hunger=50;

int feed;

 

Scanner sc = new Scanner(System.in);

 

void init () {

System.out.print("관리할 동물의 이름은 무엇인가요? -> ");

animalName = sc.next();

}

 

void feed() {

System.out.print(" 먹이를 얼만큼 주시겠어요? -> " );

feed = sc.nextInt();

}

 

void status () {

System.out.println(animalName+"의 현재 배고픔 지수는 " +hunger +"입니다. " );

if (hunger<=50) {

System.out.println(animalName + "는 지금 배가 고파요! 밥을 주세요!");

}

else {System.out.println(animalName + "는 지금 배가 빵빵해요!");

 

}

}

 

void after() {

if (hunger + feed >50) {

System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요");

System.out.println("냠냠!" + animalName + "은 이제 배가 불러요!");

}

 

else if (hunger + feed <50) {

System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요");

System.out.println("냠냠... 꼬르륵... " + animalName + "은 조금 더 먹고 싶어요!");

feed();

}

}

}

 


재미니 피드백 
우와, 대단해요!! 🤩 집으로 돌아와서 피곤할 텐데 벌써 이렇게 새로운 코드를 짜서 보여주다니, 열정이 정말 엄청난데요?
이번에 작성한 코드를 보니까 아주 기발하고 멋진 아이디어가 들어가 있어요! 특히 feed() 메소드에서는 딱 입력만 받고, 연산과 상태 체크를 after()라는 새로운 메소드로 분리한 것여전히 배고프면 after() 안에서 feed()를 다시 호출해 입력을 유도한 부분은 정말 창의적이에요. 역할을 나누는 객체지향의 맛을 제대로 알아가고 계시네요!
하지만 코드를 이클립스에서 직접 실행해 보면 생각과 다르게 조금 어색하게 돌아가거나 오류가 날 수 있어요. 척척박사님이 놓친 엄청 중요한 비밀(버그) 2가지를 재미니가 콕 짚어줄게요! 함께 디버깅해 봅시다. 😉

🔍 재미니의 척척박사 디버깅 포인트

1. 배고픔 지수(hunger)가 전혀 변하지 않고 있어요!

코드 전체를 보면 사용자가 준 먹이 양(feed)을 입력받긴 하지만, 정작 동물의 배고픔 지수(hunger)를 깎아주는 계산식이 어디에도 없어요!
예를 들어 처음에 hunger = 50인데 먹이를 20 주었다면, hunger를 30으로 줄여주는 계산(hunger = hunger - feed)이 있어야 하는데 이 부분이 빠져있답니다. 그래서 hunger는 계속 50으로 멈춰있게 돼요.

2. after() 메소드 안의 조건식 방향 (+와 -)

지금 조건문을 보면 if (hunger + feed > 50) 이런 식으로 되어 있어요.
  • 우리가 정한 규칙은 "밥을 먹으면 배고픔 지수(hunger)가 0을 향해 내려간다"였죠?
  • 그런데 지금 조건식은 hunger(50) + feed(입력값)을 해버리니까 숫자가 50보다 무조건 커지게 돼요.

🛠️ 창의적인 구조를 살려서 코드 완벽하게 고치기!

작성하신 feed() ➡️ after()로 이어지는 멋진 흐름을 그대로 살리면서, 계산 식을 똑바로 넣어 수정한 Zoo 클래스입니다. 어디가 바뀌었는지 눈으로 먼저 확인해 보세요!

import java.util.Scanner;

public class Zoo {

    String animalName;
    int hunger = 50; // 초기 배고픔은 50! (0이 되면 배부른 상태)
    int feed;
    
    Scanner sc = new Scanner(System.in);
    
    void init() {
        Systehttp://m.out.print("관리할 동물의 이름은 무엇인가요? -> ");
        animalName = sc.next();
    }
    
    // 1. 순수하게 먹이 입력만 받는 메소드
    void feed() {
        Systehttp://m.out.print("  먹이를 얼만큼 주시겠어요? -> ");
        feed = sc.nextInt();
        
        // [중요!] 먹이를 받았으니 배고픔 지수를 즉시 줄여줍니다.
        hunger = hunger - feed; 
    }
    
    void status() {
        System.out.println(animalName + "의 현재 배고픔 지수는 " + hunger + "입니다.");
        if (hunger > 0) {
            System.out.println(animalName + "는 지금 배가 고파요! 밥을 주세요!");
        } else {
            System.out.println(animalName + "는 지금 배가 빵빵해요!");
        }
    }
    
    // 2. 밥을 먹은 후의 상태를 판별하는 메소드
    void after() {
        // 배고픔 지수가 0 이하로 떨어졌다면? 배부른 상태!
        if (hunger <= 0) {
            System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요.");
            System.out.println("냠냠! " + animalName + "은 이제 배가 불러요!");
        }
        // 배고픔 지수가 아직 0보다 크다면? 여전히 배고픈 상태!
        else if (hunger > 0) {
            System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요.");
            System.out.println("냠냠... 꼬르륵... " + animalName + "은 조금 더 먹고 싶어요! (남은 배고픔: " + hunger + ")");
            
            // 💡 [척척박사 센스] 여전히 배고프니까 밥을 더 달라고 feed()를 다시 호출!
            feed(); 
        }
    }
}

💡 이렇게 고치면 메인 클래스 흐름이 어떻게 될까요?

작성하신 Mainclass를 실행하면 컴퓨터가 이렇게 일합니다!


Zoo cal = new Zoo();
cal.init();   // 1. "사자" 입력
cal.status(); // 2. 사자의 배고픔 지수는 50입니다. (배고파요 출력)
cal.feed();   // 3. 20 입력 ➡️ 내부에서 hunger는 30이 됨!
cal.after();  // 4. hunger가 30(>0)이므로 "조금 더 먹고 싶어요!" 출력 후 자동으로 feed() 호출 ➡️ 30 입력받음! ➡️ hunger는 0이 됨!
cal.after();  // 5. 메인의 다음 줄 실행. hunger가 0이므로 "이제 배가 불러요!" 출력!

메소드 안에서 다른 메소드를 또 호출하는 발상은 실무에서도 정말 자주 쓰는 고급 테크닉이에요. 변수 계산 방향만 헷갈리지 않게 조심하면 완벽합니다!
수정된 메커니즘이 이해가 쏙쏙 되셨나요? 이클립스에 넣어서 사자나 호랑이 밥 주면서 직접 확인해 보세요! 대견해요 우리 척척박사님 🐾 실력 늘어가는 속도가 KTX 급이네요!

 

 

import java.util.Scanner;

 

public class Zoo {

 

String animalName;

int hunger=50; // 초기 배고픔은 50! (0이 되면 배부른 상태)

int feed;

 

Scanner sc = new Scanner(System.in);

 

void init () {

System.out.print("관리할 동물의 이름은 무엇인가요? -> ");

animalName = sc.next();

}

 

//먹이 입력 받는 부분

void feed() {

System.out.print(" 먹이를 얼만큼 주시겠어요? -> " );

feed = sc.nextInt();

 

// [중요!] 먹이를 받았으니 배고픔 지수를 즉시 줄여줍니다.

hunger = hunger - feed;

}

 

void status () {

System.out.println(animalName+"의 현재 배고픔 지수는 " +hunger +"입니다. " );

if (hunger > 0) {

System.out.println(animalName + "는 지금 배가 고파요! 밥을 주세요!");

 

}

else {

System.out.println(animalName + "는 지금 배가 빵빵해요!");

 

}

}

 

void after() {

if (hunger <=0) {

System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요");

System.out.println("냠냠!" + animalName + "은 이제 배가 불러요!");

}

 

else if (hunger >0) {

System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요");

System.out.println("냠냠... 꼬르륵... " + animalName + "은 조금 더 먹고 싶어요!");

feed();

}

}

}


관리할 동물의 이름은 무엇인가요? -> 원숭이

원숭이의 현재 배고픔 지수는 50입니다.

원숭이는 지금 배가 고파요! 밥을 주세요!

먹이를 얼만큼 주시겠어요? -> -20

원숭이은 밥을 -20 만큼 먹었어요

냠냠... 꼬르륵... 원숭이은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> -20

원숭이은 밥을 -20 만큼 먹었어요

냠냠... 꼬르륵... 원숭이은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> -20

 

 

 

 

개선하고 싶은 것 

1. 배고픔 지수가 0이 될 때까지 무한 루프 돌리고 싶어!
2. 먹이를 주고 나서 현재 배고픔 지수를 볼 수 있게 만들어 주고 싶어 ! 

 

import java.util.Scanner;

 

public class Zoo {

 

String animalName;

int hunger=50; // 초기 배고픔은 50! (0이 되면 배부른 상태)

int feed;

 

Scanner sc = new Scanner(System.in);

 

void init () {

System.out.print("관리할 동물의 이름은 무엇인가요? -> ");

animalName = sc.next();

}

 

//먹이 입력 받는 부분

void feed() {

System.out.print(" 먹이를 얼만큼 주시겠어요? -> " );

feed = sc.nextInt();

 

// [중요!] 먹이를 받았으니 배고픔 지수를 즉시 줄여줍니다.

hunger = hunger - feed;

System.out.println(" 현재 배고픔 지수는 " +hunger +"입니다");

}

 

void status () {

System.out.println(animalName+"의 현재 배고픔 지수는 " +hunger +"입니다. " );

if (hunger > 0) {

System.out.println(animalName + "는 지금 배가 고파요! 밥을 주세요!");

 

}

else {

System.out.println(animalName + "는 지금 배가 빵빵해요!");

 

}

}

 

void after() {

if (hunger <=0) {

System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요");

System.out.println("냠냠!" + animalName + "은 이제 배가 불러요!");

}

 

else if (hunger >0) {

System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요");

System.out.println("냠냠... 꼬르륵... " + animalName + "은 조금 더 먹고 싶어요!");

feed();

}

}

}


관리할 동물의 이름은 무엇인가요? -> 구구

구구의 현재 배고픔 지수는 50입니다.

구구는 지금 배가 고파요! 밥을 주세요!

먹이를 얼만큼 주시겠어요? -> -60

현재 배고픔 지수는 110입니다

구구은 밥을 -60 만큼 먹었어요

냠냠... 꼬르륵... 구구은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> 100

현재 배고픔 지수는 10입니다

구구은 밥을 100 만큼 먹었어요

냠냠... 꼬르륵... 구구은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> 10

현재 배고픔 지수는 0입니다

 

 

개선하고 싶은 것 
배고픔 지수가 0일 때 break(?) 같은 거 써서 배불러요 ! 문구 뜨게 해 보고 싶다 !

 결국 여기서 막혀서 재미니 한테 물어봄!

 

블로그 글쓰기 창 아래쪽에 고민하며 적어둔 개선하고 싶은 두 가지 포인트를 재미니가 콕 집어냈습니다. 👀✨
지금 작성하신 코드 구조에서 "여전히 배고프면 feed()를 다시 호출하는 방식(재귀 호출)"을 쓰고 계시잖아요? 이 방식도 멋지지만, 원하시는 대로 배고픔 지수가 0이 될 때까지 깔끔하게 반복하고 break로 탈출하려면 오늘 학원에서 배운 while (true) 무한 루프를 활용하는 게 훨씬 직관적이고 다루기 쉬워요!
메인 클래스의 흐름은 그대로 두고, Zoo 클래스의 after() 메소드와 feed() 메소드를 while문과 break를 사용해 기가 막히게 개선해 드릴게요.

🛠️ while과 break로 업그레이드한 Zoo 클래스

after() 메소드 안에서 루프를 돌리며 밥을 계속 먹이고, 0이 되는 순간 break로 탈출하는 구조입니다!

import java.util.Scanner;

public class Zoo {
    String animalName;
    int hunger = 50; // 초기 배고픔 지수
    int feed;
    Scanner sc = new Scanner(System.in);

    void init() {
        Systehttp://m.out.print("관리할 동물의 이름은 무엇인가요? -> ");
        animalName = sc.next();
    }

    void status() {
        System.out.println(animalName + "의 현재 배고픔 지수는 " + hunger + "입니다.");
        if (hunger > 0) {
            System.out.println(animalName + "는 지금 배가 고파요! 밥을 주세요!");
        } else {
            System.out.println(animalName + "는 지금 배가 빵빵해요!");
        }
    }

    // 1. 이제 feed()는 호출될 때마다 딱 한 번씩만 먹이를 입력받고 계산해요!
    void feed() {
        Systehttp://m.out.print(" 먹이를 얼만큼 주시겠어요? -> ");
        feed = sc.nextInt();
        hunger = hunger - feed; // 배고픔 지수 차감
        System.out.println(" 현재 배고픔 지수는 " + hunger + "입니다.");
    }

    // 2. 핵심! 배고픔이 0이 될 때까지 무한 루프를 돌리는 after() 메소드
    void after() {
        // 이미 처음부터 배가 부르다면 루프 돌 필요가 없겠죠?
        if (hunger <= 0) {
            System.out.println("냠냠! " + animalName + "은 이제 배가 불러요!");
            return; // 메소드 종료
        }

        // ⭐ 원하셨던 무한 루프 시작!
        while (true) {
            System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요.");
            System.out.println("냠냠... 꼬르륵... " + animalName + "은 조금 더 먹고 싶어요!");
            
            // 밥을 더 주기 위해 feed() 메소드 호출!
            feed(); 
            
            // ⭐ 원하셨던 조건 만족 시 break 탈출!
            if (hunger <= 0) { 
                System.out.println("✨ 냠냠! " + animalName + "은 이제 배가 불러요! (탈출!)");
                break; // while 루프를 완전히 빠져나갑니다!
            }
        }
    }
}

🏃‍♂️ 메인 클래스에서 실행해 보면?

이렇게 수정하고 나면, Mainclass에서 cal.after();를 딱 한 번만 호출해도 배고픔 지수가 0 이하가 될 때까지 컴퓨터가 알아서 계속 먹이를 달라고 물어보게 됩니다!


public class Mainclass {
    public static void main(String[] args) {
        Zoo cal = new Zoo();
        cal.init();
        cal.status();
        cal.feed();  // 첫 번째 밥 주기
        cal.after(); // 👈 여기서 0이 될 때까지 무한 루프 돌다가 break로 탈출!
    }
}


내가 구현하고 싶었던 로직이 코드에 녹아드니까 훨씬 깔끔하고 멋진 프로그램이 되었죠? while(true)와 break;의 조합은 자바에서 정말 밥 먹듯이 쓰는 핵심 구조니까 이번 기회에 확실하게 마스터해 보세요.
코드를 이클립스에 넣어서 직접 돌려보시고, 잘 작동하는지 재미니에게 알려주세요! 🐾✨

 

확인해보기 

 

import java.util.Scanner;

 

public class Zoo {

 

String animalName;

int hunger=50; // 초기 배고픔은 50! (0이 되면 배부른 상태)

int feed;

 

Scanner sc = new Scanner(System.in);

 

void init () {

System.out.print("관리할 동물의 이름은 무엇인가요? -> ");

animalName = sc.next();

}

 

//먹이 입력 받는 부분

void feed() {

System.out.print(" 먹이를 얼만큼 주시겠어요? -> " );

feed = sc.nextInt();

 

// [중요!] 먹이를 받았으니 배고픔 지수를 즉시 줄여줍니다.

hunger = hunger - feed;

System.out.println(" 현재 배고픔 지수는 " +hunger +"입니다");

}

 

void status () {

System.out.println(animalName+"의 현재 배고픔 지수는 " +hunger +"입니다. " );

if (hunger > 0) {

System.out.println(animalName + "는 지금 배가 고파요! 밥을 주세요!");

 

}

else {

System.out.println(animalName + "는 지금 배가 빵빵해요!");

 

}

}

 

 

void after() {

// 이미 처음부터 배가 부르다면 루프 돌 필요가 없겠죠?

if (hunger <= 0) {

System.out.println("냠냠! " + animalName + "은 이제 배가 불러요!");

return; // 메소드 종료

}

 

// 원하셨던 무한 루프 시작!

while (true) {

System.out.println(animalName + "은 밥을 " + feed + " 만큼 먹었어요.");

System.out.println("냠냠... 꼬르륵... " + animalName + "은 조금 더 먹고 싶어요!");

 

// 밥을 더 주기 위해 feed() 메소드 호출!

feed();

 

// ⭐ 원하셨던 조건 만족 시 break 탈출!

if (hunger <= 0) {

System.out.println("✨ 냠냠! " + animalName + "은 이제 배가 불러요! (탈출!)");

break; // while 루프를 완전히 빠져나갑니다!

}

}

}

}


 

관리할 동물의 이름은 무엇인가요? ->

랑의 현재 배고픔 지수는 50입니다.

랑는 지금 배가 고파요! 밥을 주세요!

먹이를 얼만큼 주시겠어요? -> -20

현재 배고픔 지수는 70입니다

랑은 밥을 -20 만큼 먹었어요.

냠냠... 꼬르륵... 랑은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> -80

현재 배고픔 지수는 150입니다

랑은 밥을 -80 만큼 먹었어요.

냠냠... 꼬르륵... 랑은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> 30

현재 배고픔 지수는 120입니다

랑은 밥을 30 만큼 먹었어요.

냠냠... 꼬르륵... 랑은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> 10

현재 배고픔 지수는 110입니다

랑은 밥을 10 만큼 먹었어요.

냠냠... 꼬르륵... 랑은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> 100

현재 배고픔 지수는 10입니다

랑은 밥을 100 만큼 먹었어요.

냠냠... 꼬르륵... 랑은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> -10

현재 배고픔 지수는 20입니다

랑은 밥을 -10 만큼 먹었어요.

냠냠... 꼬르륵... 랑은 조금 더 먹고 싶어요!

먹이를 얼만큼 주시겠어요? -> 20

현재 배고픔 지수는 0입니다

✨ 냠냠! 랑은 이제 배가 불러요! (탈출!)

냠냠! 랑은 이제 배가 불러요!


궁금한 점 

왜 return으로 메소드를 종료한 거야? 이건 형식에 해당 돼? 
무한 루프를 돌려주는 건 for 문이고 for 문 안에 while 문을 사용해야 되는 거 아니었어? 

 

재미니의 답변 !

❓ 질문 1. 왜 return;으로 메소드를 종료한 거야? 이건 형식에 해당 돼?

if (hunger <= 0) {
    System.out.println("냠냠! " + animalName + "은 이제 배가 불러요!");
    return; // 👈 바로 이 부분!
}

💡 정답: 형식이 아니라, 불필요한 코드를 실행하지 않기 위한 "조기 퇴근" 스킬이에요!

우리가 만든 after() 메소드는 맨 위에 void가 붙어 있죠? void는 "이 메소드는 실행만 하고, 나를 호출한 곳에 아무런 값도 돌려주지(반환하지) 않을 거야"라는 뜻이에요.
그런데 void 메소드 안에서 return;을 아무 값 없이 단독으로 사용하면, "나 여기서 미련 없이 메소드 완전히 끝내고 나갈래!" 하고 코드를 강제로 종료시키는 역할을 해요.
  • 만약 return;이 없다면? 처음부터 배가 불러서 hunger <= 0 조건에 걸렸는데도, return;이 없으면 컴퓨터는 브레이크가 고장 난 차처럼 아래에 있는 while (true) 무한 루프 코드로 그냥 넘어가 버려요. 배부른 동물에게 또 밥을 주는 대참사가 일어나겠죠?
  • 그래서 결론은! "처음부터 배고픔 지수가 0 이하라면, 아래에 있는 무한 루프는 볼 필요도 없으니까 여기서 메소드를 즉시 종료(조기 탈출)해라!"라는 의미로 쓴 고급 테크닉이랍니다.

❓ 질문 2. 무한 루프를 돌려주는 건 for 문이고, for 문 안에 while 문을 사용해야 되는 거 아니었어?

💡 정답: 아닙니다! while (true) 하나만으로도 완벽한 무한 루프가 돼요!

학원에서 for 문과 while 문을 한꺼번에 배우다 보니 두 개를 꼭 같이 써야 하는 것처럼 헷갈릴 수 있어요. 하지만 둘은 독립적인 반복문 친구들이에요!
  • for 문: 주로 "몇 번 반복할지 횟수가 딱 정해져 있을 때" 써요. (예: 10번 반복해라!)
  • while 문: 주로 "특정 조건이 만족할 때까지 계속 반복해야 할 때" 써요. (예: 배가 부를 때까지 계속 먹여라!)
우리가 쓴 while (true)는 소괄호 안의 조건이 true(참)로 박제되어 있기 때문에, "아무 조건 따지지 말고 내가 내부에서 break를 걸어줄 때까지 평생 무한으로 반복해!"라는 자바의 공식 무한 루프 공식이에요. for 문을 겉에 감싸줄 필요가 전혀 없답니다.

 

 

💡 척척박사님을 위한 한눈에 보는 요약 비교

 

키워드 역할 비유
break; 자기를 감싸고 있는 반복문(while, for)만 부수고 탈출! 퇴근은 아니고, 지금 하던 회의만 도중에 빠져나옴
return; 자기가 속한 메소드(after()) 전체를 통째로 즉시 종료! 아예 가방 싸서 회사 문 열고 칼퇴근해 버림

 

 

궁금증이 완전하게 풀리셨나요? 구조를 정확하게 이해하고 코딩하면 앞으로 while문과 break, return을 자유자재로 다루는 슈퍼 개발자가 될 수 있어요.

복습하다가 또 아리송한 게 생기면 언제든 재미니를 찾아와요! 오늘 밤 열공하느라 정말 수고 많았어요.

 


복습 후기 

: 재미니는 최고야 !

 

Mainclass.java
0.00MB
Zoo.java
0.00MB