Bootcamp/java codingtest

BigDecimal, Comparator 인터페이스

Nyamggoon 2025. 4. 20. 01:44
        BigDecimal result = numor.divide(denom, times, RoundingMode.HALF_UP);
        return result;

고정소수점과 부동소수점의 차이

소수점 위치 고정됨 가변적
정확도 정밀 (오차 거의 없음) 오차 가능 (예: 0.1 + 0.2 ≠ 0.3)
속도 빠름 (정수 연산 기반) 매우 빠름 (CPU 부동소수점 연산)
사용처 금융 계산 과학/통계/그래픽 계산
Java 예시 BigDecimal float, double

기존 float, double 을 통해서 소수점을 표현하면 최대 16자리까지만 표현이 가능.

BigDecimal 을 사용하면 원하는 만큼의 자리수를 표현이 가능하다.

RoundingMode. 옵션들

UP 무조건 올림 (자리 버림 이후 0 아니면) 2.68
DOWN 무조건 버림 2.67
HALF_UP 5 이상 올림 2.68 ✅
HALF_DOWN 5는 내림 2.67
HALF_EVEN 5면 짝수로 반올림 (은행식) 2.68
CEILING 양수는 올림 / 음수는 버림 2.68
FLOOR 양수는 버림 / 음수는 올림 2.67

 

1. 자바의 Comparator 인터페이스익명 클래스로 구현
2. 안에서 compare() 메서드를 오버라이딩해서 정렬 기준을 직접 정함

List<String> list = new ArrayList<>();
list.add("spring");
list.add("hi");
list.add("smartphone");

list.sort(new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return a.length() - b.length(); // 길이 순 정렬
    }
});

개념설명

인터페이스 메서드의 "설계도" 역할, 구현은 다른 클래스에서 함
오버라이딩 부모/인터페이스에서 정의된 메서드를 자식에서 "구현"
익명 클래스 클래스 이름 없이 한 번만 쓸 작은 클래스를 선언하는 방식
compareTo() 문자열/객체를 사전순 등으로 비교할 때 사용함 (Comparable 인터페이스 소속)

 

인터페이스

public interface Comparator<T> {
    int compare(T o1, T o2);
}

 

  • Comparator<T>는 비교 기준을 정의하는 인터페이스
  • compare(a, b) 메서드를 구현해서 정렬 기준을 지정
  • 리턴값의 의미:
    • 음수: a가 앞
    • 0: 같음
    • 양수: b가 앞

 

익명클래스

list.sort(new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return a.length() - b.length();
    }
});
  • Comparator<String>을 바로 익명 클래스로 만들어서,
  • compare() 메서드를 오버라이딩하고,
  • 그 안에서 원하는 정렬 기준을 정의한 것

📌 이렇게 하면 별도로 클래스 만들 필요 없이, 간단히 비교 기준을 커스터마이징 가능

 

오버라이딩

 

  • Comparator 인터페이스에는 compare()라는 추상 메서드가 존재
  • 익명 클래스 안에서 이 메서드를 직접 구현(오버라이딩) 해야 함.

 

@Override
public int compare(String a, String b) {
    return a.length() - b.length(); // 정렬 기준 정의
}

 

@Override는:

  • "이 메서드는 부모/인터페이스의 메서드를 재정의한 것"라는 표시
  • 오타/실수 방지를 위해 매우 중요

 

compareTo() 사용 예시

 

return a.compareTo(b);

문자열끼리 사전순으로 비교할 때 사용하는 메서드

'Bootcamp > java codingtest' 카테고리의 다른 글

최소 신장 트리 MST  (0) 2025.04.22
동적 계획법, JAVA 자료형  (1) 2025.04.21
문자열 리스트, array  (0) 2025.04.14
재귀  (0) 2025.04.12
BigInteger, array 정렬  (0) 2025.04.08