2021.11.18 TIL

서승원·2021년 11월 18일
0

TIL

목록 보기
21/68

invoke 함수호출
함수와 class를 호출하는 다양한 방법으로 새로운 방식의 코딩이 가능하다. class를 넘겨받기 위한 방법으로 class.forName("패키지.클래스명") 을 이용하면 패키지 내의 클래스의 이름만 이용해서 클래스를 넘겨받을 수 있고 [클래스명].class 를 이용해서 같은 파일 내의 클래스를 불러올 수 있고, obj.getClass()를 이용해 클래스를 가리키는 인스턴스를 이용해서 클래스를 불러올 수가 있다.

이방법을 이용해 클래스를 넘겨받은 뒤 Method 포인터를 이용해 메소드를 넘겨받아 invoke로 method를 호출하는 방법이다. getMethod를 이용할 때는 매개변수가 다른 같은 이름의 멤버 함수가 있을 때 매개변수를 class명.class 의 형태로 입력해야한다.

Method의 다양한 멤버함수들을 이용한 코드다. setCode라는 멤버함수를 String 문자열에 입력된 정보에서 code값과 함수명을 불러온 뒤 invoke로 실행시키기 위해 가장먼저 substring으로 두 값을 분리해준다. Method[] mtds = cls.getMethods(); 는 cls에 포함된 모든 멤버함수들을 불러와 Method[] 의 형태의 배열에 대입하는 것이다. for문을 이용해 mtds의 모든 요소를 반복하며 함수명과 String에서 뽑아낸 함수명과 일치하는 함수를 찾아낸 후 getParameterTypes() 를 이용해서 원하는 매개변수 형태와 일치하는 함수를 찾아낸다.
일치하는 함수를 찾아 String 매개변수라면, String에 포함된 문구를 code로 지정, int타입이라면 10101을 대입하게 된다.

Annotation
Annotation 개념은 클래스를 만든사람과 사용할 사람이 다른경우 클래스의 사용에 대해 권장사항을 정하고 싶을 때 비어있는 인터페이스를 이용해서 정보를 담는 용도로 사용한다.

NoPrint라는 Annotation을 지정해서 출력하지 않을 내용을 고르는 코드다. add 함수 위에는 @NoPrint로 Annotation 지정을 한다. 출력은 안되지만 함수동작은 하게 되고,if문에 의해서 getAnnotation을 대입받은 at 값이 null이면 Annotation에 지정이 되지않은 멤버 함수로 값이 출력되게 된다.

profile
2년차 백엔드 개발자, crimy

0개의 댓글