자바 API 클래스
Updated:
강의 사이트
http://tcpschool.com/
Object 클래스
1. clone 메서드
- 해당 인스턴스를 복제하여 새로운 인스턴스를 생성해 반환한다.
- 하지만 object 클래스의 clone 매서드는 단지 필드의 값만을 복사하므로 필드의 값이 배열이나 인스턴스면 제대로 복제할 수 없다.
- 따라서 이런 경우 해당 클래스에서 clone 메서드를 오버라이딩하여, 복제가 제대로 이루어지도록 재정의해야 한다.
String 클래스
1. String 클래스
- String 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수 없다.
- 이러한 객체를 불변 객체(immutable object)라고 한다.
- 즉, 자바에서 덧셈(+) 연산자를 이용하여 문자열 결합을 수행하면, 기존 문자열의 내용이 변경되는 것이 아니라 내용이 합쳐진 새로운 String 인스턴스가 생성되는 것이다.
- 따라서 문자열을 많이 결합할수록 공간 낭비와 속도가 느려진다.
StringBuffer 클래스
1. StringBuffer 클래스
- StringBuffer 클래스의 인스턴스는 그 값을 변경할 수 있고 추가할 수도 있다.
- 공간 낭비도 없고 속도가 빨라진다.
2. 불변 클래스(immutable class)와 가변 클래스(mutable class)
- 값을 변경할 수 없는 클래스를 불변 클래스라고 한다.
- 반대로 값을 변경할 수 있으면 가변 클래스라고 한다.
- 불변 클래스를 사용하는 이유는 멀티 스레드 환경에서 객체가 변화되는 상황이라면 불변 인스턴스를 사용하는 것이 조금 더 신뢰할 수 있는 코드를 작성할 수 있기 때문이다.
- 즉, 하나의 객체에 접근하면서 각각의 객체가 서로 영향을 주어서는 안 되는 경우에 불변 인스턴스를 사용하면 값이 변하지 않는다는 점이 보장된다.
래퍼 클래스(Wrapper class)
1. 래퍼 클래스
- 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우
- 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스라 한다.
2. 박싱과 언박싱
- 래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없다.
-
단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.
- 기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱
- 반대를 언박싱
3. 오토 박싱과 오토 언박싱
-
JDK 1.5부터는 컴파일러가 박싱, 언박싱을 자동으로 처리해줌
- 래퍼 클래스도 객체이므로 동등 연산자(==)를 사용하게 되면, 두 인스턴스의 값을 비교하는 것이 아니라 두 인스턴스의 주소값을 비교하게 된다.
- 그러므로 저장된 값을 비교하려면 equals 메서드를 사용해야 한다.
Enum 클래스
1. 열거체(enumeration type)
- 열거체를 비교할 때 실제 값뿐만 아니라 타입까지도 체크한다.
- 열거체의 상숫값이 재정의되더라도 다시 컴파일할 필요가 없다.
2. 열거체의 정의 및 사용
enum 열거체이름 { 상수1이름, 상수2이름, ... }
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
// 사용 방법
Rainbow.RED
3. 열거체의 상숫값 정의 및 추가
- 위와 같이 정의된 열거체의 첫 번째 상숫값은 0부터 설정되며, 그다음은 바로 앞의 상숫값보다 1만큼 증가되며 설정
- 불규칙한 값을 상숫값으로 설정하고 싶으면 상수의 이름 옆에 괄호(())을 추가하고, 그 안에 원하는 상숫값을 명시할 수 있다.
enum Rainbow {
RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), INDIGO(-1), VIOLET(-11);
private final int value;
Rainbow(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
4. values() 메서드
- values() 메소드는 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환
- 이 메소드는 자바의 모든 열거체에 컴파일러가 자동으로 추가해 주는 메소드
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum01 {
public static void main(String[] args) {
Rainbow[] arr = Rainbow.values();
for (Rainbow rb : arr) {
System.out.println(rb);
}
}
}
/*
RED
ORANGE
YELLOW
GREEN
BLUE
INDIGO
VIOLET
*/
5. valueOf() 메소드
- valueOf() 메소드는 전달된 문자열과 일치하는 해당 열거체의 상수를 반환
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum02 {
public static void main(String[] args) {
Rainbow rb = Rainbow.valueOf("GREEN");
System.out.println(rb);
}
}
//GREEN
6. ordinal() 메소드
- ordinal() 메소드는 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환
- 반환되는 값은 열거체 정의에서 해당 열거체 상수가 정의된 순서이며, 상숫값 자체가 아니다.
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum03 {
public static void main(String[] args) {
int idx = Rainbow.YELLOW.ordinal();
System.out.println(idx);
}
}
// 2
enum Rainbow {
RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), INDIGO(-1), VIOLET(-11);
private final int value;
Rainbow(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public class Enum04 {
public static void main(String[] args) {
System.out.println(Rainbow.YELLOW.ordinal());
}
}
// 2