[Java/자바]Wrapper클래스, Random클래스
안녕하세요 오늘은 자바에서 사용되는 Wrapper클래스 및 Random클래스에 대해 알아보겠습니다.
Wrapper클래스란?
Wrapper클래스란 기본 자료형들을 객체로 다루는 데 사용됩니다.
자바는 객체 지향이므로, 객체 값을 다룰 일이 많기 때문에,
일반자료형의 데이터를 객체로 변환하는 작업이 필요! 이름에서도 알 수 있다시피 일반 자료형을 Wrapper클래스 감싸준다 생각하면 됩니다.

기본자료형 | Wrapper클래스 |
boolean | Boolean 클래스 |
char | Charater클래스 |
byte | Byte클래스 |
short | Short클래스 |
int | Interger클래스 |
long | Long클래스 |
double | Double클래스 |
float | Float클래스 |
Wrapper클래스 사용방법
💡 Wrapper클래스명 객체명 = new Wrapper클래스명(값);
ex)
Inetger i = new Integer(3);
Double d = new Double(3.14);
⚠️Wrapper클래스는 jdk9 버전 이후부터는 Wrapper클래스의 생성자 사용을 권장하지 않습니다. 자세한 점은 이후에 나올 auto boxing과 auto unboxing 밑에 작성하겠습니다.
❗jdk9버전 이후로는 Wrapper클래스 객체= 일반자료형 데이터; 로 많이 사용합니다.
ex) Integer i=3;
public class WrapperEx1 {
public static void main(String[] args) {
int i=30;
Integer ii= new Integer(i);
System.out.println(ii);
double d=3.14;
Double dd=new Double(d);
System.out.println(dd);
}
}
아마 위에 코드를 똑같이 작성하시면 아래 이미지처럼 Integer에 취소선이 나올 것입니다.
위에 설명한 것처럼 자바에서는 jdk9버전 이후부터는 Wrapper클래스에서 생성자 사용을 권장하지 않기 때문에 취소선이 생성되는 것이니 에러는 아닙니다.

출력 결과

객체에 값이 잘 저장되어 출력된 것을 볼 수 있습니다.
1) 오토 박싱(Auto Boxing)
⇒오토 박싱이란 기본 자료형 값을 자동을 Wrapper클래스의 객체로 변환시켜주는 것
위에 설명한 생성자를 사용해서 Wrapper 클래스의 객체를 만드는 게 아닌
클래스명 객체명 = 값; 과같은 구조로 자동으로 객체로 변환시켜 주는 것입니다.
2) 오토 언박싱(Auto UnBoxing)
⇒Wrapper클래스의 객체 값을 자동으로 기본 자료형 값으로 변환시켜 주는 것입니다.
오토 박싱(Auto Boxing)
오토 언박싱(Auto UnBoxing)
예시 코드
public class AutoBoxing_UnBoxing {
public static void main(String[] args) {
//autoBoxing
//Integer i = new Integer(10)
Integer i=10;
Double d=3.14;
Float f=3.14f;
Character c='A';
//auto UnBoxing
int ii=i; //ii는 정수 값 , i는 객체 값
double dd=d;
float ff=f;
char cc=c;
System.out.println(ii);
System.out.println(dd);
System.out.println(ff);
System.out.println(cc);
}
}
Random클래스
Random클래스는 말 그대로 무작위의 값 즉, 랜덤 한 값을 얻고 싶을 때 사용하는 클래스입니다.
생성 방법
Random 객체명 = new Random( );
Random클래스의 생성자 종류
- Random( ):현재 시간을 seed값으로 인스턴스 생성
- Random(int seed) : 받아오는 seed 값으로 인스턴스 생성
여기서 seed값은 기준 값이라 생각하면 좋습니다. seed값을 넣어주는 이유는 컴퓨터는 난수를 생성하기 굉장히 복잡합니다. 따라서 어떠한 기준 값을 기준으로 컴퓨터는 랜덤 한 값을 만들어 내는 것이지요.
따라서 Random( )은 현재 시간을 기준 값으로 하여 랜덤한 값을 만들어 내는 것이고
Random(int seed) 괄호 안에 사용자가 값을 지정해 놓으면 그 값을 기준으로 랜덤 한 값을 컴퓨터는 만들어 냅니다.
관련 메서드 설명
int nextInt( ) | 무작위의 int 값을 반환 |
int nextInt(int n) | 0보다 크고 n보다 작은 int 값 반환 |
boolean nextBoolean( ) | 무작위의 boolean 값 반환 |
long nextLong( ) | 무작위의 Long 값 반환 |
double nextDouble( ) | 무작위의 double 값 반환 |
float nextFloat( ) | 무작위의 float값 반환 |
Random클래스 사용해보기
import java.util.Random; //import해주어야합니다.
public class Random1 {
public static void main(String[] args) {
Random random = new Random();
Random random1 = new Random();//seed:현재시간
Random random2 = new Random(2); // seed:2
Random random3 = new Random(2); //seed2
System.out.println(System.currentTimeMillis()); //현재 시간을 구하는 메서드
for (int i=0;i<5;i++) {
System.out.println("random:"+i+"번째 값: "+random.nextInt(10));
}
for (int i=0;i<5;i++) {
System.out.println("random1:"+i+"번째 값: "+random1.nextInt(10));
}
System.out.println("----------------------------------------------");
for(int i=0;i<5;i++) {
System.out.println("random2:"+i+"번째 값: "+random2.nextInt(10));
}
for(int i=0;i<5;i++) {
System.out.println("random3:"+i+"번째 값:"+random3.nextInt(10));
}
}
}
출력 결과

출력 결과를 보고 알 수 있는 점은 현재 시간을 기준으로 한 random0, random1은 시간을 기준으로 하기 때문에 서로 다른 값이 나왔습니다 하지만 random2, random3은 매개변수로 2를 넣어주어 같은 기준 값을 갖게 됩니다. 따라서 random2와 random3은 같은 랜덤 값을 갖게 되는 것이지요!
자 오늘은 Wrapper클래스와 Random클래스에 대해 알아보았습니다.
이상으로 글 마치겠습니다.
글 읽어주셔서 감사합니다.
