백엔드/Java의 정석

TIL 정리_15

ran4 2022. 3. 2. 14:18

 

유용한 클래스 

 

java.util.Objects클래스 

Object클래스의 보조 클래스 모든 메서드가 'static'이다

객체의 비교나 널 체크에 유용하다

 

isNull() - null이면 true 아니면 false

nonNull() null이 아니면 true 

requireNonNull() 해당 객체가 널이 아닌경우에 사용

매개변수의 유효성 검사없이 requireNonNull() 호출
void setName(String name) {
if(name == null) 
throw new NullPointerException("name must not be null.");
this.name = name;
}
void setName(String name) {
this.name = Objects.requireNonNull( name, 
"name must not be null.");
}

 

Objects에는 대소비교를 위한 compare()가 추가되었다

같으면 0, 크면 양수, 작으면 음수를 반환한다

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

 

jave.util.Random 클래스

double randNum = Math.random(); //Math.random() 활용

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

둘의 가장 큰 차이점은 종자값(seed)을 설정할 수 있다는 것이다

 

Random클래스의 생성자와 메서드

생성자 Random()은 currentTimeMillis()를 종자값으로 한다

public Random() {

 this.(System.currentTimeMillis()); }

메서드 설명
Random() 현재시간을 종자값으로 이용하는 Random 인스턴스 생성
Random(long seed) 매개변수 seed를 종자값으로 하는 Random인스턴스 생성
boolean nextBoolean() boolean타입의 난수를 반환
void nextBytes(byte[] bytes) bytes배열에 byte타입의 난수를 채워 반환
double nextDouble() double 타입의 난수를 반환 (0.0 <= x <1.0)
float nextFloat() float타입의 난수를 반환 (0.0 <= x <1.0)
double nextGaussian() 평균은 0.0이고 표준편차는 1.0인 가우시간분포에 따른
double형의 난수를 반환
int nextInt() int타입의 난수를 반환
int nextInt(int n) 0~n의 범위에 있는 int값 반환(n은 범위포함 x)
long nextLong() long타입의 난수 반환(long의 범위)
void setSeed(long seed)  종자값을 주어진 값으로 변경

 

Math.random()을 이용할때 유용한 메서드

int[] fillRand(int[] arr, int from, int to)
배열 arr을 from과 to범위의 값들로 채워서 반환한다
int[] fillRand(int[] arr, int[] data)
배열 arr을 배열 data에 있는 값들로 채워서 반환한다
int getRand(int from, int to)
from과 to범위의 정수(int)값을 반환한다. from과 to 모두 범위에 포함된다 

 

 

정규식(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를 호출해서

Matcher 인스턴스를 얻는다

Matcher m = p.matcher(data[i]);

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

if(m.matches()) 

 

java.util.StringTokenizer 클래스

긴 문자열을 지정된 구분자를 기분으로 토큰이라는 여러 개의 문자열로 잘라내는 데 사용된다

구분자로 단 하나의 문자밖에 사용하지 못한다

생성자/메서드 설명
StringTokenizer (String str, String delim) 문자열(str)을 지정된 구분자(delim)로 나누는 StringTokenizer를 생성한다
(구분자는 토큰으로 간주 x)
StringTokenizer (String str, String delim,
boolean returnDelims)
문자열(str)을 지정된 구분자(delim)로 나누는 StringTokenizer를 생성한다
returnDelims의 값을 true로 하면 구분자도 토큰으로 간주된다
int countTokens() 전체 토큰의 수를 반환한다
boolean hasMoreTokens() 토큰이 남아있는지 알려준다
String nextToken 다음 토큰을 반환한다 

 

java.math.BigInteger 클래스

내부적으로 int배열을 사용하여 값을 다룬다.

long타입보다 훨씬 큰 값을 다룰 수 있지만 성능은 떨어진다.

BigInteger val;

val = new BigInteger();

val = new BigInteger( , );

val = new BigInteger.valueOf();

 

BigInteger의 연산

정수형으로 사용할 수 있는 모든 연산자와 수학적인 계산을 쉽게해주는 메서드들이 정의되어 있다.

 

비트 연산 메서드

큰 숫자를 다루기 위한 클래스이다

성능을 향상시키기 위해 비트단위로 연산을 수행하는 메서드들을 많이 가지고 있다

int bitCount()

int bitLength()

boolean testBit(int n)

BigInteger setbit(int n) //우측에서 n+1번째 비트를 1로 변경

BigInteger clearbit(int n) //우측에서 n+1번째 비트를 0으로 변경

BigInteger flipbit(int n) //우측에서 n+1번째 비트를 전환

 

java.math.BigDecimal 클래스

정수를 이용해서 실수를 표현한다

 

BigDecimal를 생성할 때 문자열을 숫자로 표현하는 것이 일반적이다

BigDecimal val;

val = new BigDecimal();

val = BigDecimal.valurOf();

**double 타입의 값을 매개변수로 갖는 생성자를 사용하면 오차가 발생한다 

 

BigDecimal을 문자열로 반환

String toPlainString()

String toString()

 

반올림모드 divide()와 setScale()

나눗셈의 결과를 어떻게 반올림(roundingMode)처리할 것인지와, 

몇 번째 자리(scale)에서 반올림할 것인지를 지정할 수 있다.

 

scale의 변경

setScale()을 이용하면 된다

BigDecimal setScale(int newScale)

BigDecimal setScale(int newScale, int roundingMode)

BigDecimal setScale(int newScale, RoundingMode mode)

divide()를 호출할 때처럼 오차가 발생할 수 있어 반올림 모드를 지정해야한다.

 

 

'백엔드 > Java의 정석' 카테고리의 다른 글

TIL 정리_17  (0) 2022.03.04
TIL 정리_16  (0) 2022.03.03
TIL 정리_14  (0) 2022.03.01
TIL 정리_13  (0) 2022.02.28
TIL 정리_12  (0) 2022.02.27