코딩이란 무엇일까

[Java/자바]Wrapper클래스, Random클래스 본문

Java

[Java/자바]Wrapper클래스, Random클래스

둥구는 지굴다 2022. 10. 7. 15:23

안녕하세요 오늘은 자바에서 사용되는 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클래스에 대해 알아보았습니다.
이상으로 글 마치겠습니다.
글 읽어주셔서 감사합니다.

Comments