[FirstJava] 2.2 리터럴과 형 변환 – 정수/실수/문자 리터럴, 자료형 간의 묵시적/명시적 형 변환
2.2 리터럴과 형 변환 – 정수/실수/문자 리터럴, 자료형 간의 묵시적/명시적 형 변환
숫자 하나 입력했을 뿐인데, 갑자기 에러가? 🤯 자바에서 ‘리터럴’과 ‘형 변환’ 제대로 이해하지 못하면 진짜 골치 아파요!
안녕하세요, 자바를 처음 배우는 여러분! 지난 시간엔 변수와 자료형의 개념을 배워봤죠. 오늘은 그 연장선으로, 변수에 값을 넣을 때 필수로 알아야 할 리터럴(literal)과 형 변환(type casting)에 대해 알아볼 거예요. "int num = 10.5;" 이런 코드에서 왜 오류가 나는지, 혹은 "char c = 65;"가 어떻게 동작하는지 궁금하셨던 적 있죠? 이 챕터에서 그 모든 궁금증을 해소해드릴게요. 실습 중심으로 쉽게 설명드릴 테니 끝까지 따라와 주세요! 😊
목차
1. 리터럴이란 무엇인가요? 🔤
프로그래밍에서 리터럴(Literal)이란 말은 낯설지만, 사실 우리는 매번 사용하고 있어요. 리터럴이란 고정된 값 자체를 의미해요. 예를 들어, 숫자 10
, 문자 'A'
, 문자열 "Hello"
이런 것들이 모두 리터럴이에요.
조금 더 쉽게 말하면, 개발자가 코드에 직접 입력한 값은 전부 리터럴이에요. 반대로 변수나 메서드를 통해 결과로 얻는 값은 리터럴이 아니죠.
📌 리터럴의 예시
리터럴 종류 | 예시 | 설명 |
---|---|---|
정수형 리터럴 | 10, -5, 0 | int, long 등 정수형 변수에 사용 |
실수형 리터럴 | 3.14, -0.5 | float, double 등 실수형 변수에 사용 |
문자 리터럴 | 'A', '가' | char 타입에 사용, 반드시 작은따옴표('') |
문자열 리터럴 | "Hello", "Java" | String 클래스에서 사용 |
논리 리터럴 | true, false | boolean 타입에 사용 |
💡 꼭 알아두세요!
- 정수형 리터럴은 기본적으로
int
로 간주됩니다.long
으로 저장하고 싶다면 숫자 뒤에L
또는l
을 붙여야 해요. - 실수형 리터럴은 기본적으로
double
타입입니다.float
으로 선언하려면f
또는F
를 붙여야 해요. -
char
형 리터럴은 작은따옴표(' '
)로 감싸야 하며, 반드시 하나의 문자만 포함해야 해요.
자, 여기까지가 리터럴의 기본이에요! 다음 섹션에서는 실제로 이런 리터럴들이 변수와 어떻게 어울리는지, 그리고 리터럴이 자료형과 어떻게 관계되는지 살펴볼게요!
2. 정수, 실수, 문자, 논리 리터럴의 종류 📊
자바에서는 다양한 형태의 리터럴을 사용할 수 있어요. 변수에 대입하는 값이 숫자인지, 문자나 문자열인지, 또는 true/false인지에 따라 각기 다른 형식과 규칙이 적용됩니다. 이 섹션에서는 각각의 리터럴을 유형별로 정리해볼게요.
📌 기본 리터럴 종류와 표현 방식
리터럴 유형 | 예시 | 설명 |
---|---|---|
정수형 | 10, -7, 0xFF, 0b1010 | 10진수, 16진수(0x), 2진수(0b) 등 다양한 형태 사용 가능 |
실수형 | 3.14, -0.001, 1.0e3 | 기본적으로 double, 접미사 f/F로 float 표현 |
문자형 | 'A', '9', '가' | char 타입은 작은따옴표로 감싼 단일 문자 |
문자열형 | "Hello", "123", "자바" | String 객체에 저장되는 문자열 값 |
논리형 | true, false | boolean 타입에서 조건문 등에 사용 |
✅ 리터럴 표현 시 주의할 점
- 정수형에서 큰 수를 다룰 때는 반드시
L
을 붙여long
타입으로 표현해야 오류가 없어요. - 실수형에서
float
을 사용하려면 접미사f
또는F
를 반드시 붙여야 해요. 안 그러면double
로 인식돼요! -
char
는 정수로 변환도 가능해요. 예를 들어char c = 65;
는'A'
로 해석됩니다!
이제 리터럴을 어떤 자료형에서 어떻게 표현하는지 좀 더 명확해지셨죠? 다음 장에서는 이런 리터럴들이 실제 자료형과 어떻게 연결되는지 구체적인 예제로 살펴볼게요.
3. 자바의 자료형과 리터럴 매칭 예시 🧩
리터럴을 정확히 이해하려면, 자바의 기본 자료형(primitive type)과 어떻게 매칭되는지를 아는 것이 매우 중요해요. 어떤 값이 어떤 타입과 잘 어울리는지 명확하게 정리해볼게요.
📌 기본형과 리터럴 매칭 표
자료형 | 예시 리터럴 | 설명 |
---|---|---|
byte | 100 | -128~127 범위의 정수 리터럴만 가능 |
short | 10000 | 16비트 정수 범위 내에서 사용 가능 |
int | 123456 | 기본 정수형, 별도 접미사 없이 사용 |
long | 12345678900L | 끝에 L 또는 l 붙여야 long으로 인식 |
float | 3.14f | 접미사 f/F 필수 (소수점 표현) |
double | 3.14 | 기본 실수형, 접미사 필요 없음 |
char | 'A' | 한 글자만 작은따옴표로 감쌈 |
boolean | true, false | 참/거짓만 표현 가능 |
💡 리터럴을 변수에 넣을 때 주의사항
-
int i = 3.14;
처럼 실수형 리터럴을 정수형 변수에 넣으면 오류가 발생해요. -
char c = 'AB';
처럼 char에는 한 글자만 넣을 수 있어요. 문자열은String
으로 써야 해요.
변수 선언과 리터럴 간의 매칭을 정확히 알면 컴파일 오류 없이 안전한 코드를 작성할 수 있어요. 다음은 이 리터럴과 자료형이 서로 변환되는 과정, 형 변환(type casting)에 대해 본격적으로 다뤄보겠습니다!
4. 묵시적 형 변환이란? (자동 형 변환) 🔄
프로그래밍을 하다 보면 서로 다른 자료형끼리 연산하거나 값을 대입하는 경우가 생기는데요, 이때 자바는 자동으로 형 변환을 해주는 경우가 있어요. 이를 묵시적 형 변환(Implicit Type Conversion)이라고 해요.
쉽게 말해, 작은 범위 → 큰 범위로는 자바가 자동으로 변환을 해준다는 이야기예요. 예를 들어, int
는 long
으로, float
는 double
로 변환돼요. 우리가 따로 뭔가를 하지 않아도요!
📌 묵시적 형 변환 규칙
-
byte → short → int → long → float → double
순으로 변환 가능해요. - 문자형
char
도int
로 자동 변환될 수 있어요.
💡 예제: 자동 형 변환
int i = 100;
long l = i; // int → long 자동 형 변환
float f = l; // long → float 자동 형 변환
위 코드처럼 int
값을 long
변수에 대입해도 문제 없이 작동해요. 더 큰 그릇으로 옮기는 느낌이라고 생각하면 이해가 쉬워요.
⚠️ 자동 변환되지 않는 경우
-
double d = 3.14f;
은 가능하지만,float f = 3.14;
는 오류 발생! 작은 그릇에 큰 값은 안 들어가요.
그럼 이 다음은 반대로 명시적 형 변환, 즉 강제로 자료형을 바꾸는 방법에 대해 알아볼 거예요. 이건 좀 더 주의가 필요하니 꼭 집중해주세요!
5. 명시적 형 변환이란? (강제 캐스팅) 🛠️
이번에는 자바에서 명시적 형 변환(Explicit Type Casting)에 대해 알아볼게요. 자동 형 변환과 반대로, 작은 자료형으로 바꿔야 할 경우엔 개발자가 직접 의도를 명확히 표시해줘야 해요. 이걸 캐스팅(casting)
이라고 부릅니다.
즉, 큰 자료형을 작은 자료형으로 바꾸는 행위는 데이터 손실 가능성이 있기 때문에 자바가 자동으로 하지 않아요. 대신 괄호 ()
를 이용해 우리가 직접 명령해야 하죠.
💡 기본 문법
변수 = (변환할_자료형) 값;
예를 들어 double
값을 int
로 바꾸고 싶다면 이렇게 해요: int i = (int) 3.14;
→ 결과는 3
(소수점 이하 절삭!)
📌 명시적 형 변환 예제
double d = 9.99;
int i = (int) d; // d의 값 9.99가 9로 변환됨
long l = 1000L;
short s = (short) l; // long에서 short로 변환
char c = (char) 65; // 숫자 65는 문자 'A'로 변환
⚠️ 주의사항
- 데이터 손실 가능성:
(int) 3.99
→3
처럼 소수점은 버려짐 - 범위 초과 문제:
short s = (short) 33000;
은 잘못된 값이 저장될 수 있어요! - 형 변환은 코드 가독성을 떨어뜨릴 수 있어서 최소화하는 것이 좋아요.
명시적 형 변환은 꼭 필요한 경우에만 사용하는 것이 좋습니다. 코드의 안정성과 예측 가능성을 해칠 수 있기 때문이죠. 이제 자동 vs 명시적 형 변환의 차이도 확실해졌죠? 😎
6. 형 변환 실습 예제 모음 ✍️
이제 개념은 다 배웠으니, 진짜 중요한 실습 시간입니다! 🔧 묵시적 형 변환과 명시적 형 변환을 어떻게 활용하는지 직접 코드로 확인해 볼게요. 하나씩 실행하면서 자료형 간의 관계를 직접 체감해보세요.
🧪 예제 1: 묵시적 형 변환
byte a = 10;
int b = a; // byte → int 자동 형 변환
float c = b; // int → float 자동 형 변환
System.out.println("b = " + b); // 10
System.out.println("c = " + c); // 10.0
위 코드처럼 작은 자료형 → 큰 자료형으로는 자바가 스스로 형을 맞춰줍니다. 개발자가 캐스팅을 명시할 필요가 없어요.
🧪 예제 2: 명시적 형 변환
double d = 7.89;
int i = (int) d; // double → int 명시적 형 변환 (소수점 버림)
System.out.println("d = " + d); // 7.89
System.out.println("i = " + i); // 7
명시적 형 변환은 데이터 손실이 있을 수 있으니 주의해야 해요. 위 예제처럼 소수점이 버려지는 경우가 대표적이죠.
🧪 예제 3: 문자와 숫자 간의 형 변환
char c = 'A';
int code = c; // 문자 → 정수 (묵시적 변환)
char c2 = (char) 66; // 정수 → 문자 (명시적 변환)
System.out.println("code = " + code); // 65
System.out.println("c2 = " + c2); // B
자바에서는 char
도 숫자로 간주되기 때문에 묵시적 형 변환이 가능해요. 아스키(또는 유니코드) 값을 기반으로 작동하죠!
📋 형 변환 요약 리스트
- 묵시적 형 변환: 작은 자료형 → 큰 자료형 (자동 변환)
- 명시적 형 변환: 큰 자료형 → 작은 자료형 (데이터 손실 주의)
- 문자와 숫자는 서로 변환 가능 (아스키/유니코드 기반)
이제 리터럴과 형 변환의 모든 기초를 직접 실습해봤어요. 완벽하게 이해되셨다면 다음 장에서 이 내용을 종합적으로 정리하면서 마무리해볼게요! 😊
🔚 마무리하며: 리터럴과 형 변환, 이제 확실하게 이해되셨나요?
자바에서 리터럴은 변수에 직접 넣는 값 그 자체이고, 형 변환은 그 값이나 변수를 다른 자료형으로 바꿔주는 과정이에요. 묵시적 형 변환은 자바가 자동으로 해주는 ‘편리한 변환’이고, 명시적 형 변환은 프로그래머가 책임지고 직접 지시해야 하는 ‘주의가 필요한 변환’이죠.
오늘 내용을 정리해보면 다음과 같아요:
- 정수, 실수, 문자, 논리형 등 다양한 리터럴이 존재한다는 것!
- 자동 형 변환은 자료형의 크기 순서에 따라 자바가 스스로 해준다!
- 명시적 형 변환은 괄호
()
를 사용해 개발자가 직접 변환을 지시해야 한다!
이 개념을 확실히 이해하고 연습해두면, 나중에 복잡한 연산이나 타입 간의 연동에서도 훨씬 수월하게 자바를 다룰 수 있어요. 다음 시간에는 조건문과 제어문을 통해 자바의 흐름 제어 방식에 대해 배워볼게요. 놓치지 마세요! 🚀