JAVA

자바 제네릭 예제

Son 2021. 6. 8. 00:12

package org.opentutorials.javatutorials.generic;
class StudentInfo{
    public int grade;  //멤버변수
    StudentInfo(int grade){ this.grade = grade; }  
}
class StudentPerson{
    public StudentInfo info;    //멤버변수
    StudentPerson(StudentInfo info){ this.info = info; }  //생성자
}
class EmployeeInfo{
    public int rank;    //멤버변수
    EmployeeInfo(int rank){ this.rank = rank; }  //생성자
}
class EmployeePerson{
    public EmployeeInfo info;    //멤버변수
    EmployeePerson(EmployeeInfo info){ this.info = info; }  //생성자
}
public class GenericDemo {
    public static void main(String[] args) {
        StudentInfo si = new StudentInfo(2);   /StudentInfo의 클래스의 si라는 인스턴스를 생성하고 StudentInfo의 생성자에2를 넣어준다*/

        StudentPerson sp = new StudentPerson(si); /*StudentPerson의 클래스에 sp라는 인스턴스를 생성하고 StudentPerson의 생성자에 si인스턴스를 넣어준다*/

        System.out.println(sp.info.grade); /* sp인스턴스를 info의 값을 grade에 넣어주고 grade를 출력시킨다 = 2 */  

        EmployeeInfo ei = new EmployeeInfo(1); /*EmployeeInfo클래스에 1이라는 값을 넣어주고 rank가 1이되는 것이 ei라는 인스턴스에 담긴다*/

        EmployeePerson ep = new EmployeePerson(ei); /*EmployeePerson 클래스 ep인스턴스안에  EmployeePerson클래스에 (ei)인스턴스가 들어간 값이 담긴다*/
        System.out.println(ep.info.rank); /* ep인스턴스의 info 값을 rank에 넣고 출력 = 1 */
    }  
}
/*class StudentPerson{
    public StudentInfo info;    
    StudentPerson(StudentInfo info){ this.info = info; }  

  class EmployeePerson{
    public EmployeeInfo info;    
    EmployeePerson(EmployeeInfo info){ this.info = info; }  
}
/*의 형식이 중복되어 복잡한 것을 알 수 있다 이것을 제네릭을 통해 코드를 간결하게 한다
} */

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package org.opentutorials.javatutorials.generic;
class StudentInfo{
    public int grade;
    StudentInfo(int grade){ this.grade = grade; }
}
class EmployeeInfo{
    public int rank;
    EmployeeInfo(int rank){ this.rank = rank; }
}
class Person<T>{
    public T info;
    Person(T info){ this.info = info; }
}
public class GenericDemo {
    public static void main(String[] args) {
        Person<EmployeeInfo> p1 = new Person<EmployeeInfo>(new EmployeeInfo(1));
        EmployeeInfo ei1 = p1.info;
        System.out.println(ei1.rank); // 성공
         
        Person<String> p2 = new Person<String>("부장");
        String ei2 = p2.info;
        System.out.println(ei2.rank); // 컴파일 실패 object클래스라서 문법적인 오류가 없지만 실행했을때 데이터 타입을 입력하지 않았기에 실행오류가 발생한다
    }
}