2023-02-17 금 / JAVA

권혁현·2023년 2월 17일
0

Java

목록 보기
35/44
post-thumbnail

1. 지네릭(Generic)이란?

  • Java 1.5 부터 나온 개념 : Generic이 나오기 전까지는 참조형 변수 타입을 Object로 받을 수 밖에 없었다.

  • 기능: 자료형을 결정짓지 않고 틀을 만들어 두는 것을 말함 (c++에서는 템플릿 이라고 함)

  • 형태: Object(참조형 타입) 자리에 T들어감 → Generic
    그래서 자료형의 정보를 Object 대신 T로 작성해 비워 두고 인스턴스 생성시 참조 타입을 결정함

  • 등장 배경: Generic이전의 코드에서 Object로 참조 변수를 선언했을 때 발생하는 문제들을 Generic을 사용함으로써 컴파일 단계에서 잡아줄 수 있도록 했음


  • 예시 코드 기준으로 설명하면
  1. Apple ap = (Apple)aBox.get();와 같이 프로그래머가 명시적 형변환을 해서 책임을 지게 만들지 않고, 컴파일러가 체크해서 코드의 안정성이 떨어지는 문제를 해결할 수 있도록 함
  2. aBox.set("Apple"); 와 같은 상황에서 컴파일러가 체크하지 못해서 실시간 에러로 이어지는 문제도 컴파일 에러로 잡을 수 있게 됨
  3. System.out.println(aBox.get()); 와 같이 말도 안되는 상황에서 어떤 에러도 발생하지 않고 심지어 그게 실행이 되는 가장 큰 문제 상황을 컴파일 에러로 막아 줄 수 있게 됨!

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); // 출력 : 이것은 오렌지 입니다.

class Box<T> {
	private T ob;

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

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

}

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

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

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

class Person<S, I> {
	private S name;
	private I age;

	public void set(S name, I age) {
		this.name = name;
		this.age = age;
	}

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

0개의 댓글