본문 바로가기
웹개발/기타

[웹개발] 어노테이션 (Annotation)

by 오엥?은 2023. 2. 9.
반응형


어노테이션

 

어노테이션(Annotation)은 후술하는 클래스, 메서드, 변수 등의 상태나 속성을 표시하기 위해 사용한다.

- @Deprecated [Class|Method] : 해당 클래스 혹은 메서드가 더 이상 사용될 수 없음을 의미한다. 물론 해당 어노테이션이 붙어 있어도 정상 작동은 하지만 보통 '다음 버전 부터 빠질겁니다~'라고 알려주는데 사용된다.

- @Override [Method] : 해당 메서드가 재정의(Override) 되었음을 알린다. 생략하여도 제 기능은 하지만 개발자로서의 입지가..

- @Controller [Class] : 해당 클래스가 스프링 부트가 인식해야 하는 컨트롤러(Controller)임을 알린다.
▪ value : 식별자를 직접 지정한다. 지정하지 않을 경우 컨트롤러 클래스의 이름을 사용한다.

- @RequestMapping [Class|Method] : 
▪ value : 맵핑할 주소를 명시한다. 클래스의 경우 포함하는 메서드 맵핑의 전역 접두어, 메서드의 경우 단순 맵핑이다.
▪ produces : 해당 맵핑의 응답 결과로 어떠한 컨텐트가 반환될지에 대한 설정이다. MIME 타입을 사용한다.
▪ method : 해당 맵핑이 어떠한 요청 방식에 대응할지에 대한 설정이다.
▪ 해당 어노테이션이 컨트롤러인 클래스에 부여 되었을 경우 해당 컨트롤러가 가지는 모든 해당 어노테이션이 붙은 메서드(맵핑 메서드)의 전역적인 접두어로서의 맵핑이 된다.
▪ 해당 어노테이션이 컨트롤러 내부의 메서드에 부여되었을 경우 해당 요청에 대한 행동(Action)을 실행할 메서드를 지정하게 된다.


▪ 주소 맵핑은 반드시 [Controller]/[Action] 의 형태로 작성해야하며 앞 [Controller] 의 이름은 ~Controller 의 클래스 이름 꼴에서 ~를, [Action]은 메서드의 이름을 채용한다. 가령 getIndex 는 index 로 postWrite 는 write 로


▫ 가령, 회원과 관련된 기증을 수행하는 클래스의 이름이 MemberController 이고, 그 내부의 로그인을 담당하는 메서드의 이름이 getLogin 이었다면, 각 맵핑은 /member, login 이 되므로 해당 메서드를 실행 할 수 있는 맵핑 주소는 ~/member/login 이 된다.
▫ 단, 맵핑 규칙에 예외가 있다면 HomeController 혹은 RootController 는 주소 상 [Controller] 부분이 생략될 컨트롤러이고, 이 때에 RequestMapping 의 value 값은 슬래쉬(/)로 지정한다.
▫ 또한 해당 [Controller] 주소부에 대한 [Action]이 생략되는 경우가 있는데 이 때에 메서드 이름은 ~Index 로 지정한다.
▫ 즉, HomeController 의 getIndex 메서드에 대한 맵핑은 각, /, / 이고, 접속 주소는 http://localhost:8080/ 이 된다.

- @RequestParam [Variable] : 발생한 요청의 매개변수 및 페이로드(Payload)에 있는 값을 받아오기 위해 사용한다.
▪ value : 매개변수 및 페이로드의 이름이다. 주로, <input> 태그의 name 속성 값과 일치해야 한다.
▪ required : 해당 매개변수 및 페이로드가 필수로 전달되어야 하는가의 여부이다. 기본 값은 true 이고, 이가 true 일 때 해당 매개변수 및 페이로드에 전달되지 않을 경우 400, Bad Request 오류가 발생한다.
▪ defaultValue : required 가 false 일 때, 해당 값이 전달되지 않은 경우 대신 사용할 기본 값에 대한 명시이다.
▪ 해당 어노테이션을 사용하는 변수가 기초 타입일 경우 required 및 defaultValue 와 무관하게 값이 전달되지 않을 경우 오류가 발생하니 사용에 유의한다. 전달 여부가 선택인 정수의 경우 int 대신 Integer 을 사용 할 수도 있다.

- @Service [Class] : 해당 클래스가 스프링 부트가 인식해야하는 서비스(Service)임을 알린다.
▪ value : 식별자를 직접 지정한다. 지정하지 않을 경우 클래스의 이름을 사용한다.

- @Mapper [Interface] : 해당 인터페이스가 스프링부트가 인식해야하는 매퍼(Mapper)임을 알린다.

- @Autowired [Constructor|Method|Member Variable] : 요구되는 타입을 스프링 부트가 알아서 객체화하여 전달하도록 한다. 단, 이 타입은 스프링부트가 인식 가능한 범위 내에 있어야만 한다. 클래스간(컨트롤러-서비스 간, 서비스-매퍼 간) 의존성 주입(Dependency Injection)을 위해 사용한다.

반응형

'웹개발 > 기타' 카테고리의 다른 글

[웹개발] CSS 밑줄 긋는 효과  (0) 2023.02.10
[웹개발] thymeleaf 를 이용한 공통 Header 만들기  (0) 2023.02.09
[웹개발] Mybatis  (0) 2023.02.09
[웹개발] 웹 (Web)  (0) 2023.02.09
[웹개발] intelliJ 와 GitHub 연동  (0) 2023.02.09