ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Generic Method
    Java 2018. 1. 24. 10:47
    반응형

    < Generic Method >

    // Generic은 Type의 자유

    public class Box<T> {
        
        private T t;

        public T getT() {
            return t;
        }

        public void setT(T t) {
            this.t = t;
        }
        
    }


    public class Gmethod {
        
        // 매개변수 사용
        public <T> void method01(T t) {
            System.out.println("입력 값 : "+t);
        }
        
        // 매개변수, 반환타입 사용
        public <T> T method2(T t) {
            return t;
        }
        
        // 활용
        public <T> Box<T> method3(T t){ // 반환 값이 Box<T> 타입이기 때문에 메소드 타입에 Box<T> 사용
            Box<T> box = new Box<T>();
            box.setT(t);
            return box; // Box<T> 타입 반환
        }
        
    }


    public class Main {

        public static void main(String[] args) {
            
            Gmethod gm = new Gmethod();
            
            // 인자 값의 타입에 상관없이 실행된다
            gm.method01(100); // int
            gm.method01("Moo"); // String
            gm.method01(true); // boolean

    System.out.println(gm.method2(30));
    System.out.println(gm.method2("Sang"));
    System.out.println(gm.method2(275.25));

    Box<Integer> box = gm.method3(100);
    System.out.println(box.getT());
            
    System.out.println(gm.method3(25).getT());
            
        }

    }


    < Generic Method - inheritance >

    public class BasicInfo<N,A> {
        
        private N name;
        private A age;
        
        public N getName() {
            return name;
        }
        public void setName(N name) {
            this.name = name;
        }
        public A getAge() {
            return age;
        }
        public void setAge(A age) {
            this.age = age;
        }
        
    }


    public class DetailInfo<N,A,H> extends BasicInfo { // BasicInfo<N,A>로 안해주면 참조한다.
    // BasicInfo<N,A>로 하면 타입 순서를 맞춰야 한다.

        private H hobby;

        public H getHobby() {
            return hobby;
        }

        public void setHobby(H hobby) {
            this.hobby = hobby;
        }

    }


    public class Main {

        public static void main(String[] args) {
            
    DetailInfo<Integer, String, String> di = new DetailInfo<>(); // 다이아몬드 연산자 <>으로 비워두면
                                                                // 명시한것보다 왼쪽에서 참조해서 사용한다.        

            di.setAge(26);
            di.setName("Sangmoo");
            di.setHobby("Soccer");
            
            System.out.println("나이 : "+di.getAge());
            System.out.println("이름 : "+di.getName());
            System.out.println("취미 : "+di.getHobby());
            
        }

    }

    < Generic을 사용하다가 원치 않는걸 제한 할때는 typeBound, WhildCard사용 >

    typeBound는 위에서 아래로만 사용 가능

    WhildCard는 super()를 이용해서 ex) Box<? super Regular> box : Box와 Regular만 사용 가능


    반응형

    'Java' 카테고리의 다른 글

    Java - Map  (0) 2018.01.25
    Java - Collection  (0) 2018.01.25
    Java - Generic  (0) 2018.01.24
    Java - StringBuffer & StringBuilder  (0) 2018.01.23
    Java - String  (0) 2018.01.23

    댓글

Designed by Tistory.