Generic class
Generic[지네릭]은 하나의 타입에 의존하지 않고 모든 유형의 타입이 적용될 수 있는데 의미를 가진다.
what?
데이터의 형식에 의존하지 않고 선언할 수 있으며 선언한 generic 클래스의 객체를 사용할때 타입을 사용자가 지정할 수 있는 class이다.
why?
generic의 장점
=> 클래스 내부에서 타입을 지정하는 것이 아니라 외부에서 사용자에 의해서 지정되어 사용되기 때문에 타입을 체크하고 변환할 필요가 없으며 비슷한 기능을 사용할때 재사용성이 높아질 수 있다는 장점을 갖는다.
how?
지네릭 메소드를 정의하는 규칙
- 메소드 선언시 <>로 구분된 매게변수 유형 섹션이 존재.
- 매개변수는 ,로 구분

결과 :
integer : 2019
String : string 지네릭
1. generic class를 생성 => < > 안에 매게변수 유형을 적어줌.
- <T> : Type
- <E> : Element
등으로 적는다는 일반적인 규칙이 있지만 형태 선언은 사용자가 객체 생성때 해주기때문에 매개변수 유형에 대한 명을 적는다고 볼 때 Type, Ty, Ele, ELEM 등 유형의 이름은 상관없다.
=> 2개도 가능함.
2. generic class에서 사용할 메서드 들을 정의함.
일반적)
public void add(Integer t) 였다면 여기서(위의 코드)는 Integer 대신 유형을 받아온 <>안에 적어준 T를 넣어줌.
public void add(T t) => T를 정의한게 main이고 integerBox gereric class 객체에 의해 Integer 형태로 넘어옴.
*generic과 상관없지만 중요한부분!)
add method를 static으로 정의하지 않았기에 this를 사용할 수 있으며 static정의시 new를 통해 객체를 생성해줘야함.
=> 이전 포스팅 참고(static과 객체와의 관계)
*추가포스팅 [ 코딩하면서 느낀점!! 주의하기! ]
1. generic역시 static과 사용이 불가능.
2. generic의 메소드 타입을 T혹은 받은 인자를 T 형태라고 했을 때 T가 무엇일지 정의되어있지 않기에 서로 연산을 할 수 없음.
3. T -> Double로 형변환이 가능. 하지만 어떤 변수를 T타입으로 형변환하는 코드에서는 에러가남.
이유 : T가 어떤 형태인지 모르기때문에 모든 형태에서 서로서로 형변환이 가능하지 않아서.
4. 타입을 사용할 때, int, double 등을 사용못함 => 변수의 형태를 나타내는 클래스 객체를 적어줘야함.
https://includestdio.tistory.com/1 의 참고