Menu
Coddy logo textTech

요약 - 커스텀 정렬

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 46번째.

challenge icon

챌린지

쉬움

특별한 메서드와 정렬에 대해 배운 모든 내용을 하나로 모으는 도서 컬렉션 관리자를 만들어 봅시다. Book 클래스를 생성하고 적절한 toString(), equals(), hashCode()를 구현하며, Comparable을 통한 자연스러운 정렬(natural ordering)과 유연한 정렬 옵션을 위한 외부 비교자(comparator)를 추가할 것입니다.

코드는 다음 네 개의 파일로 구성됩니다:

  • Book.java: 세 개의 private 필드 title (String), author (String), year (int)를 가진 도서 클래스를 생성하세요. 생성자와 모든 필드에 대한 getter를 포함하세요.

    Book 클래스는 year를 기준으로 오름차순(오래된 순)으로 정렬되도록 Comparable<Book>을 구현해야 합니다.

    toString()을 오버라이드하여 [title] by [author] ([year]) 형식을 반환하도록 하세요.

    equals()를 오버라이드하여 두 도서의 titleauthor가 모두 같을 때 동일한 것으로 간주하도록 하세요. 동일한 필드를 사용하여 Objects.hash()hashCode()를 오버라이드하세요.

  • TitleComparator.java: 도서 제목을 기준으로 알파벳 오름차순(A to Z)으로 정렬하는 비교자를 생성하세요.
  • AuthorComparator.java: 도서 저자를 기준으로 알파벳 오름차순(A to Z)으로 정렬하는 비교자를 생성하세요.
  • Main.java: 모든 것을 하나로 합칩니다! 세 권의 도서 정보를 입력받으며, 각 도서는 title,author,year 형식으로 별도의 줄에 입력됩니다.

    도서들의 ArrayList를 생성하고 다음 세 가지 정렬 방식을 모두 보여주세요:

    1. 자연스러운 정렬(연도 기준)을 사용하여 정렬하고 각 도서를 출력합니다.
    2. 빈 줄을 하나 출력합니다.
    3. TitleComparator를 사용하여 제목순으로 정렬하고 각 도서를 출력합니다.
    4. 빈 줄을 하나 출력합니다.
    5. AuthorComparator를 사용하여 저자순으로 정렬하고 각 도서를 출력합니다.

입력으로 세 줄을 받게 되며, 각 줄은 title,author,year 형식의 도서 데이터를 포함합니다.

예시: 1984,George Orwell,1949

Book.java에는 java.util.Objects를, 비교자 파일에는 java.util.Comparator를, 그리고 Main.java에는 java.util.ArrayList, java.util.Collections, java.util.Scanner를 임포트하는 것을 잊지 마세요.

직접 해보기

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 입력에서 세 권의 책을 읽습니다
        String line1 = scanner.nextLine();
        String line2 = scanner.nextLine();
        String line3 = scanner.nextLine();
        
        // TODO: 각 줄을 파싱하여 제목, 저자, 연도를 추출합니다
        // 힌트: 값을 분리하려면 split(",")을 사용하세요
        
        // TODO: 파싱된 데이터로 Book 객체를 생성합니다
        
        // TODO: ArrayList를 생성하고 세 권의 책을 모두 추가합니다
        
        // TODO: 자연스러운 순서(연도별)로 정렬하고 각 책을 출력합니다
        
        // TODO: 빈 줄을 출력합니다
        
        // TODO: TitleComparator를 사용하여 제목별로 정렬하고 각 책을 출력합니다
        
        // TODO: 빈 줄을 출력합니다
        
        // TODO: AuthorComparator를 사용하여 저자별로 정렬하고 각 책을 출력합니다
    }
}

객체 지향 프로그래밍의 모든 레슨