Annotation
자바Annotaion(@)은 다른 프로그램에 유용한 정보를 제공하는 주석과 같은 의미 가지는 기능
예외처리
try예외 발생 가능성이 있는 코드를 감싸고, 예외 발생 시 프로그램 흐름 제어
throw특정 상황에서 개발자가 의도적으로 예외를 발생시킴
메서드 이름 몰라도Router가 경로에 맞는 메서드를 찾아 실행
path값이 경로에 해당하는 메서드 찾아 호출
Method클래스와invoke()메서드를 사용해 메서드 동적 호출
예시 코드
package ex02;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Router router = new Router(new UserController()); // 객체 생성
Scanner sc = new Scanner(System.in);
String path = sc.nextLine();
router.routing(path);
}
}1차 개발자 작성 코드:RequestMapping,Router
package ex02;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD) // 메서드 위에만 사용
@Retention(RetentionPolicy.RUNTIME) // 언제까지? -런타임까지
public @interface RequestMapping { // RequestMapping -어노테이션 이름
String value(); // 키값이 value인 메서드
}package ex02;
import java.lang.reflect.Method;
public class Router {
UserController uc;
public Router(UserController uc) {
this.uc = uc;
}
// path값 -App에서 사용자가 입력
public void routing(String path) {
// 1. 메서드 찾기
Method[] methods = uc.getClass().getMethods(); // 캡슐화 -모든 메서드를 리턴
// 2. 어노테이션 체크
// 무엇을 하는지 이해 -'어노테이션 찾는 방법'
for(Method m : methods) {
RequestMapping rm = m.getAnnotation(RequestMapping.class); // 메서드에 어노테이션 있는지 확인
// 3. value와 path 일치 확인해서 일치하면 invoke 하기
if(rm == null) break; // 없으면 종료
if (rm.value().equals(path)) {
try {
// 동일하면 invoke(호출) -메서드 이름 몰라도 호출 가능
m.invoke(uc);
} catch (Exception e) {
throw new RuntimeException("메서드 실행중 오류 발생");
}
}
}
}
}2차 개발자 작성 코드:UserController Router을 보고 작성
package ex02;
publicass UserController {
@RequestMapping("/login")
public void login() {
System.out.println("로그인");
}
@RequestMapping("/join")
public void join() {
System.out.println("회원가입");
}
@RequestMapping("/logout")
public void logout() {
System.out.println("로그아웃");
}
@RequestMapping("/userinfo")
public void userinfo() {
System.out.println("유저정보");
}
}@RestController
@Controller와@ResponseBody를 결합한 어노테이션
@Controller요청을 처리하는 일반적인 컨트롤러@ResponseBody메서드의 반환 값을 HTTP 응답 본문(body)에 매핑
@RestController가 붙은 클래스 내의 메서드는 뷰를 반환하는 대신 데이터를 반환하며, 반환 데이터는 JSON 형식으로 변환예시 코드
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/home")
public String home() {
// RestController 요청되는 값 그대로 응답
return "<h1>Hello World</h1>";
}
}출력

Share article