본문 바로가기
Java

Java (8) - 형변환 (기본자료형 형변환 / 래퍼런스형 형변환 / Wrapper 클래스를 이용한 형변환 등)

by leehii 2022. 6. 9.

 

□ 형변환 (casting)

○ 개념 = 데이터의 타입을 다른 형태로 변경시키는 기법

실수->정수  
정수->실수
클래스->다른 클래스

 



○ 기본자료형 형변환

-- 종류 = 묵시적 형변환, 명시적 형변환
-- 묵시적 형변환  >> 작은 데이터를 큰 범위로 바꿀때 사용.
명시적 형변환  >> 큰 데이터를 작은 데이터로 바꿀때 사용. 명확하게 적어줘야함

실수가 소수점을 포함하므로 더 큰 데이터 // 정수는 실수보다 더 작은 데이터
int  a = 3   int b = 3.2;
b = a ; >> 묵시적 형변환
a = (int)b;  >> 명시적 형변환

 

○ 문자열을 정수로 바꿀때는 Integer.parseInt( )

문자열을 실수로 바꿀때는 Double.parseDouble( ) 메서드

반대로 수치값을 문자열로 바꾸고 싶을때는 String.valueOf( )


○ 래퍼런스형(객체형) 형변환

-- 종류 = 업캐스팅, 다운캐스팅

-- 래퍼런스형 업캐스팅(자동적)  = 사전에 상속관계가 진행되어야 가능!
변수의 데이터 타입은 부모, 실제 객체는 자식인 경우를 말함
자식클래스가 부모클래스 타입으로 형변환한다.


-- 다운캐스팅 = 업캐스팅된 것을 다시 강제적으로 명시해서 원래 타입으로 되돌리는 것! (안된것은 불가능)

 


고양이는 동물이다 (o)
동물은 고양이다 (x) 동물은 고양이만 있는게 아니므로 다운캐스팅 안됨. 런타임 오류!
고양이는 동물이다 -> 동물은 고양이다 (다운캐스팅 가능)

 

 

이런 식으로 Main에 같은 이름의 메소드를 적어줄 경우 자동으로 업캐스팅이 진행됨

 


□ Wrapper 클래스를 이용한 형변환

○ 개념

프리미티브 타입(단순 자료형)의 자료를 레퍼런스형 타입으로 변환하는 것

Wrapper클래스 프리미티브 타입으로
Integer int
Byte byte
Float float형
Double double
Chaacter character
Boolean boolean

int num1 = 1; -->> Integer w_int = new Integer(num1);

○ parse*** 메소드, value of 메소드

String str1 = "100"; -->> 문자열
String str2 = "100";

int sum = Integer.parseInt(str1) + Integer.parseInt(str2);
syso(sum); -->> 이런식으로 하면 200이 출력됨

Integer sum = Integer.value of(str1) + Integer.value of(str2);
syso(sum.intValue()); -->> 이런식으로 하면 200이 출력됨

parse*** 메소드는 리턴타입이 프리미티브 타입이고 
value of 메소드는 리턴값이 레퍼런스 타입임 (그래서 sum이 integer임)






○ 숫자를 문자열로 바꾸기


-- int i = 1234;
String str = Integer.toString(i);

○ 문자열을 숫자로 바꾸기
-- String str = "1234";
int i = Integer.parseInt(str);
Integer.parseInteger(str) int형 정수로 변환
Float.parseFloat(str) float형 부동 소수로 변환
Double.parseDouble(str) double형 부동 소수로

○ replace 함수

-- replace() 함수는 대상 문자열을 원하는 문자값으로 변환하는 함수이다.
String replace(CharSequence target, CharSequence replacement)
-- replaceAll() 함수는 대상 문자열을 원하는 문자값으로 변환하는 함수이다.
String replaceAll(String regex, String replacement)

○ 특정문자열 확인 메소드

-- 문자열이 특정 문자열로 시작하는지 확인하는 메서드
???.startsWith(searchString, length )  >>  searchString : 검색할 문자열 , length : 문자열 중 어디까지 검색할지. 선택 요소로 없으면 전체 문자열 검색함
-- 문자열이 특정 문자열로 끝나는지 확인하는 메서드
string.endsWith( searchString, length )
-- 문자열이 특정 문자열을 포함하는지 확인하는 메서드
string.includes( searchString, length )

○ substring함수와 contains 함수 

-- substring()은 문자열 안 인덱스 위치에 문자열이 일치할때 일치하는 특정 부분을 뽑아낼 경우에 사용
String a = "Hello Java";
Syso(a.substring(0, 4));  // Hell 출력
-- contains()는 문자열 안에 해당 문자열이 있을때 예외처리를 하기 위해 자주 사용 >> 문자나 문자열을 포함하는지 확인 후 true,false를 반환 (대소문자 구분함)

○ toLowerCase(); 소문자로 변경
toUpperCase(); 대문자로 변경

○ charAt(int index);
입력받은 인자값(index) 의 위치에 있는 문자를 뽑아내는 함수

 



○ 다양한 예제

       int a = 65;
        syso( (char)a ); // A
        
        char b = 'A';
        syso( (int)b ); // 65
        
        syso( b+2 ); // 67
        syso( String.valueOf(b)+2 ); // A2
        syso( b+""+2 ); // A2
        
        
        syso( (int)'9' ); // 57
        syso( (int)'7' ); // 55       
        syso( '9'+'7' ); // 112       
        syso( '9'-'7' ); // 22
        
        String c = "99";
        syso( c+2 ); // 992
        syso( Integer.parseInt(c)+2 ); // 101
        
        syso( 50+2 ); // 52
        syso( 50+""+2 ); // 502
        
        char [] d = {'a','b','c'};
        syso( new String(d) ); // abc     
        char [] e =  "abc".toCharArray();
        syso( e[2] ); //c
        
        syso( "AbCdefgHIJKLmnopq".toUpperCase() ); // ABCDEFGHIJKLMNOPQ
        syso( "AbCdefgHIJKLmnopq".toLowerCase() ); // abcdefghijklmnopq
        
        String f;
        f = Integer.toBinaryString(16); //2진법 변환
        syso(f); //10000
        f = Integer.toOctalString(16); //8진법 변환
        syso(f); //20
        f = Integer.toHexString(16); //16진법 변환
        syso(f); //10

        syso( 0.02 ); //0.02
        syso( 2/100 ); //0
        syso( (double)2/100 ); //0.02
        syso( 100*2/100 ); //2
        syso( 2/100*100 ); //0        
        syso( (double)(2/100) ); //0



6. 이클립스 형변환
0.01MB