π 1. μκ·Έλμ²
μ΄νν°λΈ μλ°(Effective Java)μμ μΈκΈνλ μκ·Έλμ²(signature)λ μ£Όλ‘ λ©μλ μκ·Έλμ²λ₯Ό μλ―Έν©λλ€. λ©μλ μκ·Έλμ²λ μλ°μμ λ©μλλ₯Ό μλ³νκ³ κ΅¬λΆνλ λ° μ¬μ©λλ μ€μν μμλ‘, λ€μκ³Ό κ°μ κ΅¬μ± μμλ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€:
- λ©μλ μ΄λ¦(Method Name): λ©μλμ μ΄λ¦ μ체.
- 맀κ°λ³μ λͺ©λ‘(Parameter List): λ©μλκ° λ°λ 맀κ°λ³μμ νμ κ³Ό μμ.
λ©μλ μκ·Έλμ²μ ν¬ν¨λμ§ μλ μμ:
- λ°ν νμ (Return Type): λ©μλκ° λ°ννλ κ°μ νμ μ μκ·Έλμ²μ ν¬ν¨λμ§ μμ΅λλ€.
- μμΈ(Exception): λ©μλκ° λμ§ μ μλ μμΈλ μκ·Έλμ²μ μΌλΆκ° μλλλ€.
- μ κ·Ό μ μ΄μ(Access Modifiers):
public
,private
λ± μ κ·Ό μ μ΄μλ μκ·Έλμ²μ μν₯μ μ£Όμ§ μμ΅λλ€.
μκ·Έλμ²μ μ€μμ±
- λ©μλ μ€λ²λ‘λ©(Method Overloading):
- κ°μ μ΄λ¦μ κ°μ§ μ¬λ¬ λ©μλλ₯Ό μ μν λ, μκ·Έλμ²κ° λ¬λΌμΌ μ»΄νμΌλ¬κ° μ΄λ₯Ό ꡬλΆν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄,
void print(String s)
μvoid print(int i)
λ λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°μ§λ―λ‘ μ€λ²λ‘λ©μ΄ κ°λ₯ν©λλ€.
- λ©μλ μ€λ²λΌμ΄λ©(Method Overriding):
- μλΈν΄λμ€μμ μνΌν΄λμ€μ λ©μλλ₯Ό μ¬μ μν λ, μκ·Έλμ²κ° λμΌν΄μΌ ν©λλ€.
- μκ·Έλμ²κ° λ€λ₯΄λ©΄ μ€λ²λΌμ΄λ©μ΄ μλ μλ‘μ΄ λ©μλλ‘ μΈμλ©λλ€.
- μ»΄νμΌλ¬μ μν :
- μ»΄νμΌλ¬λ λ©μλ νΈμΆ μ μκ·Έλμ²λ₯Ό κΈ°λ°μΌλ‘ μ΄λ€ λ©μλλ₯Ό νΈμΆν μ§ κ²°μ ν©λλ€.
- μκ·Έλμ²κ° λͺ ννμ§ μμΌλ©΄ μ»΄νμΌ μ€λ₯κ° λ°μν μ μμ΅λλ€.
μμ
public class Example {
// λ©μλ μκ·Έλμ²: calculate(int a, int b)
public int calculate(int a, int b) {
return a + b;
}
// λ©μλ μκ·Έλμ²: calculate(double a, double b)
public double calculate(double a, double b) {
return a + b;
}
// μκ·Έλμ²κ° λ€λ₯Έ λ©μλμ΄λ―λ‘ μ€λ²λ‘λ© κ°λ₯
}
μμ μμμμ λ calculate
λ©μλλ 맀κ°λ³μμ νμ
μ΄ λ€λ₯΄κΈ° λλ¬Έμ μλ‘ λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°μ§κ³ μμΌλ©°, μ΄λ λ©μλ μ€λ²λ‘λ©μ κ°λ₯νκ² ν©λλ€.
μκ·Έλμ² μ€κ³ μ κ³ λ €μ¬ν
- λͺ νμ±: λ©μλ μ΄λ¦κ³Ό 맀κ°λ³μλ λ©μλμ κΈ°λ₯μ λͺ ννκ² ννν΄μΌ ν©λλ€.
- μΌκ΄μ±: λΉμ·ν κΈ°λ₯μ νλ λ©μλλ μ μ¬ν μκ·Έλμ²λ₯Ό κ°μ ΈμΌ ν©λλ€.
- κ³Όλν μ€λ²λ‘λ© νΌνκΈ°: λ무 λ§μ μ€λ²λ‘λ©μ μ½λμ κ°λ μ±μ λ¨μ΄λ¨λ¦΄ μ μμΌλ―λ‘ μ μ ν μ¬μ©ν΄μΌ ν©λλ€.
μ΄νν°λΈ μλ°μμλ λ©μλ μκ·Έλμ²μ μ€μμ±μ κ°μ‘°νλ©°, μ΄λ₯Ό ν΅ν΄ μ½λμ μ μ§λ³΄μμ±κ³Ό κ°λ μ±μ λμ΄λ λ€μν νκ³Ό κΆμ₯μ¬νμ μ 곡ν©λλ€. μκ·Έλμ²λ₯Ό μ¬λ°λ₯΄κ² μ€κ³ν¨μΌλ‘μ¨ λ²κ·Έλ₯Ό μ€μ΄κ³ , μ½λμ μλλ₯Ό λͺ νν μ λ¬ν μ μμ΅λλ€.
β1. μΈν°νμ΄μ€μ μ μ λ©μλ (p.10)
μλ° 8 μ΄μ μλ μΈν°νμ΄μ€μ μ μ λ©μλ(static method)λ₯Ό μ§μ μ μΈν μ μμμ΅λλ€. μ΄λ‘ μΈν΄ νΉμ μΈν°νμ΄μ€λ₯Ό λ°ννλ μ μ λ©μλκ° νμν λλ λͺ κ°μ§ μ°ν λ°©λ²μ μ¬μ©ν΄μΌ νμ΅λλ€. μλμμ μ΄λ₯Ό μ½κ² μ€λͺ ν΄ λλ¦¬κ² μ΅λλ€.
1. μΈν°νμ΄μ€μ μ μ λ©μλμ νκ³
μΈν°νμ΄μ€λ μλ°μμ ν΄λμ€κ° λ°λΌμΌ ν κ³μ½(contract)μ μ μν©λλ€. μλ₯Ό λ€μ΄, List
μΈν°νμ΄μ€λ 리μ€νΈκ° κ°μ ΈμΌ ν λ©μλλ€μ μ μν©λλ€. κ·Έλ¬λ μλ° 8 μ΄μ μλ μΈν°νμ΄μ€ λ΄λΆμ μ μ λ©μλλ₯Ό μ μν μ μμμ΅λλ€.
2. λλ° ν΄λμ€(Companion Class) μ¬μ©
μΈν°νμ΄μ€μ μ μ λ©μλλ₯Ό μ§μ μ μν μ μμκΈ° λλ¬Έμ, μΈν°νμ΄μ€μ κ΄λ ¨λ μ μ λ©μλλ₯Ό λͺ¨μλκΈ° μν΄ λλ° ν΄λμ€λ₯Ό λ§λ€μμ΅λλ€. μ΄ λλ° ν΄λμ€λ λ³΄ν΅ μΈν°νμ΄μ€ μ΄λ¦μ "s"λ₯Ό λΆμΈ ννλ‘, μΈμ€ν΄μ€νν μ μλ ν΄λμ€λ‘ λ§λλλ€.
μμ:
public interface Type {
// μΈν°νμ΄μ€ λ©μλλ€
}
public final class Types {
// μΈμ€ν΄μ€ μμ±μ λ°©μ§νκΈ° μν΄ private μμ±μ μ¬μ©
private Types() {}
// Type μΈν°νμ΄μ€λ₯Ό λ°ννλ μ μ λ©μλ
public static Type createType() {
return new TypeImpl();
}
}
μν : Types ν΄λμ€λ Type μΈν°νμ΄μ€μ κ΄λ ¨λ μ μ λ©μλλ€μ λͺ¨μλμ λλ° ν΄λμ€(Companion Class) μ λλ€.
νΉμ§:
- final ν€μλλ‘ μ μΈλμ΄ μμν μ μμ΅λλ€.
- private μμ±μλ₯Ό κ°μ§κ³ μμ΄ μΈλΆμμ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ΅λλ€.
- λͺ¨λ λ©μλλ staticμΌλ‘ μ μΈλμ΄ μμ΄ ν΄λμ€ μ΄λ¦μ ν΅ν΄ μ§μ νΈμΆν μ μμ΅λλ€.
μ μμμμ Types ν΄λμ€λ μΈμ€ν΄μ€νν μ μμΌλ©°, Type μΈν°νμ΄μ€λ₯Ό λ°ννλ μ μ λ©μλλ₯Ό μ 곡ν©λλ€.
3. μλ° μ»¬λ μ νλ μμν¬μ μ
μλ° μ»¬λ μ
νλ μμν¬λ λ€μν μλ£κ΅¬μ‘°(리μ€νΈ, μ§ν©, 맡 λ±)λ₯Ό μ 곡νλ©°, μ΄λ€ λλΆλΆμ java.util.Collections
ν΄λμ€μ μ μλ μ μ ν©ν 리 λ©μλλ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€. μ΄ ν΄λμ€λ μΈμ€ν΄μ€νν μ μλ ν΄λμ€λ‘, λͺ¨λ λ©μλκ° μ μ λ©μλμ
λλ€.
μμ:
List synchronizedList = Collections.synchronizedList(new ArrayList<>());
μ μμμμ Collections.synchronizedList
λ List
μΈν°νμ΄μ€λ₯Ό ꡬνν λκΈ°νλ 리μ€νΈλ₯Ό λ°ννλ μ μ λ©μλμ
λλ€. μ΄λ₯Ό ν΅ν΄ μΈν°νμ΄μ€μ μ§μ μ μ λ©μλλ₯Ό μ μνμ§ μκ³ λ νμν κΈ°λ₯μ μ 곡ν μ μμ΅λλ€.
4. μ λλ° ν΄λμ€λ₯Ό μ¬μ©νμκΉ?
- μ‘°μ§ν: κ΄λ ¨λ μ μ λ©μλλ₯Ό νλμ ν΄λμ€μ λͺ¨μλμ΄ μ½λκ° κΉλνκ³ κ΄λ¦¬νκΈ° μ½μ΅λλ€.
- μΈμ€ν΄μ€ν λ°©μ§: λλ° ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό μμ±ν νμκ° μκΈ° λλ¬Έμ,
private
μμ±μλ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€ μμ±μ λ§μ΅λλ€. - μ μ§λ³΄μ μ©μ΄: μΈν°νμ΄μ€μ κ΄λ ¨λ μ μ λ©μλκ° λ³λμ ν΄λμ€μ μ‘΄μ¬νλ―λ‘, κΈ°λ₯ μΆκ°λ μμ μ΄ μ©μ΄ν©λλ€.
5. μλ° 8 μ΄νμ λ³ν
μλ° 8λΆν°λ μΈν°νμ΄μ€μ μ μ λ©μλλ₯Ό μ§μ μ μν μ μκ² λμμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λλ° ν΄λμ€λ₯Ό μ¬μ©νλ λ²κ±°λ‘μμ μ€μΌ μ μμ΅λλ€.
μμ:
public interface Type {
// μΈν°νμ΄μ€ λ©μλλ€
// μλ° 8 μ΄ν μ μ λ©μλ
static Type createType() {
return new TypeImpl();
}
}
μμ κ°μ΄ μΈν°νμ΄μ€ λ΄λΆμ μ μ λ©μλλ₯Ό μ§μ μ μν μ μκ² λμ΄, κ΄λ ¨λ κΈ°λ₯μ ν κ³³μ λͺ¨μλλ κ²μ΄ λμ± κ°νΈν΄μ‘μ΅λλ€.
μμ½
- μλ° 8 μ΄μ : μΈν°νμ΄μ€μ μ μ λ©μλλ₯Ό μ μν μ μμ΄μ, λ³λμ λλ° ν΄λμ€λ₯Ό λ§λ€μ΄ μ μ λ©μλλ₯Ό κ΄λ¦¬νμ΅λλ€.
- μμ:
java.util.Collections
ν΄λμ€λ 컬λ μ μΈν°νμ΄μ€μ κ΄λ ¨λ λ€μν μ μ λ©μλλ₯Ό μ 곡νμ¬, μΈν°νμ΄μ€ μ체λ₯Ό λ°ννκ±°λ λ³νλ 컬λ μ μ μμ±ν μ μκ² νμ΅λλ€. - μλ° 8 μ΄ν: μΈν°νμ΄μ€μ μ μ λ©μλλ₯Ό μ§μ μ μν μ μκ² λμ΄, λλ° ν΄λμ€μ νμμ±μ΄ μ€μ΄λ€μμ΅λλ€.
μ΄ν΄λ₯Ό λκΈ° μν λΉμ λ₯Ό λ€μ΄λ³΄κ² μ΅λλ€. μΈν°νμ΄μ€λ μ€κ³λλΌκ³ μκ°ν μ μκ³ , λλ° ν΄λμ€λ μ€κ³λμ κΈ°λ°ν λꡬν¨μ΄λΌκ³ ν μ μμ΅λλ€. λκ΅¬ν¨ μμλ μ€κ³λλ₯Ό ꡬννκ±°λ νμ₯νλ λ° νμν λꡬλ€μ΄ λ€μ΄μμ΅λλ€. μλ° 8 μ΄μ μλ μ€κ³λ(μΈν°νμ΄μ€) μ체μ λꡬ(μ μ λ©μλ)λ₯Ό λ£μ μ μμκΈ° λλ¬Έμ, λ³λμ λꡬν¨(λλ° ν΄λμ€)μ λ§λ€μ΄ μ¬μ©νλ κ²μ λλ€.
'BOOK > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ΄νν°λΈ μλ° : Item1. μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό κ³ λ €νλΌ (0) | 2024.12.29 |
---|
λκΈ