Wrapper 클래스

Mia Lee·2022년 1월 10일
0

JAVA

목록 보기
89/98

public class Ex4 {

	public static void main(String[] args) {

		/*
		 * Wrapper 클래스
		 * 
		 */
		
		// Wrapper 클래스에서 제공되는 상수
		System.out.println("byte 타입 메모리 크기 : " + Byte.SIZE + " bit");
		System.out.println("byte 타입 메모리 크기 : " + Byte.BYTES + " byte");
		System.out.println("byte 타입 최소값 : " + Byte.MIN_VALUE);
		System.out.println("byte 타입 최대값 : " + Byte.MAX_VALUE);
		
		System.out.println("short 타입 메모리 크기 : " + Short.SIZE + " bit");
		System.out.println("short 타입 메모리 크기 : " + Short.BYTES + " byte");
		System.out.println("short 타입 최소값 : " + Short.MIN_VALUE);
		System.out.println("short 타입 최대값 : " + Short.MAX_VALUE);
		
		// char타입 메모리 크기 및 최소값 최대값
		System.out.println("char 타입 메모리 크기 : " + Character.SIZE + " bit");
		System.out.println("char 타입 메모리 크기 : " + Character.BYTES + " byte");
		System.out.println("char 타입 최소값 : " + (int) Character.MIN_VALUE);
		int max = Character.MIN_VALUE; // 자동 형변환
		System.out.println("char 타입 최대값 : " + (int) Character.MAX_VALUE);
		
	}

}


package ex_wrapper;

public class Ex1 {

	public static void main(String[] args) {

		/*
		 * Wrapper 클래스
		 * 
		 */
		
		// int형 기본 데이터타입 변수 num1 선언
		int num1 = 10; // 정수 10을 변수 num1에 저장
		// => Stack 영역의 변수 num1에 정수형 리터럴 10 저장됨
		
		System.out.println(num1); // 기본데이터타입 변수의 값 출력
		
		System.out.println("===================================");
		
		// Wrapper 클래스 타입인 Integer 타입 변수 n1 선언
		Integer n1 = new Integer(20); // Integer 인스턴스 생성하면서 파라미터로 정수 20 전달
		// => Heap 영역의 Integer 인스턴스에 정수 20을 저장하고
		//    해당 인스턴스 주소를 Stack 영역의 Integer 타입 변수 n1에 저장
		
		Integer n2 = new Integer("200"); // Integer 인스턴스 생성 시 파라미터로 문자열 200 전달
		// => 문자열 200을 정수형 데이터 200으로 변환하여 Integer 인스턴스에 저장
		
		Integer n3 = Integer.valueOf(2000);
		// Wrapper 클래스의 valuOf() 메서드를 호출하여 파라미터로 정수 2000 전달
		
		// 주의! 정수데이터가 아닐 경우 타입 변환에 대한 오류가 발생할 수 있음!
//		Integer n4 = new Integer("3.14");
		// => double 타입 문자열의 경우 컴파일 에러는 없으나 실행 시 예외 발생!
		
		System.out.println(n1);
		System.out.println(n2); // n2.toString() 메서드 호출과 동일
		System.out.println(n3.toString()); // 객체의 정보(실제 데이터)를 리턴하여 출력
		// Integer 타입 변수 n1/2의 값을 출력하면 주소값이 아닌 실제데이터가 출력됨
		// => toString() 메서드가 오버라이딩 되어 있으므로 저장된 실제 값을 리턴하도록 함
		
		
		
	}

}package ex_wrapper;

public class Ex2 {

	public static void main(String[] args) {

		/*
		 * 박싱과 언박싱
		 * 
		 * 기본 데이터타입은 Stack 공간에 실제 데이터 형태를 직접 저장 및 관리하지만
		 * 참조 데이터타입(객체)은 Heap 공간에 실제 데이터가 저장되며, 참조 변수가 
		 * 해당 공간의 주소값을 저장 및 관리함
		 * => 따라서, 기본 데이터타입 변수와 참조 데이터타입 변수는 서로 호환 불가능했음
		 * 그러나, JDK 1.5부터 오토 박싱, 오토 언박싱 기능이 제공되면서 두 데이터타입 간에 자동으로
		 * 변환이 되도록 지원됨!
		 *  
		 */
		
		// int형 기본 데이터타입 변수 num1 선언
		int num1 = 10;
		// Wrapper 클래스 타입인 Integer 타입 변수 n1 선언
		Integer n1;
		
		// 오토 박싱(Auto Boxing)
		// Integer 타입 변수 n1에 int 타입 변수 num1의 값을 저장하려고 할 경우
		// 1. 자바 초기에 사용하던 방법(Java 1.5 이전)
		//    => Wrapper 클래스타입 변수 = Wrapper클래스명.valueOf(기본형데이터 또는 변수);
		//       => 기본데이터타입을 Wrapper 클래스 타입 객체로 변환하여 저장
//		n1 = Integer.valueOf(num1);
//		System.out.println("기본데이터타입 num1 = " + num1);
//		System.out.println("참조데이터타입 n1 = " + n1);
		
		// 2. Java 1.5부터 사용 가능한 방법
		//    => Wrapper클래스타입 변수 = 기본형데이터 또는 변수;
		//       => 오토 박싱 기능에 의해 기본데이터타입 -> 참조데이터타입으로 변환되어 저장
		n1 = num1; // int -> Integer 타입으로 자동으로 변환(= 오토 박싱)
		System.out.println("기본데이터타입 num1 = " + num1);
		System.out.println("참조데이터타입 n1 = " + n1);
		
		System.out.println("========================================");
	
		// 오토 언박싱(Auto Unboxing)
		// 1. 자바 초기에 사용하던 방법(Java 1.5 이전)
		//    => 기본데이터타입변수 = Wrapper클래스타입변수.XXXValue();
		//       XXX은 자바의 기본데이터타입 이름(ex. intValue(), floatValue())
		
		// int형 기본데이터타입 변수 num2 선언
		int num2;
//		num2 = n1.intValue(); // Integer 타입 -> int 타입으로 변환
//		System.out.println("참조데이터타입 n1 = " + n1);
//		System.out.println("기본데이터타입 num2 = " + num2);
		
		// 2. Java 1.5 부터 사용 가능한 방법
		//    => 기본데이터타입변수 = Wrapper클래스타입변수;
		//       => 오토 언박싱 기능에 의해 참조데이터타입 -> 기본데이터타입으로 변환되어 저장
		num2 = n1; // Integer 타입 -> int 타입으로 변환(자동으로 변환됨 = 오토언박싱)
		System.out.println("참조데이터타입 n1 = " + n1);
		System.out.println("기본데이터타입 num2 = " + num2);
		
		System.out.println("========================================");
		
		Integer n2 = 30; // 기본데이터타입을 Integer 타입으로 자동으로 변환하여 저장됨
		
		Object o = n2; // Integer -> Object 타입으로 업캐스팅이 일어남(자동)
		Object o2 = 30; // int -> Integer로 오토박싱되어 Object 타입으로 업캐스팅 됨
		System.out.println(o2); // o2.toString() 생략됨(Integer 객체의 toString() 호출됨)
		
		Object o3 = new Object();
		System.out.println(o3);
		
		System.out.println("========================================");
		
		// 오토 언박싱이 일어나는 경우 => Wrapper 클래스타입과 기본데이터타입 연산 시
		Integer n3 = new Integer(40);
		int num3 = 60;
		
		System.out.println(n3 + num3); // Integer -> int로 변환하여 연산에 참여함
		// => 즉, Integer + int = int + int 형태로 연산됨
		
	}

}


























package ex_wrapper;

public class Ex3 {

	public static void main(String[] args) {

		/*
		 * 문자열 -> 기본 데이터로 변환
		 * 
		 * < 기본 문법 >
		 * Wrapper클래스명.parseXXX(문자열변수 또는 리터럴);
		 * => XXX은 자바의 기본데이터타입 이름
		 * => ex) 정수형으로 변환할 경우 : Integer.parseInt("100");
		 *    ex) 실수형으로 변환할 경우 : Double.parseDouble("3.14");
		 *    
		 */
		
		String strNum = "3.14";
		
		System.out.println(strNum + 10); // 문자열 데이터이므로 결합연산으로 동작함("3.1410")
		
		// double 타입 변수 dNum에 문자열 실수 "3.14"가 저아된 strNum값을 저장
		double dNum = Double.parseDouble(strNum);
		System.out.println(dNum);
		System.out.println(dNum + 10); // 실수형 데이터이므로 산술연산으로 동작함(13.14)
		
		// 주의! 변환 후의 데이터타입과 일치하지 않는 데이터를 변환하려할 경우
		// NumberFormatException 이라는 예외가 발생하여 변환되지 않는다!
		int iNum = Integer.parseInt(strNum);
		// => double 타입 데이터를 int형으로 변환할 수 없으므로 오류 발생!
		
	}

}



package ex_wrapper;

public class Ex4 {

	public static void main(String[] args) {

		/*
		 * Wrapper 클래스의 다양한 메서드
		 * - Wrapper 클래스 타입을 활용하면 기본 데이터타입들을 다양하게 처리 가능
		 * - 주로 Wrapper 클래스의 static 메서드를 직접 호출하여 기본 데이터타입 데이터를
		 *   처리하도록 작업을 수행하는 형태로 사용
		 *   
		 */
		
		// Integer 클래스의 static 메서드 활용
		// 1. 두 정수에 대한 대소 관계 비교
		int num1 = 10, num2 = 20;
		
		int num3 = 30;
		
		System.out.println("num1과 num2 중 큰 값 : " + Integer.max(num1, num2));
		System.out.println("num1과 num2 중 작은 값 : " + Integer.min(num1, num2));
		
		System.out.println("num1과 num2, num3 중 큰 값 : " + Integer.max(Integer.max(num1, num2), num3));
		
		System.out.println("num1과 num2가 같은가 : " + (num1 == num2));
		Integer n1 = num1; // 오토 박싱 적용
		Integer n2 = num2;
		System.out.println("n1과 n2가 같은가 : " + n1.equals(n2));
		
		// 2. 어떤 정수에 대한 진법 변환
		// => 해당 진법의 문자열 형태로 리턴하는 메서드를 사용 : toXXXString()
		System.out.println("10진수 num1에 대한 2진수 변환 : " + Integer.toBinaryString(num1));
		System.out.println("10진수 num1에 대한 8진수 변환 : " + Integer.toOctalString(num1));
		System.out.println("10진수 num1에 대한 16진수 변환 : " + Integer.toHexString(num1));
		
		System.out.println("=============================");
		
		// Character 클래스의 메서드 활용
		// => 주로 특정 문자에 대한 판별을 Character.isXXX() 메서드로 수행하거나
		//    특정 문자로 변환을 Character.toXXX() 메서드로 수행
		char ch = '!';
		
		// 입력받은 문자 ch에 대한 대문자, 소문자, 숫자, 기타(특수문장 등)를 판별
		// 1. 기본 데이터타입 형태에서 정수 범위를 사용하여 그대로 판별할 경우
		if (ch >= 'A' && ch <= 'Z') { // 대문자일 경우
			System.out.println(ch + " : 대문자!");
			
		} else if (ch >= 'a' && ch <= 'z') { // 소문자일 경우
			System.out.println(ch + " : 소문자!");
			
		} else if (ch >= '0' && ch <= '9') { // 숫자일 경우
			System.out.println(ch + " : 숫자!");
			
		} else {
			System.out.println(ch + " : 기타문자!");
			
		}
		
		// 2. Character 클래스의 isXXX() 메서드를 호출하여 판별할 경우
		ch = 'A';
		System.out.println(ch + " 문자는 대문자인가? " + Character.isUpperCase(ch));
		ch = 'a';
		System.out.println(ch + " 문자는 소문자인가? " + Character.isLowerCase(ch));
		ch = '0';
		System.out.println(ch + " 문자는 숫자(0~9)인가? " + Character.isDigit(ch));
		ch = ' ';
		System.out.println(ch + " 문자는 공백문자인가? " + Character.isSpace(ch));
		// => deprecated 처리된 메서드 : 사용은 가능하지만 보안 상의 이유나 다른 메서드 제공등으로 인해
		//    현재는 사용하는 것을 추천하지 않는 메서드
		// => 메서드 설명에 Deprecated. Replaced by isWhitespace(char). 표시됨
		//    isWhitespace() 메서드로 대체되었음을 알려주는 메세지
		
		System.out.println(ch + " 문자는 공백문자인가? " + Character.isWhitespace(ch));
		
		// 특정 문자 변환 -> 소문자로 변경할 경우
		ch = 'A';
		System.out.println(ch + " 문자를 소문자로 변경 : " + Character.toLowerCase(ch));
		
	}

}

















0개의 댓글