자바 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

Tags:

Categories:

Updated: