[인프런 워밍업 클럽 0기] BE 1일차 과제

김영훈·2024년 2월 19일
0
post-thumbnail

<과제 내용>

진도표 1일차와 연결됩니다.

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

[질문]

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

어노테이션을 사용하는 이유

어노테이션

  • 어노테이션은 다른 프로그램에게 유용한 정보를 제공하기 위해 사용되는 것으로, 주석과 같은 의미를 가진다.

  • 어노테이션은 @를 사용하여 작성자에게 해당 타겟에 대한 동작을 수행하는 프로그램 외에는 다른 프로그램에 영향을 주지 않는다.

어노테이션을 사용하는 이유

  1. 컴파일 시점 에러 확인

    • 컴파일러에게 문법 에러를 체크하도록 정보를 제공하여 안전성을 증가시킨다.
  2. 간결함을 통한 가독성 향상과 유지보수 난이도 감소

    • 불필요한 반복 코드를 줄여, 개발자가 비지니스 로직에 더 집중할 수 있게 만들어 준다.
  3. 런타임에 특정 기능을 실행하도록 정보를 제공한다.

    • 어노테이션이 지정된 대상에 대해 특정 작업을 수행하도록 할 수 있다.

나만의 어노테이션은 어떻게 만들 수 있을까?

1. 어노테이션 생성

public @interface Calculator{ // 인터페이스의 앞에 @를 붙인다.

}

2. 메타 어노테이션 지정

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
// 메타 어노테이션을 통해 유지되는 범위와 사용되는 범위를 지정할 수 있다.
public @interface Calculator{ 

}

메타 어노테이션이란?

  • 다른 @어노테이션에도 사용되는 어노테이션을 말하며, 주로 커스텀 어노테이션을 만들때 사용된다.

@Target

  • @Target 어노테이션의 적용 대상
ElementType범위
TYPE클래스, 인터페이스, Enum
FIELD필드( 멤버 변수, Enum상수 )
METHOD메서드
PARAMETERparameter(매개변수)
CONSTRUCTOR생성자
LOCAL_VARIABLE로컬 변수
ANNOTATION_TYPE어노테이션
PACKAGE패키지

@Retention

  • @Retention 어노테이션이 유지정책
RetentionPolicy
SOURCE클래스 파일이 되기 이전
CLASS런타임이 전까지
RUNTIME실행 시

@Doucumented

  • @Doucumented 해당 어노테이션을 javadoc에 포함시킨다.

@Inherited

  • 어노테이션의 상속을 가능하게 한다.

@Repeatable

  • 연속적으로 어노테이션을 사용할 수 있게 한다.

나만의 어노테이션으로 간단한 계산기 만들기


위에서 만든 커스텀 어노테이션으로 간단한 계산기를 만들어 보았다.


@Annotation

  • @CalCulator

  • @Number1

  • @Number2


DTO

  • Example


Processor

  • MyCalculatorService

switch (cal) {
            case "ADD": //cal이 ADD 일 경우
                System.out.println("덧셈 : " + (num1 + num2));
                break;
            case "SUB": //cal이 SUB 일 경우
                System.out.println("뺄셈 : " + (num1 - num2));
                break;
            case "MUL": //cal이 MUL 일 경우
                System.out.println("곱셈 : " + (num1 * num2));
                break;
            case "DIV": //cal이 DIV 일 경우
                System.out.println("나눗셈 : " + (num1 / num2));
                break;
            default:
                System.out.println("오류");
                break;
        }
  • Main

    스캐너로 받은 값을 DTO에 담아서 Processor로 전달



실행 결과



0개의 댓글