
📍 개요
◾ 자동 타입 변환과 강제 타입 변환에 대해 이해하고 실습해보는 시간을 가졌습니다.
◾ 문자열을 기본 데이터 타입으로 변환하고 숫자를 문자열을 변환하는 메서드를 학습해보았습니다.
1️⃣ 자동 타입 변환과 강제 타입 변환
📁 자동 타입 변환
작은 데이터 타입에서 큰 데이터 타입으로 변환할 때에는 자동으로 타입이 변환됩니다.
int intValue = 42;
double doubleValue = intValue; // 자동으로 double로 변환
📁 강제 타입 변환
큰 데이터 타입에서 작은 데이터 타입으로 변환할 때는 명시적인 캐스팅이 필요합니다.
double doubleValue = 3.14;
int intValue = (int) doubleValue; // 강제 캐스팅으로 소수점 이하가 잘림
2️⃣ 오토박싱과 언박싱
▪️ 오토박싱은 기본 데이터 타입(int, long, float, double 등)을
래퍼 클래스 객체(Integer, Long, Float, Double 등)로 자동으로 변환해 주는 기능입니다.
▪️ 언박싱은 래퍼 클래스 객체를 기본 데이터 타입으로 자동으로 변환해 주는 기능입니다.
🤔 오토박싱과 언박싱을 이용하기 위해 개발자가 코드에 무언가를 선언해주는 건 줄 알았는데
자바 컴파일러가 자동으로 처리해준다고 합니다.
즉, 개발자는 별도로 선언하거나 명시적인 변환 코드를 작성할 필요가 없는 것이죠!
3️⃣ 문자열 → 숫자 변환
▪️ `parse()`
문자열을 기본 데이터 타입으로 변환
ex) Integer.parseInt("123"), Double.parseDouble("12.34")
▪️ `valueOf()`
문자열을 래퍼 클래스로 변환
ex) Integer.valueOf("123"), Double.valueOf("12.34")
💬 문자열 → 기본 데이터 타입으로 변환할 때 접미사 오류
String str1 = "12345.5F";
float floatString = Float.parseFloat(str1);
String str2 = "12345L";
long longString = Long.parseLong(str2);
▪️ `Float.parseFloat(String s)`
F나 f 접미사를 무시하고 숫자 부분만을 float 값으로 변환합니다.
접미사가 있더라도 변환 과정에서 문제가 발생하지 않습니다.
▪️ `Long.parseLong(String s)`
L이나 l 접미사를 허용하지 않으며, 접미사가 포함된 문자열을 변환하려고 하면 NumberFormatException이 발생합니다.
L 접미사는 숫자 리터럴에서만 사용되며, 문자열 변환에서는 오류를 일으킵니다.
4️⃣ 숫자 → 문자열 변환
값을 문자열로 변환하는 방법에는 여러 가지가 있습니다.
▪️`valueOf()` 메서드(클래스의 정적 메서드)
다양한 데이터 타입을 문자열로 변환
ex) int, boolean, char 등
기본 데이터 타입과 객체 타입을 처리
public class ValueOfExample {
public static void main(String[] args) {
int number = 42; // 정수형 변수
boolean flag = true; // 불리언형 변수
char letter = 'X'; // 문자형 변수
// 기본 타입을 문자열로 변환
String numStr = String.valueOf(number); // "42"
String flagStr = String.valueOf(flag); // "true"
String letterStr = String.valueOf(letter); // "X"
// 변환된 문자열 결과 출력
System.out.println(numStr); // 42
System.out.println(flagStr); // true
System.out.println(letterStr); // X
}
}
▪️ `toString()` 메서드(인스턴스 메서드)
객체의 정보 문자열로 변환할 때 사용
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 객체의 정보를 문자열로 반환하는 toString() 메서드 오버라이드
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
public static void main(String[] args) {
// Person 객체 생성
Person person = new Person("Alice", 30);
// toString() 메서드 호출 및 결과 출력
System.out.println(person.toString()); // Person{name='Alice', age=30}
}
}
⭐️ toString / valueOf 차이점
대상이 null일때
✔️ toString()은 NPE가 발생하고
✔️ String.valueOf()는 “null”자체를 반환해줍니다.
📝 오늘의 부트캠프 회고
1️⃣ 잘했던 점
타입 변환에 대해 자세히 공부하는 시간을 가졌는데요. 정리를 하다보니 자동/강제 타입 변환을 확실히 이해하였고 parse와 valueOf 메서드 관련해 수업시간에 여러 퀴즈를 풀어봄으로써 어떤 식으로 쓰이는지 파악할 수 있었습니다.
2️⃣ 부족했던 점
오토박싱과 언박싱이라는 용어를 처음 접해본터라 이해하는데 조금 시간이 걸렸었습니다.
3️⃣ 향후 개선 방향
이해를 돕기 위한 예제 코드가 부족한 것 같아 이후로는 더 꼼꼼히 TIL을 써보도록 하겠습니다.
'☕ JAVA' 카테고리의 다른 글
[🥸JAVA] 자바 조건문(if, switch)과 반복문(for, while) 정리 (0) | 2024.09.04 |
---|---|
[🥸JAVA] 실무에서 자주 사용하 자바 연산자 종류(➰단항, 이항, 삼항!) (0) | 2024.09.03 |
[🥸JAVA] 자바 기본 타입 변수와 참조 변수 메모리 영역 차이(➰Heap, Stack) (2) | 2024.09.02 |
[🥸JAVA] 자바 변수 선언과 데이터 타입(➰오버플로우, 리터럴 접미사) (0) | 2024.08.30 |
[🥸JAVA]객체지향 프로그래밍과 JAVA 동작 원리 기초(➰JVM 구조) (0) | 2024.08.30 |