아하하.. 반갑다 java.lang.reflect 여기서도 보는구나  
아래 매개변수 선언은 상속 계층트리에 속하는 타입이라면 매개변수로 받을수 있다는
의미!  ( Class<? extends HttpServlet> <--요까지가 클래스 타입   c )
    private Method[] getAllDeclaredMethods(Class<? extends HttpServletc) {
        Class<?> clazz = c;
        Method[] allMethods = null;
//아래는 상속 계층에서 HttpServlet 계층 트리에 속한 내가 정의한 실제 구체적 타입 부터 
최대 HttpServlet 타입 바로전 까지 반복하는 작업 (간단하게 내가 정의한 클래스계층 -> HttpServlet 전까지 조회 한다는 의미)
        while (!clazz.equals(HttpServlet.class)) {
//이번 턴에 찾아낸 클래스에 정의된 모든 메서드 타입 객체(object에 상속받았으니 객체)를 가져와라~
            Method[] thisMethods = clazz.getDeclaredMethods();
//이미 찾은게 있냐?
            if (allMethods != null && allMethods.length > 0) {
//기존에 찾은 메소드를 임시변수인 서브클래스 메소드에 담아두고
                Method[] subClassMethods = allMethods;
//새로 찾은 메소드와 기존 메소드의 갯수를 합친 크기만큼 새롭게 저장 공간을 할당한다.
                allMethods =
                    new Method[thisMethods.length + subClassMethods.length];
//많이 보던 시스템 어레이카피 = 깊은 복사
//방금 찾은 따뜻한 메소드 부터 배열의 앞에 복사해준다.
                System.arraycopy(thisMethods, 0, allMethods, 0,
                                 thisMethods.length);
//기존에 찾았던 메소드들은 그 뒤에 복사해준다.
                System.arraycopy(subClassMethods, 0, allMethodsthisMethods.length,
                                 subClassMethods.length);
            } else {
//처음 찾은 메소드라면
                allMethods = thisMethods;
            }
//현재 클래스(http서블릿클래스의 파생 클래스)의 상위 클래스에 선언된 메서드도
//찾으러 가자
            clazz = clazz.getSuperclass();
        }
//찾은 메서드들 있으면 리턴, 못찾았으면 빈 메서드 생성해서 리턴
        return ((allMethods != null) ? allMethods : new Method[0]);
    }
//결국 내가 만든 클래스부터 최상위 클래스(httpServlet)전까지 정의된 모든 메서드들의 정보를 찾아냈다.
//이 의미는 httpServlet에 정의된 메서드중 무엇을 내가 재정의 했는지를 알 수 있게 해준다.


'프로그래밍 > JSP' 카테고리의 다른 글

jsp에서 빈의 사용3  (0) 2014.01.01
jsp에서 빈의 사용2  (0) 2014.01.01
빈을 이용한 컴포넌트 방식의 설계1  (0) 2014.01.01
jsp 스크립트  (0) 2014.01.01
part2(2013/11/27)  (0) 2014.01.01
by givingsheart 2014. 1. 1. 15:08