Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Python
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- springboot
- ์ฝ๋์
- ์ค๋ธ์
- MySQL
- ์๊ณ ๋ฆฌ์ฆ
- Git
- Gradle
- JPA
- ๋กฌ๋ณต
- ํด๋ฆฐ ์ฝ๋
- ํด๋ฆฐ์ฝ๋
- mariadb
- thymeleaf
- Vue.js
- ์คํ๋ง
- golang
- GitHub
- go
- java
- ๊ธฐ์ด100์
- Codeup
- Spring
- H2 ์ค์น
- ๊ฐ์ฌ์ค
- ํ์ด์ฌ
- Postman
- spring security
- Spring Boot
Archives
- Today
- Total
nyximos.log
[Java] ์ ๋ ธํ ์ด์ ๋ณธ๋ฌธ
๐ฉ๐ ๋ชฉํ
์๋ฐ์ ์ ๋ ธํ ์ด์ ์ ๋ํด ํ์ตํ์ธ์.
๐ฉ๐ป ํ์ตํ ๊ฒ
- ์ ๋ ธํ ์ด์ ์ ์ํ๋ ๋ฐฉ๋ฒ
- @retention
- @target
- @documented
- ์ ๋ ธํ ์ด์ ํ๋ก์ธ์
Annotation
- ์ธํฐํ์ด์ค ๊ธฐ๋ฐ์ผ๋ก ์ฃผ์์ฒ๋ผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉฐ ํ๋ก๊ทธ๋จ์ ๋ํด ์๋ฏธ๋ฅผ ๋ถ์ฌํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- JDK 1.5์ ์ถ๊ฐ๋์๋ค.
- JDK์์ ์ ๊ณตํ๋ annotation์ java.lang.annotation ํจํค์ง์ ํฌํจ๋์ด ์๋ค.
- Built in Annotation๊ณผ Meta-Annotation์ผ๋ก ๋๋๋ฉฐ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ง๋ค์ด๋ด๋ Custom Aannotation์ด ์๋ค.
์ฉ๋
- Information for the compiler- Annotations can be used by the compiler to detect errors or suppress warnings.
- ์ฃผ์์ ์ปดํ์ผ๋ฌ์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ฑฐ๋ ๊ฒฝ๊ณ ๋ฅผ ์ต์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
- Compile-time and deployment-time processing - Software tools can process annotation information to generate code, XML files, and so forth.
- ์ํํธ์จ์ด ๋๊ตฌ๋ ์ฃผ์ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ฝ๋, XML ํ์ผ ๋ฑ์ ์์ฑํ ์ ์๋ค.
- Runtime processing - Some annotations are available to be examined at runtime.
- ์ผ๋ถ ์ฃผ์์ ๋ฐํ์์ ๊ฒ์ฌํ ์ ์๋ค.
Built-in Annotation
- JDK์ ๋ด์ฅ๋์ด ์๋ค.
@Override
- ๋ฉ์๋ ์์๋ง ๋ถ์ผ ์ ์๋ค.
- ์ํผํด๋์ค์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์ปดํ์ผ๋ฌ์๊ฒ ์๋ ค์ค๋ค.
- ์คํ๊ฐ ๋ฐ์ํ ๋ถ๋ถ์ ์ก์๋ผ ์ ์๋ค.
- → @Override ์์ฐ๋ฉด ์ปดํ์ผ๋ฌ๋ ์๋ก์ด ์ด๋ฆ์ ๋ฉ์๋๊ฐ ์ถ๊ฐ๋ ๊ฒ์ผ๋ก ์ธ์
class Child extends Parent {
@Override
void parentmethod();
}
@Deprecated
- ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ํ๋๋ ๋ฉ์๋์ ๋ถ์ธ๋ค.
- ์๋ฅผ ๋ค์ด java.util.Date์ ๋๋ถ๋ถ์ ๋ฉ์๋์๋ ์ด ์ด๋ ธํ ์ด์ ์ด ๋ถ์ด์๋ค.
- ๊ธฐ์กด์ ๊ฒ ๋์ ์๋ก ์ถ๊ฐ๋ ๊ฐ์ ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ์ ๋ํ๋ค.
Meta-Annotation
- ์ด๋ ธํ ์ด์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ด๋ ธํ ์ด์
@Target
- ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๊ฐ๋ฅํ ๋์์ ์ง์ ํ๋๋ฐ ์ฌ์ฉ
- ์ฌ๋ฌ ๊ฐ์ ์ง์ ํ ๋๋ ๊ดํธ { } ๋ฅผ ์ฌ์ฉ
- ์ ์ฉ ๋์ ์ข ๋ฅ : ANNOTATION_TYPE, CONSTRUCTOR, FILD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE, TYPE_PARAMETER, TYPE_USE
@Retention
- ์ด๋ ธํ ์ด์ ์ด ์ ์ง๋๋ ๊ธฐ๊ฐ์ ์ง์ ํ๋๋ฐ ์ฌ์ฉ
- ์ ์ง์ ์ฑ ์ ์ธ๊ฐ์ง๊ฐ ์๋ค.
์ ์ง ์ ์ฑ retention policy
- SOURCE : ์์ค ํ์ผ์๋ง ์กด์ฌ ๐โ๏ธ, ํด๋์คํ์ผ์๋ ์กด์ฌ ๐ โ๏ธ
- CLASS : ํด๋์ค ํ์ผ์ ์กด์ฌ ๐โ๏ธ, ์คํ์ ์ฌ์ฉ ๐ โ๏ธ, Default
- RUNTIME : ํด๋์ค ํ์ผ์ ์กด์ฌ ๐โ๏ธ, ์คํ์ ์ฌ์ฉ ๐โ๏ธ'
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {}
@Documented
- ์ด๋ ธํ ์ด์ ์ ๋ํ ์ ๋ณด๊ฐ javadoc์ผ๋ก ์์ฑํ ๋ฌธ์์ ํฌํจ๋๋๋ก ํ๋ค.
- ์๋ฐ์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์ ๋ํ ์ด์ ์ค์ @Override์ @SuppressWarnings๋ฅผ ์ ์ธํ ์ด๋ ธํ ์ด์ ์ ๋ถ์ด์๋ค.
์ปค์คํ ์ ๋ํ ์ด์ ์ ์
- @๊ธฐํธ๋ฅผ ๋ถ์ด๋ ๊ฒ์ ์ ์ธํ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๊ฒ๊ณผ ๋์ผํ๋ค.
- ๋ชจ๋ ์ ๋ํ
์ด์
์ ์กฐ์์ Annotation์ด๋ค.
- ์๋ฌต์ ์ผ๋ก java.lang.annotation.Annotation ํ์ฅ
- → equals(), hashCode(). toString() ์ฌ์ฉ ๊ฐ๋ฅ
- ์ ๋ํ ์ด์ ์ ์์ ํ์ฉ๐ โ๏ธ → ๋ช ์์ ์ผ๋ก ์กฐ์์ผ๋ก ์ง์ ํ ์ ์๋ค.
- ์ ๋ํ ์ด์ ์ ์์๋ ๋ฐํ๊ฐ์ด ์๊ณ , ๋งค๊ฐ๋ณ์๋ ์๋ ์ถ์ ๋ฉ์๋์ ํํ๋ฅผ ๊ฐ์ง๋ค.
- ์์์ ํ์ ์ ๊ธฐ๋ณธํ, String, enum, ์ ๋ํ ์ด์ , Class๋ง ํ์ฉํ๋ค.
- ( ) ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ ์ ์๋ค.
- ์์ธ๋ฅผ ์ ์ธํ ์ ์๋ค.
- ์์๋ฅผ ํ์ ๋งค๊ฐ๋ณ์๋ก ์ ์ํ ์ ์๋ค.
@interface ์ ๋ํ
์ด์
๋ช
{
ํ์
์์๋ช
();
int count();
String[] testTools();
TestType testType();
}
- ๊ฐ ์์๋ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ ๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ผ๋ก null์ ์ ์ธํ ๋ชจ๋ ๋ฆฌํฐ๋ด์ด ๊ฐ๋ฅํ๋ค.
@interface TestInfo {
int count() default 1;
}
@TestInfo // @TestInfo(count=1)๊ณผ ๋์ผ
public class NewClass { ... }
- ์ ๋ํ ์ด์ ์์๊ฐ ํ๋๋ฟ์ด๊ณ ์ด๋ฆ์ด value์ผ ๋, ์์์ ์ด๋ฆ์ ์๋ตํ๊ณ ๊ฐ๋ง ์ ์ด๋ ๋๋ค.
@interface TestInfo {
String value();
}
@TestInfo("passed") // @TestInfo(value="passed")์ ๋์ผ
class NewClass {...}
์ ๋ ธํ ์ด์ ํ๋ก์ธ์
- ์๋ฐ ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ ์ผ์ข
- ์ด๋ ธํ ์ด์ ์ ๋ํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฒ์ฌ, ์์ , ์์ฑํ๋ ์ญํ
- ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ ธํ ์ด์ ํ๋ก์ธ์๊ฐ ํ์
- ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผ ํ๋ ์ค์ ์๋ก์ด ์์ค์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ์์ค์ฝ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ํด๋์ค(๋ฐ์ดํธ์ฝ๋)๋ ์์ฑํ ์ ์๊ณ ๋ณ๊ฐ์ ๋ฆฌ์์ค ํ์ผ์ ์์ฑํ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ
์ฌ์ฉ ์
- ๋กฌ๋ณต : ๊ธฐ์กด์ฝ๋ ๋ณ๊ฒฝ
- AutoService : ๋ฆฌ์์ค ํ์ผ ์์ฑ
- @Override
๋์๊ตฌ์กฐ
1. ์ด๋ ธํ ์ด์ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์๊ณ ์๋ ์ํ์์ ์ปดํ์ผ ์ํ
2. ์ด๋ ธํ ์ด์ ํ๋ก์ธ์๋ค์ด ๊ฐ์์ ์ญํ ์ ๋ง๊ฒ ๊ตฌํ๋์ด ์๋ ์ํ์์ ์คํ๋์ง ์์ ์ด๋ ธํ ์ด์ ํ๋ก์ธ์ ์คํ
3. ์ด๋ ธํ ์ด์ ํ๋ก์ธ์ ๋ด๋ถ์์ ์ด๋ ธํ ์ด์ ์ ๋ํ ์ฒ๋ฆฌ
4. ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ ์ด๋ ธํ ์ด์ ํ๋ก์ ์๊ฐ ์คํ๋์๋์ง ๊ฒ์ฌํ๊ณ , ๋ชจ๋ ์ด๋ ธํ ์ด์ ํ๋ก์ธ์๊ฐ ์คํ๋์ง ์์๋ค๋ฉด ๋ฐ๋ณต
์ฐธ์กฐ
12์ฃผ์ฐจ ๊ณผ์ : ์ ๋ ธํ ์ด์
๋จ๊ถ์ฑ, ์๋ฐ์ ์ ์ ๊ธฐ์ดํธ, ๋์ฐ์ถํ, 2019
'Programming > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ ๋ค๋ฆญ (1) | 2022.09.26 |
---|---|
[Java] I/O (1) | 2022.09.21 |
[Java] Enum (1) | 2022.09.08 |
[Java] ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.09.06 |
[Java] ์์ธ ์ฒ๋ฆฌ (0) | 2022.09.01 |