기록양식 (TIL)
-사용 개념
-의문점 or 문제
-시도해 본 것들(+응용) or 삽질
-해결
-알게 된 점(회고)
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
은 출력할 때도 그 타입에 맞춰서 출력 가능하다.
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 등)을 선언- 받는 곳에서는 +
<맞는 타입>
추가해주기