Home > CS > 2024 > πŸ’Ύ [CS] λͺ¨λ“ˆν™”(Modularization)λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ [CS] λͺ¨λ“ˆν™”(Modularization)λž€ λ¬΄μ—‡μΌκΉŒμš”?
CS

πŸ’Ύ [CS] λͺ¨λ“ˆν™”(Modularization)λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • λͺ¨λ“ˆν™”(Modularization)λŠ” μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ ν”„λ‘œκ·Έλž¨μ„ 독립적이고 μž¬μ‚¬μš© κ°€λŠ₯ν•œ μž‘μ€ λ‹¨μœ„(λͺ¨λ“ˆ)둜 λ‚˜λˆ„λŠ” 섀계 κΈ°λ²•μž…λ‹ˆλ‹€.
  • 각 λͺ¨λ“ˆμ€ νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©°, λ‹€λ₯Έ λͺ¨λ“ˆκ³Ό λͺ…ν™•ν•˜κ²Œ μ •μ˜λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μƒν˜Έμž‘μš© ν•©λ‹ˆλ‹€.
  • λͺ¨λ“ˆν™”μ˜ λͺ©μ μ€ μ½”λ“œμ˜ 가독성, μœ μ§€λ³΄μˆ˜μ„±, μž¬μ‚¬μš©μ„±μ„ 높이고, λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ 더 μ‰½κ²Œ 관리할 수 μžˆλ„λ‘ ν•˜λŠ” 것 μž…λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ λͺ¨λ“ˆκ³Ό μ»΄ν¬λ„ŒνŠΈλ₯Ό 레고 블둝에 λΉ„μœ ν•΄λ³΄λ©΄?!
πŸ™‹β€β™‚οΈ μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œμ˜ λͺ¨λ“ˆ.
πŸ™‹β€β™‚οΈ APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€μ™€ μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€ κ°œλ….

1️⃣ λͺ¨λ“ˆν™”μ˜ κ°œλ….

1️⃣ λͺ¨λ“ˆ(Module).

  • λͺ¨λ“ˆμ€ μžκΈ°μ™„κ²°μ μΈ 독립적 μ½”λ“œ λ‹¨μœ„λ‘œ, νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œμ˜ μ§‘ν•©μž…λ‹ˆλ‹€.
  • 각 λͺ¨λ“ˆμ€ ν•˜λ‚˜μ˜ κΈ°λŠ₯μ΄λ‚˜ μž‘μ—…μ— μ§‘μ€‘ν•˜λ©°, λ‹€λ₯Έ λͺ¨λ“ˆκ³Όμ˜ μ˜μ‘΄μ„±μ„ μ΅œμ†Œν™”ν•˜λ„λ‘ μ„€κ³„λ©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, 둜그인 처리, λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Ό, 파일 μž…μΆœλ ₯, μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ λ“±κ³Ό 같은 각각의 κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜λŠ” λͺ¨λ“ˆμ΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μΈν„°νŽ˜μ΄μŠ€(Interface).

  • λͺ¨λ“ˆν™”(Modularization)μ—μ„œ μ€‘μš”ν•œ κ°œλ…μ€ λͺ…ν™•ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€(Interface)λŠ” λͺ¨λ“ˆ(Module)이 μ™ΈλΆ€μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ •μ˜ν•˜λ©°, λ‹€λ₯Έ λͺ¨λ“ˆμ΄ κΈ°λŠ₯을 ν˜ΈμΆœν•  λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ…μ„Έμž…λ‹ˆλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€(Interface) 덕뢄에 λͺ¨λ“ˆ λ‚΄λΆ€μ˜ κ΅¬ν˜„μ΄ λ³€κ²½λ˜λ”λΌλ„, μ™ΈλΆ€ λͺ¨λ“ˆκ³Όμ˜ μ—°κ²° 방식은 λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μœ μ—°ν•œ μ½”λ“œ μˆ˜μ •μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

2️⃣ λͺ¨λ“ˆν™”μ˜ μž₯점.

1️⃣ μœ μ§€λ³΄μˆ˜μ„± ν–₯상.

  • λͺ¨λ“ˆν™”λœ ν”„λ‘œκ·Έλž¨μ€ κ°œλ³„ λͺ¨λ“ˆμ„ λ…λ¦½μ μœΌλ‘œ μˆ˜μ •ν•  수 있기 λ•Œλ¬Έμ—, νŠΉμ • κΈ°λŠ₯에 λ¬Έμ œκ°€ λ°œμƒν•΄λ„ ν•΄λ‹Ή λͺ¨λ“ˆλ§Œ μˆ˜μ •ν•˜λ©΄ λ©λ‹ˆλ‹€.
  • 전체 μ‹œμŠ€ν…œμ— 영ν–₯을 주지 μ•Šκ³  변경이 κ°€λŠ₯ν•˜λ―€λ‘œ μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•©λ‹ˆλ‹€.

2️⃣ μž¬μ‚¬μš©μ„± 증가.

  • λͺ¨λ“ˆμ€ 독립적인 κΈ°λŠ₯ λ‹¨μœ„μ΄κΈ° λ•Œλ¬Έμ—, μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ—μ„œ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, 둜그인 처리 λͺ¨λ“ˆμ„ λ³„λ„λ‘œ λ§Œλ“€μ–΄ λ†“μœΌλ©΄, λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œλ„ λ™μΌν•œ λͺ¨λ“ˆμ„ μž¬μ‚¬μš©ν•  수 μžˆμ–΄ 개발 μ‹œκ°„μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ 가독성 및 μ½”λ“œ 관리.

  • λͺ¨λ“ˆν™”(Modularization)λŠ” ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰λ₯Ό μ²΄κ³„μ μœΌλ‘œ 관리할 수 있게 ν•˜λ©°, 각각의 λͺ¨λ“ˆμ΄ λͺ…ν™•ν•œ κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œμ˜ 가독성이 λ†’μ•„μ§‘λ‹ˆλ‹€.
  • μ΄λŠ” 큰 ν”„λ‘œμ νŠΈλ‚˜ λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ—μ„œ 특히 μœ μš©ν•˜λ©°, μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° 쉽고 λ””λ²„κΉ…ν•˜κΈ°λ„ μš©μ΄ν•©λ‹ˆλ‹€.

4️⃣ 개발 νŒ€ ν˜‘μ—….

  • λͺ¨λ“ˆν™”λ₯Ό 톡해 개발 νŒ€μ΄ μž‘μ—…μ„ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 각 κ°œλ°œμžλŠ” λ‹€λ₯Έ λͺ¨λ“ˆμ— 영ν–₯을 μ£ΌκΈ° μ•Šκ³  μžμ‹ μ˜ λͺ¨λ“ˆμ„ κ°œλ°œν•  수 있기 λ•Œλ¬Έμ— 병렬 개발이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

πŸ“ 병렬 개발(Parallel Development)

μ—¬λŸ¬ κ°œλ°œμžκ°€ λ™μ‹œμ— λ™μΌν•œ ν”„λ‘œμ νŠΈμ— λ‹€λ₯Έ κΈ°λŠ₯μ΄λ‚˜ λͺ¨λ“ˆ(Module)을 κ°œλ°œν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 방식을 μ˜λ―Έν•©λ‹ˆλ‹€.
병렬 개발(Parallel Development)을 톡해 ν”„λ‘œμ νŠΈμ˜ 개발 속도λ₯Ό 높이고, κΈ°λŠ₯을 더 λΉ λ₯΄κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ ν”νžˆ μ‚¬μš©λ˜λŠ” 개발 λ°©μ‹μœΌλ‘œ, 개발 νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™”ν•  수 μžˆλŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

  • μ΄λŠ” 큰 ν”„λ‘œμ νŠΈλ‚˜ 개발 속도λ₯Ό 높이고, 효율적인 ν˜‘μ—…μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

5️⃣ μœ μ—°μ„±κ³Ό ν™•μž₯μ„±.

  • λͺ¨λ“ˆν™”(Modularization)λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨μ„ μ‰½κ²Œ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μƒˆλ‘œμš΄ κΈ°λŠ₯이 ν•„μš”ν•  λ•Œ, κΈ°μ‘΄ λͺ¨λ“ˆ(Module)을 μˆ˜μ •ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ λͺ¨λ“ˆ(Module)을 μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‰½κ²Œ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œμ˜ μœ μ—°μ„±μ΄ μ¦κ°€ν•˜μ—¬ λ‹€μ–‘ν•œ μš”κ΅¬ 사항에 맞개 ν”„λ‘œκ·Έλž¨μ„ μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ λͺ¨λ“ˆν™”μ˜ 예.

1️⃣ Javaμ—μ„œμ˜ λͺ¨λ“ˆν™”.

  • Java 9λΆ€ν„°λŠ” λͺ¨λ“ˆ μ‹œμŠ€ν…œμ„ λ„μž…ν•˜μ—¬, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λͺ…ν™•ν•œ μ˜μ‘΄μ„±μ„ 가진 μ—¬λŸ¬ λͺ¨λ“ˆλ‘œ λ‚˜λˆŒ 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, module-info.java νŒŒμΌμ„ μ‚¬μš©ν•΄ λͺ¨λ“ˆμ„ μ •μ˜ν•˜κ³ , ν•΄λ‹Ή λͺ¨λ“ˆμ΄ μ–΄λ–€ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λŠ”μ§€, 외뢀에 μ–΄λ–€ νŒ¨ν‚€μ§€λ₯Ό κ³΅κ°œν•˜λŠ”μ§€ λͺ…ν™•νžˆ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
module com.example.mymodule {
    export com.example.service; // 외뢀에 κ³΅κ°œν•  νŒ¨ν‚€μ§€
    requires java.sql; // ν•„μš”ν•œ λͺ¨λ“ˆ
}

2️⃣ ν”„λ‘œμ νŠΈ ꡬ쑰의 λͺ¨λ“ˆν™”.

  • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 일반적으둜 λ‹€μŒκ³Ό 같은 λͺ¨λ“ˆλ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 데이터 μ ‘κ·Ό λͺ¨λ“ˆ : λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•˜λŠ” κΈ°λŠ₯을 λ‹΄λ‹Ή.
    • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 λͺ¨λ“ˆ : μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 λ‘œμ§μ„ 처리.
    • ν”„λ ˆμ  ν…Œμ΄μ…˜ λͺ¨λ“ˆ : μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ 및 μš”μ²­/응닡 처리.
    • μœ ν‹Έλ¦¬ν‹° λͺ¨λ“ˆ : λ‹€μ–‘ν•œ λͺ¨λ“ˆμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯을 제곡.
  • μ΄λŸ¬ν•œ λͺ¨λ“ˆ ꡬ쑰λ₯Ό 톡해 κ°œλ°œμžλŠ” 각 λͺ¨λ“ˆμ„ λ…λ¦½μ μœΌλ‘œ 개발, ν…ŒμŠ€νŠΈ, μœ μ§€λ³΄μˆ˜ν•  수 있으며, 각 λͺ¨λ“ˆμ€ ν•˜λ‚˜μ˜ κΈ°λŠ₯에 μ§‘μ€‘ν•˜λ„λ‘ μ„€κ³„λ©λ‹ˆλ‹€.

4️⃣ μš”μ•½.

  • λͺ¨λ“ˆν™”(Modularization)λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘κ³  독립적인 λͺ¨λ“ˆλ‘œ λ‚˜λˆ„μ–΄ 가독성, μœ μ§€λ³΄μˆ˜μ„±, μž¬μ‚¬μš©μ„±μ„ λ†’μ΄λŠ” 섀계 κΈ°λ²•μž…λ‹ˆλ‹€.
  • λͺ¨λ“ˆν™”(Modularization)된 ν”„λ‘œκ·Έλž¨μ€ κΈ°λŠ₯λ³„λ‘œ 독립적인 λͺ¨λ“ˆ(Module)둜 κ΅¬μ„±λ˜μ–΄, 각 λͺ¨λ“ˆμ΄ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³ , λ‹€λ₯Έ λͺ¨λ“ˆκ³Ό λͺ…ν™•ν•œ μΈν„°νŽ˜μ΄μŠ€(Interface)둜 μƒν˜Έμž‘μš©ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 개발, μœ μ§€λ³΄μˆ˜, ν™•μž₯이 μ‰¬μ›Œμ§€κ³ , νŒ€ ν˜‘μ—…λ„ μ›ν™œν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λͺ¨λ“ˆν™”(Modularization)λ₯Ό 잘 μ„€κ³„ν•˜λ©΄ λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ μ²΄κ³„μ μœΌλ‘œ 관리할 수 있으며, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ λ†’μ—¬ 개발 속도λ₯Ό ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.