국비교육(22-23)

15일차(2)/java(12) : WrapperClass

서리/Seori 2022. 10. 26. 18:32

Step06_WrapperClass

 

 

<MainClass01>

package test.main;
/*
 * [ 기본 data type의 참조 data type ]
 * 
 * byte   : Byte
 * short  : Short
 * int    : Integer
 * long   : Long
 * 
 * float  : Float
 * double : Double
 * 
 * char   : Character
 * boolean: Boolean
 * 
 * - 때로는 기본 데이터타입의 참조 데이터타입이 필요할 때가 있다.
 * - 기본 데이터타입을 객체에 포장(boxing)하는 형태이다.
 * - boxing 과 unboxing은 자동으로 되기 때문에 프로그래머가 신경을 쓸 필요는 없다.
 */
public class MainClass01 {
	public static void main(String[] args) {
		//기본 데이터 타입
		int num1=10;
		//참조 데이터 타입
		Integer num2=10;
		
		//참조 데이터 타입이지만 기본 데이터 타입처럼 사용할 수 있다.
		int result1=num2+1;
		int result2=num1+num2;
		Integer result3=num1+num2;
		
		//문자를 숫자로 바꾸기(String type을 int type으로 바꾼 결과값 얻어내기)
		int result4=Integer.parseInt("999"); //Integer 클래스의 static 메소드 활용		
	}
}

- wrapper class 란 기본 데이터타입을 객체로 변환하기 위해서 참조 데이터타입처럼 포장하는 클래스!

 

 

[ 기본 data type의 참조 data type ]
* byte : Byte
* short : Short
* int : Integer
* long : Long
* float : Float
* double : Double
* char : Character
* boolean: Boolean

- 기본 데이터타입을 참조 데이터타입으로 바꿔서 활용해야 할 때가 있다!

- 8가지 데이터타입에 1:1로 대응되는 참조 데이터타입이 있다.

  int, char을 제외하고는 첫글자를 대문자로 바꾸면 된다.

 

ex) '가변배열'을 사용하려고 할 경우, 기본 데이터타입을 담을 수 없기 때문에 참조 데이터타입으로 포장해서 받아야 한다.

 

* Integer의 클래스 설명서: 링크

 

- 참조 데이터타입이지만 new Integer 이라고 하지 않고 바로 작성해도 된다.

- num2에는 10이라는 값이 아니라 참조값이 들어간다.
  27번 사물함 안에 10이 들어있는 것이다.

→ Integer이라는 데이터타입을 사용하면, 대입연산자로 집어넣었을 뿐인데 참조형으로 포장되었다!(autoboxing)

→ 이전과 다르게 heap영역에 객체가 생성되고 그 객체 안에 10이라는 숫자가 담긴 것이다.

 

- num2. 형태로 점을 찍으면 Integer필드에 정의된 필드/메소드가 나온다.

 

- parseInt() 메소드의 소개 페이지.(위의 Integer의 클래스 설명 내)

 문자로 된 숫자를 숫자로 바꿔주는 메소드!

 

- javascript에서는 number(); 대신 java에서는 Integer클래스의 parseInt 라는 메소드를 사용할 수 있다.

 

- static class에 들어있는 메소드는 그냥 . 만 찍어서 바로 쓸 수 있다.(new하지 않고 바로 쓸 수 있다)

 javascript의 기본함수 같은 것! java.lang 패키지 안에 들어있다면 바로 사용 가능하다.(static)

 

- 객체의참조값에 . 점을 찍어서 메소드를 사용하는 게 아니라

 클래스명에 바로 . 점 찍어서 메소드를 사용하기도 한다.

 

- 데이터타입으로도 사용되고, 클래스명으로도 활용된다.

 

public class Integer{

    public static int parseInt(String s){ }

}

 

- 위와 같이 Integer이라는 클래스에 정의된 parseInt라는 static method가 이미 있는 것이라고 생각하면 된다.

- 이 메소드를 활용하기 위해서는 new Integer (x) / Integer.parseInt(); (o)

 


 

- 참조 데이터 타입 Double 사용해보기

 

<MainClass02>

package test.main;

public class MainClass02 {
	public static void main(String[] args) {
		//기본 데이터 type double
		double num1=10.1;
		//참조 데이터 type Double
		Double num2=10.2;
		
		//참조 데이터 type Double이지만 마치 기본 데이터 type과 같이 사용할 수 있다.
		double result1=num2+10;
		double result2=num1+num2;
		Double result3=num1+num2;
		
		//문자열을 숫자(double)로 바꾸기 "10.3"=>10.3
		double result4=Double.parseDouble("10.3");
	}
}

- 참조 데이터 type으로 받으면 heap영역이 만들어지고 객체로 포장된다.
 독특한 구조이지만 그냥 참조 데이터타입이라는 것만 알고 기본 데이터타입처럼 쓰면 된다!

- parseInt, parseDouble, ...
 → 문자 형태의 숫자를 산술연산이 가능한 숫자로 바꿔주는 메소드!

 

- 디버그했을 때! 숫자가 대입되었고,.

  id(키값)가 생겨나고 heap영역이 생겨난 것을 알 수 있다