본문 바로가기

IT/자바

JAVA, 잡아버려 | 17강! Wrapper클래스 – 기본자료형을 클래스로 변환

출처 : https://m.post.naver.com/viewer/postView.nhn?volumeNo=6759557&memberNo=30800755&vType=VERTICAL


15강에서 Java 컬렉션에 대해서 알아볼 , ArrayList클래스로 String 배열을 만들려면아래와 같이 하면 된다고 하였다.

ArrayList<String> myStringArrays = new ArrayList<String>(); // String 배열 생성

그러면, ArrayList 정수 배열을 만드려면 어떻게 해야할까?

ArrayList<int> myArrays = new ArrayList<int>(); // 잘못된 사용 < >안에는 Class만 사용가능

16강에서 배운 제네릭(generic)에서 꺽쇠(<> )안에 저장할 클래스타입을 명시한다고 하였는데, int, long, float, double 같은 것은 기본자료형으로 클래스가 아니라서 사용할 수가 없다.


위의 사례 외에도 정수나 실수 등 java가 기본으로 제공하는 자료형이 아니라 클래스 형태로 사용해야 할경우가 생긴다. 그럴 때는 int(정수)를 멤버변수로 가지고 있는 myInteger클래스를 써야하거나, double(실수)를 멤버변수로 가지고 있는 myDouble이라는 클래스를 만들어서 쓸 수도 있겠다.하지만 친절한 우리의 java는 그런 경우를 고려해서 미리 각각의 기본자료형에 해당하는 클래스를 만들어서 사용할 수 있도록 클래스들을 제공하고 있다.


이러한 클래스들을 Wrapper 클래스라고 한다. Wrapper는 랩을 씌운다는 의미이다원래 자료형에다가 랩을 씌운 클래스라고 하여 Wrapper클래스인 것이다.

Java가 제공하는 Wrapper 클래스 들

기본 자료형은 이에 대응하는 Wrapper클래스를 모두 만들어 두었다.

String  없는지 혹시 궁금해 하는 독자가 있을 수도 있다문자 1개를 뜻하는 char 기본자료형이지만 문자열인 String  자체가 이미 Java 만들어준 클래스이다기본자료형이 아니다문자열 형태의기본자료형은 원래 없기 때문에 Wrapper 변환해서  필요도 없다.


int double을 코딩할 때 자주 쓰고 있으니, Wrapper클래스도 Integer와 Double을 주로 사용하면 된다다른 클래스도 모두 사용법은 똑 같다.


그러면, Integer 위주로 사용법을 익혀보자.

Wrapper 클래스 사용법

Wrapper클래스의 사용법이라고 해봐야 기본자료형을 Wrapper 클래스로 바꾸거나 Wrapper클래스를다시 기본자료형으로 바꾸는 정도의 기능을 사용하면 된다.

 

Integer(int value)   // 생성자로 35같은 int Integer 바꾼다.

Integer(String s)     // 생성자로 “35”같은 String Integer 바꾼다

static int parseInt(String s) // 정적메소드로 “35”같은 String 정수 int 바꿔 준다.

static String toString(int i)  // 정적메소드로 35 “35” 바꿔준다.

String toString()  // Intger클래스 안에 담긴 정수(35) “35” 바꾼다.

int intValue()  // Integer클래스 안에 담긴 정수(35) 35 바꾼다

.


3번째, 4번째 것인 parseInt toString은 숫자(int)와 문자열(String)간에 서로 바꿀 때 사용될 일이 많다.


물론 Integer와 int간의 변환도 많이 사용이 되지만 Java가 int와 Integer는 자동으로 변환해 주기 때문에 많이 안쓰게 된다이 부분은 아래서 다시 다루고 위의 메소드 사용법은 다음과 같다.

package exem.javastudy17; public class WrapperUse { public static void main(String[] args) { int age = Integer.parseInt("35"); // 정수 문자열 정수변환 double price = Double.parseDouble("20.3"); // 실수 문자열 실수변환 Integer myAge = new Integer(35); // int를 Integer로 변환 Integer myAge3 = new Integer("35"); // String을 Integer로 변환 int age3 = myAge3.intValue(); // Integer를 int로 변환 String strAge3 = myAge3.toString(); // Integer를 String으로 변환 String strAge = Integer.toString(35); // int를 String으로 변환 } }

Wrapper클래스와 기본자료형 간의 변환을 Boxing과 UnBoxing이라는 용어를 사용한다.

int Integer에 넣으면 Boxing, 다시 Integer를 int로 꺼내오면 UnBoxing이라고 한다.

Wrapper(감싸는 클래스)에 넣었다 뺐다하는 것을 영어로 쓴 말이다.

Integer와 int의 자동변환 
– AutoBoxing 과 AutoUnBoxing

기본자료형인 int와 Wrapper클래스인 Integer를 변환하는 것이 많이 사용되는데더 좋은 방법을 java버전 1.5문법에서 부터 제공하기 시작했다

즉, 서로 변환을 아래와 같이 직관적으로 사용할 수 있다.

package exem.javastudy17; public class AutoBoxingTest { public static void main(String[] args) { // new Integer(10)로 생성안해도 알아서 클래스 생성준다. Integer myInt = 10; // 이를 오토박싱이라고 한다. //원래는 myInt.intValue()로 써야하지만 java에서 알아서 변환되서 저장된다 int mynum = myInt; // myInt 객체를 정수 int에 바로 대입시켰다. // 이를 오토언박싱이라고 한다. } }

자동으로 서로 변환되기 때문에 Integer가 마치 기본자료형인 int인 것처럼 신경안쓰고 아래와 같이 산술연산도 맘대로 가능하다.

package exem.javastudy17; public class AutoBoxing2 { public static void main(String[] args) { Integer myInt = 30; int age = myInt * 5; Integer myInt2 = myInt++; int age3 = myInt2 + age; System.out.println("age3은 " + age3 + " myInt2는 " + myInt2); } }

마치 int 다루듯이 클래스를 신경쓰지 않고 산술연산을 자유롭게  수가 있다.


ArrayList에 Wrapper클래스 사용 예

그러면 Wrapper클래스의 사용법을 알았으니맨앞에 설명했던 ArrayList에 정수배열을 담거나 실수 배열을 담는 것으로 다시 돌아가면 아래와 같이 사용하면 될 것이다.

package exem.javastudy17; import java.util.ArrayList; public class ArrayUsageTest { public static void main(String[] args) { ArrayList<Integer> myIntArrays = new ArrayList<Integer>(); //정수 처리 for(int i=0; i<=10 ; i++){ myIntArrays.add(i); // 0부너 10까지 배열에 담는다. } System.out.println(myIntArrays.get(3)); // 4번째 값인 3을 읽어서 출력 ArrayList<Double> myDoubleArrays = new ArrayList<Double>(); //실수 처리 for(double j=0.0; j<=10.0 ; j=j+2.0){ myDoubleArrays.add(j); // 0.0, 2.0, 4.0, ..., 10.0 이 담긴다. } System.out.println(myDoubleArrays.get(3)); // 3번째 값인 6.0을 읽어서 출력 } }

내가 모르는 사이에 오토박싱오토언박싱이 자동으로 되어서 int가 Integer로 바뀌어서 저장되고다시 꺼내쓸때는 int로 바껴서 사용되는 것이다.'

다음 회차에서는 파일을 읽고 쓸 때 사용할 수 있는 Stream클래스에 대해서 다루어 보자!



'IT > 자바' 카테고리의 다른 글

PersonVo3 객체 직렬화  (0) 2018.05.23
File 클래스  (0) 2018.05.23
trhow와 throws로 예외처리를 하는 방법  (0) 2018.05.22
자바(Java) awt 패널(panel) 클래스 사용방법  (0) 2018.05.21
Random 클래스에 대해서  (0) 2018.05.19