요약 - 제네릭 컨테이너
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 58번째.
챌린지
쉬움제네릭에 대해 배운 모든 것을 하나로 모으는 다재다능한 저장 시스템을 구축해 봅시다! 모든 유형의 요소를 저장, 검색 및 처리할 수 있는 Container 클래스와 와일드카드의 실제 활용 사례를 보여주는 유틸리티 메서드를 만들 것입니다.
코드는 세 개의 파일로 구성됩니다:
Container.java: 항목 컬렉션을 관리하는 제네릭 클래스Container<T>를 만듭니다. 컨테이너는 내부적으로 요소를 저장하기 위해ArrayList<T>를 사용해야 합니다. 요소를 추가하는add(T item), 특정 위치의 요소를 검색하는get(int index), 항목의 개수를 반환하는size(), 컨테이너가 비어 있는지 확인하는isEmpty()메서드를 포함하세요. 또한 내부 리스트를 반환하는getAll()메서드도 추가하세요.ContainerUtils.java: 컨테이너와 함께 작동하는 정적 제네릭 메서드를 포함하는 유틸리티 클래스를 만듭니다:printAll(Container<?> container)- 비한정 와일드카드(unbounded wildcard)를 사용하여 모든 컨테이너의 모든 요소를 한 줄에 하나씩 출력합니다.countItems(Container<? extends Number> container)- 상한 제한 와일드카드(upper bounded wildcard)를 사용하여 컨테이너에 있는 모든 숫자 값의 합계를 계산하고 결과를double로 반환합니다.addDefaults(Container<? super Integer> container)- 하한 제한 와일드카드(lower bounded wildcard)를 사용하여 정수를 담을 수 있는 모든 컨테이너에 정수 1, 2, 3을 추가합니다.<T> T getLastOrDefault(Container<T> container, T defaultValue)- 컨테이너의 마지막 요소를 반환하거나, 컨테이너가 비어 있는 경우 기본값을 반환하는 제네릭 메서드입니다.Main.java: 제네릭 컨테이너 시스템을 하나로 합칩니다! 단어(String), 정수(int), 실수(double)의 세 가지 입력을 받게 됩니다.먼저,
Container<String>을 생성하고 단어를 두 번 추가합니다.String container:를 출력한 다음printAll을 사용하여 내용을 표시합니다.다음으로,
Container<Double>을 생성하고 실수 값을 추가합니다. 빈 줄을 출력한 다음,countItems를 사용하여Number sum: [sum]을 출력합니다.그런 다음
Container<Number>를 생성하고 여기에addDefaults를 호출합니다. 빈 줄을 출력한 다음,After adding defaults:를 출력하고printAll을 사용하여 내용을 표시합니다.마지막으로, 빈
Container<Integer>를 생성하고 입력받은 정수를 기본값으로 하여getLastOrDefault를 사용합니다. 빈 줄을 출력한 다음,Last or default: [result]를 출력합니다.
단어(String), 정수(int), 실수(double) 순서대로 세 개의 입력을 받습니다.
이 챌린지는 제네릭 클래스, 제네릭 메서드, 제한된 타입 파라미터 및 세 가지 와일드카드 유형을 모두 결합합니다. 각 부분이 어떻게 다른 목적을 수행하는지 주목하세요. 제네릭 클래스는 타입 안전한 저장소를 제공하고, 제한된 와일드카드는 유연한 읽기 및 쓰기를 가능하게 하며, 제네릭 메서드는 다양한 컨테이너 유형에서 재사용 가능한 작업을 제공합니다!
직접 해보기
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력 읽기
String word = scanner.nextLine();
int intValue = Integer.parseInt(scanner.nextLine());
double doubleValue = Double.parseDouble(scanner.nextLine());
// TODO: Container<String>을 생성하고 word를 두 번 추가
// "String container:"를 출력한 다음 ContainerUtils.printAll()을 사용
// TODO: Container<Double>을 생성하고 doubleValue를 추가
// 빈 줄을 출력한 다음, ContainerUtils.countItems()를 사용하여 "Number sum: [sum]"을 출력
// TODO: Container<Number>를 생성하고 여기에 ContainerUtils.addDefaults()를 호출
// 빈 줄을 출력한 다음, "After adding defaults:"를 출력하고 ContainerUtils.printAll()을 사용
// TODO: 빈 Container<Integer> 생성
// intValue를 기본값으로 하여 ContainerUtils.getLastOrDefault()를 사용
// 빈 줄을 출력한 다음, "Last or default: [result]"를 출력
}
}
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조