2022. 5. 15. 19:33γJAVA/μλ°μ μ μ
https://hyejin.tistory.com/586
1οΈβ£ μμΌλ μΉ΄λ
< ? extends T> : μμΌλ μΉ΄λμ μν μ ν, Tμ κ·Έ μμλ€λ§ κ°λ₯
<? super T> : μμΌλ μΉ΄λμ νν μ ν, Tμ κ·Έ μ‘°μλ€λ§ κ°λ₯
<?> : μ ν μμ. λͺ¨λ νμ μ΄ κ°λ₯. <? extends Object>μ λμΌ
-> μ§λ€λ¦ νμ μ μμΌλ μΉ΄λλ₯Ό μ°λ©΄ μ¬λ¬ νμ μ λμ ν μ μλ€.
2οΈβ£ μ§λ€λ¦ λ©μλ
λ©μλ μ μΈλΆμ μ§λ€λ¦ νμ μ΄ μ μΈλ λ©μλλ₯Ό μ§λ€λ¦ λ©μλλΌκ³ νλ€.
μ§λ€λ¦ νμ μ μ μΈ μμΉλ λ°ννμ λ°λ‘ μμ΄λ€.
μ΄λ μ§λ€λ¦ ν΄λμ€μ μ μλ νμ 맀κ°λ³μμ μ§λ€λ¦ λ©μλμ μ μλ νμ 맀κ°λ³μλ μ ν λ³κ°μ κ²μ΄λ€!!
-> FruitBoxμ μ μΈλ νμ 맀κ°λ³μ Tμ μ§λ€λ¦ λ©μλ sortμ μ μΈλ νμ 맀κ°λ³μ Tλ λ¬Έμλ§ κ°μ λΏ μλ‘ λ€λ₯Έ κ²μ΄λ€.
static λ©€λ²μλ νμ 맀κ°λ³μλ₯Ό μ¬μ©ν μ μμ§λ§, μ΄μ²λΌ λ©μλμ μ§λ€λ¦ νμ μ μ μΈνκ³ μ¬μ©νλ κ²μ κ°λ₯νλ€.
static Juice makeJuice(FruitBox<? extends Fruit> box) {
String tmp = "";
...
return new Juice(tmp);
}
-> μ§λ€λ¦ λ©μλλ‘ λ°κΎΈκΈ°
static <T extends Fruit> Juice makeJuice (FruitBox<T> box) {
String tmp = "";
...
return new Juice(tmp);
}
μ΄ λ©μλλ₯Ό νΈμΆν λλ νμ λ³μμ νμ μ λμ ν΄μΌνλ€.
-> λλΆλΆμ κ²½μ°μλ μ»΄νμΌλ¬κ° νμ μ μΆμ ν μ μκΈ° λλ¬Έμ μλ΅ν΄λ λλ€.
βοΈ μμΌλ μΉ΄λ, μ§λ€λ¦ λ©μλ
μμΌλ μΉ΄λ : νλμ μ°Έμ‘°λ³μλ‘ μλ‘ λ€λ₯Έ νμ μ΄ λμ λ μ¬λ¬ μ§λ€λ¦ κ°μ²΄λ₯Ό λ€λ£¨κΈ° μν κ²μ΄λ€.
μ§λ€λ¦ λ©μλ : λ©μλλ₯Ό νΈμΆν λ λ§λ€ λ€λ₯Έ μ§λ€λ¦ νμ μ λμ ν μ μκ² ν κ²μ΄λ€.
3οΈβ£ μ§λ€λ¦ νμ μ νλ³ν
-> μ§λ€λ¦ νμ κ³Ό μμνμ μ νλ³νμ κ°λ₯νμ§λ§, κ²½κ³ κ° λ°μνλ€.
Box<Object> box = null;
Box<String> strbox = null;
box = (Box<Object>)strbox; // error
strbox = (Box<String>)box; // error
-> λμ λ νμ μ΄ ObjectμΌμ§λΌλ λΆκ°λ₯νλ€.
-> κ·Όλ° μμΌλ μΉ΄λκ° μ¬μ©λ μ§λ€λ¦ νμ μ νλ³ν κ°λ₯νλ€.
κ·Όλ° λ°λλ‘μ νλ³νμ κ°λ₯νμ§λ§, νμΈλμ§ μμ νλ³νμ΄λΌλ κ²½κ³ κ° λ°λνλ€.
FruitBox<? extends Fruit> μ λμ λ μ μλ νμ μ΄ μ¬λ¬κ°μΈλ°λ€κ° FruitBox<Apple>λ₯Ό μ μΈν λ€λ₯Έ νμ μ FruitBox<Apple>λ‘ νλ³νλ μ μκΈ° λλ¬Έμ΄λ€.
4οΈβ£ μ§λ€λ¦ νμ μ μ κ±°
μ»΄νμΌλ¬λ μ§λ€λ¦ νμ μ μ΄μ©ν΄μ μμ€νμΌμ 체ν¬νκ³ , νμν κ³³μ νλ³νμ λ£μ΄μ€λ€.
κ·Έλ¦¬κ³ μ§λ€λ¦ νμ μ μ κ±°νλ€. μ¦ μ»΄νμΌλ (*.class) μλ μ§λ€λ¦ νμ μ λν μ λ³΄κ° μλ€.
μ΄λ κ² νλ μ΄μ λ μ§λ€λ¦μ΄ λμ λκΈ° μ΄μ μ μμ€μ½λμμ νΈνμ±μ μ μ§νκΈ° μν΄μμ΄λ€.
jdk1.5λΆν° μ§λ€λ¦μ€κ° λμ λμμ§λ§, μμ§λ μμ νμ μ μ¬μ©ν΄μ μ½λλ₯Ό μμ±νλ κ²μ νμ©νλ€.
1. μ§λ€λ¦ νμ μ κ²½κ³λ₯Ό μ κ±°νλ€.
-> μ§λ€λ¦ νμ μ΄ <T extends Fruit> λΌλ©΄ Tλ Fruitλ‘ μΉνλλ€.
2. μ§λ€λ¦ νμ μ μ κ±°ν νμ νμ μ΄ μΌμΉνμ§ μμΌλ©΄, νλ³νμ μΆκ°νλ€.
μμΌλ μΉ΄λκ° ν¬ν¨λ κ²½μ°, μ μ ν νμ μΌλ‘ νλ³νμ μΆκ°νλ€.
5οΈβ£ μ΄κ±°ν Enum
μ΄κ±°νμ μλ‘ κ΄λ ¨λ μμλ₯Ό νΈλ¦¬νκ² μ μΈνκΈ° μν κ²μΌλ‘ μ¬λ¬ μμλ₯Ό μ μν λ μ¬μ©νλ©΄ μ μ©νλ€.
-> μλ°μ μ΄κ±°νμ νμ μ μμ ν μ΄κ±°νμ΄λΌμ μ€μ κ°μ΄ κ°μλ νμ μ΄ λ€λ₯΄λ©΄ μ»΄νμΌ μλ¬κ° λ°μνλ€. μ΄μ²λΌ κ° λΏλ§ μλλΌ νμ κΉμ§ 체ν¬νκΈ° λλ¬Έμ νμ μ μμ νλ€κ³ νλ€!
- μ΄κ±°ν μ μμ μ¬μ©
enum μ΄κ±°ν μ΄λ¦ { μμλͺ 1, μμλͺ 2 ...}
μ΄ μ΄κ±°νμ μ μλ μμλ₯Ό μ¬μ©νλ λ°©λ²μ μ΄κ±°νμ΄λ¦.μμλͺ μ΄λ€.
μ΄κ±°ν μμκ°μ λΉκ΅μλ == μ μ¬μ©ν μ μλ€. ( equalsκ° μλ ==λ‘ λΉκ΅κ° κ°λ₯νλ€λ κ²μ κ·Έλ§νΌ λΉ λ₯Έ μ±λ₯μ μ 곡νλ€λ μκΈ°μ΄λ€.)
κ·Έλ¬λ λΉκ΅μ°μ°μλ μ¬μ©ν μ μκ³ , compareTo()λ₯Ό μ¬μ©ν΄μΌ νλ€,
- λͺ¨λ μ΄κ±°νμ μ‘°μ java.lang.Enum
- μ΄κ±°νμ λ©€λ² μΆκ°νκΈ°
Enum ν΄λμ€μ μ μλ ordinal()μ΄ μ΄κ±°ν μμκ° μ μλ μμλ₯Ό λ°ννμ§λ§, μ΄ κ°μ μ΄κ±°ν μμμ κ°μΌλ‘ μ¬μ©νμ§ μλ κ²μ΄ μ’λ€.
μ΄ κ°μ λ΄λΆμ μΈ μ©λλ‘λ§ μ¬μ©λκΈ° μν κ²μ΄κΈ° λλ¬Έμ΄λ€.
μ΄κ±°ν μμμ κ°μ΄ λΆμ°μμ μΈ κ²½μ°μλ μ΄κ±°ν μμμ μ΄λ¦ μμ μνλ κ°μ κ΄νΈμ ν¨κ» μ μ΄μ£Όλ©΄ λλ€.
κ·Έλ¦¬κ³ μ§μ λ κ°μ μ μ₯ν μ μλ μΈμ€ν΄μ€ λ³μμ μμ±μλ₯Ό μλ‘ μΆκ°ν΄ μ£Όμ΄μΌ νλ€.
μ΄λ μ΄κ±°ν μμ±μλ Private λ‘ μΈλΆμμ κ°μ²΄ μμ± λΆκ°λ₯νλ€.
6οΈβ£ μ λν μ΄μ annotation
μ λν μ΄μ μ΄λ μ£Όμμ²λΌ νλ‘κ·Έλλ° μΈμ΄μ μν₯μ λ―ΈμΉμ§ μμΌλ©° μ μ©ν μ 보λ₯Ό μ 곡νλ κ²μ΄λ€.
μλ°λ₯Ό κ°λ°ν μ¬λλ€μ μμ€μ½λμ λν λ¬Έμλ₯Ό λ°λ‘ λ§λ€κΈ°λ³΄λ€ μμ€μ½λμ λ¬Έμλ₯Ό νλμ νμΌλ‘ κ΄λ¦¬νλ κ²μ΄ λ«λ€κ³ μκ°νλ€.
κ·Έλμ μμ€μ½λμ΄ μ£Όμ /** ~ */ μ μμ€μ½λμ λν μ 보λ₯Ό μ μ₯νκ³ , μμ€μ½λμ μ£ΌμμΌλ‘λΆν° htmlλ¬Έμλ₯Ό μμ±ν΄λ΄λ νλ‘κ·Έλ¨ javadoc.exeλ₯Ό λ§λ€μ΄ μ¬μ©νλ€.
/** λ‘ μμνλ μ£Όμ μμ μμ€μ½λμ λν μ€λͺ λ€μ΄ μκ³ κ·Έ μμ '@'μ΄ λΆμ νκ·Έλ€μ μ΄μ©ν΄μ μ£Όμ μμ μ 보λ₯Ό μ 곡νκ³ javadoc.exeλΌλ νλ‘κ·Έλ¨μ΄ μ΄ μ 보λ₯Ό μ½μ΄μ λ¬Έμλ₯Ό μμ±νλλ° μ¬μ©νλ€.
μ΄ κΈ°λ₯μ μμ©νμ¬ νλ‘κ·Έλ¨μ μμ€μ½λ μμ λ€λ₯Έ νλ‘κ·Έλ¨μ μν μ 보λ₯Ό 미리 μ½μλ νμμΌλ‘ ν¬ν¨μν¨ κ²μ΄ λ°λ‘ μ λν μ΄μ μ΄λ€.
μ ν°λ€μ΄μ μ΄ μ£Όμμ²λΌ νλ‘κ·Έλλ° μΈμ΄μ μν₯μ λ―ΈμΉμ§ μμΌλ©΄μλ λ€λ₯Έ νλ‘κ·Έλ¨μκ² μ μ©ν μ 보λ₯Ό μ 곡ν μ μλ€λ μ₯μ μ΄ μλ€.
μμ μ΄ μμ±ν μμ€μ½λ μ€μμ νΉμ λ©μλλ§ ν μ€νΈνκΈ° μνλ€λ©΄ @Test μ λν μ΄μ μ λΆμ΄λ©΄ λλ€.
@Test λ ν μ€νΈ νλ‘κ·Έλ¨μκ² μ리λ μν μ ν λΏ, λ©μλκ° ν¬ν¨λ νλ‘κ·Έλ¨ μ체μλ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μλλ€.
μ£Όμμ²λΌ μ‘΄μ¬νμ§ μλ κ²μ΄λ λ€λ¦μλ€.