1. java.lang 패키지
- 자바의 기본적인 클래스를 담고 있는 패키지이다.
- 해당 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.
1) Object 클래스
- extends 키워드로 다른 클래스를 상속하지 않더라도 자바의 모든 클래스는 암시적으로 java.lang.Object 클래스를 상속한다.
- Object 클래스는 필드가 없고, 생성자와 메소드로 구성되어 있다.
객체비교(equals())
publi boolean equals(Object obj) {...}
- 두 객체를 비교해서 논리적으로 동등하면 true를 리턴하고, 그렇지 않으면 false를 리턴한다.
- 논리적으로 동등하다는 것은 같은 객체인지와는 상관 없이 객체가 저장하고 있는 데이터가 동일하다는 뜻이다.
객체 해시코드(hashCode())
- 객체를 식별하는 하나의 정수값을 말한다.
- 해당 메소드는 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다.
객체 문자 정보(toString())
- toString() 메소드는 객체의 문자 정보를 리턴한다. 객체의 문자 정보란 객체를 문자열로 표현한 값을 말한다.
- 기본적으로 '클래스이름@16진수해시코드'로 구성된 문자 정보를 리턴한다.
- 이 자체로는 별 값어치 없는 정보이므로 Object의 하위클래스는 해당 메소드를 오버라이딩하여 유익한 정보를 리턴한다.
- java.util.Date 클래스는 현재 시스템의 날짜와 시간 정보 리턴
- String 클래스는 저장하고 있는 문자열 리턴
2) System 클래스
- 자바 프로그램은 운영체제에서 바로 실행되는 것이 아니라 JVM 위에서 실행된다. 따라서 운영체제의 모든 기능을 직접 이용하기 어렵다.
- 하지만 java.lang 패키지에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. 즉, 프로그램 종료, 키보드로부터 입력, 모니터로 출력, 현재 시간 읽기 등이 가능하다.
- System 클래스의 모든 필드와 메소드는 정적 필드와 메소드로 구성되어 있다.
프로그램 종료(exit())
- exit() 메소드는 현재 실행하고 있는 프로세스를 강제 종료시킨다.
- int 매개값을 지정하도록 되어있는데, 이 값을 종료 상태값이라고 한다. 일반적으로 정상 종료일 경우 0 값을 준다.
System.exit(0);
현재 시간 읽기(currentTimeMillis(), nanoTime())
- 컴퓨터의 시계로부터 현재 시간을 읽어서 각각 밀리세컨드(1/1000초) 단위와 나노세컨드(1/10^9) 단위의 long 값을 리턴한다.
- 리턴값은 주로 프로그램의 실행 소요 시간 측정에 사용된다.
3) Class 클래스
- 자바는 클래스와 인터페이스의 메타 데이터를 java.lang 패키지에 소속된 Class 클래스로 관리한다.
- 메타데이터란 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보를 말한다.
Class 객체 얻기(get.Class(), forName())
클래스로부터 얻는 방법
- Class clazz = 클래스이름.class
- Class clazz = Class.forName("패키지...클래스이름")
객체로부터 얻는 방법
- Class clazz = 참조변수.getClass();
클래스 경로를 활용해서 리소스 절대 경로 얻기
- Class 객체는 해당 클래스의 파일 경로 정보를 가지고 있기 때문에 이 경로를 활용해서 다른 리소스 파일(이미지, XML Property 파일)의 경로를 얻을 수 있다. 이 방법은 UI 프로그램에서 많이 활용된다.
String path = clazz.getResource("photo1.jpg").getPath();
String path2 = clazz.getResource("images/photo2.jpg").getPath();
4) String 클래스
- 자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리된다.
- 소스상에서 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String 객체를 생성할 수도 있다.
String str = new String(byte[] bytes);
String str = new String(byte[] bytes, String charsetName);
String str = new String(byte[] bytes, int offset, int length);
String str = new String(byte[] bytes, int offset, int length, String charsetName);
String 주요 메소드
리턴타입 | 메소드 이름(매개변수) | 설명 |
---|
char | charAt(int index) | 특정 위치의 문자 리턴 |
boolean | equals(Object an Object) | 두 문자열 비교 |
byte[] | getByte[] | byte[]로 리턴 |
byte[] | getBytes(Charset charset) | 주어진 문자셋으로 인코딩한 byte[]로 리턴 |
int | indexOf(string str) | 문자열 내에서 주어진 문자열의 위치 리턴 |
int | length() | 총 문자의 수 리턴 |
String | replace(charSequence target, CharSequence replacement) | target 부분을 replacement로 대치한 새로운 문자열을 리턴 |
String | substring(int beginIndex) | beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴 |
String | subString(int beginIndex, int endIndex) | beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열 리턴 |
String | toLowerCase() | 알파벳 소문자로 변환한 새로운 문자열 리턴 |
String | toUpperCase() | 알파벳 대문자로 변환한 새로운 문자열 리턴 |
String | trim() | 앞뒤 공백을 제거한 새로운 문자열 리턴 |
String | valueOf(int i), valueOf(double d), ... | 기본 타입의 값을 문자열로 리턴 |
- 원래 equals()는 Object 클래스의 번지 비교 메소드지만, String 클래스가 재정의 해서 문자열을 비교하도록 변경했다.
- String 객체의 문자열은 변경이 불가능한 특성을 갖기 때문에 기존 문자열을 수정하는 것이 아닌 완전히 새로운 문자열을 리턴한다.
5) Wrapper 클래스
- 자바는 기본 타입(byte, char, short, int, long, float, double,boolena)의 값을 갖는 객체를 생성할 수 있다. 이런 객체라고 한다.
- 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다. 내부의 값을 변경하려면 새로운 포장 객체를 만들어야 한다.
- java.lang 패키지에 포함되어 있으며, 기본 타입의 첫 문자를 대문자로 바꾼 이름을 가지고 있다.
박싱과 언박싱
- 기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고, 반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱이라고 한다.
박싱
- 포장 클래스의 생성자 매개값으로 기본 타입의 값 또는 문자열을 넘겨주면 된다.
- Character의 경우 문자열을 넘겨줄 수 없다.
- 각 포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용할 수도 있다.
Byte obj = new Byte(10);
Long obj = new long("10000");
integer obj = Integer.valueOf(1000);
Integer obj = Integer.valueOf("1000");
언박싱
- 각 포장 클래스마다 가지고 있는 '기본타입+Value()'메소드를 호출하면 된다.
byte num = obj.bytevalue();
자동 박싱과 언박싱
- 자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우에 발생한다.
Integer obj = 100;
- 자동 언박싱은 기본 타입에 포장 객체가 대입되거나 연산에서 발생한다.
Integer obj = new Integer(100);
int value1 = obj;
int value2 = obj + 100;
문자열을 기본 타입 값으로 변환
- 'parse+기본 타입 이름'으로 되어있는 정적 메소드를 사용한다.
byte num = Byte.parseByte("10");
포장 값 비교
- 특정 범위의 값은 ==나 !=로 내부의 값을 비교할 수 있지만, 대부분은 그렇지 않기 때문에 equals 메소드를 사용한다.
6) Math 클래스
- java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공한다.
- 모두 정적 메소드이므로 Math 클래스로 바로 사용 가능하다.
주요 메소드
- abs(num) : 절대값 리턴
- ceil(num) : 올림값 리턴
- floor(num) : 버림값 리턴
- max(a, b) : a와 b 중 최대값 리턴
- min(a, b) : a와 b 중 최소값 리턴
- random() : 0이상 1 미만의 랜덤값 리턴
- rint(num) : 가까운 정수의 실수값
- round(num) : 반올림값 리턴
2. java.util 패키지
- 프로그램 개발에서 자주 사용되는 자료구조일 뿐만 아니라, 날짜 정보를 제공하는 유용한 API를 포함한다.
1) Date 클래스
-
특정 시점의 날짜를 표현하는 클래스이다.
-
Date 객체 안에는 특정 시점의 연도, 월, 일, 시간 정보가 저장된다.
-
객체 간에 날자 정보를 주고받을 때 매개 변수나 리턴 타입으로 주로 사용된다.
-
해당 객체의 toString() 메소드는 영문으로 된 날짜를 리턴한다.
-
원하는 날짜 형식의 문자열을 얻으려면 java.text 패키지의 simpleDateFormat 클래스와 함께 사용한다.
Date now = new Date();
SimpleDateformat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
String strNow = sdf.format(now);
2) Calendar 클래스
-
달력을 표현한 클래스이다.
-
해당 운영체제의 Calendar 객체를 얻으면, 연도, 월, 일, 요일, 오전/오후, 시간 등의 정보를 얻을 수 있다.
-
추상 클래스이므로 new 연산자로 인스턴스를 생성할 수 없다. 해당 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로 한 Calendar 하위 객체를 얻을 수 있다.
-
get() 메소드로 날짜와 시간에 대한 정보를 읽을 수 있다.
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH + 1);
int day = now.get(Calendar.DAY_OF_MONTH);
String week = now.get(Calendar.DAY_OF_WEEK);
String amPm = now.get(Calendar.AM_PM);
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);