Java/Javaμ μ μ
Chapter 12 - μ λ€λ¦μ€, μ΄κ±°ν, μ λν μ΄μ
vividswan
2022. 5. 9. 20:14
Chapter 12 - μ λ€λ¦μ€, μ΄κ±°ν, μ λν μ΄μ
1. μ§λ€λ¦μ€(Generics)
- JDK 1.5μμ μ²μ λμ
1.1 μ§λ€λ¦μ€λ?
- λ€μν νμ
μ κ°μ²΄λ€μ λ€λ£¨λ λ©μλλ 컬λ μ
ν΄λμ€μ μ»΄νμΌ μμ νμ
체ν¬λ₯Ό ν΄μ£Όλ κΈ°λ₯
- νμ μμ μ±μ λμ΄κ³ νλ³νμ λ²κ±°λ‘μ κ°μ
1.2 μ§λ€λ¦ ν΄λμ€μ μ μΈ
- ν΄λμ€ μμ
<T>
λ₯Ό λΆμ΄κ³ Object ν΄λμ€λ₯Ό λͺ¨λ Tλ‘ λ³κ²½- Tλ
νμ λ³μ
λΌκ³ λΆλ¦ (Tκ° μλ λ€λ₯Έ κ² μ¬μ©ν΄λ 무κ΄)
- Tλ
- μ§λ€λ¦ ν΄λμ€λ‘ κ°μ²΄λ₯Ό μ μΈ μ μ°Έμ‘°λ³μμ μμ±μμ νμ T λμ μ€μ νμ μ μ§μ
- νμ νΈνμ μν΄ μμ μ λ°©μμΌλ‘ κ°μ²΄λ₯Ό μμ±νλ κ²λ νμ©νμ§λ§ μμ νμ§ μλ€λ κ²½κ³ λ°μ
- Objectλ₯Ό μ§μ νλ©΄ κ²½κ³ λ°μ X
μ§λ€λ¦μ€μ μ©μ΄
- Example : μ§λ€λ¦ ν΄λμ€
- T : νμ λ³μ λλ νμ 맀κ°λ³μ
- Example : μμνμ
- μ§μ λ νμ
μ
맀κ°λ³μνλ νμ
μ΄λΌκ³ λΆλ¦ - μ»΄νμΌ νμλ μμνμ μΌλ‘ λ°λ (μ§λ€λ¦ νμ μ΄ μ κ±°λ¨)
μ§λ€λ¦μ€μ μ ν
- κ°μ²΄ μμ± μ κ°μ²΄λ³λ‘ λ€λ₯Έ νμ μ μ§μ νλ κ²μ νμ©
- λͺ¨λ κ°μ²΄μ λμΌνκ² λμν΄μΌ νλ static λ©€λ²μ νμ λ³μ Tλ₯Ό μ¬μ©ν μ μμ
new T[10]
κ³Ό κ°μ΄ new μ°μ°μμ ν¨κ» μ¬μ©ν μ μμ- μ»΄νμΌ μμ μ νμ Tκ° λ¬΄μμΈμ§ μ νν μμμΌ νλ―λ‘
- μ§λ€λ¦ λ°°μ΄μ κΌ μμ±ν΄μΌ νλ©΄ new μ°μ°μ λμ newInstance()μ κ°μ λμ μΌλ‘ κ°μ²΄λ₯Ό μμ±νλ λ©μλ or Object λ°°μ΄μ μμ±ν΄μ 볡μ¬ν ν νλ³ν
1.3 μ§λ€λ¦ ν΄λμ€μ κ°μ²΄ μμ±κ³Ό μ¬μ©
- μ°Έμ‘°λ³μμ μμ±μμ λμ
λ νμ
μ΄ μΌμΉν΄μΌ λ¨
- μΌμΉνμ§ μμΌλ©΄ μλ¬ λ°μ
- λ νμ μ΄ μμκ΄κ³μ¬λ μλ¬ λ°μ
- λ μ§λ€λ¦ ν΄λμ€μ νμ μ΄ μμκ΄κ³μ΄λ©° λμ λ νμ μ΄ κ°μ κ²μ νμ©
- JDK 1.7λΆν°λ μΆμ μ΄ κ°λ₯ν κ²½μ° νμ μλ΅ κ°λ₯
- μμ±λ κ°μ²΄μ λ©μλκ° λ§€κ°λ³μλ‘ νμ λ³μ κ°μ²΄λ₯Ό λ°μ λ νμ λ³μμ μμλ€λ 맀μλμ 맀κ°λ³μκ° λ μ μμ
1.4 μ νλ μ§λ€λ¦ ν΄λμ€
- Tλ§ μ μΈνλ©΄ λͺ¨λ μ’ λ₯μ νμ μ μ§μ ν μ μμ
- μ λ€λ¦ νμ
μ
extends
λ₯Ό μ¬μ©νλ©΄ νΉμ νμ μ μμλ€λ§ λμ ν μ μκ² μ ν κ°λ₯ - μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ νλ μ μ½ μμ
extends
λ‘ νν- implementsλ₯Ό μ¬μ©νμ§ μμμ μ£Όμ
- μμ μ μ½κ³Ό ꡬν μΈν°νμ΄μ€κ° μ‘΄μ¬νλ€λ©΄
&
κΈ°νΈλ‘ μ°κ²° (<T extends ExampleClass & ExampleInterface>)
1.5 μμΌλ μΉ΄λ
- νλμ μ°Έμ‘°λ³μλ‘ μλ‘ λ€λ₯Έ νμ
μ λμ
λ μ¬λ¬ μ§λ€λ¦ κ°μ²΄λ₯Ό λ€λ£¨κΈ° μν΄ μ¬μ©
- λ©μλλ₯Ό νΈμΆν λλ§λ€ λ€λ₯Έ νμ μ λμ ν΄μΌ ν λ μ¬μ©
- <T extends Example> vs <? extends Example>
- <T extends Example>λ λ©μλλ₯Ό νΈμΆν λλ§λ€ λ€λ₯Έ μ§λ€λ¦ νμ μ λμ ν μ μκ² ν κ²
- <? extends Example>λ νλμ μ°Έμ‘°λ³μλ‘ μλ‘ λ€λ₯Έ νμ μ λμ λ μ¬λ¬ μ§λ€λ¦ κ°μ²΄λ₯Ό λ€λ£¨κΈ° μν κ²
- <? extends T> : μμΌλ μΉ΄λμ μν μ ν. Tμ κ·Έ μμλ€λ§ κ°λ₯
- <? super T> : μμΌλ μΉ΄λμ νν μ ν. Tμ κ·Έ μ‘°μλ€λ§ κ°λ₯
- <?> : μ ν μμ. λͺ¨λ νμ μ΄ κ°λ₯. (<? extends Object>μ λμΌ)
TestList<Parent> testList = new TestList<Parent>(); // νμ©
TestList<Parent> childTestList = new TestList<Child1>(); // μλ¬
TestList<? extends Parent> wildCardChildTestList = new TestList<Child1>(); // νμ©
wildCardChildTestList = new TestList<Child2>(); // νμ©
wildCardChildTestList = new TestList<Child3>(); // νμ©
1.6 μ§λ€λ¦ λ©μλ
- λ©μλμ μ μΈλΆμ μ§λ€λ¦ νμ μ΄ μ μΈλ λ©μλ (ν΄λμ€μ νμ λ³μκ° μ μΈλλ κ²μ΄ μλ!)
- μ§λ€λ¦ ν΄λμ€μ μ μλ νμ
맀κ°λ³μμ μ§λ€λ¦ λ©μλμ μ μλ νμ
맀κ°λ³μλ μ ν λ³κ°μ κ²
- κ°μ λ¬Έμ T μΌμ§λΌλ
- λ©μλμ μ μΈλ μ§λ€λ¦ νμ
μ μ§μ λ³μλ₯Ό μ μΈν κ²κ³Ό κ°μ
- λ©μλ λ΄μμλ§ μ¬μ©λ κ²
- λ©μλ νΈμΆ μ νμ
λ³μμ νμ
μ λμ
ν΄μΌ νμ§λ§ λλΆλΆμ κ²½μ° μ»΄νμΌλ¬κ° μΆμ κ°λ₯νλ―λ‘ μλ΅
- λ©μλλ₯Ό νΈμΆν λ νμ μ μλ΅ν μ μλ κ²½μ°μλ μ°Έμ‘°λ³μλ ν΄λμ€ μ΄λ¦ μλ΅ λΆκ°
- public static <T extends Comparable<? super T>> void sort(List<T> list)
- νμ Tλ₯Ό μμλ‘ νλ Listλ₯Ό 맀κ°λ³μλ‘ νμ©
T
λ Comparableμ ꡬνν ν΄λμ€μ΄μ΄μΌ ν¨- Comparable<? super T>μ΄λ―λ‘ Comparableμ 맀κ°λ³μλ Tμ Tμ μ‘°μ νμ μ΄ λͺ¨λ κ°λ₯
1.7 μ§λ€λ¦ νμ μ νλ³ν
- μ§λ€λ¦ νμ
κ³Ό μμ νμ
κ°μ νλ³νμ κ°λ₯
- κ²½κ³ κ° λ°μν λΏ
- λμ
λ νμ
κ³Ό λ€λ₯Έ μ§λ€λ¦ νμ
κ°μλ νλ³ν λΆκ°λ₯
- Objectμ¬λ λΆκ°λ₯
- νΉμ νμ
μ
? extends Object
μΌλ‘μ νλ³νλ κ°λ₯- λ°λλ‘λ κ°λ₯νμ§λ§ νμΈλμ§ μμ νλ³νμ΄λΌλ κ²½κ³ λ°μ
- Optional<Object>λ₯Ό Optional<String>μΌλ‘ μ§μ νλ³ν νλ κ²μ λΆκ°λ₯νμ§λ§ μμΌλ μΉ΄λκ° ν¬ν¨λ μ§λ€λ¦ νμ
μΌλ‘ νλ³ννλ©΄ κ°λ₯
- Optional<Object> -> Optional<?> -> Optional<T>
1.8 μ§λ€λ¦ νμ μ μ κ±°
- μ»΄νμΌλ¬λ μ§λ€λ¦ νμ
μ μ΄μ©ν΄μ μμ€νμΌμ μ²΄ν¬ ν νμν κ³³μ νλ³νμ λ£μ΄μ€ λ€ μ§λ€λ¦ νμ
μ κ±°
- *.class νμΌμλ μ§λ€λ¦ νμ μ λν μ λ³΄κ° μμ
- νν νΈνμ±μ μ μ§νκΈ° μν¨
- μμ νμ μΌλ‘ μμ±ν μ μλλ‘ ν κ²λ λ§μ°¬κ°μ§
- κΈ°λ³Έμ μΈ μ κ±° κ³Όμ
- μ§λ€λ¦ νμ μ κ²½κ³λ₯Ό μ κ±° (~ extends XXXλ XXXλ‘ λ³κ²½, Tλ§ μμ μ Objectλ‘ λ³κ²½)
- μ§λ€λ¦ νμ μ μ κ±°ν ν νμ μ΄ μΌμΉνμ§ μμΌλ©΄ νλ³ν μΆκ°
2. μ΄κ±°ν(enums)
2.1 μ΄κ±°νμ΄λ?
- μλ‘ κ΄λ ¨λ μμλ₯Ό νΈλ¦¬νκ² μ μΈνκΈ° μν κ²
- JDK 1.5λΆν° μλ‘ μΆκ°
- κ°λΏλ§ μλλΌ νμ
λ κ΄λ¦¬ν¨ (CμΈμ΄μ μ΄κ±°νλ³΄λ€ ν₯μλ κ²)
- νμ μ μμ ν μ΄κ±°ν(μ€μ κ°λΏλ§ μλλΌ νμ λ 체ν¬)
- μμμ λ€λ₯΄κ² μ΄κ±°ν μμλ κΈ°μ‘΄μ μμ€λ₯Ό λ€μ μ»΄νμΌνμ§ μμλ λ¨
2.2 μ΄κ±°νμ μ μμ μ¬μ©
- enum μ΄κ±°νμ΄λ¦ {μμλͺ 1, μμλͺ 2, ...}
- static λ³μλ₯Ό μ°Έμ‘°νλ―
μ΄κ±°νμ΄λ¦.μμλͺ
μΌλ‘ μ°Έμ‘° ==
λ‘ λΉκ΅κ° κ°λ₯νλ <,> κ°μ λΉκ΅μ°μ°μλ μ¬μ© λΆκ°λ₯- compareTo()λ μ¬μ© κ°λ₯
- switch λ¬Έμ case λ¬Έμλ μ¬μ©κ° λ₯νλ° μ΄κ±°νμ μ΄λ¦μ μ μ§ λ§κ³ μμλ§ μ μ΄μΌ ν¨
λͺ¨λ μ΄κ±°νμ μ‘°μ - java.lang.Enum
- getDeclaringClass(), name(), ordinal(), valueOf()λ₯Ό Enumμμ κ°κ³ μμ
- ordinal()μ 0λΆν° μμνλ μ΄κ±°νμ μμ λ°ν
- name()μ μ΄κ±°νμ μ΄λ¦μ λ¬Έμμ΄λ‘ λ°ν
- values(), valueOf(String name)μ μ»΄νμΌλ¬κ° μλμ μΌλ‘ μΆκ°ν΄ μ£Όλ λ©μλ
- values()λ μ΄κ±°νμ λͺ¨λ μμλ₯Ό λ°°μ΄μ λ΄μ λ°ν
- valueof()λ μμμ λν μ°Έμ‘°λ₯Ό μ»κ² ν΄μ€
2.3 μ΄κ±°νμ λ©€λ² μΆκ°νκΈ°
- μ΄κ±°νμ μ΄λ¦ μμ μνλ κ°μ κ΄νΈμ ν¨κ» μ μ΄μ£Όλ©΄ κ°λ₯
- κ·Έ ν μ§μ λ κ°μ μ μ₯ν μ μλ μΈμ€ν΄μ€ λ³μμ μμ±μλ₯Ό μλ‘ μΆκ° ν΄μΌν¨
- μ΄κ±°ν μμλ₯Ό λͺ¨λ μ μν λ€μ λ€λ₯Έ λ©€λ²λ€μ μΆκ° ν΄μΌν¨
- μ΄κ±°ν μμμ λ§μ§λ§μ ';'λ μμ§ λ§ κ²
- κ·Έ ν μ§μ λ κ°μ μ μ₯ν μ μλ μΈμ€ν΄μ€ λ³μμ μμ±μλ₯Ό μλ‘ μΆκ° ν΄μΌν¨
- μ΄κ±°ν μμ±μλ μ μ΄μκ° λ¬΅μμ μΌλ‘ private
- μ¬λ¬ κ°μ λ§λ μΈμ€ν΄μ€ λ³μμ μμ±μλ₯Ό μλ‘ μΆκ°νλ€λ©΄ μ΄κ±°ν μμμ μ¬λ¬ κ°μ μ μ₯ν μ μμ
μ΄κ±°νμ μΆμ λ©μλ μΆκ°νκΈ°
- μ΄κ±°νμ μΆμλ©μλλ₯Ό μ μΈνλ©΄ κ° μ΄κ±°ν μμκ° μΆμ λ©μλλ₯Ό λ°λμ ꡬνν΄μΌ ν¨
2.4 μ΄κ±°νμ μ΄ν΄
- μ΄κ±°ν μμ νλνλκ° κ°μ²΄
- Enum ν΄λμ€μ static μμμΈ μ΄κ±°ν μμλ€μ κ°μ κ°μ²΄μ μ£Όμμ΄λ©° λ°λμ§ μμΌλ―λ‘
==
λ‘ λΉκ΅κ° κ°λ₯ν κ²- μλ‘μ ordinalμ λΉΌμ£Όλ λ°©μμΌλ‘ ꡬν
3. μ λν μ΄μ (annotation)
3.1 μ λν μ΄μ μ΄λ?
- javadocμ λ§λ€μ΄λ΄λ μ£Όμμ
@
μ΄ λΆμ νκ·Έ κΈ°λ₯μ μμ©νμ¬ λ§λ κΈ°λ₯ - νλ‘κ·Έλ¨μ μμ€μ½λ μμ λ€λ₯Έ νλ‘κ·Έλ¨μ μν μ 보λ₯Ό 미리 μ½μλ νμμΌλ‘ ν¬ν¨μν¨ κ²
- μ£Όμμ²λΌ νλ‘κ·Έλλ° μΈμ΄μ μν₯μ λ―ΈμΉμ§ μμΌλ©΄μλ λ€λ₯Έ νλ‘κ·Έλ¨μκ² μ μ©ν μ 보λ₯Ό μ 곡
- κ΄λ ¨ μλ νλ‘κ·Έλ¨μλ§ μν₯
- JDKμμ μ 곡νλ νμ€ μλν
μ΄μ
μ μ£Όλ‘ μ»΄νμΌλ¬μκ² μ μ©ν μ 보 μ 곡
- μλ‘μ΄ μ λν μ΄μ μ μ μν λ μ¬μ©νλ λ©ν μ λν μ΄μ λ μ 곡
3.2 νμ€ μ λν μ΄μ
- νμ€ μ λν
μ΄μ
- @Override, @Deprecated, @SuppressWarnings, @SafeVarags, @FunctionalInterface, @Native
- νμ€ μ λν
μ΄μ
μ€ λ©ν μ λν
μ΄μ
- @Target, @Documented, @Inherited, @Retention, @Repeatable
@Override
- λ©μλ μμλ§ λΆμΌ μ μμ
- μ‘°μμ λ©μλλ₯Ό μ€λ²λΌμ΄λ© νλ κ²μ΄λΌλ κ±Έ μ»΄νμΌλ¬μκ² μλ €μ€
- λ©μλ μ΄λ¦μ μ λͺ» μ°λ©΄ μ»΄νμΌλ¬κ° μλ¬ μΆλ ₯
- νμλ μλμ§λ§ μ€μλ₯Ό λ°©μ§ ν΄μ£Όλ μ λν μ΄μ
@Deprecated
- λ μ΄μ μ¬μ©λμ§ μλ νλλ λ©μλμ λΆμ΄λ μ λν μ΄μ
- λ€λ₯Έ κ²μΌλ‘ λ체λμμΌλ λ μ΄μ μ¬μ©νμ§ μμ κ²μ κΆνλ μλ―Έ
@FunctionalInterface
- ν¨μν μΈν°νμ΄μ€λ₯Ό μ μΈν λ μ΄ μ λν μ΄μ μ λΆμ΄λ©΄ μ»΄νμΌλ¬κ° μ¬λ°λ₯Έ ν¨μν μΈν°νμ΄μ€μΈμ§ νμΈ
- μλͺ»λ κ²½μ° μ»΄νμΌλ¬κ° μλ¬ μΆλ ₯
- νμλ μλμ§λ§ μ€μλ₯Ό λ°©μ§ν΄ μ£Όλ μ λν μ΄μ
@SuppressWarnings
- 묡μΈν΄μΌ νλ κ²½κ³ κ° λ°μνλ λμμ λΆμ¬μ μ»΄νμΌ νμ μ΄λ€ κ²½κ³ λ©μμ§λ λνλμ§ μκ² ν¨
- -Xlint μ΅μ μΌλ‘ λμ€λ κ²½κ³ μ μ’ λ₯ μ€ λκ΄νΈ[]μμ μλ κ²½κ³ λ₯Ό μ΅μ ν μ μμ
- μ΅μ νλ κ²½κ³ λ‘ μ£Όλ‘ μ¬μ©λλ κ²μ "deprecation", "uncheked", "rawtypes", "varargs"
- λ°°μ΄μ²λΌ κ΄νΈ{}λ₯Ό μ¬μ©ν΄ λ μ΄μμ κ²½κ³ λ₯Ό λμμ μ΅μ ν μλ μμ
- main() λ©μλμ λΆμ¬μ ν΄λΉ κ²½κ³ μ κ΄λ ¨λ λͺ¨λ λ©μΈμ§λ₯Ό μ΅μ ν μ μμ§λ§ μ΅μ λ²μλ₯Ό μ΅μννλ κ²μ΄ μ’λ€.
@SafeVarargs
- μ»΄νμΌ νμλ μ κ±°λμ§ μλ νμ
μ reifiable, μ κ±°λλ νμ
μ non-reifiable νμ
- μ§λ€λ¦ νμ λ€μ λλΆλΆ μ»΄νμΌ μμ μ κ±°λλ―λ‘ non-reifiable νμ
- λ©μλμ μ μΈλ κ°λ³μΈμμ νμ
μ΄ non-reifiable νμ
μΌ κ²½μ° ν΄λΉ λ©μλλ₯Ό μ μΈνλ λΆλΆκ³Ό νΈμΆνλ λΆλΆμ "uncheked" κ²½κ³ λ₯Ό μ΅μ νκΈ° μν΄μ @SafeVarargs μ¬μ©
- 맀κ°λ³μκ° κ°λ³μΈμμ΄λ©΄μ μ λ€λ¦ νμ μΈ κ²½μ° (ex- Arrays.asList(T... a))
- λ©μλμ μ μΈλ νμ Tλ μ»΄νμΌ κ³Όμ μμ Objectλ‘ λ°λ
- μ»΄νμΌλ¬κ° λͺ¨λ κ°μ²΄κ° λ€μ΄μ¬ μ μμμ κ²½κ³
- νμ§λ§ μ§λ€λ¦μ€λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ»΄νμΌλ¬κ° νΈμΆ λΆλΆμ 체ν¬ν΄μ T μΈμ λ€λ₯Έ νμ μ΄ λ€μ΄κ° μ μκ² ν κ²μ΄λ―λ‘ μ μ½λλ μμ
- μ΄λ @SafeVarargsλ₯Ό λΆμ
- @SuppressWarnings("unchecked")λ λ©μλ μ μΈ λΆλΆκ³Ό νΈμΆλλ κ³³μμ μ λν μ΄μ μ λΆμ¬μΌ νμ§λ§ @SafeVarargsλ λ©μλλ₯Ό νΈμΆνλ κ³³μμ λ°μνλ κ²½κ³ λ μ΅μ
- 'varargs' κ²½κ³ λ μ΅μ ν μ μμΌλ―λ‘ @SuppressWarnings("varargs")μ ν¨κ» μ΄λ Έν μ΄μ μ λΆμ
3.3 λ©ν μ λν μ΄μ
- λ©ν μ λν μ΄μ μ μ λν μ΄μ μ μ μν λ μ¬μ©
@Target
- μ λν μ΄μ μ΄ μ μ© κ°λ₯ν λμμ μ§μ νλ λ° μ¬μ©
- μ¬λ¬ κ°μ κ°μ κ΄νΈ{}λ₯Ό μ¬μ©ν΄μΌ ν¨
@Retention
- μ λν μ΄μ μ΄ μ μ§(retention)λλ κΈ°κ°μ μ§μ νλ λ° μ¬μ©
- μ»΄νμΌλ¬κ° μ¬μ©νλ μ λν μ΄μ μ μ μ§ μ μ± μ 'SOURCE'
- μ μ§ μ μ± μ΄ 'RUNTIME'μΌ μ μ€ν μμ 리νλ μ μ ν΅ν΄ ν΄λμ€ νμΌμ μ μ₯λ μ λν μ΄μ μ μ 보λ₯Ό μ½μ λ€ μ²λ¦¬
- μ μ§ μ μ±
'CLASS'λ μ»΄νμΌλ¬κ° μ λν
μ΄μ
μ μ 보λ₯Ό ν΄λμ€ νμΌμ μ μ₯ν μ μκ² ν΄μ€
- ν΄λμ€ νμΌμ΄ JVMμ λ‘λ©λ μ μ λν μ΄μ μ μ λ³΄κ° λ¬΄μλλ―λ‘ μ€ν μμλ μ 보λ₯Ό μ»μ μ μμΌλ―λ‘ μ μ¬μ© X
@Documented
- μ λν μ΄μ μ λν μ λ³΄κ° javadocμΌλ‘ μμ±ν λ¬Έμμ ν¬ν¨λλλ‘ ν¨
@Inherited
- μ λν
μ΄μ
μ΄ μμ ν΄λμ€μ μμλλλ‘ ν¨
- μ‘°μ ν΄λμ€μ λΆμ΄λ©΄ μμ ν΄λμ€λ μ΄ μ λν μ΄μ μ΄ λΆμ κ²κ³Ό κ°μ΄ μΈμ
@Repeatable
- @Repeatableμ΄ λΆμ μ λν μ΄μ μ μ¬λ¬ λ² λΆμΌ μ μμ
- μ΄ μ λν μ΄μ λ€μ νλλ‘ λ¬Άμ΄μ λ€λ£° μ μλ μ λν μ΄μ λ μΆκ°λ‘ μ μν΄μΌ ν¨
@Native
- λ€μ΄ν°λΈ λ©μλμ μν΄ μ°Έμ‘°λλ μμ νλμ λΆμ΄λ μ λν
μ΄μ
- λ€μ΄ν°λΈ λ©μλλ JVMμ΄ μ€μΉλ OSμ λ©μλλ₯Ό μλ―Έ
- λ³΄ν΅ CμΈμ΄λ‘ μμ±
- μλ°μμλ λ©μλμ μ μΈλΆλ§ μ μνκ³ κ΅¬νμ X
- μΆμλ©μλ μ²λΌ μ μΈλΆλ§ μκ³ λͺΈν΅μ΄ μμ
3.4 μ λν μ΄μ νμ μ μνκΈ°
- @ κΈ°νΈλ₯Ό λΆμ΄κ³ μΈν°νμ΄μ€λ₯Ό μ μνλ κ²κ³Ό λμΌ
μ λν μ΄μ μ μμ
- μ λν
μ΄μ
λ΄μ μ μΈλ λ©μλλ₯Ό μ λν
μ΄μ
μμλΌκ³ λΆλ¦
- λ°νκ°μ΄ μκ³ λ§€κ°λ³μλ μλ μΆμ λ©μλμ νν
- μμμ ν΅ν΄ ꡬννμ§ μμλ λ¨
- μ λν μ΄μ μ μ μ©ν λ μ΄ μμλ€μ κ°μ λΉ μ§μμ΄ μ§μ ν΄ μ€μΌ ν¨
- μ§μ ν λ μμλ μκ΄ X
- κ° μμλ κΈ°λ³Έκ°μ κ°μ§ μ μκ³ κ°μ μ§μ νμ§ μμ μ μ¬μ©λ¨
- μλν μ΄μ μ μμκ° νλλΏμ΄κ³ μ΄λ¦μ΄ value μΌ λ μμμ μ΄λ¦μ μλ΅ ν κ°λ§ μ μ΄λ μ μ© κ°λ₯
- μμμ νμ μ΄ λ°°μ΄μΈ κ²½μ° κ΄νΈ{}λ₯Ό μ¬μ©ν΄μ μ¬λ¬ κ°μ κ°μ μ§μ
- κΈ°λ³Έκ° λν κ΄νΈ{}λ‘ μ§μ κ°λ₯
java.lang.annotation.Annotation
- λͺ¨λ μ λν μ΄μ μ μ‘°μ
- μ λν μ΄μ μ μμμ΄ νμ©λμ§ μμΌλ―λ‘ λͺ μμ μΌλ‘ extends μ§μ λΆκ°λ₯
- Annotaionμ μΌλ°μ μΈ μΈν°νμ΄μ€λ‘ μ μλμ΄ μμ
- equals(), hashCode(), toString()κ³Ό κ°μ λ©μλλ€μ΄ μ μλμ΄ μμΌλ―λ‘ μ λν μ΄μ κ°μ²΄μμ νΈμΆ κ°λ₯
- TestClass.class.getAnnotations()λ‘ TestClassμ μ μ©λ λͺ¨λ μ λν μ΄μ νΈμΆ κ°λ₯ λ° μΈν°νμ΄μ€μ μ μλ λ©μλ νΈμΆ κ°λ₯
λ§μ»€ μ λν μ΄μ Marker Annotation
- μμκ° νλλ μ μλμ§ μμ μ λν
μ΄μ
μ λ§μ»€ μ λν
μ΄μ
μ΄λΌκ³ λΆλ¦
- κ°μ μ§μ ν νμκ° μλ μ λν μ΄μ λ€
μ λν μ΄μ μμμ κ·μΉ
- λ°λμ μ§μΌμΌ νλ κ·μΉλ€
- μμμ νμ μ κΈ°λ³Έν, String, enum, μ λν μ΄μ , classλ§ νμ©
- () μμ 맀κ°λ³μλ₯Ό μ μΈν μ μλ€.
- μμΈλ₯Ό μ μΈν μ μλ€.
- μμλ₯Ό νμ 맀κ°λ³μλ‘ μ μν μ μλ€.
- ν΄λμ€ κ°μ²΄μλ ν΄λΉ ν΄λμ€μ λν λͺ¨λ μ 보λ₯Ό κ°κ³ μκ³ μ λν μ΄μ μ μ 보λ ν¬ν¨λμ΄ μμ