본문 바로가기
프로그래밍언어/Java

[자바의 정석] 09. java.lang패키지와 유용한 클래스 (2) - 유용한 클래스

by qkzkdo 2023. 8. 5.
728x90

2.1 java.util.Objects클래스

Object클래스의 보조 클래스 모든 메서드가 ‘static’이다. 객체의 비교나 널 체크(null check)에 유용하다.

static boolean isNull(Object obj) //해당 객체가 널인지 확인
static boolean nonNull(Object obj) //isNull과 정반대의 일 즉, !Object.isNull(obj)와 같다.

requireNonNull() // 해당 객체가 널이 아니어야 하는 경우 사용
static <T> T requireNonNull(T obj)
static <T> T requireNonNull(T obj, String message)
static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)

예전 같으면, 매개변수의 유효성 검사를 다음과 같이 해야 하는데, 이제는 requireNonNull()의 호출만으로 간단히 끝낼 수 있다.

 

static int compare(Object a, Object b, Comparator c)//같으면0, 크면양수, 작으면음수 반환

a와 b 두 객체를 비교하는데, 객체를 비교하는 기준 = Comparator.

 

if(a != null && a.equals(b)) //a가 null인지 반드시 확인해야한다.

if(Objects.equals(a, b) //매개변수의 값이 null인지 확인할 필요가 없다.
이 메서드의 실제 코드
public static boolean equals(Object a, Object b) {
	return (a==b) || (a!=null && a.equals(b));
}

deepEquals() = 다차원 배열의 비교도 가능

 

 

2.2 java.util.Random클래스

난수를 얻는 방법을 생각하면 Math.random()이 떠오를 것이다. 이 외에도 Random클래스를 사용하면 난수를 얻을 수 있다.

사실 Math.random()은 내부적으로 Random클래스의 인스턴스를 생성해서 사용하는 것이므로 둘 중에서 편한 것을 사용하면 된다. 아래의 두 문장은 동등하다.

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

 

1~6사이의 정수를 난수로 얻고자 할 때

int num = (int)(Math.random() * 6) + 1;
int num = new Random().nextInt(6) + 1; //nextInt(6)은 0~6사이의 정수를받환

Math.random과 Random의 가장 큰 차이점 : 종자값(seed)를 설정할 수 있다.

 

 

2.3 정규식(Regular Expression) - java.util.regex패키지

정규식이란 텍스트 데이터 중에서 원하는 조건(패턴, pattern)과 일치하는 문자열을 찾아내기 위해 사용하는 것으로 미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.

 

정규식을 정의하고 데이터를 비교하는 과정

1. 정규식을 매개변수로 Pattern클래스의 static메서드인 Pattern compile(String regex)을 호출하여 Pattern인스턴스를 얻는다. pattern p = Pattern.compile(”c[a-z]*”);

2. 정규식으로 비교할 대상을 매개변수로 Pattern클래스의 Matcher matcher(CharSequence input)를 호출해서Matcher인스턴스를 얻는다. Matcher m = p.matcher(data[i]);

3. Matcher인스턴스에 boolean matches()를 호출해서 정규식에 부합하는지 확인한다. if(m.matches())

 

 

2.4 java.util.Scanner클래스

Scanner는 화면, 파일, 문자열과 같은 입력소스로부터 문자데이터를 읽어오는데 도움을 줄 목적으로 JDK1.5부터 추가되었다.

 

생성자

Scanner(String source)
Scanner(File source)
Scanner(InputStream source)
Scanner(Readable source)
Scanner(ReadableByteChannel source)
Scanner(Path source)

메서드

boolean nextBoolean()
byte nextByte()
short nextShort()
int nextInt()
long nextLong()
double nextDouble()
float nextFloat()
String nextLine()

Scanner 을 사용할 시 util 패키지를 경로의 Scanner 클래스를 호출해야 한다.

자바에서 쓰이는 대부분의 클래스는 lang 패키지가 아니라면 import 을 통해 호출해주어야 한다.

Scanner 의 경우는 java.util 패키지에 있다.

 

 

 

출처 : 남궁성. 「자바의 정석」. 도우출판. 2016

728x90