38일 차 - 제네릭(Generic) (23.02.17)

yvonne·2023년 2월 20일
0

📂Java

목록 보기
39/51
post-thumbnail

1. 제네릭(Generic)이란?

📌제네릭(Generic): 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법으로 자료형(데이터 타입)을 결정짓지 않고 틀을 만들어 두는 것 (java 1.5 이상)

  • 한 마디로 특정(Specific) 타입을 미리 지정해주는 것이 아니라 필요에 의해서 지정할 수 있도록 하는 일반(Generic) 타입을 이야기합니다.
  • 형태: Object(참조형 타입) 자리에 T가 들어가는 형식
    // 클래스
    public class ClassName <T> { ... }
    
    // 인터페이스
    public Interface InterfaceName <T> { ... }
    
    // 제네릭 타입을 두 개 이상 사용하는 경우
    public class MultiGeneric <K, V> { ... }
      
    - 이때 T, K, V 타입은 해당 블록 {...} 안에서만 유효 




2. 아래가 돌아 가도록 짜시오.

  Box<Apple> aBox = new Box<Apple>();    // T를 Apple로 결정
   Box<Orange> oBox = new Box<Orange>();    // T를 Orange로 결정

   aBox.set(new Apple());   // 사과를 상자에 담는다.
   oBox.set(new Orange());   // 오렌지를 상자에 담는다.
   
   Apple ap = aBox.get();   // 사과를 꺼내는데 형 변환 하지 않는다.
   Orange og = oBox.get();   // 오렌지를 꺼내는데 형 변환 하지 않는다.

   System.out.println(ap); // 출력 : 이것은 사과 입니다.
   System.out.println(og); // 출력 : 이것은 오렌지 입니다.
 package drivertest;

class Apple {
	@Override
	public String toString() {
		return "이것은 사과입니다.";
	}
}

class Orange {
	@Override
	public String toString() {
		return "이것은 오렌지입니다.";
	}
}

class Box<T> {
	private T ob;

	public void set(T o) {
		ob = o;
	}

	public T get() {
		return ob;
	}
}

public class overrideTest7 {

	public static void main(String[] args) {
		Box<Apple> aBox = new Box<Apple>(); // T를 Apple로 결정
		Box<Orange> oBox = new Box<Orange>(); // T를 Orange로 결정

		aBox.set(new Apple()); // 사과를 상자에 담는다.
		oBox.set(new Orange()); // 오렌지를 상자에 담는다.

		Apple ap = aBox.get(); // 사과를 꺼내는데 형 변환 하지 않는다.
		Orange og = oBox.get(); // 오렌지를 꺼내는데 형 변환 하지 않는다.

		System.out.println(ap); // 출력 : 이것은 사과 입니다.
		System.out.println(og); // 출력 : 이것은 오렌지 입니다.
	}

}
  • 출력결과





3. 아래가 돌아 가도록 짜시오.

  Person2<String, Integer> p = new Person2<String, Integer>();
   p.set("홍길동", 25);
   System.out.println(box); //출력 : 홍길동 25 세 입니다. 
  package drivertest;

class Person2<L, R> {
	private L left;
	private R right;

	public void set(L o, R r) {
		left = o;
		right = r;
	}

	@Override
	public String toString() {
		return left + " " + right + "세 입니다.";
	}

}

public class overrideTest7 {

	public static void main(String[] args) {
		Person2<String, Integer> p = new Person2<String, Integer>();
		p.set("홍길동", 25);
		System.out.println(p); // 출력 : 홍길동 25 세 입니다.

	}

}
  • 출력결과
profile
개발 연습장

0개의 댓글