μΆμ²
Gemini
μ΄λ Έν μ΄μ (Annotation)μ΄λ
μλ° μμ€ μ½λμ μΆκ°νμ¬ νΉμ μ 보λ₯Ό μ 곡νλ λ©νλ°μ΄ν°μ μΌμ’ μ΄λ€. μ΄λ¬ν λ©νλ°μ΄ν°λ μ»΄νμΌλ¬, κ°λ° λꡬ, λλ λ°νμ μμ€ν μ μν΄ μ½νμ Έ λ€μν μ©λλ‘ νμ©λ μ μλ€. λ§μΉ ν¬μ€νΈμμ²λΌ μ½λμ λ©λͺ¨λ₯Ό λΆμ¬ λλ κ²κ³Ό λΉμ·νλ€κ³ μκ°νλ©΄ μ½λ€.
νΉμ§
μ μΈμ νλ‘κ·Έλλ°
μ½λμ λν μ 보λ₯Ό λͺ μμ μΌλ‘ μ μΈνμ¬ μ½λμ κ°λ μ±μ λμ΄κ³ μ μ§λ³΄μλ₯Ό μ©μ΄νκ² νλ€.
λ©νλ°μ΄ν° μ 곡
μ»΄νμΌλ¬, IDE, νλ μμν¬ λ±μ μΆκ°μ μΈ μ 보λ₯Ό μ 곡νμ¬ λμ± μ κ΅ν μ²λ¦¬λ₯Ό κ°λ₯νκ² νλ€.
μ½λμ μν₯μ λ―ΈμΉμ§ μμ
μ΄λ Έν μ΄μ μ체λ μ€ν μ½λμ μ§μ μ μΈ μν₯μ λ―ΈμΉμ§ μμ§λ§, μ»΄νμΌ μμ μ΄λ λ°νμ μμ μ νΉμ νμλ₯Ό μ λ°ν μ μλ€.
μ’ λ₯
νμ€ μ΄λ Έν μ΄μ
μλ°μμ κΈ°λ³Έμ μΌλ‘ μ 곡λλ μ΄λ Έν μ΄μ . @Override, @Deprecated, @SuppressWarnings λ±μ΄ μλ€.
λ©ν μ΄λ Έν μ΄μ
λ€λ₯Έ μ΄λ Έν μ΄μ μ μ μνκΈ° μν μ΄λ Έν μ΄μ . @Target, @Retention, @Documented λ±μ΄ μλ€.
μ¬μ©μ μ μ μ΄λ Έν μ΄μ
κ°λ°μκ° μ§μ μ μνμ¬ μ¬μ©νλ μ΄λ Έν μ΄μ .
νμ©
μ»΄νμΌλ¬ μ§μ
μ»΄νμΌλ¬μκ² νΉμ μ½λμ λν μΆκ°μ μΈ κ²μ¬λ μ²λ¦¬λ₯Ό μ§μνλ€.
IDE μ§μ
IDEμμ μ½λ μλ μμ±, 리ν©ν λ§ λ±μ μ§μνλ λ° μ¬μ©λλ€.
νλ μμν¬ μ°λ
μ€νλ§ νλ μμν¬μ κ°μ νλ μμν¬μμ λΉ μ€μ , AOP λ±μ μν λ©νλ°μ΄ν°λ‘ νμ©λλ€.
- κ΄λ ¨ κΈ -> [μ©μ΄] AOP Aspect Oriented Programming
- μ΄λ Έν μ΄μ μ AOPμ ν΅μ¬ κΈ°λ₯μΈ ν¬μΈνΈμ»·μ μ§μ νκ³ , μ΄λλ°μ΄μ€λ₯Ό μ€μ νλ λ° μ¬μ©λλ λ©νλ°μ΄ν°μ΄λ€.
λΉλ λꡬ μ€μ
λΉλ λꡬ(Maven, Gradle)μμ νλ‘μ νΈ λΉλ μ€μ μ μν μ 보λ₯Ό μ 곡νλ€.
λ°νμ μμ€ν
λ°νμ μμ€ν μμ κ°μ²΄ μ§λ ¬ν, 리νλ μ λ±μ μν μ 보λ₯Ό μ 곡νλ€.
μ₯μ
μ½λ κ°λ μ± ν₯μ
μ½λμ μλλ₯Ό λͺ ννκ² νννμ¬ μ½λλ₯Ό μ΄ν΄νκΈ° μ½κ² λ§λ λ€.
μ μ§λ³΄μμ± ν₯μ
μ½λ λ³κ²½ μ μ΄λ Έν μ΄μ μ ν΅ν΄ κ΄λ ¨ λΆλΆμ μ½κ² μ°Ύμ μμ ν μ μλ€.
μ¬μ¬μ©μ± μ¦κ°
μ΄λ Έν μ΄μ μ ν΅ν΄ 곡ν΅μ μΈ κΈ°λ₯μ μΆμΆνμ¬ μ¬μ¬μ©ν μ μλ€.
νμ₯μ±
μ¬μ©μ μ μ μ΄λ Έν μ΄μ μ ν΅ν΄ λ€μν κΈ°λ₯μ ꡬνν μ μλ€.
λ¨μ
1. κ³Όλν μμ‘΄μ±
- μ»΄νμΌ μ μμ‘΄: μ΄λ Έν μ΄μ νλ‘μΈμκ° νμνκΈ° λλ¬Έμ μ»΄νμΌ κ³Όμ μ΄ λ³΅μ‘ν΄μ§ μ μλ€.
- λ°νμ μμ‘΄: λ°νμ μ μ΄λ Έν μ΄μ κ°μ μ½μ΄μ λ‘μ§μ λ³κ²½νλ κ²½μ°, μ΄λ Έν μ΄μ μ λν μμ‘΄μ±μ΄ κ°ν΄μ Έ μ μ§ λ³΄μκ° μ΄λ €μμ§ μ μλ€.
2. κ°λ μ± μ ν
- μ½λμ μ§μ μ μΈ μν₯μ λ―ΈμΉμ§ μμ§λ§, μ½λμ μλ―Έλ₯Ό νμ νλ λ° λ°©ν΄κ° λ μ μλ€. νΉν, λ§μ μ΄λ Έν μ΄μ μ΄ μ¬μ©λ κ²½μ° μ½λκ° λ³΅μ‘ν΄ λ³΄μΌ μ μλ€.
- μ΄λ Έν μ΄μ μ μλ―Έλ₯Ό μ νν νμ νκΈ° μν΄ μΆκ°μ μΈ λ¬Έμνκ° νμνλ€.
3. μ€λ² μμ§λμ΄λ§
- κ°λ¨ν λ‘μ§μ λΆνμνκ² μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ μ€νλ € μ½λλ₯Ό 볡μ‘νκ² λ§λ€ μ μλ€.
- μ΄λ Έν μ΄μ μ λ¨μ©νλ©΄ μ½λμ κ°λ μ±μ΄ μ€νλ € λ¨μ΄μ§ μ μλ€.
4. λ°νμ μ±λ₯ μ ν:
- μ΄λ Έν μ΄μ μ²λ¦¬λ₯Ό μν΄ μΆκ°μ μΈ μ€λ²ν€λκ° λ°μν μ μλ€. νΉν, λ§μ μ΄λ Έν μ΄μ μ΄ μ¬μ©λλ κ²½μ° μ±λ₯ μ νκ° λ°μν μ μλ€.
5. ν΄ μμ‘΄μ±
- μ΄λ Έν μ΄μ νλ‘μΈμμ κ°μ μΈλΆ λꡬμ μμ‘΄νκΈ° λλ¬Έμ, λꡬμ λ²μ λ¬Έμ λ νΈνμ± λ¬Έμ κ° λ°μν μ μλ€.
6. ν μ€νΈμ μ΄λ €μ
- μ΄λ Έν μ΄μ κΈ°λ°μ μ½λλ₯Ό ν μ€νΈνκΈ° μν΄μλ μ΄λ Έν μ΄μ νλ‘μΈμλ₯Ό ν¨κ» μ¬μ©ν΄μΌ νλ κ²½μ°κ° λ§λ€. μ΄λ ν μ€νΈ νκ²½ μ€μ μ 볡μ‘νκ² λ§λ€ μ μλ€.
μ΄λ Έν μ΄μ μ ν¨κ³Όμ μΌλ‘ μ¬μ©νκΈ° μν ν
νμν κ²½μ°μλ§ μ¬μ©
λͺ¨λ μν©μ μ΄λ Έν μ΄μ μ μ¬μ©νλ κ²μ λ°λμ§νμ§ μλ€.
λͺ νν μλ―Έ λΆμ¬
μ΄λ Έν μ΄μ μ μλ―Έλ₯Ό λͺ ννκ² μ μνκ³ , λ€λ₯Έ κ°λ°μλ€μ΄ μ½κ² μ΄ν΄ν μ μλλ‘ λ¬Έμνν΄μΌ νλ€.
κ³Όλν μ¬μ© μμ
λ무 λ§μ μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ μ½λ κ°λ μ±μ΄ μ νλ μ μμΌλ―λ‘ μ μ ν μμ€μμ μ¬μ©ν΄μΌ νλ€.
ν μ€νΈ νκ²½ ꡬμΆ
μ΄λ Έν μ΄μ κΈ°λ°μ μ½λλ₯Ό ν μ€νΈνκΈ° μν νκ²½μ 미리 ꡬμΆν΄ λλ κ²μ΄ μ’λ€.
ν΄ νμ©
μ΄λ Έν μ΄μ νλ‘μΈμλ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νκΈ° μν ν΄μ μ¬μ©νλ©΄ κ°λ° μμ°μ±μ λμΌ μ μλ€.
μλ©΄ μ’μ μ΄λ Έν μ΄μ λ€
1. νμ€ μ΄λ Έν μ΄μ
@Override
λ©μλκ° λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ€λ²λΌμ΄λνμμ λνλΈλ€. μ»΄νμΌλ¬κ° μ€νλ μ€μλ₯Ό μ‘μλ΄λ λ° λμμ μ€λ€.
@Deprecated
λ μ΄μ μ¬μ©λμ§ μλ μμμμ λνλΈλ€. μ¬μ© μ μ»΄νμΌλ¬ κ²½κ³ λ₯Ό λ°μμμΌ μ½λ μ μ§λ³΄μμ λμμ μ€λ€.
@SuppressWarnings
μ»΄νμΌλ¬ κ²½κ³ λ₯Ό μ΅μ νλ€. νΉμ κ²½κ³ λ©μμ§κ° μ½λμ λ³Έμ§μ μΈ λ¬Έμ λ₯Ό λνλ΄μ§ μμ λ μ¬μ©νλ€.
2. λ©ν μ΄λ Έν μ΄μ
@Target
μ΄λ Έν μ΄μ μ μ μ©ν μ μλ μμΉλ₯Ό μ§μ ν©λλ€. μλ₯Ό λ€μ΄, ν΄λμ€, λ©μλ, νλ λ±μ μ μ©ν μ μλ€.
@Retention
μ΄λ Έν μ΄μ μ΄ μ μ§λλ μκΈ°λ₯Ό μ§μ ν©λλ€. μ»΄νμΌ μ, ν΄λμ€ νμΌ, λ°νμ μ€μ μ μ§λ μ μλ€.
@Documented
μ΄λ Έν μ΄μ μ΄ Javadocμ ν¬ν¨λμ΄ λ¬Έμνλ μ μλλ‘ νλ€.
3. μμ£Ό μ¬μ©λλ νλ μμν¬ μ΄λ Έν μ΄μ
μ€νλ§ νλ μμν¬
- @Component: μ€νλ§ μ»¨ν μ΄λμ λΉμΌλ‘ λ±λ‘νλ€.
- @Service: μλΉμ€ κ³μΈ΅μ λΉμ λνλΈλ€.
- @Repository: λ°μ΄ν° μ κ·Ό κ³μΈ΅μ λΉμ λνλΈλ€.
- @Controller: μΉ κ³μΈ΅μ 컨νΈλ‘€λ¬λ₯Ό λνλΈλ€.
- @Autowired: μμ‘΄μ± μ£Όμ μ μν μ΄λ Έν μ΄μ .
JPA
- @Entity: μλ° ν΄λμ€λ₯Ό λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό 맀ννλ€.
- @Id: μν°ν°μ κΈ°λ³Έ ν€λ₯Ό λνλΈλ€.
- @Column: ν μ΄λΈμ 컬λΌκ³Ό 맀ννλ€.
JUnit
- @Test: ν μ€νΈ λ©μλλ₯Ό λνλΈλ€..
- @Before, @After: κ° ν μ€νΈ λ©μλ μ€ν μ νμ μ€νλ λ©μλλ₯Ό μ§μ νλ€.
μ¬μ©μ μ΄λ Έν μ΄μ μ΄ νμμ±
μ½λμ μλλ₯Ό λͺ ννκ² νννκ³ μΆμ λ
- μλ₯Ό λ€μ΄, νΉμ λ©μλκ° λ‘κ·Έλ₯Ό λ¨κ²¨μΌ νλ€κ±°λ, νΉμ νλλ νμ μ λ ₯κ°μΈμ§λ₯Ό λͺ μνκ³ μΆμ λ μ¬μ©μ μ μ μ΄λ Έν μ΄μ μ νμ©νμ¬ μ½λμ μλλ₯Ό λͺ ννκ² λλ¬λΌ μ μλ€.
νλ μμν¬μμ μ°λμ μν μ€μ
- μ€νλ§ νλ μμν¬μ κ°μ νλ μμν¬μμ λΉ μ€μ , AOP λ±μ μν λ©νλ°μ΄ν°λ‘ νμ©λλ€. μλ₯Ό λ€μ΄, μ€νλ§ MVCμμ @Controller, @Service, @Repository λ±μ μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ κ° κ³μΈ΅μ μν μ λͺ νν ꡬλΆνκ³ μμ‘΄μ± μ£Όμ μ μλννλ€.
μ½λ κ²μ¦
- μ»΄νμΌ μμ μ΄λ λ°νμ μμ μ μ½λμ μ ν¨μ±μ κ²μ¦νλ λ° μ¬μ©ν μ μλ€. μλ₯Ό λ€μ΄, νΉμ νλμ νΉμ κ°λ§ νμ©νλλ‘ μ ννλ μ΄λ Έν μ΄μ μ μ μνμ¬ μ€λ₯λ₯Ό 미리 λ°©μ§ν μ μλ€.
λꡬ μ§μ
- IDEλ λΉλ λꡬμ κ°μ κ°λ° λꡬμμ μ½λ λΆμ, μλ μμ±, 리ν©ν λ§ λ±μ μ§μνλ λ° μ¬μ©λλ€.
μ¬μ©μ μ΄λ Έν μ΄μ μμ
λ‘κ·Έ λ¨κΈ°κΈ°
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Loggable {
}
@Loggable
public void someMethod() {
// ...
}
μ μμμμλ @Loggable μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ ν΄λΉ λ©μλμ λν λ‘κ·Έλ₯Ό λ¨κ²¨μΌ ν¨μ λͺ μμ μΌλ‘ νννλ€. AOPλ₯Ό νμ©νμ¬ μ΄λ Έν μ΄μ μ΄ λΆμ λ©μλ μ€ν μ νμ λ‘κ·Έλ₯Ό λ¨κΈ°λ κΈ°λ₯μ ꡬνν μ μλ€.
νμ μ λ ₯κ° κ²μ¦
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Required {
}
public class User {
@Required
private String name;
// ...
}
μ μμμμλ @Required μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ name νλκ° νμ μ λ ₯κ°μμ λνλΈλ€. λ°μ΄ν° κ²μ¦ λ‘μ§μμ μ΄ μ΄λ Έν μ΄μ μ μ°Έκ³ νμ¬ νμ νλκ° μ λ ₯λμλμ§ νμΈν μ μλ€.
컀μ€ν λ°μ΄ν° νμ
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Email {
}
public class User {
@Email
private String email;
// ...
}
μ μμμμλ @Email μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ ν΄λΉ νλκ° μ΄λ©μΌ νμμ΄μ΄μΌ ν¨μ λνλΈλ€. λ°μ΄ν° κ²μ¦ λ‘μ§μμ μ΄ μ΄λ Έν μ΄μ μ μ°Έκ³ νμ¬ μ΄λ©μΌ νμμ΄ λ§λμ§ νμΈν μ μλ€.
Gemini κΈμ μΆμ²
https://knowledgebasement.com/how-to-create-custom-annotations-in-java/
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java][JVM] κ°λΉμ§ 컬λ μ Garbage Collection (0) | 2024.08.19 |
---|---|
[JVM][GC] λ©λͺ¨λ¦¬ λ¨νΈν (0) | 2024.08.19 |
[μ©μ΄] AOP Aspect Oriented Programming (0) | 2024.08.19 |
[μ©μ΄] νλ‘μ κ°μ²΄ (0) | 2024.08.19 |
[λμμΈν¨ν΄] νλ‘μ ν¨ν΄ (0) | 2024.08.19 |