반응형

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연산자의 개념은 그 모든 곳에서 계속 활용됩니다. 그러니 꼭 여러 번 연습해보세요. 틀려도 괜찮아요. 오히려 틀릴수록 더 많이 배울 수 있거든요! 😉

반응형
반응형

2.5 키보드 입력과 Scanner 사용 – 표준 입력을 통해 값 읽어오기, Scanner 클래스 활용

여러분, 프로그램 실행 도중에 사용자로부터 직접 값을 입력받을 수 있다면 훨씬 유연하고 똑똑한 코드가 될 수 있다는 사실, 알고 계셨나요? 바로 Scanner가 그 핵심 역할을 해낸답니다!

반응형

안녕하세요, 자바 학습자 여러분 😊 오늘은 자바 프로그램에서 키보드를 통해 데이터를 입력받는 방법을 배워볼 거예요. 사실 지금까지는 값을 직접 코드에 써 넣는 방식으로만 프로그램을 작성했을 텐데요, 이제는 사용자가 직접 입력한 정보를 읽어올 수 있는 표준 입력 방식에 대해 배워볼 차례입니다! Scanner 클래스는 자바에서 매우 자주 쓰이는 입력 도구인데요, 그만큼 실전에서도 활용도가 아주 높아요. 특히 초보 개발자 분들이 처음으로 사용자와 상호작용하는 프로그램을 만들어볼 수 있는 좋은 기회가 되니, 이번 주제 놓치지 말고 꼭 챙겨보세요!

1. 키보드 입력이란? 🤔

자바 프로그램에서 키보드 입력은 사용자로부터 실시간으로 값을 입력받는 방법입니다. 보통 우리가 작성한 프로그램은 정해진 값을 기준으로 동작하죠. 하지만 키보드 입력 기능이 들어가면 사용자의 행동에 따라 결과가 달라지는 인터랙티브한 프로그램이 됩니다.

예를 들어, 사용자의 이름을 입력받아 인사 메시지를 출력하거나, 두 수를 입력받아 더한 결과를 보여주는 프로그램처럼요! 이런 기능을 만들기 위해선 표준 입력이라는 개념을 이해해야 합니다.

🧾 표준 입력(Standard Input)의 개념

  • 운영체제에서 표준 입력 장치는 보통 키보드입니다.
  • 자바는 이 입력을 읽기 위해 System.in 스트림을 제공합니다.
  • System.in은 기본적으로 바이트 단위로 입력을 처리합니다.

💡 하지만 문자열이나 숫자 입력을 처리하려면?

이때 등장하는 것이 바로 Scanner 클래스입니다. Scanner는 System.in을 기반으로 문자열, 정수, 실수 등 다양한 자료형을 손쉽게 읽을 수 있게 도와주는 아주 고마운 도구랍니다.

📋 정리: 키보드 입력 이해 포인트

항목 내용
표준 입력 System.in으로 처리되는 기본 키보드 입력 스트림
문자 처리 System.in은 바이트 단위로만 처리하기 때문에 불편함 존재
Scanner System.in을 쉽게 사용할 수 있도록 도와주는 입력 처리 클래스

다음 섹션에서는 본격적으로 Scanner 클래스가 뭔지, 왜 쓰는지, 그리고 어떻게 쓰는지를 차근차근 알려드릴게요! 🔍

2. Scanner 클래스의 개념과 필요성 📚

Scanner 클래스는 자바에서 사용자 입력을 쉽게 처리하기 위해 제공되는 도구입니다. 콘솔에 입력한 데이터를 텍스트 단위로 읽어들여 원하는 데이터 형식으로 바꾸어줍니다. 복잡한 입출력 처리를 직접 구현하지 않고도 다양한 형식의 데이터를 손쉽게 다룰 수 있어요.

🔍 Scanner 클래스의 주요 기능

  • 문자열 입력 → next(), nextLine()
  • 정수 입력 → nextInt()
  • 실수 입력 → nextDouble(), nextFloat()

🧠 왜 Scanner가 필요한가요?

  1. 입력을 자동으로 자료형에 맞게 변환해줘서 따로 파싱할 필요가 없어요.
  2. 한 줄 전체 혹은 공백 단위로 유연하게 읽기가 가능해요.
  3. 자바에서 제공하는 API라 설정 없이 바로 사용 가능하죠!

📌 Scanner 클래스 선언 예시

import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // Scanner 객체 생성
        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine(); // 문자열 입력 받기
        System.out.println("안녕하세요, " + name + "님!");
    }
}

📢 Scanner 사용 시 주의할 점

next()nextLine()은 작동 방식이 달라서 입력값이 의도와 다르게 처리될 수 있어요. 줄바꿈(\n) 문제를 주의해서 사용해야 합니다. 이 부분은 뒤에서 더 자세히 다룰게요.

지금까지 Scanner의 기본 개념을 살펴봤어요. 다음 파트에서는 이 Scanner를 실제로 어떻게 쓰는지 단계별로 알아볼 거예요!

3. Scanner 클래스 기본 사용법 🔤

Scanner 클래스는 입력을 다룰 수 있는 다양한 메서드를 제공합니다. 가장 기본적인 사용법은 객체를 생성한 뒤, 필요한 입력 메서드를 호출하는 방식입니다.

✅ Scanner 객체 생성

Scanner sc = new Scanner(System.in);

위 코드는 키보드 입력을 받을 준비를 하는 것이고, sc는 Scanner 객체의 이름입니다. 다른 이름을 써도 되지만, sc는 관례적으로 많이 사용됩니다.

🧾 주요 입력 메서드

메서드 설명
next() 단어 하나 (공백 전까지)
nextLine() 줄 전체 입력 (엔터 전까지)
nextInt() 정수 입력
nextDouble() 실수 입력

📌 주의! next() vs nextLine()

많은 초보자들이 실수하는 부분이 바로 next()nextLine()의 차이입니다. next()는 공백 전까지만 읽고, nextLine()은 한 줄 전체를 읽습니다. 그래서 앞에 nextInt() 등을 사용하고 바로 nextLine()을 쓰면, 줄바꿈 문자(\n)가 남아서 빈 문자열을 읽는 문제가 발생합니다.

🎯 입력 처리 기본 예제

import java.util.Scanner;

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

        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine();

        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt();

        System.out.println("이름: " + name);
        System.out.println("나이: " + age);
    }
}

다음 장에서는 정수, 실수, 문자열 등 다양한 자료형을 입력받는 방법을 좀 더 구체적으로 살펴볼게요!

4. 다양한 자료형 입력 받기 🎛

Scanner 클래스를 활용하면 다양한 자료형의 입력을 받을 수 있습니다. 대표적으로 문자열, 정수, 실수, 불린값 등을 처리할 수 있어요. 아래에 각각의 자료형별 입력 방식과 주의할 점을 정리해드릴게요.

📦 자료형별 입력 메서드

자료형 메서드 예시
문자열 nextLine() sc.nextLine();
정수 nextInt() sc.nextInt();
실수 (double) nextDouble() sc.nextDouble();
실수 (float) nextFloat() sc.nextFloat();
불린 (true/false) nextBoolean() sc.nextBoolean();

💡 예외 상황 주의하기

  • 숫자 입력 시 숫자가 아닌 문자를 입력하면 InputMismatchException 오류 발생
  • nextInt() → nextLine() 순으로 쓸 때 줄바꿈 문제로 빈 값 입력될 수 있음

🧪 실습 예제: 다양한 입력 받기

import java.util.Scanner;

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

        System.out.print("문자열 입력: ");
        String text = sc.nextLine();

        System.out.print("정수 입력: ");
        int number = sc.nextInt();

        System.out.print("실수 입력: ");
        double dnum = sc.nextDouble();

        System.out.print("참/거짓 입력 (true/false): ");
        boolean flag = sc.nextBoolean();

        System.out.println("입력된 문자열: " + text);
        System.out.println("입력된 정수: " + number);
        System.out.println("입력된 실수: " + dnum);
        System.out.println("입력된 불린값: " + flag);
    }
}

다양한 자료형을 입력받고 출력해보는 간단한 프로그램이지만, 실제 프로젝트에서도 아주 유용하게 쓰이는 패턴이랍니다. 다음 장에서는 입력 도중 발생할 수 있는 오류와 그 해결법을 살펴볼게요. 🙌

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

Scanner를 사용할 때 가장 자주 마주치는 문제는 바로 입력값의 처리 순서와 예외 발생입니다. 특히 nextInt()nextLine()의 혼용, 사용자가 예상치 못한 값을 입력했을 때 프로그램이 멈추는 현상 등이 대표적이에요.

😵 nextInt() 사용 후 nextLine()이 무시될 때

nextInt()는 숫자 입력 후 엔터키(\n)는 읽지 않고 남깁니다. 그래서 그 다음 nextLine()이 실행되면, 남아 있던 줄바꿈 문자를 그대로 읽어버려서 빈 문자열이 입력된 것처럼 처리되죠.

System.out.print("나이 입력: ");
int age = sc.nextInt();  // 숫자 입력

sc.nextLine(); // 줄바꿈 제거용 (중요!)

System.out.print("이름 입력: ");
String name = sc.nextLine(); // 이제 정상적으로 입력 받음

⚠️ InputMismatchException 예외

nextInt()nextDouble()숫자만을 입력받아야 하는데, 사용자가 실수로 문자열이나 특수기호를 입력하면 InputMismatchException이 발생해요.

🛡 해결 방법

  • try-catch 문으로 예외 처리하기
  • 문자열로 먼저 받은 후 Integer.parseInt()로 변환
try {
    int age = sc.nextInt();
} catch (InputMismatchException e) {
    System.out.println("정수를 입력해주세요!");
}

📝 오류 상황 정리

오류 상황 원인 해결책
nextLine()이 건너뛰어짐 nextInt() 이후 줄바꿈 문자가 남아있음 sc.nextLine() 한 번 호출해서 제거
입력 예외 발생 입력값과 메서드 자료형 불일치 try-catch로 예외 처리

입력 도중 발생하는 오류는 처음에는 꽤 당황스럽지만, 그 원인을 정확히 알면 금방 해결할 수 있어요. 이제 마지막으로, Scanner를 활용한 실전 예제를 만들어 보며 정리해볼게요! 🎯

6. Scanner를 활용한 입력 예제 실습 ✍️

이제 우리가 배운 내용을 종합해서 Scanner 클래스를 실제로 사용하는 프로그램을 만들어 볼 차례예요. 이 실습에서는 문자열, 정수, 실수를 모두 입력받아 처리해보는 간단한 인터랙티브 콘솔 애플리케이션을 구현해봅니다. 🎮

🎯 목표

  • 사용자로부터 이름, 나이, 키(cm)를 입력받기
  • 입력된 정보를 바탕으로 간단한 인사 메시지 출력하기

📌 실전 코드

import java.util.Scanner;

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

        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine();

        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt();
        sc.nextLine(); // 버퍼 비우기

        System.out.print("키(cm)를 입력하세요: ");
        double height = sc.nextDouble();

        System.out.println("\n--- 입력 결과 ---");
        System.out.println("이름: " + name);
        System.out.println("나이: " + age + "세");
        System.out.println("키: " + height + "cm");

        System.out.println("\n반갑습니다, " + name + "님! 👋");
    }
}

✅ 실행 예시

이름을 입력하세요: 민수
나이를 입력하세요: 24
키(cm)를 입력하세요: 175.5

--- 입력 결과 ---
이름: 민수
나이: 24세
키: 175.5cm

반갑습니다, 민수님! 👋

🔍 실습을 통해 확인할 포인트

  • 입력 순서에 따라 줄바꿈 처리가 필요한 부분을 확인했나요?
  • 다양한 자료형 입력을 자연스럽게 처리할 수 있었나요?

이제 여러분도 Scanner를 활용한 사용자 입력 처리를 충분히 이해하셨을 거예요. 다음 섹션에서는 마무리로 이 장에서 배운 핵심 내용을 정리하고, 태그와 함께 마무리 인사를 전하겠습니다 😊

마무리하며 ✨

이번 글에서는 자바에서 사용자로부터 값을 입력받기 위한 Scanner 클래스의 개념부터 실제 활용까지 꼼꼼히 살펴봤습니다. 단순히 값을 출력하는 프로그램을 넘어서, 사용자의 입력을 받아 동적으로 동작하는 프로그램을 만드는 데 있어 Scanner는 매우 강력한 도구라는 걸 알 수 있었죠.

특히 nextInt()nextLine()의 차이, 입력 예외 처리, 줄바꿈 버퍼 문제 등은 실무와 과제 모두에서 자주 마주치는 포인트이니 꼭 익혀두시기 바랍니다. 입력 예제 실습까지 직접 해보셨다면, 이제 여러분도 키보드 입력과 Scanner는 마스터하셨다고 봐도 좋아요! 💯

다음 장에서는 조건문과 흐름 제어에 대해 배워보게 될 텐데요, 그 전에 이번 Scanner 실습을 조금 더 응용해서 미니 계산기나 간단한 설문 프로그램도 한번 도전해보는 건 어떨까요? 😉

반응형
반응형

2.4 연산자 우선순위 개념과 괄호를 통한 제어

이 표현식, 과연 어떤 결과가 나올까요? 자바 연산자 우선순위와 평가 순서를 이해하지 못하면 의도치 않은 결과가 나올 수도 있어요!

반응형

안녕하세요! 오늘은 자바 연산자의 우선순위와 평가 순서에 대해 알아보려 해요. 프로그래밍을 처음 배우는 분들이 가장 혼란스러워하는 부분 중 하나인데요. 예를 들어 `a + b * c`라는 표현식에서 어떤 연산이 먼저 실행될지 바로 알 수 있으신가요? 😅 이런 혼란을 방지하려면 연산자의 우선순위와 평가 방향을 정확히 이해하는 게 정말 중요해요. 그리고 괄호를 적절히 활용하는 습관도요! 이번 글에서는 자바에서 사용되는 다양한 연산자의 우선순위를 한눈에 살펴보고, 어떤 상황에서 괄호를 사용해야 할지 예제를 통해 배워볼 거예요. 실전 코딩을 하다 보면 연산 순서가 결과에 큰 영향을 미치는 경우가 정말 많거든요. 자, 그럼 함께 알아볼까요? ✨

1. 연산자 우선순위란 무엇인가요? 🤔

프로그래밍 언어에서는 다양한 연산자들이 존재하죠. 자바에서도 덧셈(+), 곱셈(*), 논리 연산자(&&), 비교 연산자(==) 등 여러 종류의 연산자를 사용할 수 있습니다. 그런데 이 연산자들이 한 줄의 코드에서 여러 개 등장하면 어떤 순서로 연산이 될까요? 바로 그때 필요한 개념이 연산자 우선순위입니다.

예를 들어, 다음과 같은 식을 생각해볼게요:

int result = 10 + 2 * 3;

이 코드에서 *+보다 우선순위가 높기 때문에 2 * 3이 먼저 계산되고 그 결과에 10이 더해져 최종적으로 result = 16이 됩니다. 만약 +를 먼저 계산하고 싶다면 어떻게 해야 할까요? 그렇죠. 괄호를 사용해서 (10 + 2) * 3처럼 바꾸면 됩니다.

✅ 왜 우선순위가 중요할까요?

  • 논리적 오류 방지: 연산 순서를 잘못 이해하면 전혀 다른 결과가 나올 수 있어요.
  • 가독성 향상: 괄호를 적절히 활용하면 코드의 의도를 명확히 표현할 수 있어요.
  • 디버깅 시간 절약: 우선순위를 제대로 이해하면 의도하지 않은 결과로 인한 디버깅 시간을 줄일 수 있어요.

🧠 실생활에 비유해 볼까요?

커피를 마시기 전에 물을 끓여야 하잖아요? 순서를 바꾸면 안 되죠! 자바에서도 마찬가지예요. 연산자의 순서를 잘못 지정하면 "끓이기 전에 마신" 것 같은 결과가 나옵니다. 😅

다음 섹션에서는 자바에서 제공하는 전체 연산자 우선순위를 표로 한눈에 정리해 드릴게요. 복잡한 것 같아도 금방 익숙해질 수 있어요!

2. 자바의 연산자 우선순위 표 📊

자바에서는 여러 연산자들이 미리 정해진 우선순위(priority)에 따라 평가됩니다. 아래는 자바 공식 문서 기준으로 정리한 연산자 우선순위 표입니다. 높은 우선순위를 가진 연산자가 먼저 실행됩니다.

우선순위 연산자 설명
1 (가장 높음) [], (), . 배열 인덱스, 괄호, 멤버 접근
2 ++, -- 단항 후위 연산자
3 ++, --, +, -, ~, ! 단항 전위 연산자
4 *, /, % 곱셈, 나눗셈, 나머지
5 +, - 덧셈, 뺄셈
6 <<, >>, >>> 비트 이동
7 <, <=, >, >=, instanceof 비교 연산자
8 ==, != 등가 비교
9 & 비트 AND
10 ^ 비트 XOR
11 | 비트 OR
12 && 논리 AND
13 || 논리 OR
14 ?: 삼항 연산자
15 =, +=, -= 등 대입 연산자

표가 길다고 너무 부담 갖지 마세요! 처음에는 외우기보다는 "곱셈/나눗셈이 덧셈/뺄셈보다 먼저다"와 같은 자주 쓰는 우선순위만 기억해도 충분합니다. 그리고 항상 괄호를 통해 연산 순서를 명확하게 지정해주는 습관을 들이면 실수를 줄일 수 있어요.

3. 평가 순서(Associativity)란? 🔄

연산자 우선순위는 어떤 연산이 먼저 실행되는지를 알려주죠. 그런데 우선순위가 같은 연산자들이 나열되면 어떤 방향으로 평가될까요? 이때 필요한 개념이 바로 평가 순서(Associativity)입니다.

🧭 좌측 결합과 우측 결합

대부분의 연산자는 왼쪽에서 오른쪽으로(Left-to-Right) 평가됩니다. 하지만 몇몇 연산자는 오른쪽에서 왼쪽으로(Right-to-Left) 평가돼요. 예제를 보며 확인해볼게요!

int a = 10, b = 20, c = 30;
int result = a + b + c;

위 식에서는 + 연산자의 우선순위는 같고, 좌측 결합이 적용되므로 (a + b) + c로 계산됩니다. 반면 아래와 같은 예제를 볼까요?

int x;
x = y = z = 100;

여기서 대입 연산자 =우측 결합을 따릅니다. 그래서 z = 100이 먼저 실행되고, 그 결과가 y에 대입되고, 마지막으로 x에 대입돼요. 즉 x = (y = (z = 100))과 같은 순서로 평가됩니다.

📝 주요 연산자의 결합 방향

연산자 결합 방향 예시
+, -, *, /, %, &, |, ^, &&, || Left-to-Right a + b + c → (a + b) + c
=, +=, -=, *=, /=, %= Right-to-Left x = y = z = 100 → x = (y = (z = 100))
?: (삼항 연산자) Right-to-Left result = condition ? a : b;

이렇게 평가 순서까지 이해하면 복잡한 식도 더욱 명확하게 읽을 수 있어요! 다음 장에서는 이 모든 우선순위와 평가 순서를 괄호를 이용해 어떻게 제어할 수 있는지 실전 예제로 알아볼게요. 💡

4. 괄호의 필요성과 사용법 🎯

연산자 우선순위나 평가 순서를 완벽하게 외우지 못해도 괜찮아요. 왜냐하면 괄호를 활용하면 어떤 연산을 먼저 처리할지 프로그래머가 직접 제어할 수 있기 때문이에요! 괄호는 우선순위를 강제로 바꾸는 가장 강력한 도구이자, 가독성을 높이는 최고의 방법이에요.

📌 괄호 사용의 예

int result1 = 10 + 2 * 3;        // 결과: 16
int result2 = (10 + 2) * 3;      // 결과: 36

위 코드에서 result1은 기본 우선순위에 따라 곱셈이 먼저 계산돼 2 * 3 = 6이 되고, 그 후에 10 + 6이 돼서 결과는 16이 나와요. 하지만 result2는 괄호로 덧셈이 먼저 실행되도록 했기 때문에 (10 + 2) * 3 = 36이라는 결과가 나옵니다. 바로 이런 차이를 의도적으로 만들기 위해 괄호를 사용하는 거예요.

🧼 괄호는 가독성 향상에도 효과적!

  • 팀원들이 코드를 볼 때, 괄호로 연산 순서가 명확히 드러나면 해석하기 훨씬 쉬워요.
  • 코드 리뷰 시 혼란을 줄이고, 예기치 않은 오류 가능성을 줄일 수 있어요.

💡 괄호 사용 꿀팁

  1. 복잡한 수식이거나 연산자가 여러 개 섞여 있을 때는 무조건 괄호로 명확히 하자!
  2. 조건문, 반복문 안의 조건식에서도 괄호를 적극 활용하자.
  3. 계산 결과가 다르게 나올 수 있는 경우에는 실험적으로 괄호를 써서 테스트해보자.

괄호 하나로 코드의 운명이 바뀐다는 말, 과장 같지만 사실이에요! 😉 다음 섹션에서는 실전에서 자주 마주치는 헷갈리기 쉬운 표현식들을 통해 우선순위의 실제 활용을 확인해볼게요.

5. 헷갈리기 쉬운 표현식 예제 ⚠️

실제로 코드를 작성하다 보면, 우선순위와 평가 순서를 제대로 이해하지 못해 의도와 다른 결과를 얻게 되는 경우가 많아요. 아래 예제들을 함께 보며 어떤 부분이 헷갈리는지, 그리고 어떻게 해결하면 좋은지 확인해봐요!

🔍 예제 1: 논리 연산자와 비교 연산자의 충돌

boolean result = 5 < 3 && 10 > 5;

이 표현식은 5 < 3이 먼저 계산돼서 false가 되고, 이후 false && true가 되죠. 결과는 false입니다. 괄호 없이도 잘 작동하긴 하지만, 다음처럼 명시적으로 괄호를 써주는 게 좋아요:

boolean result = (5 < 3) && (10 > 5);

🔍 예제 2: 문자열 연결과 덧셈의 혼동

System.out.println("합계: " + 10 + 5);

이 코드는 "합계: 10"5가 문자열로 붙어서 "합계: 105"가 출력됩니다. 예상했던 "합계: 15"가 아니죠. 이를 해결하려면 괄호를 사용해서 덧셈이 먼저 되도록 해야 해요.

System.out.println("합계: " + (10 + 5)); // 출력: 합계: 15

🔍 예제 3: 삼항 연산자 중첩 사용

int a = 5;
String result = (a > 0) ? (a < 10 ? "0~9" : "10이상") : "0이하";

삼항 연산자는 우측 결합이기 때문에 위와 같이 중첩해서 쓸 수 있어요. 하지만 조건이 복잡해질수록 괄호로 각 조건을 명확히 구분하지 않으면 가독성이 떨어지고 버그가 발생할 위험이 커져요.

📌 실수 줄이는 팁 요약

  • 문자열 연산과 숫자 연산이 섞일 때는 꼭 괄호로 연산 순서를 분명히 하기
  • 조건문 안에서 삼항 연산자 중첩 사용은 최대한 피하고, 꼭 필요하다면 괄호로 구분
  • 애매한 표현식은 변수로 나눠서 중간 계산값을 확인하는 것도 좋은 습관

실제 개발자들도 종종 겪는 실수들, 미리 알고 있으면 훨씬 수월하게 피할 수 있겠죠? 😊 이제 마지막으로, 우리가 배운 개념들을 실전 문제로 풀어보면서 연산자 우선순위에 익숙해져 볼까요?

6. 연산자 우선순위 실전 문제와 해설 🧩

자, 이제까지 배운 연산자 우선순위평가 순서, 괄호 사용 등을 종합해서 실전 문제로 연습해볼 시간입니다! 직접 코드를 예측해보며 실력을 점검해보세요 💪

🔧 실전 문제 1

int result = 4 + 3 * 2;
System.out.println(result);
  • 예상 결과: 10
  • 해설: 3 * 2가 먼저 계산돼서 6, 그 다음 4 + 6 = 10

🔧 실전 문제 2

int result = (4 + 3) * 2;
System.out.println(result);
  • 예상 결과: 14
  • 해설: 괄호로 4 + 3를 먼저 계산하므로 7 * 2 = 14

🔧 실전 문제 3

int x = 10;
int y = 5;
int result = x > y && y < 3 ? 100 : 200;
System.out.println(result);
  • 예상 결과: 200
  • 해설: x > ytrue, y < 3false, 전체 true && false = false. 삼항 조건식의 결과는 200

📚 정리 요약

  • 자바 연산자는 우선순위에 따라 순서가 정해지며, 같은 순위일 경우 평가 방향(결합 순서)에 따라 결정됩니다.
  • 복잡하거나 혼동되는 식은 괄호를 사용해 명확히 제어하세요!
  • 우선순위를 외우기보다, 자주 쓰이는 연산의 순서를 기억하고 실습을 통해 익히는 것이 효과적입니다.

이제 자바의 연산자 우선순위에 대해 훨씬 더 자신이 생기셨을 거예요. 🙌 다음 시간에는 연산자 외에 또 다른 핵심 개념인 제어문으로 넘어가볼게요! 😊

마무리하며 🧠

연산자 우선순위와 평가 순서, 그리고 괄호의 사용법은 자바를 비롯한 모든 프로그래밍 언어에서 핵심적인 개념이에요. 우리가 생각하는 연산 순서와 컴파일러가 실제로 계산하는 순서가 다르면, 전혀 의도하지 않은 결과가 나올 수 있어요. 그래서 항상 명확한 괄호 사용기본 원칙의 이해가 중요하답니다.

 

지금 당장은 모든 연산자의 우선순위를 외우기 어렵더라도, 자주 사용하는 것부터 하나씩 익혀가면서 연습을 하다 보면 자연스럽게 익숙해질 거예요. 그리고 괄호는 언제나 여러분의 친구라는 사실! 😉 복잡한 코드일수록 괄호로 감싸주는 습관을 들이면 실수도 줄고, 협업 시에도 훨씬 가독성 좋은 코드를 만들 수 있답니다.

 

 끝까지 함께 해주셔서 고맙습니다 🙏

반응형

+ Recent posts