[TIL] java 제네릭의 필요성

빼곰·2023년 1월 10일
0

문제

  • 컴파일 단계에서는 에러가 안나고, 실행 단계에서 ClassCast오류가 발생하는 상황을 만들어보시오.
  • 제네릭의 필요성을 보여주는 예를 코드로 설명할 수 있는지를 묻는 문제이다.

Person,Student 클래스 만들기

class Person{
	//Field
	public Object obj;
	
	//Consturctor
	Person(Object obj) {
		this.obj=obj;		
}

class Student{
	//Field
	public int grade;
	
	//Constructor
	Student(int grade){this.grade=grade;}
}
	

public class Java100_collection_Generic2 {

	public static void main(String[] args) {
		//[1] : 객체 생성
	}
}
  • 클래스타입도 인자값으로 받을 수 있는 object
Person p1 = new Person(new Student(2));
System.out.println(p1.obj);

출력결과>
Student@2d363fb3

참조형을 변수에 저장하기 때문에 변수를 출력하면 주소값이 나온다.

지난 시간 복습

	//[1] : 객체 생성
		Person p1 = new Person("안녕하세요~");
		// System.out.println(p1.obj);
		String str = (String)p1.obj;
		System.out.println(str.length()); //6
        
        Person p2 = new Person(new Student(1));
		Student s1=(Student)p2.obj;

--> 형변환

  • 이때 다른 타입으로는 형변환이 안된다.
Teacher s2 =(Teacher)p2.obj; //Err 

이클립스로 실행하면 바로 오류나 경고나 나오지만 원래 이 코드는 컴파일 단계에서는 에러가
나지 않는 코드 이다.
컴파일 단계에서는 에러가 안나고. 실행하는 단계에서 ClassCast(형변환) 오류가 발생한다.
Exception in thread "main" java.lang.ClassCastException: class Student cannot be cast to class Teacher

그래서 제네릭은

  • 컴파일 단계에서도 오류가 발견할 수 있도록 하고
  • 형변환의 번거러움, 실수를 없애도록 형변환이 필요없도록 하고
  • 다양한 타입은 받아주는 특징은 수용한 문법이다.
profile
개발 블로그

0개의 댓글