본문 바로가기

프로그래밍/JAVA

반응형

자바 프로그램에서 사용자로부터 값을 입력받으려면 어떻게 해야 할까요?
이번 강의에서는 Scanner 클래스를 이용해 정수를 입력받고 계산하는 방법을 배워보겠습니다.
특히 System.in을 통해 키보드로 입력받는 기초 흐름을 익히는 것이 목표입니다.


💻 예제 코드

import java.util.Scanner;

public class ScannerExample {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("x input : ");
		int x = sc.nextInt();
		
		System.out.print("y input : ");
		int y = sc.nextInt();
		
		int z = x + y;
		System.out.println("x + y = " + z);
	}
}

💬 코드 설명

코드 설명
import java.util.Scanner; Scanner 클래스를 사용하기 위해 import
Scanner sc = new Scanner(System.in); 키보드 입력을 받을 Scanner 객체 생성
sc.nextInt(); 정수형(int) 데이터를 입력받음
System.out.print(...) 사용자에게 입력을 요청 (줄바꿈 X)
System.out.println(...) 결과 출력 (줄바꿈 O)

📃 실행 결과

x input : 5
y input : 3
x + y = 8

 

👉 사용자가 키보드로 5와 3을 입력하면, 두 값을 더한 결과인 8이 출력됩니다.


📌 간단 정리

기능 설명
Scanner sc = new Scanner(System.in); 키보드 입력용 Scanner 객체 생성
nextInt() 정수 입력
nextLine() 문자열 전체 입력 (공백 포함)
next() 문자열 한 단어 입력 (공백 전까지)

💡 포인트 요약

  • 자바에서 사용자 입력을 받으려면 Scanner 객체를 사용한다.
  • 정수 입력: nextInt(), 문자열 입력: nextLine(), next()
  • 입력을 받을 때는 항상 import java.util.Scanner;가 필요하다.
댓글
반응형

프로그래밍을 하다 보면 문자열을 숫자로 바꾸거나,
숫자를 다시 문자열로 바꿔야 할 상황이 자주 생깁니다.

자바에서는 이를 위한 전용 메서드들이 제공되며,
String → 기본형, 기본형 → String 간의 변환은 아주 간단하게 할 수 있습니다.

이번 강에서는 이런 기본 타입 <-> 문자열 변환 방법을 예제를 통해 알아보겠습니다.


💻 예제 코드

public class PrimitiveAndStringConversionExample {
	public static void main(String[] args) {
		int value1 = Integer.parseInt("10");
		double value2 = Double.parseDouble("3.14");
		boolean value3 = Boolean.parseBoolean("true");

		System.out.println(value1);
		System.out.println(value2);
		System.out.println(value3);

		String str1 = String.valueOf(10);
		String str2 = String.valueOf(3.14);
		String str3 = String.valueOf(true);

		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
	}
}

💬 코드 설명

1. String → int 변환

int value1 = Integer.parseInt("10");
  • 문자열 "10"을 정수 10으로 변환
  • 숫자가 아닌 문자를 넣으면 NumberFormatException이 발생함

2. String → double 변환

double value2 = Double.parseDouble("3.14");
  • 실수형 문자열 "3.14" → 실수 3.14로 변환
  • 소수점 있는 문자열도 가능

3. String → boolean 변환

boolean value3 = Boolean.parseBoolean("true");
  • "true" → true
  • "false" → false
  • 대소문자 구분 없이 true/false 처리

4. 기본형 → String 변환

String str1 = String.valueOf(10);
String str2 = String.valueOf(3.14);
String str3 = String.valueOf(true);
  • 숫자, 실수, 불리언을 문자열로 변환
  • String.valueOf() 메서드는 모든 기본형에 사용 가능
  • 숫자를 문자열로 만들거나, 출력할 때 많이 사용됨

📃 실행 결과

10
3.14
true
10
3.14
true

📌 간단 정리

변환 방향 사용 메서드 예시
String → int Integer.parseInt() "10" → 10
String → double Double.parseDouble() "3.14" → 3.14
String → boolean Boolean.parseBoolean() "true" → true
기본형 → String String.valueOf() 10 → "10"

💡 포인트 정리

  1. 문자열을 숫자로 바꿀 땐 parseInt(), parseDouble() 등 해당 타입의 클래스 사용
  2. 숫자, 실수, 논리값을 문자열로 바꿀 땐 String.valueOf()가 가장 안전하고 쉬움
  3. 문자열 파싱 시 입력값에 따라 예외가 발생할 수 있음 (숫자 형식 주의)
댓글
반응형

자바에서 다양한 자료형끼리 연산을 하면 자동으로 형변환이 일어납니다.
특히 작은 자료형끼리의 연산 결과가 예상과 다르게 나오는 경우도 많기 때문에,
자동 타입 변환(Promotion)의 원리를 이해하는 것이 중요합니다.

이번 글에서는 연산 중 자동으로 발생하는 타입 변환 과정을 코드로 확인해보겠습니다.


💻 예제 코드

public class OperationPromotionExample {
    public static void main(String[] args) {
        byte result1 = 10 + 20;
        System.out.println(result1);

        byte v1 = 10, v2 = 20;
        int result2 = v1 + v2;
        System.out.println(result2);

        byte v3 = 10;
        int v4 = 100;
        long v5 = 1000L;
        long result3 = v3 + v4 + v5;
        System.out.println(result3);

        char v6 = 'A', v7 = 1;
        int result4 = v6 + v7;
        System.out.println(result4);
        System.out.println((char) result4);

        int v8 = 10, result5 = v8 / 4;
        System.out.println(result5);

        int v9 = 10;
        double result6 = v9 / 4.0;
        System.out.println(result6);

        int v10 = 1, v11 = 2;
        double result7 = (double) v10 / v11;
        System.out.println(result7);
    }
}

💬 코드 설명

1. byte + byte 연산

byte result1 = 10 + 20;
  • 숫자 리터럴끼리 연산은 컴파일 타임에 처리되며 byte 범위 내라면 에러 없이 저장됩니다.
  • 10 + 20 = 30이 byte 범위(-128~127)라서 문제 없음.

2. byte 변수 + byte 변수 연산

int result2 = v1 + v2;
  • 변수끼리 연산은 무조건 int로 변환됨!
  • 그래서 결과를 byte가 아닌 int에 담아야 합니다.

3. byte + int + long

long result3 = v3 + v4 + v5;
  • 여러 타입이 섞이면 가장 큰 자료형인 long으로 자동 변환됩니다.
  • int보다 long이 크므로, 결과 타입도 long.

4. char + int

char v6 = 'A', v7 = 1;
int result4 = v6 + v7;
  • 'A'는 유니코드 65입니다.
  • 65 + 1 = 66 → 정수 결과가 되므로 int로 저장해야 합니다.
  • System.out.println((char) result4); → 다시 문자 'B'로 출력됨.

5. 정수 나눗셈

int result5 = v8 / 4;
  • 10 / 4 = 2, 소수점 버림

6. 실수 나눗셈

double result6 = v9 / 4.0;
  • 정수와 실수를 연산하면 자동으로 double 변환됨 → 결과 2.5

7. 형변환 후 나눗셈

double result7 = (double) v10 / v11;
  • 명시적 형변환으로 double 연산 수행
  • 1 / 2 = 0.5

📃 실행 결과

30
30
1110
66
B
2
2.5
0.5

📌 간단 정리

연산 종류 변환 여부 결과 타입 비고
byte + byte 자동 변환 int 변수 연산 시
byte + int + long 자동 변환 long 가장 큰 자료형으로
char + int 자동 변환 int 문자도 유니코드 정수
int / int 자동 변환 없음 int 소수점 제거됨
int / double 자동 변환 double 실수 결과
(double) int / int 명시적 형변환 double 원하는 결과 만들기 가능

💡 포인트 정리

  1. byte, short, char → 연산 시 int로 자동 변환됨
  2. 연산에 서로 다른 타입이 섞이면 큰 타입으로 변환
  3. 정수 나눗셈은 항상 소수점 버림! → double로 바꿔야 실수 결과
  4. 자동 변환이 일어나는 규칙을 이해하면, 실수 줄이기 쉬워요!
댓글
반응형

프로그래밍에서는 값의 자료형을 바꾸는 것이 아주 중요합니다.

특히 큰 자료형을 작은 자료형으로 바꿀 때는 명시적인 형변환이 필요합니다.

이번 글에서는 자바의 강제 타입 변환을 예제로 알아보겠습니다.

 

 

💻 예제 코드

public class CastingExample {
    public static void main(String[] args) {
        int x1 = 10;
        byte x2 = (byte) x1;
        System.out.println(x2);

        long x3 = 300;
        x1 = (int) x3;
        System.out.println(x1);

        int x4 = 65;
        char x5 = (char) x4;
        System.out.println(x5);

        double x6 = 3.14;
        int x7 = (int) x6;
        System.out.println(x7);
    }
}

 

 

💬 코드 설명

1. int ▶ byte 형변환

int x1 = 10;
byte x2 = (byte) x1;

int는 4바이트이며, byte는 1바이트이다.

작은 자료형으로 바꾸는 건 자동 변환이 안 되서 (byte) 처럼 명시적 형변환이 필요하다.

값이 byte 의 범위(-128~127)를 벗어날 경우 데이터 손실 발생 가능성이 있다.

 

2. long ▶ int 형변환

long x3 = 300;
x1 = (int) x3;

long은 8바이트, int는 4바이트이다.

큰 정수형을 작은 정수형으로 변환할 때도 형변환이 필요하다.

 

3. int ▶ char 형변환

int x4 = 65;
char x5 = (char) x4;

문자형 char 은 유니코드 정수로 저장됩니다.

숫자 65 ▶ 문자 'A' 로 변환합니다. (ASCII 코드)

숫자를 문자로 바꿀 때 유용합니다.

 

4. double ▶ int 형변환

double x6 = 3.14;
int x7 = (int) x6;

1. 실수 ▶ 정수로 변환 시 소수점 이하를 버립니다.

결과는 3.14에서 .14를 없애고 3만 출력합니다.

 

 

📃 실행 결과

10
300
A
3

 

 

📌 간단 정리

변환 방향 형변환 필요? 결과
int → byte ✅ 필요 값이 작으면 그대로, 크면 손실 가능
long → int ✅ 필요 값 유지되지만 주의 필요
int → char ✅ 필요 유니코드 문자 변환
double → int ✅ 필요 소수점 버림 처리됨

 

 

📌 명시적 형변환(강제 타입 변환)이란?

큰 자료형 ▶ 작은 자료형으로 변환할 때 사용하는 방식

(자료형) 을 붙여서 명시적으로 바꿔줘야 한다.

 

 

💡 포인트 정리

1. 작은 타입 ▶ 큰 타입 : 자동 형변환 (Promotion)

2. 큰 타입 ▶ 작은 타입 : 명시적 형변환 (Casting) 필요

형변환 시 데이터 손실 가능성을 꼭 고려할 것!

댓글
반응형

자바는 자료형의 크기나 범위가 다를 경우,

작은 타입에서 큰 타입으로 자동으로 변환이 됩니다.

이번 글에서는 자바의 자동 형변환 예제 코드를 통해 하나씩 알아보겠습니다!

 

 

💻 예제 코드

public class PromotionExample {
    public static void main(String[] args) {
        byte BYTE = 10;
        int INT = BYTE;
        System.out.println("intValue : " + INT);

        char CHAR = '가';
        INT = CHAR;
        System.out.println("가의 유니코드 : " + INT);

        INT = 50;
        long LONG = INT;
        System.out.println("longValue : " + LONG);

        LONG = 100;
        float FLOAT = LONG;
        System.out.println("floatValue : " + FLOAT);

        FLOAT = 100.5f;
        double DOUBLE = FLOAT;
        System.out.println("doubleValue : " + DOUBLE);
    }
}

 

 

💬 코드 설명

1. byte ▶ int 자동 변환

byte BYTE = 10;
int INT = BYTE;

byte 는 1바이트, int 는 4바이트로

작은 타입에서 큰 타입으로 자동 변환이 됩니다.

 

2. char ▶ int 자동 변환

char CHAR = '가';
INT = CHAR;

문자는 내부적으로 유니코드 값(정수) 로 저장됩니다.

'가' 는 유니코드로 44032 ▶ int 로 변환됩니다.

 

3. int ▶ long 자동 변환

INT = 50;
long LONG = INT;

int는 4바이트, long는 8바이트로 자동 변환됩니다.

 

4. long ▶ float 자동 변환

LONG = 100;
float FLOAT = LONG;

정수에서 실수형으로 변환이 됩니다.

정밀도에서 일부 손실될 수 있으나 자동 변환이 허용됩니다.

 

5. float ▶ double 자동 변환

FLOAT = 100.5f;
double DOUBLE = FLOAT;

float는 4바이트, double는 같은 실수형이지만 8바이트로 자동 변환이 됩니다.

 

 

📃 실행 결과

intValue : 10
가의 유니코드 : 44032
longValue : 50
floatValue : 100.0
doubleValue : 100.5

 

 

📌 자바의 자동 타입 변환이란?

자바에서는 아래와 같이 작은 자료형에서 큰 자료형으로 변환은

컴파일러가 자동으로 처리해줍니다.

변환 방향 예시
byte → short → int → long → float → double 정수 → 실수 가능
char → int → long → float → double 문자 → 숫자 변환 가능

 

👉 단, 큰 자료형에서 작은 자료형은 자동 변환되지 않으며, 명시적 형변환이 필요합니다.

 

 

💡 포인트 정리

1. 자동 타입 변환은 자료형의 크기 순서대로 일어납니다.

2. byte, char, int, long, float, double 순으로 확장됩니다.

3. 문자형(char)도 숫자로 변환되어 저장될 수 있습니다.

4. 실수형으로 갈수록 정밀도는 올라가지만 메모리 사용량도 늘어납니다.

댓글
반응형

✅ 자바에서 boolean과 조건식 제대로 이해하기!

프로그래밍에서 조건을 판단하는 것은 정말 매우! 중요합니다.
이번에는 자바에서 조건문에서 많이 쓰이는 boolean 자료형과 조건 연산자의 사용 방법을 간단한 예제를 통해 알아보겠습니다!

 

 

💻 예제 코드

public class BooleanExample {
    public static void main(String[] args) {
        int x = 10;
        boolean result = x == 10;
        System.out.println(result);
        
        result = x != 10;
        System.out.println(result);
        
        result = x >= 20;
        System.out.println(result);
        
        result = x > 0 && x < 20;
        System.out.println(result);
    }
}

 

 

💬 코드 설명

1. x == 10

x 가 10과 같으면 true, 아니면 false

== 는 동등 비교 연산자라고 불립니다.

 

2. x != 10

!= 는 같지 않다는 의미입니다.

x가 10이 아니라면 true

 

3. x >= 20

>= 는 크거나 같다는 의미이비다.

x 가 20 이상일 경우 true

 

4. x > 0 && x < 20

&& 는 논리 AND 연산자입니다.

AND 연산자 앞, 뒤로 모두 true 여야 전체가 true 입니다.

여기선 x 가 0보다 크고 20보다 작을때 true를 출력합니다.

 

 

📃 실행 결과

true
false
false
true
조건식 결과
1 x == 10 TRUE
2 x != 10 FALSE
3 x >= 20 FALSE
4 x > 0 && x < 20 TRUE

 

 

📌 boolean 이란?

boolean 은 true 혹은 false 만 저장할 수 있는 자료형입니다.

주로 if, while, switch 등 조건문에서 사용됩니다.

조건식을 평가한 결과를 저장하는 데 유용합니다.

 

 

💡 포인트 정리

1. ==, !=, >, <, >=, <= 는 조건 비교 연산자입니다.

2. &&, ||, ! 는 논리 연산자입니다.

3. boolean 은 조건 판단 결과를 담는 데 사용되는 자료형입니다.

4. 조건식을 통해 true, false 를 평가하여 프로그램 흐름을 제어할 수 있습니다.

댓글
반응형

프로그래밍을 처음 접하면 가장 먼저 만나게 되는 개념 중 하나가 자료형과 진법입니다.

이번 포스팅에서는 자바의 기본적인 자료형들과 함께

10진수와 2진수의 차이점, 그리고 왜 이걸 이해하는 게 중요한지 쉽게 정리해보겠습니다.

 

 

1️⃣ 자바의 기본 자료형

자바는 정수, 실수, 문자 등을 저장하기 위해 다양한 기본 자료형을 제공합니다.

자료형 크기 저장 범위 예시
byte 1바이트 (8비트) -128 ~ 127 byte a = 100;
short 2바이트 (16비트) -32,768 ~ 32,767 short s = 30000;
int 4바이트 (32비트) 약 ±21억 int x = 123456;
long 8바이트 (64비트) 아주 큰 수 long l = 123456789L;
float 4바이트 소수점 표현 (단정도) float f = 3.14f;
double 8바이트 소수점 표현 (배정도) double d = 3.141592;
char 2바이트 유니코드 문자 char c = 'A';
boolean 1비트처럼 취급 true or false boolean flag = true;

 

👉 참고 : 대부분의 정수 연산은 int 를 기본으로 처리합니다.

 

 

2️⃣ 컴퓨터는 숫자를 어떻게 저장할까?

사람은 보통 숫자를 10진수로 계산하지만,

컴퓨터는 모든 숫자를 2진수로 처리합니다.

표현 방식 숫자 5 숫자 10
10진수 5 10
2진수 101 1010

 

 

3️⃣ 비트와 바이트란?

단위 설명
1비트 (bit) 0 또는 1 하나
1바이트 (byte) 8비트
int (4바이트) 32비트 → 총 2³²개의 값을 표현 가능
char (2바이트) 문자 하나 저장 (유니코드 기반)

 

 

4️⃣ 출력 예제: 숫자의 2진수 보기

public class BinaryDemo {
    public static void main(String[] args) {
        int number = 10;
        System.out.println("10진수: " + number);
        System.out.println("2진수: " + Integer.toBinaryString(number));
    }
}

 

실행 결과:

10진수: 10  
2진수: 1010

 

👉 Integer.toBinaryString(숫자) 를 쓰면 2진수 문자열을 출력할 수 있습니다.

 

 

5️⃣ 왜 2진수를 이해해야 하나요?

이유 설명
메모리 최적화 비트 단위로 얼마나 많은 값을 저장할 수 있는지 이해해야 함
연산 제어 비트 연산, 시프트 연산 등을 다루려면 2진수 개념 필수
디버깅 & 시스템 이해 특정 플래그 설정, 상태 체크 등에 2진수 사용 많음

 

 

✅ 마무리 정리!

자바는 크기와 목적에 맞게 다양한 자료형을 제공한다.

컴퓨터는 2진수 기반으로 동작하며, 이를 이해하면 더 효율적인 코딩이 가능하다.

Integer.toBinaryString() 을 이용하면 쉽게 2진수로 변환할 수 있다.

댓글
반응형

✅ 자바에서 변수 값 교환하는 방법!

프로그래밍을 배우면서 가장 기본적인 로직 중 하나가 '변수 값 교환(swap)' 입니다.
예를 들어 두 변수 x, y의 값을 서로 바꾸고 싶을 때, 어떻게 해야 할까요?

이번에는 변수 값을 교환하는 가장 기초적인 방법을 예제를 통해 알아보겠습니다.

 

 

💻 예제 코드

public class Variable {
    public static void main(String[] args) {
        int x = 5, y = 3, temp;
        System.out.println("x : " + x + ", y : " + y);

        // 변수 값 교환
        temp = x;
        x = y;
        y = temp;

        System.out.println("x : " + x + ", y : " + y);
    }
}

 

 

💬 코드 설명

int x = 5, y = 3, temp;  // 변수 x, y를 선언하고 각각 5, 3으로 초기화, 임시 저장용 변수 temp를 선언합니다.

 

temp = x;  // x 의 값을 temp에 저장합니다. temp => 5

x = y; // y 의 값을 x에 저장합니다. x => 3

y = temp;  // temp 값을 y에 저장합니다. y => 5

 

👉 이렇게 함으로써 x와 y의 값을 서로 교환하게 됩니다.

 

 

📌 왜 temp 변수가 필요할까?

만약 중간 저장 없이 x = y를 해버리면,
x의 원래 값이 사라지기 때문에 y에 대입할 수 없게 됩니다.

그래서 temp를 활용해 값을 잠깐 저장한 뒤, 안전하게 교환할 수 있어요!

 

 

💡 포인트 정리

1. 두 변수의 값을 바꾸기 위해서는 temp 변수가 필요하다.

2. 교환 순서는 꼭 temp → x → y 순으로!

3. 출력 결과를 통해 바뀐 값을 확인할 수 있다.

댓글