๐ฏ ์์ดํ 34. int ์์ ๋์ ์ด๊ฑฐ ํ์ ์ ์ฌ์ฉํ๋ผ.
์ ์ ์ด๊ฑฐ ํจํด - ์๋นํ ์ทจ์ฝํ๋ค!
public class IntegerConstants { 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 enum Apple { FUJI, PIPPIN, GRANNY_SMITH } public enum Orange { NAVEL, TEMPLE, BLOOD }
์ด๊ฑฐ ํ์ ์ ๋ฐ์์ ์ ๊ทผํ ์ ์๋ ์์ฑ์๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก ์ฌ์ค์final
์ด๋ค.
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์คํด์ค๋ฅผ ์ง์ ์์ฑํ๊ฑฐ๋ ํ์ฅ ํ ์ ์์ผ๋ ์ด๊ฑฐ ํ์ ์ ์ธ์ผ๋ก ๋ง๋ค์ด์ง ์ธ์คํด์ค๋ค์ ๋ฑ ํ๋์ฉ๋ง ์กด์ฌํจ์ด ๋ณด์ฅ๋๋ค.
if.Apple
์ด๊ฑฐ ํ์ ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ค๋ฉด, ๊ฑด๋ค๋ฐ์ ์ฐธ์กฐ๋Apple
์ ์ธ ๊ฐ์ง ๊ฐ ์ค ํ๋์์ด ํ์คํ๋ค.
๋ค๋ฅธ ํ์ ์ ๊ฐ์ ๋๊ธฐ๋ ค ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋๋ค.
๋ฐ์ดํฐ์ ๋ฉ์๋๋ฅผ ๊ฐ๋ ์ด๊ฑฐ ํ์
public enum Planet { MERCURY(3.302e+23, 2.439e6), VENUS (4.869e+24, 6.052e6), EARTH (5.975e+24, 6.378e6), MARS (6.419e+23, 3.393e6), JUPITER(1.899e+27, 7.149e7), SATURN (5.685e+26, 6.027e7), URANUS (8.683e+25, 2.556e7), NEPTUNE(1.024e+26, 2.477e7); private final double mass; // ์ง๋(๋จ์: ํฌ๋ก๊ทธ๋จ) private final double radius; // ๋ฐ์ง๋ฆ(๋จ์: ๋ฏธํฐ) private final double surfaceGravity; // ํ๋ฉด์ค๋ ฅ(๋จ์: m / s^2) // ์ค๋ ฅ์์(๋จ์: m^3 / kg s^2) private static final double G = 6.67300E-11; // ์์ฑ์ Planet(double mass, double radius) { this.mass = mass; this.radius = radius; surfaceGravity = G * mass / (radius * radius); } public double mass() { return mass; } public double radius() { return radius; } public double surfaceGravity() { return surfaceGravity; } public double surfaceWeight(double mass) { return mass * surfaceGravity; // F = ma } }
์ด๊ฑฐ ํ์ ์์ ๊ฐ๊ฐ์ ํน์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ์ง์ผ๋ ค๋ฉด ์์ฑ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ธ์คํด์ค ํ๋์ ์ ์ฅํ๋ฉด๋๋ค.
์์ Planet ์์์ ๋ณด์ฌ์ค ํน์ฑ๋ง์ผ๋ก ์ฐ๊ฑฐ ํ์
์ ์ฌ์ฉํ๋ ์ํฉ ๋๋ค์๋ฅผ ํ๋ฅญํ ์ค๋ช
ํ ์ ์๋ค.
ํ์ง๋ง ์์๊ฐ ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํด์คฌ์ผ๋ฉด ํ ๋๋ ์๋ค.
๊ฐ์ ๋ฐ๋ผ ๋ถ๊ธฐํ๋ ์ด๊ฑฐ ํ์ - ์ด๋๋ก ๋ง์กฑํ๋๊ฐ?
public enum Operation { PLUS, MINUS, TIMES, DIVIDE; public double apply(double x, double y){ switch (this){ case PLUS: return x+y; case MINUS: return x-y; case TIMES: return x*y; case DIVIDE: return x/y; } throw new AssertionError("์ ์ ์๋ ์ฐ์ฐ: " + this); } }
์ ์์ค๋ ๋์์ ํ์ง๋ง ๋ค๋ฅธ ์ฐ์ฐ์ ์ถ๊ฐํ ๋๋ case๋ฌธ์ ์ถ๊ฐ๋ฅผ ํด์ผํ๋ค.
๋ง์ฝ ๊น๋จน๊ณ case๋ฌธ์ ์ถ๊ฐํ์ง ์๋๋ค ํ๋๋ผ๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๋ฐํ์ ์ค "์ ์ ์๋ ์ฐ์ฐ"์ด๋ผ๋ ์ค๋ฅ๋ฅผ ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ ์์๋ณ ํด๋์ค ๋ชธ์ฒด, ์ฆ ๊ฐ ์์์์ ์์ ์ ๋ง๊ฒ ์ฌ์ ์ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์์๋ณ ๋ฉ์๋ ๊ตฌํ์ ํ์ฉํ ์ด๊ฑฐ ํ์
public enum Operation2 { PLUS { public double apply(double x, double y){ return x+y; } }, MINUS { public double apply(double x, double y){ return x-y; } }, TIMES { public double apply(double x, double y){ return x*y; } }, DIVIDE { public double apply(double x, double y){ return x/y; } }; public abstract double apply(double x, double y); // ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธ }
์ ์ฒ๋ผ ์ถ์๋ฉ์๋
apply
๋ฅผ ์ ์ธํ๋ฉด ๋ค๋ฅธ ์ฐ์ฐ์ ์ถ๊ฐํ ๋๋ ๋ฉ์๋ ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ด ์ถ๊ฐํ์ง ์๋๋ค๋ฉด
์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์์ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=