Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

λΉ„νŠΈ ν•„λ“œ λŒ€μ‹  EnumSet을 μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ36)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

λΉ„νŠΈ ν•„λ“œ λŒ€μ‹  EnumSet을 μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ36)]

2023. 7. 1. 22:14

πŸ“™ 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);
}

  λΉ„νŠΈ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λΉ„νŠΈλ³„ 연산을 μ‚¬μš©ν•΄ ν•©μ§‘ν•©κ³Ό ꡐ집합 같은 μ§‘ν•© 연산을 효율적으둜 μˆ˜ν–‰ν•  수 μžˆλ‹€.

  ν•˜μ§€λ§Œ λΉ„νŠΈ ν•„λ“œλŠ” μ •μˆ˜ μ—΄κ±° μƒμˆ˜μ˜ 단점(링크)을 κ·ΈλŒ€λ‘œ μ§€λ‹ˆλ©°, μΆ”κ°€λ‘œ λ‹€μŒκ³Ό 같은 λ¬Έμ œκΉŒμ§€ μ•ˆκ³  μžˆλ‹€.

  1. λΉ„νŠΈ ν•„λ“œ κ°’이 κ·ΈλŒ€λ‘œ μΆœλ ₯되면 λ‹¨μˆœν•œ μ •μˆ˜ μ—΄κ±° μƒμˆ˜λ₯Ό μΆœλ ₯ν•  λ•Œλ³΄λ‹€ ν•΄μ„ν•˜κΈ°κ°€ ν›¨μ”¬ μ–΄λ ΅λ‹€.
  2. λΉ„νŠΈ ν•„λ“œ ν•˜λ‚˜μ— λ…Ήμ•„ μžˆλŠ” λͺ¨λ“  μ›μ†Œλ₯Ό μˆœνšŒν•˜κΈ°λ„ κΉŒλ‹€λ‘­λ‹€.
  3. μ΅œλŒ€ λͺ‡ λΉ„νŠΈκ°€ ν•„μš”ν•œμ§€λ₯Ό 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'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

'πŸ“‚ JAVA > μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν™•μž₯ν•  수 μžˆλŠ” μ—΄κ±° νƒ€μž…μ΄ ν•„μš”ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ38)]  (0) 2023.07.05
ordinal 인덱싱 λŒ€μ‹  EnumMap을 μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ37)]  (0) 2023.07.02
ordinal λ©”μ„œλ“œ λŒ€μ‹  μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ35)]  (0) 2023.07.01
int μƒμˆ˜ λŒ€μ‹  μ—΄κ±° νƒ€μž…μ„ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ34)] - (2)  (0) 2023.07.01
int μƒμˆ˜ λŒ€μ‹  μ—΄κ±° νƒ€μž…μ„ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ34)] - (1)  (0) 2023.07.01
    'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • ν™•μž₯ν•  수 μžˆλŠ” μ—΄κ±° νƒ€μž…μ΄ ν•„μš”ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ38)]
    • ordinal 인덱싱 λŒ€μ‹  EnumMap을 μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ37)]
    • ordinal λ©”μ„œλ“œ λŒ€μ‹  μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ35)]
    • int μƒμˆ˜ λŒ€μ‹  μ—΄κ±° νƒ€μž…μ„ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ34)] - (2)
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”