2021. 04. 14(수) TIL

eastgun_·2021년 4월 14일
0

Java

Wrapper 클래스와 Auto-Boxing/Unboxing

Wrapper 클래스

  • 기본자료형 타입에 대응되는 클래스다.

  • 기본자료형 값을 가지고 있는 객체를 만들 수 있다.

  • java.lang 패키지에 정의되어 있다.

  • 사용해야 할 때

    • 기본자료값이 아닌 객체로 저장해야할 때
    • 호출할 메소드의 매개변수가 객체를 요구할 때
    • null값이 저장될 가능성이 있을 때
    • 해당 기본자료형값에 대한 다양한 기능을 실행해야 할 때
  • 지원하는 Wrapper 클래스

    | 기본자료형 | Wrapper 클래스|
    | --- | --- |
    | byte | Byte |
    | short | Short |
    | int | Integer |
    | long | Long |
    | float | Float |
    | double | Double |
    | char | Character |
    | boolean | Boolean |

오토박싱/오토언박싱

  • JAVA 1.5버전부터 도입된 기능
  • 기본자료형 타입과 Wrapper객체 타입간의 변환을 자동으로 지원한다.
  • 오토박싱
      Integer instance = new Integer(10);  // 박싱
      
      Integer instance = 10;  // 오토박싱 
      // Integer instance = new Integer(10); // 실제로 실행되는 코드
  • 오토언박싱
      Integer instance = new Integer(10);  // 박싱
      int value = instance.intValue();      // 언박싱
    
      int value = instance; // 오토 언박싱
      // int value = instance.intValue(); // 실제로 실행되는 코드
  • 실제 활용 예제
      public class Sample {
        public void test1(int value) {
          수행문
        }
        
        public void test2(Integer instance) {
          수행문
        }
      }
      public static void main(String args) {
        Sample sample = new Sample();
    
        sample.test1(1);
        sample.test2(1); // 실제 실행되는 코드 sample.test2(new Integer(1));
      }
package wrapper;

public class WrapperApp {

	public static void main(String[] args) {
		
		int x = 10;
		// 박싱(Boxing) 기본자료형값을 객체를 생성해서 저장하는 것
		Integer i = new Integer(10);
		Integer i2 = new Integer("1000");
		
		Double d = new Double(3.14);
		Double d2 = new Double("3.14");
		
		Boolean b = new Boolean(true);
		Boolean b2 = new Boolean("true");
		
		// 오토박싱(Auto-Boxing) 변수의 타입이 Wrapper 클래스 타입일 때 자동으로
		// 해당 기본자료형과 대응되는 객체가 생성되고 그 객체에 값이 저장되는 것
		Integer a1 = 100;	// Integer a = new Integer(100);
		Double a2 = 3.14;	// Double a2 = new Double(3.14);
		Boolean a3 = true;	// Boolean a3 = new Boolean(true);
		
		// 오토언박싱(Auto-unBoxing) 변수의 타입이 기본자료형 타입일 때
		// Wrapper 타입의 객체에서 기본자료형값만 가져오는 것
		int x1 = a1;	// a1의 Wrapper객체에 대한 참조변수다.
						// a1이 참조하는 Wrapper객체에 저장된 값만 가져와서 
						// 변수 x1에 대입된다.
		
		double x2 = a2;
		boolean x3 = a3;
	}
}
package wrapper;

public class WrapperApp2 {

	public static void main(String[] args) {
		
		// 오토박싱이 지원되기 때문에
		// 기본자료형 탕비의 변수에 값을 대입하는 것과 Wrapper 타입의 변수에 값을 대입하는 것을
		// 구분없이 사용할 수 있다.
		String name = "홍길동";
		int age = 30;
		Double height = 180.4; // Double height = new Double(180.4);
		double weight = 78.2;
		Boolean isMarried = false;
		Integer savedPoint = 10000;
		
		// 오토박싱이 지원되기 때문에
		// Wrapper 타입의 배열에 기본자료형 값만 적어도 된다.
		Integer[] scores = {100, 100, 80, 100, 50, 60, 70, 80, 50, 60};
		// Integer[] scores = {new Interger(100), new Interger(90), new Interger(80), ...}
		
		
		int total1 = 0;
		for (Integer score : scores) {
			// 오토언박싱이 지원되기 때문에
			// Wrapper타입의 참조변수가 사칙연산자를 만나면 Wrapper 객체에 저장된 값만 가져와서
			// 사칙연산에 사용된다.
			total1 += score;	
		}
		
		System.out.println("총합: " + total1);
		
		int total2 = 0;
		// 오토언박싱이 지원되기 때문에
		// 배열에서 순서대로 조회되는 것이 Wrapper(래퍼)타입의 객체라면
		// 그 타입과 대응되는 기본자료형 타입의 변수를 선언해서 값만 사용할 수 있다.
		for (int score : scores) {
			total2 += score;
		}
		System.out.println("총합: " + total2);
	}
}
package wrapper;

public class WrapperApp3 {

	public static void main(String[] args) {
		
		// 문자열을 정수, 실수로 변환하기
		String value1 = "150000";
		String value2 = "3";
		String value3 = "0.01";
		
		int price = Integer.parseInt(value1);
		int amount = Integer.parseInt(value2);
		double savePointRate = Double.parseDouble(value3);
		
		int total = price * amount;
		int point = (int) (total * savePointRate);
		
		System.out.println("총 구매가격 : " + total);
		System.out.println("적립포인트 : " + point);
		
		// 오류 상황
		// java.lang.NumberFormatException
		// int value3 = Integer.parseInt(""); 		// 빈 문자열은 숫자로 변환할 수 없다.
		// int value3 = Integer.parseInt(" ");		// 공백이 포함된 문자열은 숫자로 변환할 수 없다.
		// int value3 = Integer.parseInt("가나다");	// 숫자가 아닌 문자들은 숫자로 변환할 수 없다.
		// int value3 = Integer.parseInt("1234가"); // 숫자가 아닌 문자가 한 개라도 포함되면 숫자로 변환할 수 없다.
		// int value3 = Integer.parseInt("123 "); 	// 공백이 포함되어 있으면 숫자로 변환할 수 없다.  
		// int value3 = Integer.parseInt("3.14");	// 실수형식의 문자열은 정수로 변환할 수 없다.
		
		
	}
}
package wrapper;

public class WrapperApp4 {

	public static void main(String[] args) {
		System.out.println(Byte.MIN_VALUE);
		System.out.println(Byte.MAX_VALUE);
		System.out.println(Short.MIN_VALUE);
		System.out.println(Short.MAX_VALUE);
		System.out.println(Integer.MIN_VALUE);
		System.out.println(Integer.MAX_VALUE);
		System.out.println(Long.MIN_VALUE);
		System.out.println(Long.MAX_VALUE);
	}
}

Date 클래스

  • 시스템의 현재 날짜와 시간정보를 표현하는 클래스다.
  • java.util 패키지에 있다.
  • 주요 생성자
    • new Date()
      • 현재 날짜와 시간정보가 포함된 객체가 생성된다.
    • new Date(long 유닉스타임)
      • 지정된 유닉스타임에 해당하는 날짜와 시간정보가 포함된 객체가 생성된다.
      // 시스템의 현재 날짜정보와 시간정보가 포함된 Date객체가 생성된다.
      Date now = new Date();
      
      // 지정된 유닉스타임(long값)에 해당하는 날짜와 시간정보가 포함된 객체가 생성된다.
      Date date = new Date(0);    
  • 주요 메소드
    • boolean after(Date when)
      • 지정된 날짜보다 이후 날짜인지 확인한다.
    • boolean before(Date when)
      • 지정된 날짜보다 이전 날짜인지 확인한다.
    • int compareTo(Date other)
      • 지정된 날짜와 순서를 비교한다.
    • long getTime()
      • 유닉스타임을 반환한다.
      Date now = new Date();
      long unxTime = now.getTime(); // 1970년 1월 1일 0시 0분 0초부터 현재 싯점까지의 시간을 1/1000초 단위로 환산한 값이 반환된다.
package date;

import java.util.Date;

public class DateApp {

	public static void main(String[] args) {
		// java.util.Date
		// - 날짜와 시간정보를 표현하는 객체다.
		
		// 자바가 실행되고 있는 시스템의 현재 날짜와 현재 시간정보를 가진 객체가 생성된다
		Date now = new Date();
		System.out.println(now);
		
		// 유닉스타입값 조회하기
		long time = now.getTime();
		System.out.println(time);
		
		// 유닉스타임값 조회하기2
		long time2 = System.currentTimeMillis();
		System.out.println(time2);
	}
}

포맷팅

  • 날짜와 문자, 숫자와 문자간의 상호 변환을 지원한다.
    • 날짜(Date)를 지정된 패턴의 문자열(String)로 변환한다.
    • 숫자(int, long, double)를 지정된 패턴의 문자열(String)로 변환한다.
    • 날짜형식으로 작성된 문자열(String)을 날짜(Date)로 변환한다.
    • 숫자형식으로 작성된 문자열(String)을 숫자(int, long, double)로 변환한다.

날짜 포맷팅

  • SimpleDateFormat

    • Date를 지정된 형식의 String으로 변환한다.
    • 날짜 형식의 String을 Date로 변환한다.
  • 생성자

    • SimpleDateFormat(String pattern)
      • 지정된 패턴에 대한 포맷팅을 지원하는 객체를 생성한다.
  • 주요

    • String format(Date date)
      • Date를 지정된 패턴의 String으로 반환한다.
    • Date parse(String text)
      • 지정된 형식의 텍스트를 Date로 변환해서 반환한다.
  • 주요 형식 기호

    | 기호 | 설명 |
    | --- | --- |
    | y | 년 |
    | M | 월 |
    | d | 일 |
    | E | 요일 |
    | a | 오전/오후 |
    | H | 시간(0~23) |
    | h | 시간(1~12) |
    | m | 분(0~59) |
    | s | 초(0~59) |
    | S | 밀리초(0~999) |

  • 사용 예제

    • Date를 지정된 패턴의 문자열로 변환하기
      Date now = new Date();
      
      SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd");
      String value1 = sdf1.format(now);  // "2020/10/20"
      
      SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy년 M월 d일 EEEE");
      String value2 = sdf2.format(now);  // "2020년 10월 20일 화요일"
      
      SimpleDateFormat sdf3 = new SimpleDateFormat("HH:mm:ss");
      String value3 = sdf3.format(now);  // "21:41:31"
      
      SimpleDateFormat sdf4 = new SimpleDateFormat("a h시 m분 s초");
      String value4 = sdf4.format(now);  // "오후 9시 42분 31초"
    • 문자열을 Date로 변환하기
      String text = "2020/10/20 21:42:31";
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/ss HH:mm:ss");
      Date day = sdf.parse(text);  // text변수에 저장된 날짜에 해당하는 Date객체가 생성된다.

숫자

  • DecimalFormat

    • 숫자(정수와 실수)를 지정된 패턴의 String으로 변환한다.
    • 숫자형식의 String을 숫자로 변환한다.
  • 생성자

    • DecimalFormat(String pattern)
      • 지정된 패턴에 대한 포맷팅을 지원하는 객체를 생성한다.
  • 주요 메소드

    • String format(double number)
    • String format(long number)
      • 숫자를 지정한 형식의 텍스트로 변환한다.
    • Number format(String text)
      • 지정된 형식의 텍스트를 숫자로 변환
  • 주요 형식 기호

    | 기호 | 설명 |
    | --- | --- |
    | 0 | 숫자 |
    | # | 숫자 |
    | . | 소숫점 |
    | , | 자리수 구분 |

  • 사용 예제

  DecimalFormat df1 = new DecimalFormat("##,###");
  String text1 = df1.format(12345678); // "12,345,678"
  
  DecimalFormat df2 = new DecimalFormat("##,###.##");
  String text2 = df2.format(123.456);  // "123.46"
  
  DecimalFormat df3 = new DecimalFormat("###.00");
  String text3 = df3.format(12.4); // "12.40"
  
  DecimalFormat df4 = new DecimalFormat("###.##");
  String text4 = df4.format(12.4); // "12.4"

String과 숫자

  • 정수나 실수를 문자열로 변환하기
    • String String.valueOf(int number)
    • String String.valueOf(long number)
    • String String.vauleOf(double)
  • 문자열을 숫자로 변환하기
    • int Integer.parseInt(String text)
    • long Long.parseLong(String text)
    • double Double.parseDouble(String text)
  • 사용 예제
      String text1 = String.valueOf(123); // "123"
      String text2 = String.valueOf(10000000000L); // "10000000000"
      String text3 = String.valueOf(3.14); // "3.14"
      
      int number1 = Integer.parseInt("123"); // 123
      long number2 = Long.parseLong("10000000000"); // 10000000000
      double number3 = Double.parseDouble("3.14");  // 3.14
profile
게으르고 싶은 예비 개발자입니다.

0개의 댓글