μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- mysql
- μμ΄ν 15
- λ°μ΄ν°λ² μ΄μ€κ²©λ¦¬μμ€
- μν°λ λ³μ’ κ°λ°μ
- μΈλ±μ€νμ€μΊ
- λ°μ©λ μ€κ΅μ΄
- Item6
- effectiveJava
- μλ°μ°λ λ
- builder null
- μ΄νν°λΈμλ°
- mysqlμν€ν μ²
- enum μμ±μ μ κ·Ό μ νμ
- Hikari Connection Pool
- μλΌμ€ν±μμΉλ©μΈμ§μ©λ
- μλ°
- SVN
- μΈλ±μ€μ€ν΅μ€μΊ
- μλ°μμ
- item15
- index skip scan
- μλ°λΌμ΄λΈμ€ν°λ
- InnoDBμν€ν μ²
- assert.notnull
- μμ
- μλ°μμμ°λ λλ₯Ό μ¬μ©νλ μ΄μ
- hikari cp μ€μ
- λΉμΌκ°μ²΄μμ±
- index full scan
- μν°λ κ°λ°μνμ¬
- Today
- Total
βπ»κΈ°λ‘νλ λΈλ‘κ·Έ
Annotation μ λ Έν μ΄μ λ³Έλ¬Έ
μλ° λΌμ΄λΈ μ€ν°λ 12μ£Ό μ°¨ - μ λ Έν μ΄μ
1. μ λ Έν μ΄μ μ΄λ
2. μ λ Έν μ΄μ μ μνλ λ°©λ²
3. νμ€ μ λ Έν μ΄μ
4. λ©ν μ λ Έν μ΄μ
5. μ λ Έν μ΄μ νλ‘μΈμ
1. μ λ Έν μ΄μ μ΄λ
νλ‘κ·Έλ¨μκ² μΆκ°μ μΈ μ 보λ₯Ό μ κ³΅ν΄ μ£Όλ λ©νλ°μ΄ν°
annotation μ©λ
- μ»΄νμΌλ¬μκ² μ½λ μμ± λ¬Έλ² μλ¬λ₯Ό 체ν¬νλλ‘ μ 보λ₯Ό μ 곡
- ex) λ©μλκ° μ¬μ λκ° μ λλ‘ λμλμ§ νμΈ @Override
- νλ‘κ·Έλ¨ μ€ν μ λ³λμ μ²λ¦¬κ° νμν λ
2. μ λ Έν μ΄μ μ μνλ λ°©λ²
ν΄λμ€λ λ©μλ μμ μ¬μ©ν μ λ Έν μ΄μ μ λΆμ΄κ±°λ μ§μ 컀μ€ν μ΄ κ°λ₯νλ€.
컀μ€ν μ λ Έν μ΄μ μμ± λ°©λ²
1. μ λ Έν μ΄μ μΌλ‘ μ§μ ν μ΄λ¦κ³Ό λμΌνκ² ν΄λμ€λ₯Ό μμ±νλ€. AnnotationName.java
μ λ Έν μ΄μ μ μ μ νλ μ΄μμ μλ¦¬λ¨ΌνΈ λ©€λ² μ μΈ κ°λ₯ (μ΄λ Έν μ΄μ μ μ½λμ μ μ©ν λ μΈλΆμ κ°μ μ λ ₯λ°μ μ μλλ‘ νλ μν )
public @interface AnnotationName{
String elementName1();//μμ
}
2. μ λ Έν μ΄μ μ ν΄λμ€μ μ μ©νλ€.
@AnnotationName(elmentName1="κ°");//μ μΈμ @λ₯Ό λΆμ¬μ μ»΄νμΌλ¬μκ² μ΄λ
Έν
μ΄μ
μ΄λΌκ³ μλ €μ€λ€.
μ λ Έν μ΄μ μμ± μ μ¬λ¬ μμλ€μ΄ μλ€λ©΄, μ΄λ Έν μ΄μ μ μ© μ μμλ€μ κ°μ λΉ μ§μμ΄ μ§μ ν΄μ£Όμ΄μΌ νλ€.
3. μ λ Έν μ΄μ μ μ΄μ©νμ¬ μ€ν
3. νμ€ μ΄λ Έν μ΄μ
μλ°μμ κΈ°λ³ΈμΌλ‘ μ 곡νλ μ΄λ Έν μ΄μ
@Overried, @Deprecated, @SuppressWarningsλ JDK 1.5μ λ±μ₯ @FuntionalInterfaceλ JDK1.8μ λ±μ₯νλ€.
@Override
- λΆλͺ¨ν΄λμ€μ μλ λ©μλλ₯Ό μ€λ² λΌμ΄λ©νλ κ²μ΄λΌλ κ±Έ μ»΄νμΌλ¬μκ² μλ €μ€λ€.
@Deprecated
- λ μ΄μ μ¬μ©νμ§ μλ νλλ λ©μλμ μ¬μ©
@SuppressWarnings
- μ»΄νμΌλ¬μκ² νλ‘κ·Έλλ¨Έκ° μλν μ½λ©μ΄λ―λ‘ μ»΄νμΌλ¬μκ² λ¬΄μνλλ‘ ν κ²½μ° μ¬μ©
- κ²½κ³ λ©μμ§ μ’
λ₯
- deprecation :@Deprecatedκ° λΆμ λμμ μ¬μ©ν κ²½μ°
- unchecked : μ λ€λ¦ νμ μ μ§μ νμ§ μμμ κ²½μ°
- varargs : κ°λ³ μΈμμ νμ μ΄ μ λ€λ¦ νμ μΌ κ²½μ°
- rawtypes : μ λ€λ¦μ€λ₯Ό μ¬μ©νμ§ μμμ λ°μνλ κ²½μ°
@SuppressWarnings({"rawtypes","unchecked"})
@FunctionalInterface
ν¨μν μΈν°νμ΄μ€ μ μΈ μ μ΄λ Έν μ΄μ μ λΆμ¬μ ν¨μν μΈν°νμ΄μ€λ₯Ό μ λλ‘ μ μΈνλμ§ νμΈνλ€.
→ λλ€μ κ³΅λΆ λ λ€μ νμΈ!
4. λ©ν μ λ Έν μ΄μ
μ λ Έν μ΄μ μ μ μ μ μ΄λ Έν μ΄μ μ μ μ©λμ(target) λ° μ μ§κΈ°κ°(retention)μ μ§μ νλ λ° μ¬μ©νλ©°, java.lang.annotation ν¨ν€μ§μ ν¬ν¨λμλ€.
@Retention
μ λ Έν μ΄μ μ΄ μ μ§λλ κΈ°κ°μ μ§μ νλ λ° μ¬μ©
μ λ Έν μ΄μ μ μ§ μ μ±
SOURCE | μμ€νμΌμλ§ μ‘΄μ¬, λ°νμμμλ μ‘΄μ¬νμ§μμ |
CLASS | ν΄λμ€ νμΌμλ μ‘΄μ¬, μ΄λ
Έν
μ΄μ
μ λ³΄κ° μ»΄νμΌλ¬μ μν΄ μ°Έμ‘° κ°λ₯, jvmμ λ‘λ© μ μ΄λ Έν μ΄μ μ 보 무μ μ€νμμλ μ΄λ Έν μ΄μ μ 보 μ»μ μ μμ |
RUNTIME | λ°νμμ κΉμ§ μ΄λ
Έν
μ΄μ
μ΄ μ ν¨νλ©°, μ€ν μ 리νλ μ
μ ν΅ν΄ ν΄λμ€ νμΌμ μ μ₯λ μ΄λ
Έν
μ΄μ
μ 보λ₯Ό μ½μ΄μ μ²λ¦¬λλ€. μ€νμ μ΄λ Έν μ΄μ μ λ³΄κ° κ°μλ¨Έμ μ μν΄μ μ°Έμ‘° κ°λ₯ |
Annotation μ μ§μ μ± ν μ€νΈ
SOURCE, CLASS, RUNTIME κ°κ° μ μ§μ μ± μ κ°μ§λ μ΄λ Έν μ΄μ μ μμ±νλ€.
@Retention(RetentionPolicy.CLASS)
public @interface ClassRetention {
String value() default "ClassRetention";
}
@Retention(RetentionPolicy.RUNTIME)
public @interface RuntimeRetention {
String value() default "Runtime Retention";
}
@Retention(RetentionPolicy.SOURCE)
public @interface SourceRetention {
String value() default "Source Retention";
}
κ°κ°μ μ΄λ Έν μ΄μ μ΄ μ μ©λ ν΄λμ€μ μ΄λ Έν μ΄μ μ 보λ₯Ό κ°μ Έμλ€.
public class UserAnnotationSample {
public static void main(String[] args) {
Annotation a[] = new A().getClass().getAnnotations();
Annotation b[] = new B().getClass().getAnnotations();
Annotation c[] = new C().getClass().getAnnotations();
System.out.println("a annotation length = " + a.length);
System.out.println("b annotation length = " + b.length);
System.out.println("c annotation length " + c.length);
System.out.println("c[0] = " + c[0]);
}
}
@SourceRetention
class A {
}
@ClassRetention
class B {
}
@RuntimeRetention
class C {
}
κ²°κ³Όλ₯Ό 보면 RUNTIME μ μ§μ μ± μ νν μ΄λ Έν μ΄μ λ§μ΄ runtimeμ νμΈ ν μ μμλ€.
a.length = 0
b.length = 0
c.length = 1
c[0] = @RuntimeRetention(value="Runtime Retention")
* μλ° λ¦¬νλ μ
|
μ€λ²λΌμ΄λ μ μ§ μ μ± μ SOURCEμ΄λ―λ‘ μμ€νμΌμμλ§ μ μ©λλ€.
@Target
μ λ Έν μ΄μ μ μ©λμ μ§μ μ μ¬μ©
- μ½λμμμ μ΄λ Έν μ΄μ μ μ μ©ν μ μλ λμ μ€μ
- java.lang.annotation.ElementType μ΄κ±° μμλ‘ μ μλμ΄ μμ
- νκΉμΌλ‘ μ¬ μ μλ νμ
- TYPE(ν΄λμ€, μΈν°νμ΄μ€, μ΄κ±° νμ )
- ANNOTATION_TYPE(μ΄λ Έν μ΄μ )
- FIELD(νλ)
- CONSTRUCTOR(μμ±μ)
- METHOD(λ©μλ)
- LOCAL_VARIABLE(λ‘컬 λ³μ)
- PACKAGE(ν¨ν€μ§)
μ¬λ¬ κ° νκΉμΌλ‘ μ§μ ν λλ λ°°μ΄ νμμΌλ‘ μμ±ν΄μΌ νλ€.
@Documented
μ λ Έν μ΄μ μ λν μ λ³΄κ° javadocμΌλ‘ μμ±ν λ¬Έμμ ν¬ν¨λλλ‘ νλ€.
@Override , @SuppressWarningsλ₯Ό μ μΈνκ³ λ λͺ¨λ @documented μ΄λ Έν μ΄μ μ΄ λΆμ΄μλ€.
5. μ λ Έν μ΄μ νλ‘μΈμ
β» μΆκ° 보좩 μμ
μ»΄νμΌ μ λΌμ΄λ€μ΄ νΉμ ν μ΄λ Έν μ΄μ μ΄ μλ μ½λλ₯Ό μ°Έμ‘°νμ¬ μμ€μ½λλ₯Ό λ§λ€μ΄λ΄λ κΈ°λ₯
μμ) lombok
μ»΄νμΌ μμ μ μ΄λ Έν μ΄μ νλ‘μΈμλ₯Ό μ¬μ©νμ¬ μμ€μ½λμ AST(abstract syntax tree)λ₯Ό μ‘°μ
AST
νλ‘κ·Έλλ° μΈμ΄λ‘ μμ±λ μμ€ μ½λμ μΆμ ꡬ문 ꡬ쑰μ νΈλ¦¬
[μ°Έκ³ ]
https://medium.com/msolo021015/μλ°-reflectionμ΄λ-ee71caf7eec5
μλ°μ μ μ - μ΄λ Έν μ΄μ
www.inflearn.com/course/the-java-code-manipulation#curriculum
'Language > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ κ· νν μ Pattern κ°μ²΄μ μμ± λΉμ©μ μ€μ΄μ (0) | 2023.02.19 |
---|---|
JVMμ Garbage Collector (0) | 2022.10.28 |
Enum (0) | 2021.01.28 |
Thread - λ©ν°μ°λ λ νλ‘κ·Έλλ° (0) | 2021.01.22 |
μμΈμ²λ¦¬ (0) | 2021.01.14 |