[TIL] Generic 사용 이유

이해찬·2023년 7월 6일
0

TIL

목록 보기
7/20

23.07.06 - D+36, Generic

기록양식 (TIL)
-사용 개념
-의문점 or 문제
-시도해 본 것들(+응용) or 삽질
-해결
-알게 된 점(회고)

Generic

Generic을 왜 사용하게 되었나??

형변환의 번거러움

📟 타입, 출력

class Sample{
	private int obj;
    
    Sample(int x){
    	this.obj = x;
    }
    public void getObj(){
    	return obj;
    }
}

public static void main(String[] args){
	Sample s1 = new Sample(100);
    System.out.println(s1.getObj());
}

 // --> 100출력 , class 내의 매개변수를 String으로 바꾸고싶다면?? 
 
 
 class Sample{
	private String obj;
    
    Sample(String x){
    	this.obj = x;
    }
    public void getObj(){
    	return obj;
    }
}

public static void main(String[] args){
	Sample s1 = new Sample("hi");
    System.out.println(s1.getObj());
}

// --> hi 출력, 어떤 변수를 넣어도 변화하지 않고 다 수용할 수 있다면??

int,String -> 최상위 Object를 사용하면 가능

이런식으로 타입을 수정할 때마다 int -> String으로 수정해야 하는 번거로움이 있다.
이런 현상을 해결하기 위해서는 Object를 사용하면 되는데 한가지 문제가 있다.
변수를 받을때는 Object로 받을 수 있으나, 출력할 때는 출력하고자 하는 것으로 변환을 따로 해주어야 한다.

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

public class Java_Generic2{

	public static void main(String[] args){
		
		Person p1 = new Person("hi");
		System.out.println(p1.obj);
		
		String str = p1.obj; // --> 오류
        String str = (String)p1.obj;
	}
}

받을 때는 Object로 받을 수 있으나, 출력할 때는 캐스팅을 따로 해주어야 한다.
그런데 Generic 은 출력할 때도 그 타입에 맞춰서 출력 가능하다.


Generic 문법

class Sample<T>{
	private T obj;
	Sample(T x){this.obj=x;}
	T getObj(){return obj;}
	void printInfo(){System.out.println(obj.getClass().getName());}
}

public class Java100_Generic3{
	public static void main(String[] args){
	
		Sample<String>s1 = new Sample<String>("hi"); // --> 변환이 이루어지는 곳
		System.out.println(s1.getObj());
		
		Sample<Integer> s2 = new Sample<Integer>(100); // --> 변환이 이루어지는 곳
		System.out.println(s2.getObj());
		
		String str = s1.getObj();
		System.out.println(str.length());
	}
}
  • class + <T> class옆에 <>, 변수타입은 T (E,K,V,N 등)을 선언
  • 받는 곳에서는 +<맞는 타입> 추가해주기
profile
디자인에서 개발자로

0개의 댓글