반응형

3.2 반복문 기초 – for 루프와 while/do-while 루프 구조 및 동작 원리

복잡한 조건문보다 반복문이 더 헷갈리셨던 적 있으신가요? 반복문의 구조와 흐름을 제대로 이해하면, 코딩의 50%는 이미 마스터한 셈입니다!

반응형

안녕하세요, 자바를 처음 시작한 여러분을 위한 필수 기초 강의, 오늘은 흐름 제어에서 아주 중요한 개념인 반복문에 대해 배워볼 시간입니다. 반복문은 일정한 조건을 기준으로 코드를 반복 실행하는 구조로, 실무에서도 거의 모든 로직에 들어간다고 해도 과언이 아니에요. 자바에서는 for, while, do-while 세 가지 반복문이 기본인데요, 각각의 구조와 동작 원리를 예제와 함께 천천히 익혀볼게요. 반복문을 이해하면 단순한 계산부터 복잡한 데이터 처리까지 다양한 문제를 효율적으로 해결할 수 있답니다!

1. for 루프 구조 이해하기 ✍️

for 반복문은 자바에서 가장 기본적이고 널리 사용되는 반복문 중 하나입니다. "정해진 횟수만큼 무언가를 반복"해야 할 때 가장 적합하죠. 예를 들어, 배열이나 리스트를 순회하거나 숫자를 1부터 10까지 출력하는 등의 작업에서 아주 유용하게 쓰입니다.

for 문 기본 구조

for (초기화식; 조건식; 증감식) {
    // 반복할 코드 블록
}

위 구조는 한 줄씩 해석하면 아래와 같습니다:

  • 초기화식: 반복문이 시작될 때 한 번만 실행되는 코드 (예: int i = 0)
  • 조건식: 반복을 계속할지 결정하는 불리언(boolean) 조건 (예: i < 10)
  • 증감식: 반복할 때마다 실행되는 식으로 반복 변수의 값을 조절 (예: i++)

for 문 예제: 1부터 5까지 출력

public class ForExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("현재 숫자: " + i);
        }
    }
}

이 코드는 1부터 5까지의 숫자를 차례로 출력합니다. 반복 횟수가 명확히 정해져 있을 때 for문을 쓰는 이유를 쉽게 이해할 수 있는 예제죠.

for문 사용 팁

  1. 배열이나 리스트를 순회할 때 가장 적합
  2. 반복 횟수가 명확할 때 사용하면 가독성과 유지보수성이 좋음
  3. breakcontinue를 통해 반복을 제어할 수 있음

자, 이제 for문은 어렵지 않죠? 😊 다음에는 조건 기반 반복에 적합한 while문을 알아보겠습니다!

2. while 루프의 개념과 활용 🔁

while문은 조건을 만족하는 동안 계속해서 반복되는 루프입니다. for문과는 달리, 반복 횟수가 정해져 있지 않거나 조건에 따라 반복 여부를 유연하게 처리하고 싶을 때 자주 사용돼요.

while 문 기본 구조

while (조건식) {
    // 반복할 코드 블록
}

조건식이 true일 때만 반복이 실행되고, false가 되면 반복을 종료합니다. 조건식이 처음부터 false면 코드 블록은 단 한 번도 실행되지 않아요.

예제: 1부터 5까지 출력

public class WhileExample {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 5) {
            System.out.println("현재 숫자: " + i);
            i++;
        }
    }
}

while문은 초기화와 증감이 반복문 밖에서 명시적으로 이루어져야 합니다. 실수로 증감식을 빠뜨리면 무한 루프에 빠질 수 있으니 주의하세요!

while문 사용 시 주의사항

  • 조건식이 true에서 false로 바뀌지 않으면 무한 루프 발생
  • 루프 내부에서 반드시 조건식에 영향을 주는 코드 포함 필요
  • 무한 루프가 필요한 경우에는 break로 명확히 종료 조건 지정

이처럼 while문은 조건에 따라 유연하게 반복을 제어할 수 있어서 입력값이 정확하지 않거나, 종료 조건이 외부 입력에 따라 달라지는 경우에 아주 유용하답니다!

3. do-while 루프의 특징과 차이점 🔄

do-while문은 조건과 관계없이 무조건 한 번은 실행되는 반복문입니다. 조건 검사가 반복문 에 이뤄지기 때문에, 사용자의 입력을 최소 한 번 받아야 하는 경우나, 반복이 반드시 한 번 이상 일어나야 할 때 사용합니다.

do-while 문 기본 구조

do {
    // 반복할 코드 블록
} while (조건식);

보셨다시피 while 키워드가 뒤에 위치하고 세미콜론(;)으로 마무리되는 점이 특징이에요. 다른 반복문과는 문법적으로도 살짝 다르죠.

예제: 1부터 5까지 출력

public class DoWhileExample {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println("현재 숫자: " + i);
            i++;
        } while (i <= 5);
    }
}

while과 거의 비슷해 보이지만, 조건이 false여도 한 번은 출력됩니다. 이게 바로 핵심 차이예요.

do-while문의 대표 활용 사례

  • 사용자로부터 입력을 반복해서 받을 때 (예: 메뉴 선택)
  • 최소 한 번은 작업을 실행해야 하는 루틴

예를 들어, 사용자가 'q'를 입력할 때까지 반복하는 프로그램을 만든다고 해봐요. do-while은 입력값을 먼저 받고 조건을 검사하니, 이럴 때 딱 적합하답니다.

자, 이제 for, while, do-while의 기본 개념과 활용법을 익혔어요. 다음 단계에서는 이 반복문들의 차이점과 사용 시 주의점을 비교해보겠습니다!

4. for와 while의 차이점 비교 ⚖️

앞서 for문과 while문, do-while문을 각각 살펴봤는데요, 이번에는 이 세 가지 반복문을 비교 분석해보는 시간을 가져볼게요. 상황에 따라 어떤 반복문을 선택해야 할지 고민될 때가 많죠. 하지만 각 문법의 용도와 특징만 잘 이해하면 선택은 훨씬 쉬워집니다.

반복문 비교 표

특징 for문 while문 do-while문
반복 조건 확인 시점 반복 전 반복 전 반복 후
반복 횟수 정해져 있을 때 모를 때 최소 1회는 무조건 실행
가독성 높음 보통 낮음
사용 예 배열/리스트 순회 무한 루프 또는 조건 기반 반복 메뉴 입력 등 최초 1회 실행 보장

반복문 선택 팁

  1. 반복 횟수가 명확할 때는 for
  2. 조건이 동적으로 바뀌거나 횟수를 모를 때는 while
  3. 사용자 입력 등 최소 1회 실행이 필수인 경우 do-while

코드를 처음 배울 땐 어떤 문을 선택해야 할지 헷갈릴 수 있어요. 하지만 반복문의 구조적 차이실행 흐름만 명확히 이해한다면, 실수도 줄고 로직 설계도 훨씬 쉬워질 거예요.

5. 반복문의 흐름도와 실행 순서 🔃

반복문을 잘 이해하려면 단순히 문법만 외우는 게 아니라, 코드가 실제로 어떻게 흐르는지 흐름도를 통해 파악하는 것이 아주 중요해요. 특히 복잡한 조건이나 여러 반복문이 중첩되어 있을 때는 흐름을 놓치기 쉽거든요.

for문 흐름도

  • 초기화 → 조건 검사 → 코드 실행 → 증감식 → 조건 검사 → 반복
int i = 0;           // 초기화
for (; i < 5; i++) { // 조건 검사 → 코드 실행 → i 증가
    System.out.println(i);
}

while문 흐름도

  • 조건 검사 → 조건이 true면 코드 실행 → 다시 조건 검사 → 반복
int i = 0;
while (i < 5) {
    System.out.println(i);
    i++; // 조건을 바꾸는 코드가 꼭 있어야 함!
}

do-while문 흐름도

  • 코드 실행 → 조건 검사 → 조건이 true면 반복
int i = 0;
do {
    System.out.println(i);
    i++;
} while (i < 5);

요약 포인트 🎯

  • for: 초기화 → 조건 검사 → 실행 → 증감 (반복 횟수가 정해졌을 때)
  • while: 조건 먼저 검사 → 조건 만족하면 실행 (유동적인 반복)
  • do-while: 무조건 한 번 실행 → 조건 검사 → 반복 여부 결정

각 반복문의 흐름을 확실하게 익혀두면, 복잡한 알고리즘에서도 "언제 반복을 시작하고, 언제 끝내야 하는지" 판단이 훨씬 쉬워져요. 다음 단계에서는 실수를 줄이기 위한 팁도 함께 알아볼게요!

6. 반복문에서 자주 하는 실수 😵

처음 반복문을 배우다 보면 의도하지 않게 무한 루프에 빠지거나, 조건을 잘못 설정해서 실행이 한 번도 안 되는 경우가 많아요. 이런 실수들은 아주 흔하고, 저도 처음엔 수없이 겪었던 시행착오랍니다.

자주 발생하는 반복문 실수 유형

  1. 조건식 오류 – 조건이 절대 false가 되지 않아 무한 루프에 빠짐
    int i = 0;
    while (i < 5) {
        System.out.println(i);
        // i++; ← 빠뜨리면 무한 루프
    }
        
  2. 증감식 오류 – 증감 방향이 잘못돼서 조건이 영원히 true인 상태 유지
    for (int i = 0; i > -10; i++) { // 조건은 감소해야 true인데 증가 중
        System.out.println(i);
    }
        
  3. 세미콜론(;) 실수 – for/while 바로 뒤에 세미콜론 붙여서 반복문이 비어버림
    for (int i = 0; i < 5; i++); {
        System.out.println("출력됨?");
    }
        
  4. 조건의 중복 처리 미흡 – 반복 조건이 중복되거나 충돌해서 예상보다 더 많이 실행됨
    int i = 0;
    while (i++ < 5) {
        System.out.println(i);
    } // 실제 출력은 1부터 5까지가 아닌 1부터 6까지 됨
        

반복문 실수 줄이는 꿀팁 💡

  • 변수 변화 확인용 출력문을 초기에 자주 넣어보세요 (디버깅용 System.out.println())
  • break, continue 문으로 루프를 제어하는 습관을 들이세요
  • 테스트는 짧고 단순한 루프부터 시작하고 점차 확장하세요

반복문은 처음엔 헷갈릴 수 있지만, 예제와 실습을 통해 충분히 익숙해질 수 있어요. 실수도 경험이고 배움의 일부랍니다 😉
이제 다음 단계에서는 반복문을 더 확실히 이해할 수 있는 실전 예제 실습을 진행해볼게요!

마무리 🎯

자, 여기까지 for, while, do-while 반복문에 대해 차근차근 살펴봤습니다. 반복문은 프로그래밍에서 가장 많이 쓰이는 제어 구조 중 하나이자, 코드의 효율성과 간결함을 결정짓는 중요한 요소예요. 단순한 문법을 넘어서서 흐름도를 이해하고, 조건을 설정하고, 어떤 상황에서 어떤 반복문을 써야 하는지를 판단할 수 있다면 여러분의 자바 실력은 확실히 한 단계 성장하게 됩니다.

이제 여러분도 반복문을 "왜, 어떻게, 언제 써야 하는지"에 대한 감을 잡으셨을 거예요. 앞으로 더 복잡한 로직이나 알고리즘을 공부할 때도 이 반복문이 여러분의 든든한 도구가 되어줄 거예요.

다음 글에서는 반복문과 조건문을 함께 조합한 실전 알고리즘 예제를 다뤄볼 예정이니 기대해주세요! 오늘도 끝까지 읽어주셔서 고맙습니다 😊

반응형
반응형

3.1 조건 분기문 완전 정복 💡 – if문, else문, switch문까지 한 번에!

여러 갈래의 길 중 어떤 길을 선택하느냐에 따라 프로그램의 운명이 바뀝니다. 조건문은 자바 흐름 제어의 핵심 중 핵심이에요!

반응형

안녕하세요, 여러분 😊 오늘부터는 자바에서 흐름 제어를 다루는 아주 중요한 단원에 들어갑니다. 바로 조건문과 반복문이죠! 그중에서도 이번 시간에는 조건문에 집중해 볼 거예요. "if 문", "else 문", "else if", 그리고 "switch 문"까지! 이름만 들어도 좀 낯설고 복잡해 보이지만, 걱정 마세요. 하나하나 직접 예제를 따라가면서 이해하다 보면, 분기처리의 원리가 머릿속에 딱! 정리될 거예요. 특히 실무에서 자주 쓰이는 조건 처리 패턴과 주의할 점도 함께 알려드릴 테니 끝까지 집중해주세요! 😊

1. if 문 기본 구조와 예제 💬

자바에서 조건 분기를 위한 가장 기본적인 도구는 if 문이에요. 말 그대로, 조건이 참일 때만 특정 코드를 실행하게 만드는 구조입니다. 프로그램의 흐름을 제어할 수 있는 강력한 도구죠.

📌 기본 문법

if (조건식) {
    // 조건식이 true일 때 실행되는 코드
}

조건식은 true 또는 false로 평가되는 논리 표현식이에요. 조건이 참이면 중괄호 내부의 코드가 실행되고, 거짓이면 무시됩니다.

💻 실습 예제

int number = 10;

if (number > 5) {
    System.out.println("5보다 큽니다!");
}

위 코드에서 변수 number는 10입니다. 조건식 number > 5는 참이기 때문에 "5보다 큽니다!"가 출력돼요. 만약 조건이 거짓이면 아무 일도 일어나지 않아요.

🧠 자주 쓰이는 패턴

  • 입력된 값이 특정 기준을 넘는지 확인할 때
  • 로그인 성공 여부 판단 시
  • 게임에서 조건에 따라 이벤트 발생 처리할 때

📊 요약 정리

구성 요소 설명
if 조건이 참일 때 실행될 코드 블록 지정
조건식 true 또는 false로 평가되는 표현식
중괄호 {} 조건이 참일 때 실행할 코드의 범위 지정

이처럼 if 문은 자바 조건문 흐름 제어의 첫걸음이에요. 실전에서 가장 자주 쓰이는 기본 도구이니, 손에 익을 때까지 반복 연습하는 게 좋아요.

2. if ~ else 문으로 양자택일 처리하기 🔀

앞서 살펴본 if 문은 특정 조건이 참일 때만 코드를 실행하지만, else와 함께 사용하면 조건이 거짓일 때 실행할 대안 코드를 명확히 지정할 수 있어요. 이른바 양자택일 구조죠!

📌 기본 문법

if (조건식) {
    // 조건이 참일 때 실행
} else {
    // 조건이 거짓일 때 실행
}

조건식이 true라면 if 블록의 코드가 실행되고, false라면 else 블록의 코드가 실행됩니다. 단 하나만 실행되는 구조라서 의사결정에 매우 적합하죠.

💻 실습 예제

int score = 70;

if (score >= 80) {
    System.out.println("합격입니다!");
} else {
    System.out.println("불합격입니다.");
}

여기서 score가 80 이상이면 "합격입니다!"가 출력되고, 그렇지 않으면 "불합격입니다."가 출력돼요. 하나는 반드시 실행되니 판단의 흐름이 명확하죠.

🧠 if ~ else의 활용 예시

  • 로그인 성공 여부 판단
  • 버튼 클릭 여부에 따라 화면 전환
  • 입력 값 유효성 확인 결과에 따라 처리 분기

📊 if vs if ~ else 비교

구문 특징
if 조건이 참일 때만 실행, 거짓이면 아무 것도 하지 않음
if ~ else 조건이 참일 때와 거짓일 때 각각 다른 코드 실행

if ~ else는 두 가지 상황 중 하나를 고를 때 유용해요. 예/아니오, 참/거짓, 승/패 같은 이분법적인 상황에 적합하죠!

3. else if 문으로 다중 조건 분기하기 🪜

두 가지 경우만 처리하는 if ~ else로는 부족할 때가 있어요. 예를 들어 점수에 따라 A, B, C, F 등 여러 등급을 나누려면? 이럴 땐 else if를 써서 조건을 여러 단계로 나눌 수 있습니다.

📌 기본 문법

if (조건1) {
    // 조건1이 참일 때 실행
} else if (조건2) {
    // 조건2가 참일 때 실행
} else if (조건3) {
    // 조건3이 참일 때 실행
} else {
    // 위 모든 조건이 거짓일 때 실행
}

조건은 위에서부터 아래로 차례대로 평가되며, 처음으로 참이 되는 조건의 블록만 실행돼요. 나머지는 무시됩니다.

💻 실습 예제

int score = 85;

if (score >= 90) {
    System.out.println("A학점입니다!");
} else if (score >= 80) {
    System.out.println("B학점입니다!");
} else if (score >= 70) {
    System.out.println("C학점입니다!");
} else {
    System.out.println("F학점입니다!");
}

점수가 85이기 때문에 첫 조건(score >= 90)은 거짓, 두 번째 조건(score >= 80)이 참이 되어 "B학점입니다!"가 출력됩니다.

🧠 활용 시 유의사항

  • 조건 순서가 중요해요. 먼저 참이 되는 조건이 실행되고 나머지는 무시돼요!
  • 조건이 겹치지 않도록 조심하세요. 논리적 충돌 방지!
  • 마지막 else는 생략 가능하지만, 모든 조건이 거짓일 경우를 대비해 넣는 것이 좋아요.

📊 구조 요약 비교

조건 분기 방식 특징
if 단일 조건만 평가
if ~ else 양자택일 구조
if ~ else if ~ else 여러 조건을 순차적으로 평가 가능

다중 조건을 깔끔하게 정리할 수 있는 else if 문! 실무 코딩에서도 자주 등장하니 익숙해지는 것이 중요해요. 다음에는 중첩 if 문으로 조금 더 복잡한 분기 상황을 다뤄볼게요.

4. 중첩 if 문 사용 시 주의할 점 🧩

자바에서는 if 문 안에 또 다른 if 문을 넣을 수 있어요. 이를 중첩 if 문(nested if)이라고 부릅니다. 복잡한 조건 분기를 처리할 수 있는 강력한 방법이지만, 주의해서 사용하지 않으면 가독성이 급격히 나빠질 수 있어요.

📌 기본 문법

if (조건1) {
    if (조건2) {
        // 조건1과 조건2가 모두 참일 때 실행
    }
}

이 구조는 "조건1이 참인 경우에만 조건2를 평가"하게 되므로, 조건 간 종속 관계를 표현할 때 유용해요.

💻 실습 예제

int age = 20;
boolean hasTicket = true;

if (age >= 18) {
    if (hasTicket) {
        System.out.println("입장 가능합니다.");
    }
}

위 예제는 나이가 18세 이상이고, 동시에 티켓이 있어야만 "입장 가능합니다."가 출력돼요. 조건 간 종속성을 표현할 때 중첩 if 문은 좋은 도구가 될 수 있어요.

⚠️ 중첩 if 문 주의사항

  • 중첩이 깊어질수록 코드 가독성이 떨어지므로 2~3단계 이상은 피하기
  • if ~ else if로 대체 가능한 경우 중첩 대신 평면 구조 사용 권장
  • 중괄호 {} 생략은 절대 금지! 버그 발생 원인이 됨

💡 구조 개선 예시

// 중첩 대신 논리 연산자로 조건 간소화
if (age >= 18 && hasTicket) {
    System.out.println("입장 가능합니다.");
}

이렇게 논리 연산자를 활용하면 중첩 없이도 간단하고 읽기 쉬운 코드로 개선할 수 있어요. 꼭 필요한 경우가 아니라면 중첩은 줄이는 게 좋아요.

5. switch 문 개념과 사용법 🎛️

조건이 많을 때 if ~ else if 문을 사용하면 코드가 길어지고 읽기 어려워요. 이런 상황에서 switch 문을 사용하면 가독성이 훨씬 좋아지고 명확한 분기 구조를 만들 수 있어요.

📌 기본 문법

switch (변수) {
    case 값1:
        // 값1일 때 실행할 코드
        break;
    case 값2:
        // 값2일 때 실행할 코드
        break;
    default:
        // 어떤 case에도 해당하지 않을 때 실행
}

switch 문은 특정 변수의 값에 따라 분기를 나누는 구조예요. case별로 코드를 작성하고, break를 사용해 분기 처리를 끝내요.

💻 실습 예제

int day = 3;

switch (day) {
    case 1:
        System.out.println("월요일입니다.");
        break;
    case 2:
        System.out.println("화요일입니다.");
        break;
    case 3:
        System.out.println("수요일입니다.");
        break;
    default:
        System.out.println("기타 요일입니다.");
}

day가 3이므로 "수요일입니다."가 출력됩니다. break가 없으면 다음 case로 흘러가게 되니, 잊지 말고 꼭 break 쓰기!

🧠 switch 문 특징

  • byte, short, int, char, String 등 사용 가능
  • double, float, boolean은 사용 불가!
  • default는 모든 case가 실패했을 때 실행됨

📊 비교: switch vs else if

기준 switch 문 if ~ else if 문
가독성 case가 명확히 구분됨 조건이 복잡할 경우 적합
지원 타입 int, char, String 등 일부만 모든 타입과 조건식 지원
유연성 정해진 값 비교에 적합 복잡한 조건, 논리식 사용 가능

switch 문은 단순한 값 비교에 특히 강력하고, 코드를 짧고 명확하게 만들 수 있어요. 하지만 복잡한 조건에는 if 문이 더 유연하답니다.

6. switch 문과 if 문 선택 기준 🎯

조건문을 사용할 때 항상 고민되는 것 중 하나! 과연 if 문을 쓸까, switch 문이 더 좋을까? 이 두 문법은 비슷한 역할을 하지만 각각의 특성과 용도에 따라 선택해야 해요. 자바에서는 다음과 같은 기준으로 구분하면 좋아요.

📌 선택 기준 요약

조건문 유형 사용하면 좋은 경우 주의사항
if 참/거짓 여부 판단, 복잡한 조건식 사용 분기가 많으면 코드 길어짐
if ~ else 두 가지 경우로 나눌 때 else의 순서에 주의
if ~ else if ~ else 3개 이상의 조건 분기 시 가독성 저하 주의
switch 값이 명확히 정해져 있을 때 (예: 요일, 메뉴 선택 등) 사용 가능한 데이터 타입에 제한 있음

🧠 실전에서는 이렇게 선택하세요!

  • 복잡한 조건을 다룰 땐 if 문을 사용하세요. 논리식, 범위 비교 등에 유리합니다.
  • 단순한 선택지(숫자, 문자, 문자열 등)가 여러 개라면 switch 문이 더 깔끔합니다.
  • 성능 차이는 크지 않지만, 가독성과 유지보수를 기준으로 판단하세요.

결론적으로, 두 조건문 모두 상황에 따라 강력한 도구입니다. 중요한 건 코드의 명확성과 가독성이에요. 그래서 복잡한 조건에는 if, 단순한 선택에는 switch를 쓰는 게 자바 개발자들의 기본 원칙이라고 할 수 있죠!

🔚 마무리하며

이번 글에서는 자바의 조건 분기문에 대해 처음부터 끝까지 정리해보았어요. if 문을 시작으로 else, else if, 중첩 if, 그리고 switch 문까지 — 흐름 제어의 모든 핵심을 하나하나 직접 예제로 익혀봤죠. 조건문은 자바에서 정말 기초 중의 기초이면서도 실전에서 계속 쓰이게 되는 문법입니다.

이제 여러분은 상황에 따라 if를 쓸지 switch를 쓸지 판단할 수 있고, 코드의 흐름을 자유롭게 설계할 수 있는 수준까지 도달하셨어요. 앞으로 자바로 더 복잡한 프로그램을 짤 때도, 오늘 배운 조건문이 가장 먼저 머릿속에 떠오를 거예요. 👏👏👏

다음 글에서는 반복문 (for, while)을 활용해서 어떻게 프로그램 흐름을 반복시키는지 알아볼 거예요. 반복문까지 익히면 진짜 '제어문 마스터'라고 할 수 있답니다!

반응형
반응형

2.6 실습: 변수와 연산자 활용 – 키보드로 두 수를 입력받아 사칙연산 계산하기

자바에서 변수와 연산자만 제대로 익혀도, 여러분은 이미 실전 개발의 절반을 이해한 셈입니다. 간단한 계산기 프로그램을 직접 만들어보면서, 변수 선언과 입력 처리, 연산자 사용법까지 한 번에 정리해보세요!

반응형

안녕하세요! 😊 이번 시간에는 자바의 변수연산자를 직접 활용해보는 실습을 진행해볼게요. 그동안 배운 변수 선언과 입력 처리 방식, 그리고 산술 연산자들을 종합적으로 활용해볼 수 있는 기회랍니다. 자바 초보자분들에게는 아주 좋은 연습이 될 거예요! 사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 수행하는 간단한 콘솔 프로그램을 만들어보면서 입력부터 연산, 출력까지 하나의 흐름으로 이해해볼 수 있도록 준비했어요. 자, 그럼 코딩의 세계로 들어가볼까요?

1. 키보드 입력을 위한 Scanner 클래스 소개 🧾

자바에서 키보드로 값을 입력받으려면 Scanner라는 도구를 사용합니다. 이 클래스는 자바에서 사용자로부터 값을 입력받을 수 있도록 도와주는 아주 중요한 클래스예요.

Scanner는 java.util 패키지에 포함되어 있어서 사용하려면 반드시 import 해야 해요. 아래처럼요:

import java.util.Scanner;

Scanner를 사용하는 기본 문법은 아주 간단해요. Scanner sc = new Scanner(System.in);으로 객체를 생성하고, sc.nextInt()sc.nextLine() 등을 이용해 입력을 받으면 됩니다.

Scanner 클래스의 주요 메서드들 🔍

메서드 설명
nextInt() 정수를 입력받습니다.
nextDouble() 실수를 입력받습니다.
nextLine() 한 줄 전체를 문자열로 입력받습니다.
next() 공백 전까지의 문자열을 입력받습니다.

🎯 Scanner 사용 시 주의할 점

  • nextInt()nextLine()을 혼용할 경우 줄바꿈 문제 발생 가능 (버퍼 주의)
  • Scanner 객체는 한 번만 선언하고 사용하는 것이 원칙
  • 프로그램 마지막에는 sc.close()로 자원 해제하는 습관 들이기

Scanner는 실습에서 자주 쓰이기 때문에 익숙해져야 해요. 특히 다양한 입력 타입을 처리하면서 입력 오류를 방지하는 습관을 들이면 이후 복잡한 프로그램에서도 유용하게 쓰일 거예요. 😎

2. 변수 선언과 사용자 입력 받기 🧍

이제 Scanner를 사용해서 값을 입력받을 준비가 되었으니, 입력값을 저장할 변수를 선언해야겠죠? 자바에서 변수를 선언할 때는 자료형 변수명의 형식으로 작성합니다. 예를 들어 두 정수를 입력받는다면 다음과 같이 선언할 수 있어요:

int num1;
int num2;

그리고 사용자로부터 입력을 받아 변수에 값을 저장하는 코드는 이렇게 됩니다:

Scanner sc = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = sc.nextInt();

System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = sc.nextInt();

🧠 변수 선언 시 체크 포인트

  • 변수명은 의미 있게! – num1, num2도 괜찮지만 firstNumber, secondNumber처럼 직관적인 이름이 좋습니다.
  • 정수는 int, 실수는 double로! 입력값의 유형에 따라 자료형을 알맞게 설정하세요.

✅ 전체 입력 코드 예시

import java.util.Scanner;

public class CalculatorInput {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("첫 번째 숫자를 입력하세요: ");
        int num1 = sc.nextInt();

        System.out.print("두 번째 숫자를 입력하세요: ");
        int num2 = sc.nextInt();

        sc.close(); // 입력 스트림 닫기
    }
}

입력만 잘 처리해도 절반은 성공이에요! 변수 선언, 입력값 저장까지 정확히 이해했다면 이제 이 값들을 가지고 실제 연산을 해볼 차례입니다. 다음 단계에서는 드디어 산술 연산자를 사용해서 다양한 계산을 구현해볼 거예요. 기대되시죠? 😄

3. 산술 연산자 활용법 🔢

사용자로부터 입력받은 두 숫자를 가지고 이제 본격적으로 사칙연산을 해볼 시간이에요. 자바에서 산술 연산을 하려면 +, -, *, /, %와 같은 산술 연산자를 사용합니다.

🛠️ 산술 연산자의 종류와 사용법

연산자 설명 예시
+ 덧셈 num1 + num2
- 뺄셈 num1 - num2
* 곱셈 num1 * num2
/ 나눗셈 (정수 나눗셈은 소수점 이하 버림) num1 / num2
% 나머지 num1 % num2

이 연산자들은 기본적으로 숫자 타입(정수, 실수 모두)에 사용할 수 있어요. 연산 순서는 괄호 → 곱셈/나눗셈 → 덧셈/뺄셈 순이기 때문에 복잡한 식을 작성할 때는 괄호를 적절히 활용하는 것도 중요해요.

🎯 예시 코드: 연산 결과 출력

int sum = num1 + num2;
int sub = num1 - num2;
int mul = num1 * num2;
int div = num1 / num2;
int mod = num1 % num2;

System.out.println("덧셈 결과: " + sum);
System.out.println("뺄셈 결과: " + sub);
System.out.println("곱셈 결과: " + mul);
System.out.println("나눗셈 결과: " + div);
System.out.println("나머지 결과: " + mod);

여기서 중요한 포인트는 나눗셈 연산 시 0으로 나누는 오류예요. 만약 사용자 입력값 중 두 번째 수가 0이라면, num1 / num2는 실행 시 오류를 발생시키고 프로그램이 종료됩니다. 이를 방지하기 위한 조건문 처리도 꼭 추가해줘야 해요.

🧩 팁: 정수 나눗셈의 주의점

정수와 정수를 나누면 결과는 소수점 없이 정수로 반환된다는 걸 기억하세요. 예를 들어 7 / 2의 결과는 3입니다. 만약 3.5와 같은 결과를 원한다면 double형을 사용하거나 (double)num1 / num2처럼 형변환을 사용해야 해요.

4. 실습: 두 수를 입력받아 사칙연산 계산하기 🧮

자, 지금까지 배운 내용을 종합해서 하나의 계산기 프로그램을 만들어볼게요. 사용자로부터 두 개의 정수를 입력받고, 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지까지 모두 계산해서 출력해주는 프로그램입니다.

🔧 전체 코드 예시

import java.util.Scanner;

public class SimpleCalculator {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("첫 번째 정수를 입력하세요: ");
        int num1 = sc.nextInt();

        System.out.print("두 번째 정수를 입력하세요: ");
        int num2 = sc.nextInt();

        int sum = num1 + num2;
        int sub = num1 - num2;
        int mul = num1 * num2;

        System.out.println("덧셈 결과: " + sum);
        System.out.println("뺄셈 결과: " + sub);
        System.out.println("곱셈 결과: " + mul);

        if (num2 != 0) {
            int div = num1 / num2;
            int mod = num1 % num2;
            System.out.println("나눗셈 결과: " + div);
            System.out.println("나머지 결과: " + mod);
        } else {
            System.out.println("나눗셈과 나머지 연산은 0으로 나눌 수 없습니다.");
        }

        sc.close();
    }
}

이 코드에서는 입력부터 출력까지의 흐름이 자연스럽게 연결되어 있어요. 특히 조건문을 통해 0으로 나누는 경우를 체크한 부분이 아주 중요하답니다.

📌 실행 예시

첫 번째 정수를 입력하세요: 10
두 번째 정수를 입력하세요: 3
덧셈 결과: 13
뺄셈 결과: 7
곱셈 결과: 30
나눗셈 결과: 3
나머지 결과: 1

🧠 실습 포인트 정리

  • Scanner를 사용해 사용자 입력 받기
  • 입력값을 변수에 저장하고 산술 연산자 적용하기
  • 나눗셈 전에 0인지 조건문으로 체크하기
  • 프로그램 마지막에는 꼭 sc.close()로 자원 해제하기

이 실습은 자바 문법의 기초를 확실히 다질 수 있는 예제예요. 직접 여러 숫자를 넣어보면서 결과를 확인해보세요. 그리고 오류가 발생했다면 그 원인을 꼭 분석해보는 습관! 정말 중요합니다.

5. 자주 발생하는 입력 관련 오류와 해결법 🛠️

실습을 하다 보면 종종 입력 처리에서 오류가 발생하는 경우가 있어요. 그럴 땐 당황하지 말고, 문제의 원인을 하나씩 점검해보는 게 중요합니다. 여기서는 초보자들이 가장 많이 겪는 입력 관련 오류들을 정리하고, 그 해결 방법도 함께 알려드릴게요.

❗ 오류 1: nextInt() 후 nextLine()이 작동하지 않는 문제

nextInt()로 숫자를 입력받은 후 nextLine()을 바로 사용하면, 줄바꿈 문자(\n)가 남아 있어서 입력 없이 넘어가버리는 현상이 발생합니다.

해결 방법: nextLine()을 사용하기 전에 sc.nextLine();을 한 번 더 실행해서 줄바꿈 문자를 제거해 주세요.

sc.nextInt();     // 숫자 입력
sc.nextLine();     // 줄바꿈 제거
String str = sc.nextLine();  // 문자열 입력

❗ 오류 2: 숫자가 아닌 값 입력 시 예외 발생

nextInt()nextDouble()은 사용자가 숫자가 아닌 값을 입력하면 InputMismatchException이라는 예외를 발생시켜요. 이건 자바가 해당 입력을 숫자로 해석할 수 없기 때문이죠.

해결 방법: 예외 처리를 위한 try-catch 문을 사용해서 사용자 입력을 검증하면 프로그램이 갑자기 종료되는 걸 막을 수 있어요.

try {
    int num = sc.nextInt();
} catch (InputMismatchException e) {
    System.out.println("숫자를 입력해야 합니다.");
    sc.next(); // 잘못된 입력 제거
}

❗ 오류 3: 0으로 나누기

자바에서 0으로 나누는 건 절대 불가능해요. 정수를 0으로 나누면 ArithmeticException 예외가 발생하고, 실수의 경우에는 Infinity라는 결과가 나올 수도 있어요.

해결 방법: 나눗셈을 하기 전에 반드시 if(num2 != 0) 조건을 확인하고 실행하도록 하세요.

📝 요약 리스트

  • nextInt() 이후 nextLine() 사용 시 줄바꿈 제거 필요
  • 잘못된 입력은 try-catch로 예외 처리
  • 0으로 나누는 연산은 반드시 조건문으로 방지

자바에서 입력 오류는 초보자들이 가장 많이 부딪히는 부분이에요. 하지만 그만큼 실력을 빨리 키울 수 있는 기회이기도 하죠. 💪 오류가 발생하면 무서워하지 말고, 차근차근 원인을 분석해보는 습관을 들이세요!

6. 실습 마무리 퀴즈 및 정리 📝

지금까지 우리는 Scanner를 이용한 입력 처리, 변수 선언, 산술 연산자 활용, 그리고 예외 처리까지 모두 실습해봤어요. 이 모든 개념은 자바 입문자의 필수 토대랍니다. 이번엔 복습을 겸해 간단한 퀴즈로 마무리해볼게요. 😊

✅ 복습 퀴즈

  1. 자바에서 키보드 입력을 처리하는 클래스는 무엇인가요?
  2. nextInt() 다음에 nextLine()을 사용할 때 주의해야 할 점은?
  3. 0으로 나누기를 방지하기 위해 사용하는 조건문은 어떤 형식인가요?
  4. 사용자로부터 두 정수를 입력받아 덧셈 결과만 출력하는 코드를 직접 작성해보세요.

📌 핵심 요약

  • Scanner 클래스를 사용하면 키보드로부터 다양한 타입의 값을 입력받을 수 있음
  • 변수는 입력된 값을 저장하고 연산을 가능하게 하는 핵심 도구
  • 산술 연산자를 이용해 수학적 연산을 간단하게 수행할 수 있음
  • 예외 처리는 프로그램을 더 안전하고 견고하게 만들어줌

이제 여러분도 자바로 아주 간단한 계산기를 구현할 수 있게 되었어요! 🎉 물론 지금은 아주 기본적인 수준이지만, 이 구조가 더 복잡한 프로그램의 밑거름이 된다는 점, 꼭 기억해두세요. 다음 단계에서는 조건문과 반복문을 활용한 더 다양한 흐름 제어 방법도 배워볼 거예요. 😊

마무리하며 ✨

이번 실습을 통해 여러분은 자바에서 가장 기초적이지만 중요한 개념인 변수 선언, 입력 처리, 산술 연산자 활용을 스스로 코드로 구현해보았어요. 단순한 계산기 프로그램이지만, 입력값의 흐름과 조건 분기, 예외 처리까지 연습할 수 있었죠.

자바 학습을 시작한 초보자분들에게 이 정도 프로젝트는 정말 좋은 훈련이에요. 직접 키보드로 입력값을 넣고 그 결과를 확인해보는 과정 속에서 프로그래밍이 단순히 이론이 아니라, 논리적인 흐름을 만드는 작업이라는 걸 자연스럽게 느낄 수 있었을 거예요.

앞으로는 조건문, 반복문, 배열 등 더 복잡한 구조로 나아가겠지만, 오늘 다룬 Scanner연산자의 개념은 그 모든 곳에서 계속 활용됩니다. 그러니 꼭 여러 번 연습해보세요. 틀려도 괜찮아요. 오히려 틀릴수록 더 많이 배울 수 있거든요! 😉

반응형

+ Recent posts