자바에서 마주친 어노테이션
이해가 잘되지않아서 뜻에대해서 찾아보았다.
어노테이션
어노테이션에대해서 이해하기위해서
주석 vs 어노테이션 비교가 많은 도움이 되었다.
정확하게는
[ 주석 vs 코드를제어하는 어노테이션 vs 코드를 제어하지 않는 어노테이션 ]
특히 헷갈렸던게, 주석vs 코드를 제어하지 않는 어노테이션.
어떨때 주석을 쓰고 어떨때 코드를 제어하지 않는 어노테이션을 쓰는지 혼선이 왔다.
굳이 왜 존재하는지?? 에 대한 의문도 계속 떠올랐다.
구분 | 컴파일러 동작 | 제공하는 정보 | 활용 방식 |
주석 (Comment) | 컴파일 시 무시됨 | 주로 코드 설명, 문서화, 개발자간 의사소통에 사용 | 코드를 이해하고 문서화(메타데이터처럼 고정된 형식이 없다, 자유롭다, 그래서api로 읽어와서uml자동으로 그리기같은건 불가능) 하는 데 활용 |
코드 흐름을 제어하는 어노테이션 (Annotation Controlling Code Flow) |
컴파일 시 또는 런타임 시 특정 동작을 수행 | 특정 동작을 지정하여 컴파일러나 런타임에 전달하는 메타데이터 | AOP(Aspect-Oriented Programming), 메서드 호출, 의존성 주입(Dependency Injection) 등 코드의 동작을 제어하는 데 사용됨 |
코드 흐름을 제어하지 않는 어노테이션 (Annotation Not Controlling Code Flow) | 컴파일 시 또는 런타임 시 메타데이터를 제공 | 부가적인 정보를 제공하여 런타임 환경에서 활용되며, 주로 프레임워크나 라이브러리에서 활용 | 메타데이터를 API에서 읽어와서 해당 내용으로 문서화, ( 메타데이터는 특정 형식이 있어서 코드설명API에서 고정된 형식으로 메타데이터를 일괄적으로 가져와서 uml을 그리거나 할수있다 ,api는 특정 형식이 정해진것만 uml로 그릴수있다. ) 코드 검증, 프레임워크 설정 및 확장에 활용됨 |
일반적인 주석은 코드의 설명과 문서화를 위해 사용되지만, API 문서를 자동으로 생성하는 데에는 한계가 있습니다.
일반 주석은 주로 코드를 이해하고 유지보수하기 위해 사용되며, 사람이 코드를 읽을 때 도움을 주는 역할을 합니다. 그러나 API 문서를 자동으로 생성하기 위해서는 주석을 일정한 형식과 특정한 규칙에 맞추어 작성해야 합니다.
API 문서 생성 도구들은 일반 주석을 읽고 이를 문서화하는 데에는 제한적입니다. API 문서 생성기는 특정한 양식의 주석을 해석하고 이를 문서화하는 데에 최적화되어 있습니다. 일반 주석은 문서화 도구가 이해할 수 있는 명시적인 지침이나 구조가 부족하기 때문에 문서화 도구가 API 문서를 생성하는 데 사용되기 어렵습니다.
그러나 특별한 주석 포맷을 사용하는 주석 처리기 나 문서 생성 도구를 사용하면 일반 주석을 API 문서화에 사용할 수도 있습니다. 이러한 도구들은 주석을 특별한 형식으로 작성하도록 강제하고, 이를 기반으로 API 문서를 생성합니다.
따라서 API 문서를 자동으로 생성하기 위해서는 주석을 특정한 형식과 규칙에 맞추어 작성해야 하며, 이러한 목적을 위해 만들어진 문서 생성 도구를 사용하는 것이 좋습니다.
코드 흐름을 제어하는 어노테이션
실행 흐름 제어: 일부 어노테이션들은 코드의 실행 흐름을 변경하거나, 특정 메서드나 클래스의 동작을 결정짓는데 사용됩니다. 예를 들어, AOP(Aspect-Oriented Programming)를 위한 어노테이션들은 메서드 실행 전후에 특정 동작을 추가하거나 변경할 수 있습니다.
프레임워크 기능 활용: 특정 프레임워크나 라이브러리에서 제공하는 어노테이션들은 프레임워크 내의 기능을 활용하거나 특정 기능을 확장하기 위해 사용됩니다. Spring Framework의 @RequestMapping과 같은 어노테이션들이 여기에 해당합니다.
코드 흐름을 제어하지 않는 어노테이션
메타데이터 제공: 일부 어노테이션들은 코드에 부가적인 정보를 제공하거나 메타데이터를 추가하는 용도로 사용됩니다. 이러한 어노테이션들은 코드의 실행 흐름을 직접적으로 변경하지 않으며, 주로 문서화, 코드 리뷰, 검증, 또는 런타임 환경에 대한 정보 제공 등에 사용됩니다.
설명 및 구분: 보통 코드 흐름을 제어하는 어노테이션들은 특정 작업을 수행하는 것을 나타내는 경우가 많습니다. 반면, 코드 흐름을 제어하지 않는 어노테이션들은 주로 코드의 설명이나 부가적인 정보를 제공하는 용도로 사용되며, 코드 실행과는 직접적인 관련이 적을 수 있습니다.
이러한 차이점을 통해 코드 흐름을 제어하는 어노테이션과 그렇지 않은 어노테이션을 구별할 수 있습니다. 코드 흐름을 제어하는 어노테이션은 주로 프레임워크의 동작을 지정하거나 개발자가 작성한 코드의 동작을 변경하거나 확장하는 데 사용됩니다. 반면 메타데이터를 제공하는 어노테이션들은 코드의 실행 흐름에 직접적으로 개입하지 않고, 주로 코드의 설명이나 문서화에 활용됩니다.
코드흐름을 제어하지 않는 어노테이션과 일반주석(comment )와의 차이
코드 흐름을 제어하지 않는 어노테이션
의미 부여: 어노테이션은 주석과는 달리 코드에 부가적인 의미를 부여합니다. 코드의 메타데이터(metadata)를 제공하고, 프레임워크나 라이브러리에 정보를 전달하는 역할을 합니다.
런타임 사용: 어노테이션은 런타임 환경에서 읽을 수 있으며, 프레임워크나 라이브러리에서 사용될 때 동적으로 코드의 행동을 변경하거나 구성하는 데 사용됩니다.
컴파일 시 처리: 어노테이션은 일반적으로 컴파일러에 의해 처리됩니다. 이는 컴파일 시간에 어노테이션이 분석되고 특정 작업이나 설정이 수행될 수 있다는 것을 의미합니다.
일반 주석(comment)
코드 설명: 주석은 코드를 설명하거나 코드의 기능을 이해하기 쉽도록 돕는 데 사용됩니다. 컴파일되는 동안 무시되며, 단순히 사람이 읽을 수 있는 설명을 제공합니다.
컴파일 시 무시: 주석은 컴파일러에 의해 무시되므로, 런타임에는 어떠한 영향도 미치지 않습니다.
실행 흐름에 직접 영향 없음: 주석은 코드의 실행 흐름을 직접적으로 변경하지 않으며, 오로지 코드를 이해하고 설명하는 데에만 사용됩니다.
주요 차이점
컴퓨터 처리 여부: 어노테이션은 컴파일러나 런타임 시스템에 의해 처리되어 실행 흐름에 영향을 미칠 수 있지만, 주석은 컴파일러에 의해 무시되어 실행 시에는 아무런 영향을 주지 않습니다.
의미 부여: 어노테이션은 코드에 부가적인 의미를 부여하고, 주석은 단순히 코드를 설명하거나 문서화하는 데 사용됩니다.
요약하자면, 어노테이션은 코드의 실행 흐름을 변경할 수 있으며, 프레임워크나 라이브러리와 상호작용하기 위한 메타데이터를 제공하는 데 사용됩니다. 주석은 주로 코드를 설명하고 이해하기 쉽도록 돕는 데 사용되며, 컴파일 시에 무시되므로 실행 흐름에 직접적인 영향을 미치지 않습니다.
[ 메타데이터 ]
메타데이터는 데이터에 대한 정보를 제공하여 데이터를 이해하고 활용하는 데 도움을 줍니다. 아래는 메타데이터의 구체적인 예시 5가지입니다:
이미지 파일의 EXIF 데이터: 디지털 카메라로 찍은 사진에는 이미지의 크기, 촬영일자, 카메라 모델, 노출 시간 등의 정보가 포함됩니다. 이러한 정보는 이미지의 메타데이터로, 이미지를 관리하고 처리하는 데 사용됩니다.
MP3 파일의 ID3 태그: 음악 파일에는 아티스트 이름, 앨범 정보, 노래 제목 등이 ID3 태그라는 형태의 메타데이터로 저장됩니다. 음악 플레이어는 이 정보를 활용하여 음악을 분류하거나 재생 목록을 만드는 데 사용합니다.
웹 페이지의 메타 태그: 웹 페이지의 HTML 소스코드에는 페이지 제목, 설명, 키워드 등을 담은 메타 태그가 있습니다. 검색 엔진은 이러한 정보를 활용하여 검색 결과를 제공하는 데 활용합니다.
데이터베이스 테이블의 주석: 데이터베이스 테이블의 각 필드에는 해당 필드에 대한 설명이나 제약 조건 등을 주석으로 남길 수 있습니다. 이러한 주석은 데이터의 의미를 이해하고 쿼리를 작성하는 데 도움을 줍니다.
API 문서의 주석: 소프트웨어 개발에서는 코드의 함수나 클래스에 대한 설명을 주석으로 작성하여 API 문서를 생성합니다. 이러한 주석은 다른 개발자들이 코드를 사용하고 이해하는 데 도움을 줍니다.
코드 흐름을 제어하는 어노테이션
- 실행 흐름 제어: 일부 어노테이션들은 코드의 실행 흐름을 변경하거나, 특정 메서드나 클래스의 동작을 결정짓는데 사용됩니다. 예를 들어, AOP(Aspect-Oriented Programming)를 위한 어노테이션들은 메서드 실행 전후에 특정 동작을 추가하거나 변경할 수 있습니다.
- 프레임워크 기능 활용: 특정 프레임워크나 라이브러리에서 제공하는 어노테이션들은 프레임워크 내의 기능을 활용하거나 특정 기능을 확장하기 위해 사용됩니다. Spring Framework의 @RequestMapping과 같은 어노테이션들이 여기에 해당합니다.
코드 흐름을 제어하지 않는 어노테이션
- 메타데이터 제공: 일부 어노테이션들은 코드에 부가적인 정보를 제공하거나 메타데이터를 추가하는 용도로 사용됩니다. 이러한 어노테이션들은 코드의 실행 흐름을 직접적으로 변경하지 않으며, 주로 문서화, 코드 리뷰, 검증, 또는 런타임 환경에 대한 정보 제공 등에 사용됩니다.
- 설명 및 구분: 보통 코드 흐름을 제어하는 어노테이션들은 특정 작업을 수행하는 것을 나타내는 경우가 많습니다. 반면, 코드 흐름을 제어하지 않는 어노테이션들은 주로 코드의 설명이나 부가적인 정보를 제공하는 용도로 사용되며, 코드 실행과는 직접적인 관련이 적을 수 있습니다.
이러한 차이점을 통해 코드 흐름을 제어하는 어노테이션과 그렇지 않은 어노테이션을 구별할 수 있습니다. 코드 흐름을 제어하는 어노테이션은 주로 프레임워크의 동작을 지정하거나 개발자가 작성한 코드의 동작을 변경하거나 확장하는 데 사용됩니다. 반면 메타데이터를 제공하는 어노테이션들은 코드의 실행 흐름에 직접적으로 개입하지 않고, 주로 코드의 설명이나 문서화에 활용됩니다.
간접적으로 코드 흐름을 제어하는 어노테이션 @RequestMapping
Spring Framework의 @RequestMapping 어노테이션은 코드의 실행 흐름을 직접적으로 변경하는 것은 아니지만, 클라이언트의 HTTP 요청과 컨트롤러의 메서드를 매핑하여 특정 URL에 대한 요청을 처리하는 데에 사용됩니다. 이 어노테이션은 메서드 수준에서 사용되며, 요청된 URL 패턴과 매핑된 메서드가 요청을 처리하는 방식을 결정합니다.
@RequestMapping을 통해 실행 흐름이 변경되는 부분은 다음과 같습니다:
- HTTP 요청 처리: @RequestMapping은 HTTP 요청 (GET, POST, PUT, DELETE 등)과 연결되는데, 이를 처리하기 위해 특정 메서드에 매핑됩니다. 예를 들어, 특정 URL에 대한 GET 요청이 들어오면 @RequestMapping이 지정된 메서드가 호출되어 그 요청을 처리하게 됩니다.
- 메서드 실행: 해당 어노테이션이 지정된 메서드가 요청을 처리하고 실행됩니다. 이는 클라이언트 요청에 따라 특정 로직이 수행되는 부분입니다. 메서드 내부에서 비즈니스 로직을 실행하거나 다른 서비스를 호출하는 등의 작업을 수행할 수 있습니다.
- 응답 반환: 해당 메서드는 클라이언트에게 반환할 응답을 생성합니다. 이 응답은 주로 HTTP 응답 코드, 데이터, 뷰 페이지 등을 포함합니다.
Spring의 @RequestMapping을 통해 URL과 메서드를 매핑하고, 해당 메서드가 요청을 처리하는 방식을 결정하여 실행 흐름을 지정합니다. 이는 요청을 특정 메서드로 라우팅하여 특정한 동작을 수행하게 하며, 이로 인해 코드의 실행 흐름이 간접적으로 변경될 수 있습니다.
'기타 공부 기록 > 기타' 카테고리의 다른 글
GPT 윈도우 환경에서 사용하기 (0) | 2024.06.08 |
---|---|
정보처리기사 2024년 기준 무료 강의 (0) | 2024.02.06 |
notepad++에서 정규표현식으로 엔터(줄바꿈)을 공백으로 변경하기 (1) | 2023.12.18 |
microsoft remote desktop copy paste not working (0) | 2022.12.28 |