프로그래밍 언어/Java

[JAVA] 08. 유용한 클래스

ssung.k 2021. 1. 15. 21:18

java.util 패키지에는 수 많은 클래스가 있지만 그 중에서 많이 쓰는 몇 가지를 알아봅시다.

 

java.util.Objects 클래스

Object 클래스의 보조 클래스로 모든 메서드가 static입니다.

객체의 비교나 널 체크에 유용합니다.

 

isNull(), nonNull()

isNull()은 해당 객체가 null인지 판단하여 널이면 true를 아니면 false를 반환합니다.

nonNull()은 정반대로 동작합니다.

static boolean isNull(Object obj)
static boolean nonNull(Object obj)

 

requiredNonNull()

해당 객체가 널이 아니어야 하는 경우에 사용합니다.

만일 객체가 null이면 NullPointException을 발생시킵니다.

두 번째 매개변수로 지정하는 문자열은 예외의 메시지가 됩니다.

static <T> T requiredNonNull(T obj)
static <T> T requiredNonNull(T obj, String message)
static <T> T requiredNonNull(T obj, Supplier<String> messageSupplier)

 

아래 예제를 보며 requiredNonNull의 편리함을 살펴봅시다.

// requiredNonNull이 없는 경우
void setName(String name){
    if(name == null)
        throw new NullPointException("name must not be null");
    this.name = name;
}
// requiredNonNull이 있는 경우
void setName(String name){
    this.name = Objects.requireNonNull(name, "name must not be null");
}

 

compare()

Object클래스에는 두 객체의 등가비교를 위한 equals()만 있고 대소 비교를 위한 메서드가 없습니다.

따라서 Objects 클래스에 추가되었습니다.

두 비교 대상이 같으면 0, 크면 양수, 작으면 음수를 반환합니다.

static int compare(Object a, Object b, Comparator c)

 

 

equals(), deepEquals()

Object 클래스에도 equals()가 있지만 Objects 클래스의 equals()는 null 검사를 해야합니다.

// Object 클래스의 equals()
if (a!=null && a.equals(b)){
  
}

// Objects 클래스의 equals()
if (Objects.equals(a, b)){
  
}

 

단 내부적으로 아래와 같이 구현되어 있기 때문에 객체가 둘 다 null일 경우에도 null을 반환합니다.

public static boolean equals(Object a, Object b){
    return (a==b) || (a!=null && a.equals(b)); 
}

 

 

deepEquals()는 객체를 재귀적으로 비교하기 때문에 다차원 배열의 비교도 가능합니다.

String[][] str2D = new String [][] {{"a", "b"}, {"c", "d"}};
String[][] str2D2 = new String [][] {{"a", "b"}, {"c", "d"}};


System.out.println(Objects.equals(str2D, str2D2));
//false
System.out.println(Objects.deepEquals(str2D, str2D2));
// true

 

 

toString()

Object 클래스의 toString()과 동일하지만 내부적으로 null 검사를 합니다.

null일 경우, 두 번째 인자로 사용할 값을 지정할 수 있습니다.

static String toString(Object o)
static String toString(Object o, String nullDefault)

 

 

 

java.util.Random 클래스

난수를 얻기 위해서 Math 클래스와 Random 클래스를 사용할 수 있습니다.

Math.random()은 내부적으로 Random 클래스의 인스턴스를 생성해서 사용하는 것이므로 둘 중에서 편리한 것을 사용하면 됩니다.

double randNum = Math.random();
double randNum = new Random().nextDouble();