열네번째날 [기본 API 클래스(3) - 포장(Wrapper) 클래스 / Math 클래스 / Random 클래스 / Date 클래스 / Calendar 클래스]
목차
1. 포장 클래스
2. Math, Random 클래스
3. Date, Calendar 클래스
포장(Wrapper) 클래스
* 포장(Wrapper) 객체 : 기본 타입(byte, char, short, int, long, float, double, boolean) 값을 갖는 객체
* 기본 타입 값을 내부에 두고 포장하는 객체
* 특징 : 포장하고 있는 기본 타입의 값은 외부에서 변경 불가 ➡️ 변경 원하면, 새로운 포장 객체 만들어야 함
* 포장 클래스 : java.lang 패키지에 포함되어 있고, 다음과 같이 기본 타입에 대응되는 클래스가 있음
박싱(Boxing)과 언박싱(Unboxing)
* 박싱(Boxing) : 기본 타입의 값을 포장 객체로 만드는 과정
* 언박싱(Unboxing): 포장 객체에서 기본 타입의 값을 얻어내는 과정
* 박싱 하는 방법
- 생성자 이용 : 포장 클래스의 생성자 매개값으로 기본 타입 or 문자열 넘겨주면 됨
- valueOf() 메소드 이용
Integer obj = Integer.valueOf(1000);
Integer obj = Integer.valueOf("1000");
* 언박싱 하는 법
- 각 포장 클래스마다 가지고 있는 클래스 호출
- 기본 타입명 + Value()
자동 박싱과 언박싱
* 자동 박싱 : 포장 클래스 타입에 기본값이 대입될 경우 발생 (ex. Integer 객체를 int 타입 변수에 대입)
Integer obj = 100;
* 자동 언박싱 : 기본 타입에 포장 객체가 대입될 경우 발생 (ex. Integer 객체가 int 타입으로 자동 언박싱됨)
int value1 = obj;
int value2 = obj + 100;
</>
value1 = 100;
value2 = 200;
문자열을 기본 타입 값으로 변환
*parse + 기본 타입 명 : 정적 메소드
포장값 비교
* ==와 != 연산자를 사용할 수 없음 : 포장 객체의 참조를 비교하기 때문(주소 비교)
Integer obj1 = 300;
Integer obj2 = 300;
System.out.println(obj1 == obj2);
</>
false
*박싱된 값이 다음 표에 나와 있는 값이라면 ==와 != 연산자로 내부의 값을 바로 비교할 수 있음
Math, Random 클래스
Math 클래스
* 수학 계산에 사용할 수 있는 정적 메소드 제공
Random 클래스
* 난수를 얻어내기 위한 다양한 메소드 제공
난수 : 정의된 범위내에서 무작위로 추출된 수
* boolean, int, long, float, double 난수를 얻을 수 있음
- Math.random() 메소드는 0.0 ~ 1 사이 double 난수를 얻는 데에만 사용 가능
* 난수를 만드는 알고리즘에 사용되는 종자값(seed) 설정 가능 : 종자값이 같으면 같은 난수
- 종자값(seed) : 난수를 만드는 알고리즘에 사용되는 값으로 종자값이 같으면 같은 난수를 얻는다.
* Random 클래스로부터 Random 객체를 생성하는 방법
* Random 클래스가 제공하는 메소드
Date, Calendar 클래스
Date 클래스
* 날짜를 표현하는 클래스
* 날짜 정보를 객체 간에 주고 받을 때 주로 사용
Date now = new Date();
* 현재 날짜를 문자열로 얻고 싶다면 toString() 메소드 사용
Date now = new Date();
String str1 = now.toString();
System.out.println(strNow1);
* 현재 날짜를 특정 문자열 포맷으로 얻고 싶다면 simpleDateFormat 클래스로 이용
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초);
String str2 = sdf.format(now)
Calendar 클래스
* 달력을 표현한 추상 클래스 : new 연산자로 인스턴스 생성X
- 날짜와 시간을 계산하는 방법이 지역, 문화, 나라에 따라 다르기 때문
- Calendar 클래스에는 날짜와 시간을 계산하는 필요한 메소드들만 선언 : 특정 계산 로직은 하위 클래스에서 구현하도록 되어 있음
* 현재 OS에 설정되어 있는 시간대(TimeZone)를 기준으로 한 객체 얻기
Calendar now = Calendar.getInstance();
* 다른 시간대의 Calendar 객체 얻기
- Calendar 클래스의 오버로딩된 다른 getInstance() 메소드를 이용
- 알고 싶은 시간대의 java.util.TimeZon 객체를 얻어, Calendar.getInstance() 메소드의 매개값으로 넘겨 줌
TimeZon timeZon = Timezon.getTimeZone("America/Los_Angeles");
Calendar now = Calendar.getInstance(timeZon);
*날짜 및 시간 정보 얻기
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1;
int day = now.get(Calendar.DAY_OF_MONTH);
int week = now.get(Calendar.DAY_OF_WEEK);
int amPm = now.get(Calendar.AM_PM);
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);