π 1. λΉνΈ νλ
μ΄κ±°ν κ°λ€μ΄ μ£Όλ‘ μ§ν©μΌλ‘ μ¬μ©λ κ²½μ°, μμ μλ κ° μμμ μλ‘ λ€λ₯Έ 2μ κ±°λμ κ³± κ°μ ν λΉν μ μ μ΄κ±° ν¨ν΄μ μ¬μ©νμλ€. (λΉνΈλ§μ€νΉμ μ΄μ©νλ€κ³ ν μ μλ€.)
public class Text {
public static final int STYLE_BOLD = 1 << 0; // 1
public static final int STYLE_ITALIC = 1 << 1; // 2
public static final int STYLE_UNDERLINE = 1 << 2; // 4
public static final int STYLE_STRIKETHROUGH = 1 << 3; // 8
// 맀κ°λ³μ stylesλ 0κ° μ΄μμ STYLE_ μμλ₯Ό λΉνΈλ³ ORν κ°μ΄λ€.
public void applyStyles(int styles) { ... }
}
μλμ κ°μ΄ λΉνΈλ³ ORμ μ¬μ©ν΄ μ¬λ¬ μμλ₯Ό νλμ μ§ν©μΌλ‘ λͺ¨μ μ μμΌλ©°, μ΄λ κ² λ§λ€μ΄μ§ μ§ν©μ λΉνΈ νλ(bit field)λΌ νλ€.
public static void main(String[] args) {
Text text = new Text();
text.applyStyles(STYLE_BOLD | STYLE_ITALIC);
}
λΉνΈ νλλ₯Ό μ¬μ©νλ©΄ λΉνΈλ³ μ°μ°μ μ¬μ©ν΄ ν©μ§ν©κ³Ό κ΅μ§ν© κ°μ μ§ν© μ°μ°μ ν¨μ¨μ μΌλ‘ μνν μ μλ€.
νμ§λ§ λΉνΈ νλλ μ μ μ΄κ±° μμμ λ¨μ (λ§ν¬)μ κ·Έλλ‘ μ§λλ©°, μΆκ°λ‘ λ€μκ³Ό κ°μ λ¬Έμ κΉμ§ μκ³ μλ€.
- λΉνΈ νλ κ°μ΄ κ·Έλλ‘ μΆλ ₯λλ©΄ λ¨μν μ μ μ΄κ±° μμλ₯Ό μΆλ ₯ν λλ³΄λ€ ν΄μνκΈ°κ° ν¨μ¬ μ΄λ ΅λ€.
- λΉνΈ νλ νλμ λ Ήμ μλ λͺ¨λ μμλ₯Ό μννκΈ°λ κΉλ€λ‘λ€.
- μ΅λ λͺ λΉνΈκ° νμνμ§λ₯Ό API μμ± μ 미리 μμΈ‘νμ¬ μ μ ν νμ (보ν΅μ intλ long)μ μ νν΄μΌ νλ€. (APIλ₯Ό μμ νμ§ μκ³ λ λΉνΈ μλ₯Ό λ λ리 μ μκΈ° λλ¬Έμ΄λ€.)
π 2. EnumSet
λΉνΈ νλμ λμμΌλ‘ java.util ν¨ν€μ§μ EnumSet ν΄λμ€κ° μλ€.
EnumSet ν΄λμ€λ μ΄κ±° νμ μμμ κ°μΌλ‘ ꡬμ±λ μ§ν©μ ν¨κ³Όμ μΌλ‘ ννν΄ μ€λ€. Set μΈν°νμ΄μ€λ₯Ό μλ²½ν ꡬννλ©°, νμ μμ νκ³ , λ€λ₯Έ μ΄λ€ Set ꡬν체μ ν¨κ» μ¬μ©ν μ μλ€.
EnumSetμ λ΄λΆλ λΉνΈ 벑ν°λ‘ ꡬνλμ΄ μλλ°, λν΄ν μμ μ EnumSetμ΄ λ€ μ²λ¦¬ν΄ μ£ΌκΈ° λλ¬Έμ μ°λ¦¬λ λΉνΈλ₯Ό μ§μ λ€λ£° λ νν κ²ͺλ μ€λ₯λ€λ‘λΆν° ν΄λ°©λλ€.
λ€μ μ½λλ μ΄μ μ μ΄ν΄λ³Έ Textλ₯Ό EnumSetμΌλ‘ ννν κ²μ΄λ€.
public class Text {
public enum Style { BOLD, ITALIC, UNDERLINE, STRIKETHROUGH }
// μ΄λ€ Setμ λ겨λ λλ, EnumSetμ΄ κ°μ₯ μ’λ€.
public void applyStyles(Set<Style> styles) { ... }
}
public static void main(String[] args) {
Text text = new Text();
text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
}
applyStyles λ©μλκ° EnumSet<Style>μ΄ μλ Set<Style>μ λ°λ μ΄μ λ 'λͺ¨λ ν΄λΌμ΄μΈνΈκ° EnumSetμ 건λ€λ¦¬λΌ μ§μλλ μν©μ΄λΌλ μ΄μμ΄λ©΄ μΈν°νμ΄μ€λ‘ λ°λ κ² μΌλ°μ μΌλ‘ μ’μ μ΅κ΄'μ΄κΈ° λλ¬Έμ΄λ€.
ν΄λΌμ΄μΈνΈκ° λ€λ₯Έ Set ꡬν체λ₯Ό λκΈ°λλΌλ μ²λ¦¬ν μ μλ€.
ν΄λΉ κΈμ Joshua Bloch λμ 'Effective Java 3/E'λ₯Ό μ°Έκ³ νμμ΅λλ€.