item 34 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e μμ΄ν 34λ₯Ό μμ½ν λ΄μ© μ λλ€.
public static final int APPLE_FUJI = 0;
public static final int APPLE_PIPPIN = 1;
public static final int APPLE_GRANNY_SMITH = 2;
public static final int ORANGE_NAVEL = 0;
public static final int ORANGE_TEMPLE = 1;
public static final int ORANGE_BLOOD = 2;
μ μ μ΄κ±° ν¨ν΄ κΈ°λ²μλ λ¨μ μ΄ λ§λ€.
νμ μμ
μ 보μ₯ν λ°©λ²μ΄ μμΌλ©°ννλ ₯
λ μ’μ§ μλ€. μ€λ μ§λ₯Ό 건λ€μΌ ν λ©μλμ μ¬κ³Όλ₯Ό 보λ΄κ³λλ± μ°μ°μ
λ‘ λΉκ΅νλλΌλ μ»΄νμΌλ¬λ μλ¬΄λ° κ²½κ³ λ©μμ§λ₯Ό μΆλ ₯νμ§ μλλ€.- μμμ κ°μ΄ λ°λλ©΄ ν΄λΌμ΄μΈνΈλ λ°λμ λ€μ
μ»΄νμΌ
ν΄μΌ νλ€. λ€μ μ»΄νμΌνμ§ μμ ν΄λΌμ΄μΈνΈλ μ€νμ΄ λλλΌλ μλ±νκ² λμν κ²μ΄λ€. - μ μ μμλ
λ¬Έμμ΄
λ‘ μΆλ ₯νκΈ°κ° λ€μ κΉλ€λ‘λ€. μ¬μ§μ΄ κ·Έ μμ μμκ° λͺ κ° μΈμ§λ μ μ μλ€. - μ μ λμ λ¬Έμμ΄ μμλ₯Ό μ¬μ©νλ λ³ννλ ν¨ν΄λ μμ§λ§, μμμ μλ―Έλ₯Ό μΆλ ₯ν μ μλ€λ μ μ μ’μ§λ§
λ¬Έμμ΄ μμ
μ μ΄λ¦ λμλ¬Έμμ΄
κ°μ κ·Έλλ‘ μ¬μ©νλ©΄ μ€νκ° μμ΄λ μ»΄νμΌλ¬λ νμΈν κΈΈμ΄ μμΌλ μμ°μ€λ½κ²λ°νμ λ²κ·Έ
κ° μκΈ΄λ€.
μ΄κ±° νμ μ μ°λ©΄ μ΄λ€ λΆλΆμ΄ μ₯μ μ΄ μμκΉ
-
μ΄κ±° νμ μ체λ
ν΄λμ€
μ΄λ©°, μμ νλλΉμμ μ μΈμ€ν΄μ€
λ₯Ό νλμ© λ§λ€μ΄public static final
νλλ‘ κ³΅κ°νλ€. μ΄κ±° νμ μ λ°μμ μ κ·Όν μ μλ μμ±μλ₯Ό μ 곡νμ§ μμΌλ―λ‘ μ¬μ€μfinal
μ΄λ€. -
μ΄κ±° νμ μ
μ»΄νμΌ νμ νμ μμ μ±
μ μ 곡νλ€. -
μ΄κ±° νμ μλ
κ°μμ μ΄λ¦ 곡κ°
μ΄ μμ΄μ μ΄λ¦μ΄ κ°μ μμλ ννλ‘κ² κ³΅μ‘΄νλ€. -
μ΄κ±° νμ μ μλ‘μ΄ μμλ₯Ό μΆκ°νκ±°λ μμλ₯Ό λ°κΏλ λ€μ
μ»΄νμΌ
νμ§ μμλ λλ€. -
μ΄κ±° νμ μλ
μμμ λ©μλ
λ νλλ₯Ό μΆκ°ν μ μκ³μμμ μΈν°νμ΄μ€
λ₯Ό ꡬννκ² ν μλ μλ€. -
μ΄κ±° νμ μ μμ μμ μ μλ μμ λ€μ κ°μ λ°°μ΄μ λ΄μ λ°ννλ μ μ λ©μλμΈ
values
λ₯Ό μ 곡νλ€.public class WeightTable { public static void main(String[] args) { double eartchWeight = Double.parseDouble(args[0]); double mass = earchWeight / Planet.EARTH.surfaceGravity(); for (Planet p : Planet.values()) System.out.printf("%sμμμ 무κ²λ %fμ΄λ€.\n",p,p.surfaceWeight(mass)); } }
-
μ΄κ±° νμ μ
μμλ³ λ©μλ ꡬν
λ κ°λ₯νλ€.public enum Operation { PLUS("+") { public double apply(double x, double y) { return x + y; } }, MINUS("-") { public double apply(double x, double y) { return x - y; } ... }
public static void main(String[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); for (Operation op : Operation.values()) System.out.printf("%f %s %f = %f\n", x, op, y, op.apply(x,y)); }
-
νμ§λ§ κΈ°μ‘΄ μ΄κ±° νμ μ μμλ³ λμμ νΌν©ν΄ λ£μ λλ
switch
λ¬Έμ΄ μ’μ μ νμ΄ λ μ μλ€.public static Operation inverse(Operation op) { switch(op) { case PLUS: return Operation.MINUS; case MINUS: return Operation.PLUS; case TIMES: return Operation.DIVIDE; case DIVIDE: return Operation.TIMES; default: throw new AssertionError("μ μ μλ μ°μ° : "+ op); } }
μ΄κ±° νμ μμ μμλ₯Ό νλ μ κ±°νλ©΄ μ΄λ»κ² λμ§?
μ κ±°ν μμλ₯Ό μ°Έμ‘°νμ§ μλ ν΄λΌμ΄μΈνΈ
μλ μ무 μν₯μ΄ μλ€. ν΄λΌμ΄μΈνΈλ₯Ό λ€μ μ»΄νμΌ
νμ§ μμΌλ©΄ λ°νμ
μ μμ κ°μ μ€μμ μ μ©ν μμΈκ° λ°μν κ²μ΄λ€.
μ 리
μ΄κ±° νμ
μ νμ€ν μ μ μμλ³΄λ€ λ°μ΄λλ€. λ μ½κΈ° μ½κ³ μμ νκ³ κ°λ ₯νλ€. λλ€μ μ΄κ±° νμ
μ΄ λͺ
μμ μμ±μ
λ λ©μλ
μμ΄ μ°μ΄μ§λ§, κ° μμλ₯Ό νΉμ λ°μ΄ν°μ μ°κ²°λκ±°λ μμ λ§λ€ λ€λ₯΄κ² λμνκ² ν λλ νμνλ€. λλ¬Όκ²λ νλμ λ©μλκ° μμλ³λ‘ λ€λ₯΄κ² λμν΄μΌ ν λλ μλ€. μ΄λ° μ΄κ±° νμ
μμλ switch λ¬Έ λμ μμλ³ λ©μλ ꡬνμ μ¬μ©νμ.