본문 바로가기

아옳옳의 코딩공부/아옳옳 자바코딩공부

2021-04-07 자바공부 (Wrapper 클래스 , BigInteger클래스 , math 클래스 , )

반응형

기본자료형을 객체자료형으로 변경하여 사용하거나 객체자료형을 기본자료형으로 변경할때 사용한다 

 

위 그림을 보면 ShowData를 호출하면서 기본자료형인 int 를 넘겨주고 있다. 하지만 ShowData는 객체자료형을 받는 Object형으로 되어 있어서 사용을 못하는게 정상이다. 하지만 이것을 가능하게 해주는것이 바로 Wrapper 클래스 이다 .

 

Integer in = new Integer(7);
ShowData(in);
ShowData(new Integer(3));

이렇게 사용해주면된다 . 

 

 

이렇게 사용을 하는것인데 

이렇게 Warpper인스턴스로 감싸는것을 Boxing , Warpper인스턴스에서 저장된 데이터를 꺼내는것을 UnBoxing이라함

하지만 이렇게 하면 귀찮고 번거롭기 때문에 자바에서는 자동으로 일을 처리해주는 AutoBoxing 과 AutoUnBoxing 이 있다 

 

래퍼 클래스 다양한 Static 메소드 

	public static void main(String[] args) {		
		// 클래스 메소드를 통한 인스턴스 생성 방법 두 가지 
		// 숫자기반 Integer 인스턴스 생성
		Integer n1 = Integer.valueOf(5); 
		// 문자열 기반 Integer 인스턴스 생성
		Integer n2 = Integer.valueOf("1024"); 
	
		// 대소 비교와 합을 계산 하는 클래스 메소드 
		System.out.println("큰 수 :" + Integer.max(n1,n2) );
		System.out.println("작은 수 :" + Integer.min(n1,n2) );
		System.out.println("합 수 :" + Integer.sum(n1,n2) );
		System.out.println();
		
		//정수에 대한 2진, 8진 16진수 표현 결과를 반환하는 크래스 메소드 
		System.out.println(Integer.toBinaryString(12));
		System.out.println(Integer.toOctalString(12));
		System.out.println(Integer.toHexString(12));
		
	}
}

결과 값 

큰 수 :1024    
작은 수 :5
합 수 :1029
1100
14
c

 

 


BigInteger클래스 (일반적인 상황에서 그렇게 큰 숫자를 사용할 일이 없어 활용도 낮음 ) 

long형보다 큰 숫자를 처리할때 사용하는 클래스 

활용도 낮으니 나중에 필요하다면 교제 참고 

 


BigDecimal 클래스 

오차 없는 실수의 표현을 위한 클래스 


math 클래스 ( 수학적 계산을 써야할때 사용하는 메소드 ) 계산기 어플이 아니라면 활용도 낮음 

math 클래스 전부 static으로 되어있다. 인스턴스해서 사용하는것 아니다 . 

 

 

활용도 낮으니 나중에 필요하다면 교제 참고 


Random 클래스

여기서 봐야할 부분은 2번쨰 줄이다. 시드를 줘서 할 수도 있지만 시드를 주게되면 난수를 만드ㅡㄴ ㅇ

 

이것을 가지고 간단한 실습을 한번 해보겠다. 

사용자에게 임의의 정수 2가지를 받고  그 두가지르 포함 하여 그 사이에 있는 난수 10개를 생성하고 출력하는 것을 만들어 보겠다 .

 

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);

		System.out.println("1임의의 정수를 입력해주세요");
		int a = scanner.nextInt();
		System.out.println("2임의의 정수를 입력해주세요");
		int z = scanner.nextInt();
		System.out.println("=====================");

		
		Random random = new Random();
		// 두번째에 더 큰수를 입력하였을때 
		if (a < z) {
			//10번 반복
			for (int i = 0; i < 10; i++) {
				//0~z 까지의 난수를 하나 받는다 
				int b = random.nextInt(z);
				//받은 난수가 a보다 적다면 커질때까지 난수를 받겠다. 
				while (b < a) {b = random.nextInt(z);}	
				//출력 
				System.out.println(b);
			}
		// 첫번째에 더 큰수를 입력 하였을때 
		} else if (z < a) {
			//10번 반복
			for (int i = 0; i < 10; i++) {
				//0~a 까지의 난수를 하나 받는다 
				int b = random.nextInt(a);
				//받은 난수가 a보다 적다면 커질때까지 난수를 받겠다. 
				while (b < z) {b = random.nextInt(a);}
				//출력
				System.out.println(b);
			}
		}
	}
}
/////////////////// 강사님께서 짠 짧은 알고리즘 코드 ////////////

        int min ,max; // 스캐너로 받은 값 큰 값과 작은값 정의
		if (a > z ) {
			min = z;  
			max = a;
		}else {
			min = a;
			max = z;
		}	// 작은값은 10 높은값은 20 이라 가정 
		int rn; 
		for(int i = 0 ; i < 10 ; i++) {
			rn = min; // 작은 값넣어줌  10이다 
			rn += random.nextInt(max - min +1); // 20 - 10 + 1 // 0부터 11 까지의 값을 가져옴
            // 우리는 10에서 부터 20 사이의 난수 이니 가져온 값에 10 더해주면 끝! 
			System.out.println(rn);			
		}

이렇게 했을때 결과 값 

이렇게 먼저 큰수를 입력하던지 와 상관없이 내가 입력한 값을 벗어나지 않고 출력되는 것을 볼수 있다. 

반응형