본문 바로가기
activity/인프런 워밍업 클럽

[인프런 워밍업 클럽 0기] 첫 번째 과제 - Annotation 개념과 특징, 커스텀 어노테이션 만들기

by dani0312 2024. 2. 19.

✔️1주차 커리큘럼

DAY1은 OT를 진행하여 DAY2인 오늘부터 강의를 듣고 과제를 수행한다.

 

강의

서버 개발을 위한 환경 설정 및 네트워크 기초

스프링 프로젝트를 시작하는 방법과 서버를 만들기 전 네트워크 및 관련된 지식들에 대해 배울 수 있었다. 또한 API진입 지점인 Controller통해 GET API를 개발하는 것을 배우고 실습하였다.


과제

<과제 내용>

우리는 최초로 API를 만들어 보았습니다. GET API를 만들기 위해 사용했던 어노테이션에 익숙하지 않다면 자바 어노테이션에 대해서 몇 가지 블로그 글을 찾아보세요! 다음 질문을 생각하며 공부해보면 좋습니다! 😊

  • 어노테이션을 사용하는 이유 (효과) 는 무엇일까?
  • 나만의 어노테이션은 어떻게 만들 수 있을까?

 

📌Annotation알아보기

◾Annotation이란

어노테이션이란 java5버전에서 추가된 기능으로 사전적으로 '주석'이라는 의미를 가진다. 그러나 우리가 아는 흔히 사용하는 주석의 기능보다는 그 이상의 역할을 한다. 

 

자바의 어노테이션은 소스코드에 추가해서 사용할 수 있는 메타데이터의 일종이다. 사용시 골벵이(@)를 이용하여 `@Getter`와 같이 활용한다.

 

 

◾Annotation을 사용하는 이유

Annotation의 특징이자 사용하는 이유에 대해 알아보자

  • 코드 문서화와 가독성 향상: 코드의 의도나 사용 방법 등을 명시적으로 표현할 수 있어 코드의 가독성과 문서화가 향상된다.
  •  코드 자동 생성: 프로그램을 빌드 시 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
  •  컴파일 타임 검사 및 경고: 어노테이션을 사용하면 컴파일러에게 문법 에러를 체크할 수 있도록 정보를 제공한다. 
  •  런타임 처리 및 동적 처리: 어노테이션은 리플렉션을 통해 런타임에 클래스나 메서드 등의 정보를 동적으로 분석할 수 있다. 

어노테이션을 직접 사용해보니 가독성, 코드 자동 생성 이 2가지가 정말 큰 장점으로 다가왔다.

 

 

더보기 - Annotation 종류에 대한 단락은 아직은 모르는 것이 많은 것 같고 잘못된 정보로 전달될 수도 있다는 생각에 접어두었습니다 이 외에도 어노테이션 종류가 있을 수 있습니다. 잘 아시는 분이 계시다면 댓글 부탁드립니다🥹

더보기

◾Annotation 종류

Java의 어노테이션은 크게 3가지로 나뉜다.  built-in(내장)어노테이션과 Meta(메타)어노테이션, Custom(커스텀) 어노테이션이 존재한다.

 

built-in어노테이션

- Java코드에 적용되는 어노테이션

- @Override, @Deprecated, @SuppressWarnings 등이 존재

예를 들어, @Override는 해당 메서드가 상위클래스에서 오버라이딩된 메서드임을 나타낸다. 

 

meta 어노테이션

- 다른 어노테이션에 적용되기 위한 어노테이션

- @Retention, @Documented, @Target, @Ingerited, @Repeatable 등이 존재

예를 들어, @Target은 어노테이션이 적용될 수 있는 대상을 지정한다.

 

custom 어노테이션

- 사용자가 개발의 편의를 위해 정의하는 어노테이션

- 어노테이션은 특별한 종류의 어노테이션이며, 일반 인터페이스와 구분을 위해 @를 앞에 붙여 선언한다.

 

 

 

◾Annotation 만들기 (Custom 어노테이션) 

1. 어노테이션 정의하기

`@interface` 를 이용하여 어노테이션을 생성한다. 

 

 

2. 메타 어노테이션 추가하기

필요한 메타 어노테이션을 추가해준다. 또한 다른 필요한 어노테이션도 추가해준다.

* 메타 어노테이션 종류

@Retention:

어노테이션이 적용이 유지되는 범위

@Target:

어노테이션이 적용되는 대상

@Documented:

어노테이션 정보가 javadoc 문서에 포함되게 함

@Inherited:

어노테이션이 하위 클래스에 상속되도록 함

 

@Retention 옵션 (유지 범위)

더보기
RetentionPolicy.SOURCE: 소스 코드 수준에서만 유지되며, 컴파일 이후 제거됨
RetentionPolicy.CLASS: 클래스 파일에 기록되지만 런타임에는 사용되지 않음
RetentionPolicy.RUNTIME: 런타임까지 유지되며, 리플렉션을 통해 런타임에 어노테이션 정보를 읽을 수 있음

 

@Target 옵션(적용 대상)

더보기
ElementType.TYPE: 클래스, 인터페이스, 열거형
ElementType.METHOD: 메서드
ElementType.FILED: 필드
ElementType.CONSTRUCTOR: 생성자
ElementType.PACKAGE: 패키지

 

 

 

3. 어노테이션 기능을 할 코드 추가하기

 

 

4. 어노테이션 사용하기

 

MyClass에 붙인 어노테이션 정보를 다른 곳에서 활용할 수도 있다.

 

 

 

 

잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다❤️

좋은 하루 되세요😊 

 

 


Reference

자바와 스프링 부트로 생애 최초 서버 만들기 [서버 개발 올인원 패키지] / 최태현 / 인프런 강의

 

https://ittrue.tistory.com/15

https://velog.io/@eia51/Annotation-%EC%99%84%EC%A0%84-%EC%A0%95%EB%B3%B5%EA%B8%B0

https://pamyferret.tistory.com/47

https://mangkyu.tistory.com/130

 

 

 


/* 내가 추가한 코드 */ /* 내가 추가한 코드 끝끝 */