자바에서 어떤 클래스 안에 있는 메소드 이름들만 반환해줄수있는게 있나요??

조회수 4300회

제가 어떤 기능을 가진 클래스를 만들고 그 클래스를 메뉴에서 불러서 그 클래스 안에있는 메소드이름을 콘솔창에서

1.~ 2.~ 3.~

이렇게 만든후 번호를 선택하면 클래스의 메소드를 실행시키고 싶습니다 혹시 getName같은 함수가 있나요? 아니면 클래스마다 배열선언해서 넣어주고 그걸 반환해야하나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 리플렉션을 사용하시면 됩니다.

    아래는 간단한 예제이고, 자세한 사용법은 링크 참고해 주세요 :)

    입력

    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.lang.reflect.Type;
    
    public class Lambda {
      public void a() { }
      public int b() { return 12; }
      public String c() { return ""; }
    
      public static void main(String args[]) {
        Class c = Lambda.class;
        Method[] m = c.getDeclaredMethods();
    
        for (int i = 0; i < m.length; i++) {
          System.out.println(m[i].toString());
        }
      }
    }
    

    출력

    public static void Lambda.main(java.lang.String[])
    public java.lang.String Lambda.c()
    public void Lambda.a()
    public int Lambda.b()
    
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 자바의 Object 클래스는 자바의 모든 클래스의 공통 특성을 추출하여 만든 클래스입니다.

    이 클래스가 가지고 있는 메소드는 자바의 다른 모든 클래스들이 상속받기 때문에 반드시 알아두시는 것이 좋은데요^

    그 중에 getClass()는 객체가 속하는 클래스의 정보를 알아내는 메소드입니다. 객체가 속하는 클래스의 정보를 Class 타입의 객체로 만들어서 리턴해 줍니다.

    Class cos = obj.getClass();

    여기서 Class 타입은 JDK 라이브러리의 java.lang 패키지에 속하는 클래스 이름으로 클래스에 대한 여러 가지 정보를 담는 기능을 합니다. 이 클래스의 get이라는 이름으로 시작하는 메소드를 이용해서 해당 정보를 가져올 수 있습니다.

    // Rectangle.java
    public class Rectangle {
        int width, height;
        Rectangle(int width, int height) {
            this.width = width;
            this.height = height;
        }
        int getArea() {
            return width * height;
        }
    }
    
    // ObjectExample.java
    public class ObjectExample {
        public static void main(String[] args) {
            Rectangle obj = new Rectangle(10, 20);
            Class cos = obj.getClass();
            String name = cls.getName(); // 클래스의 이름을 리턴
    
            System.out.println("클래스 이름: " + name);
    
            Class superCls = cls.getSuperClass(); // 슈퍼클래스의 정보를 리턴
            String superName = superCls.getName();
    
            Field field[] = cos.getDeclaredFields(); // 클래스에 선언되어 있는 필드 정보를 가져옴
    
            System.out.println("필드: ");
    
            for(int cnt = 0; cnt < field.length; cnt++) {
                System.out.println("    " + field[cnt]);
            }
    
            Method method[] = cls.getDeclaredMethods(); // 클래스에 선언되어 있는 메소드 정보를 가져옴
    
            System.out.println("메소드: ");
    
            for(int cnt = 0; cnt < method.length; cnt++) {
                System.out.println("     " + method[cnt]);
            }
        }
    }
    

    실행 결과는 다음과 같습니다.

    클래스 이름: Rectangle 슈퍼클래스 이름: java.lang.Object 필드: int Rectangle.width int Rectangle.height 메소드: int Rectangle.getArea()

    질문하신 문제를 해결하기 위해서는 Class 클래스의 getDeclaredMethods()를 사용해서 해당 메소드 정보를 얻어와서 사용하시면 되지 않을까요?^

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)