item 24 sungjaeyoon - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
λ©€λ² ν΄λμ€λ λλλ‘ staticμΌλ‘ λ§λ€λΌ.
μ€μ²© ν΄λμ€
μ€μ²© ν΄λμ€λ λ€λ₯Έ ν΄λμ€ μμ μ μλ ν΄λμ€λ₯Ό λ§νλ€.
μ€μ²© ν΄λμ€λ μμ μ κ°μΌ λ°κΉ₯ ν΄λμ€μμλ§ μ°μ¬μΌ νλ©°, κ·ΈμΈμ μ°μμκ° μλ€λ©΄ ν±λ 벨 ν΄λμ€λ‘ λ§λ€μ΄μΌ νλ€.
μλ 4κ°μ§ ν΄λμ€λ μ€μ²©ν΄λμ€μ μ’
λ₯λ€ μ΄λ€.
class A {
int a = 10;
public void run() {
System.out.println("Run A");
B.run();
C c = new C();
c.run();
}
// μ μ λ©€λ² ν΄λμ€
public static class B {
public static void run() {
System.out.println("Run B");
}
}
// λΉμ μ λ©€λ² ν΄λμ€
public class C {
public void run() {
// μ κ·νλ thisλ₯Ό ν΅ν΄ μ°Έμ‘° κ°λ₯νλ€.
// μ κ·νλ thisλ ν΄λμ€λͺ
.this ννλ‘ μ΄λ¦μ λͺ
μνλ μ©λ²μ λ§νλ€.
System.out.println("Run C: " + A.this.a);
}
}
}
μ μ λ©€λ² ν΄λμ€
μ μ , λΉμ μ λ©€λ² ν΄λμ€μ ꡬ문μ μ°¨μ΄λ λ¨μ§ staticμ΄ λΆμ΄ μκ³ μκ³ μ°¨μ΄μ΄μ§λ§ μλ―Έμ μ°¨μ΄λ ν¬λ€.
μ μ λ©€λ² ν΄λμ€λ λ€λ₯Έ ν΄λμ€ μμ μ μΈλκ³ λ°κΉ₯ ν΄λμ€μ private λ©€λ²μλ μ κ·Όν μ μλ€λ μ λ§ μ μΈνκ³ λ μΌλ° ν΄λμ€μ λκ°λ€.
μ μ λ©€λ² ν΄λμ€λ λ°κΉ₯ ν΄λμ€μ ν¨κ» μ°μΌ λλ§ μ μ©ν public λμ°λ―Έ ν΄λμ€λ‘ μ°μΈλ€.
(λΉμ μ ) μΈμ€ν΄μ€λ λ°κΉ₯ ν΄λμ€μ μΈμ€ν΄μ€μ μ묡μ μΌλ‘ μ°κ²°λμ΄ μ κ·νλ thisλ₯Ό μ¬μ©ν΄ λ°κΉ₯μ μ°Έμ‘° κ°λ₯νλ€.(μ κ·νλ thisλ ν΄λμ€λͺ
.this ννλ‘ λ°κΉ₯ ν΄λμ€μ μ΄λ¦μ λͺ
μνλ μ©λ²)
κ°λ
μ μ€μ²© ν΄λμ€μ μΈμ€ν΄μ€κ° λ°κΉ₯ μΈμ€ν΄μ€μ λ
립μ μΌλ‘ μ‘΄μ¬ν μ μλ€λ©΄ μ μ λ©€λ² ν΄λμ€λ‘ λ§λ€μ΄μΌ νλ€.
λΉμ μ λ©€λ² ν΄λμ€
λ°κΉ₯ μΈμ€ν΄μ€ μ¬μ΄μ κ΄κ³λ λ©€λ²ν΄λμ€κ° μΈμ€ν΄μ€νλ λ ν립λλ©°, λ μ΄μ λ³κ²½ν μ μλ€.
λ³΄ν΅ λ°κΉ₯ ν΄λμ€μ μΈμ€ν΄μ€ λ©μλμμ λΉμ μ λ©€λ² ν΄λμ€μ μμ±μλ₯Ό νΈμΆ ν λ μλμΌλ‘ λ§λ€μ΄μ§λ€.
λ©€λ² ν΄λμ€μ μΈμ€ν΄μ€ μμ λ§λ€μ΄μ Έ λ©λͺ¨λ¦¬ 곡κ°μ μ°¨μ§νλ©°, μμ± μκ°λ μ€λ 걸리μ§λ§ μ΄νν°λ₯Ό μ μν λ μμ£Ό μ°μΈλ€.
μ¦, μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό κ°μΈ λ§μΉ λ€λ₯Έ ν΄λμ€μ μΈμ€ν΄μ€μ²λΌ 보μ΄κ² νλ λ·°λ‘ μ¬μ©νλ κ² Map μΈν°νμ΄μ€μ ꡬν체λ€μ 보ν΅(keySet, entrySet, values λ©μλκ° λ°ννλ) μμ μ 컬λ μ λ·°λ₯Ό ꡬνν λ λΉμ μ λ©€λ² ν΄λμ€λ₯Ό μ¬μ©ν¨ Setκ³Ό List κ°μ 컬λ μ μΈν°νμ΄μ€ ꡬνλ€λ μμ μ λ°λ³΅μλ₯Ό ꡬνν λ λΉμ μ λ©€λ² ν΄λμ€λ₯Ό μ£Όλ‘ μ¬μ©ν¨
public class MySet<E> extends AbstractSet<E> {
... // μλ΅
@Override public Iterator<E> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<E> {
...
}
}
μ΅λͺ ν΄λμ€
λ©€λ²μ λ¬λ¦¬ μ°μ΄λ μμ μ μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λ€. (μ½λμ μ΄λμλ λ§λ€ μ μμ)
μ μ λ¬Έλ§₯μμλΌλ μμ λ³μ μ΄μΈμ μ μ λ©€λ²λ κ°μ§ μ μλ€. μμ ννμ μν΄ μ΄κΈ°νλ final κΈ°λ³Έ νμ κ³Ό λ¬Έμμ΄ νλλ§ κ°μ§ μ μλ€.
μ μΈν μ§μ μμλ§ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλ€. instanceof κ²μ¬λ ν΄λμ€μ μ΄λ¦μ΄ νμν μμ μ μνν μ μλ€. μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μκ³ , μΈν°νμ΄μ€λ₯Ό ꡬννλ λμμ λ€λ₯Έ ν΄λμ€λ₯Ό μμν μλ μλ€. μ΅λͺ ν΄λμ€λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈλ μ΅λͺ ν΄λμ€κ° μμ νμ μμ μμν λ©€λ² μΈμλ νΈμΆν μ μλ€. μ΅λͺ ν΄λμ€λ ννμ μ€κ°μ λ±μ₯νλ―λ‘ (10μ€ μ΄νλ‘) μ§§μ§ μμΌλ©΄ κ°λ μ±μ΄ λ¨μ΄μ§λ€.
Test t1 = new Test(){
public int num = 10;
@Override public int getNum(){
return this.num;
}
};
μ§μ ν΄λμ€
μ’ λ₯ μ€ κ°μ₯ λλ¬Όκ² μ¬μ©λλ€.
μ§μλ³μλ₯Ό μ μΈν μ μλ κ³³μ΄λ©΄ μ€μ§μ μΌλ‘ μ΄λμλ μ μΈν μ μκ³ , μ ν¨ λ²μλ μ§μλ³μμ κ°λ€.
λ€λ₯Έ μΈ μ€μ²© ν΄λμ€μμ 곡ν΅μ λ νλμ© κ°μ§κ³ μλ€.
λ©€λ² ν΄λμ€μ²λΌ μ΄λ¦μ΄ μκ³ λ°λ³΅ν΄μ μ¬μ©ν μ μλ€. μ΅λͺ ν΄λμ€μ²λΌ λΉμ μ λ¬Έλ§₯μμ μ¬μ©λ λλ§ λ°κΉ₯ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€. μ μ λ©€λ²λ κ°μ§μ μμΌλ©°, κ°λ μ±μ μν΄ μ§§κ² μμ±ν΄μΌ νλ€.
class Outer
{
//...
void f( )
{
//...
class Local
{
//...
}
} //f()
}