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


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

1.~ 2.~ 3.~

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

  • 2016년 04월 15일에 작성됨

조회수 283


2 답변


좋아요
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()

  • 2016년 04월 16일에 수정됨
    프로그래밍 언어를 좋아하는 프로그래머
  • 2016년 04월 16일에 작성됨
    프로그래밍 언어를 좋아하는 프로그래머


자바의 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()를 사용해서 해당 메소드 정보를 얻어와서 사용하시면 되지 않을까요?^

  • 2016년 04월 16일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close