본문 바로가기
Java

[JAVA] 자바 - <T extends 클래스> 사용하기

by Seong-Jun 2022. 1. 10.
728x90
반응형
SMALL

다이아몬드 연산자 - <>

  • ArrayList list = new ArrayList<>(); // 다이아몬드 연산자 내부에서 자료형은 생략 가능합니다.
  • 제네릭에서 자료형 추론(자바 10부터)
ArrayList list = new ArrayList<>() => var list = new ArrayList()

 

상위 클래스의 필요성

  • T자료형의 범위를 제한할 수 있습니다.
  • 상위 클래스에서 선언하거나 정의하는 메서드를 활용할 수 있습니다.
  • 상속을 받지 않는 경우 T는 Object로 변환되어 Object 클래스가 기본으로 제공하는 메서드만 사용 가능합니다.

 

T extends를 사용한 프로그래밍

  • GenericPrinter에 material 변수의 자료형을 상속받아 구현합니다.
  • 전의 예제에서 어떤 재료를 넣어도 다 출력이 되는 형식이었는데 이렇게 되면 물과 같은 재료를 넣어도 정상작동이 됩니다.
  • 그렇기 때문에 T에 무작위 클래스가 들어갈 수 없게 Material 클래스를 상속받은 클래스로 한정합니다.

Material.java

public abstract class Material { // 직접 쓸일은 없기 때문에 abstract로 만듭니다.
	/*
	 * T가 사용할 여러 메서드들을 추상클래스 상위 클래스에서 미리선언을 해놓고
	 * 이것을 구현하도록 할 수도 있고 공통되는 기능을 구현해 놓을 수도 있다.
	 * extends T를 사용함으로써 써야하는 재료에 대해서 한정을 두고
	 * 어떤 클래스 기반에 한 것만 넣을 수 있다는 제약도 있다.
	 */
	
	public abstract void doPrinting();
}

Powder.java

public class Powder extends Material {
	public String toString() {
		return "재료는 Powder 입니다.";
	}

	@Override
	public void doPrinting() {
		System.out.println("Powder 재료로 출력합니다.");
	}
}

Plastic.java

public class Plastic extends Material {
	public String toString() {
		return "재료는 Plastic 입니다.";
	}

	@Override
	public void doPrinting() {
		System.out.println("Plastic 재료로 출력합니다.");
	}
}

 

728x90
반응형
LIST

댓글