Java는 다음 두개의 타입을 지원합니다.
- Primitive type
- Reference type
Primitive type은 int와 같은 자바에서 기본적으로 제공해주는 타입을 말합니다. 이런 타입들은 클래스가 아니며, 상속으로 재가공이 불가능한 타입입니다. Reference type은 클래스로 만들어지는 객체를 의미합니다.
여기서는 Primitive type의 Casting(형변환)에 대해서 알아보겠습니다.
Primitive type
자바는 다음과 같은 Primitive type을 지원합니다.
- byte: 8bit, signed
- short: 16bit, signed
- int: 32bit, signed
- long: 64bit, signed
- float: 32bit, signed
- double: 64bit, signed
- boolean: true or false
- char: 16bit, unsigned
Type casting (형변환)
위의 Primitive type에서 소개한 것처럼, 각각의 Type은 표현할 수 있는 데이터 크기가 다릅니다.
따라서, 서로 다른 Type의 변수를 할당하려면 Type casting을 해야 합니다. 그리고 Type casting을 할 때 경우에 따라서 데이터가 손실될 수도 있고, 손실되지 않을 수도 있습니다.
더 큰 타입으로 캐스팅
다음과 같이 더 큰 범위의 타입으로 변환하는 경우, 데이터는 손실되지 않습니다.
long
보다 float
또는 double
이 더 큰 범위의 데이터를 저장하기 때문에 데이터는 손실되지 않습니다.
이런 경우 아래와 같이 그냥 할당하면 됩니다.
long longNum = 10;
float floatNum = longNum;
double doubleNum = longNum;
System.out.println("floatNum: " + floatNum);
System.out.println("doubleNum: " + doubleNum);
실행 결과를 보면 실수로 표현되지만 원본 데이터인 10
은 보존됩니다.
floatNum: 10.0
doubleNum: 10.0
더 작은 타입으로 캐스팅
다음과 같이 더 작은 범위의 타입으로 변환하는 경우 데이터는 손실될 수 있습니다.
float
의 소수는 int
로 표현할 수 없기 때문에 변환 중에 손실됩니다.
이렇게 작은 범위로 캐스팅을 할 때 (long)
처럼 변환하려는 타입을 입력해야 합니다. 그렇지 않으면 컴파일 에러가 발생합니다.
float floatNum = 10.1f;
long longNum = (long) floatNum;
int intNum = (int) floatNum;
System.out.println("longNum: " + longNum);
System.out.println("intNum: " + intNum);
결과를 보면 정수 부분만 변환이 되었습니다. 그 외의 실수 부분은 표현할 수 없기 때문에 버려졌습니다.
longNum: 10
intNum: 10
Boxing, Unboxing
자바는 Primitive type의 데이터를 내부에 갖고 있는 Wrapper class들을 제공합니다.
- Byte
- Short
- Integer
- Long
- Float
- Double
- Boolean
Primitive type의 객체는 Reference type의 객체가 아니기 때문에, Generic 클래스를 만들 때 Primitive type을 사용하지 못할 때가 있습니다. 이런 문제를 해결하기 위해 Wrapper class를 제공합니다. 이 클래스들은 Object를 상속하는 클래스입니다.
Wrapper 클래스와 Primitive type은 아래와 같이 간단히 서로 변환할 수 있습니다. 이런 것을 Boxing, Unboxing이라고 합니다.
int intNum = 10;
Integer integerReference = intNum;
int myIntNum = integerReference;
String 변환
Wrapper class는 parseInt()
와 같이 문자열을 파싱하여 Primitive type으로 변환해주는 메소드를 제공합니다.
int intNum = Integer.parseInt("1234");
long longNum = Long.parseLong("12345");
float floatNum = Float.parseFloat("1234.5678");
double doubleNum = Double.parseDouble("1234.5678");
boolean booleanType= Boolean.parseBoolean("false");
System.out.println("intNum: " + intNum);
System.out.println("longNum: " + longNum);
System.out.println("floatNum: " + floatNum);
System.out.println("doubleNum: " + doubleNum);
System.out.println("booleanType: " + booleanType);
다음과 같이 변환됩니다.
intNum: 1234
longNum: 12345
floatNum: 1234.5677
doubleNum: 1234.5678
booleanType: false
Primitive type을 String으로 변환
Wrapper 클래스들은 다음과 같이 Primitive type을 String으로 변환하는 메소드를 제공합니다.
int intNum = 1234;
float floatNum = 1234.5678f;
String intStr = Integer.toString(intNum);
String floatStr = Float.toString(floatNum);
System.out.println("intStr: " + intStr);
System.out.println("floatStr: " + floatStr);
Output:
intStr: 1234
floatStr: 1234.5677
Wrapper를 String으로 변환
다음과 같이 Wrapper object를 String으로 변환할 수도 있습니다.
Integer intNum = 1234;
Float floatNum = 1234.5678f;
System.out.println("intStr: " + intNum.toString());
System.out.println("floatStr: " + floatNum.toString());
Output:
intStr: 1234
floatStr: 1234.5677
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기