๐ป ์ํํธ์จ์ด ๋ชจ๋ ์์ง๋์ ๊ฒฐํฉ๋| ๐ ์ ์ฒ๊ธฐ ์ค๊ธฐ ๋๋น ๋ฌธ์ ํฌํจ
์์ฝ
์ํํธ์จ์ด ์ค๊ณ์ ํต์ฌ ์์น์ธ ์์ง๋(Cohesion)์ ๊ฒฐํฉ๋(Coupling)์ ๊ฐ๋ ์ ์ดํดํ๊ณ , ๊ฐ 7๊ฐ์ง, 6๊ฐ์ง ์ ํ์ ์์์ ํจ๊ป ์์๋ด ๋๋ค. ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ ๋๋น ๋ฌธ์ ๋ก ํ์ต์ ๋ง๋ฌด๋ฆฌํฉ๋๋ค.
๐ก ์ ์ฒ๊ธฐ ์ค๊ธฐ ๋๋น๋ฅผ ์ํ ์ฃผ๊ด์ ๋ฌธ์ ๋ ํฌ์คํ ๋ง์ง๋ง์ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ๋ฒ ํธ๋ ๊ฑธ ๊ถ์ฅํฉ๋๋ค.
โ๏ธ๊ฐ ์์ง๋์ ๊ฒฐํฉ๋์ ์ ํ๋ณ ํน์ง๊ณผ ์์๋ฅผ ์๊ธฐํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐ ์์ง๋์ ๊ฒฐํฉ๋ ํ๋์ ๋ณด๊ธฐ
์ํํธ์จ์ด์ ํ์ง์ ๊ฒฐ์ ํ๋ ์ค์ํ ๋ ๊ฐ์ง ์ฒ๋๋ ์์ง๋์ ๊ฒฐํฉ๋์ ๋๋ค.
- ์์ง๋(Cohesion): ๋ชจ๋ ๋ด๋ถ์ ์์๋ค์ด ์ผ๋ง๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๋์ง๋ฅผ ๋ํ๋ ๋๋ค. ๋์์๋ก ์ข์ต๋๋ค.
- ๊ฒฐํฉ๋(Coupling): ๋ชจ๋๊ณผ ๋ชจ๋ ๊ฐ์ ์ํธ ์์กด ์ ๋๋ฅผ ๋ํ๋ ๋๋ค. ๋ฎ์์๋ก ์ข์ต๋๋ค.
์์ง๋ (Cohesion) - ๋์์๋ก ์ข์ | ๊ฒฐํฉ๋ (Coupling) - ๋์ ์ -> ๋ฎ์ ์ |
---|---|
๊ธฐ๋ฅ์ (Functional) | ๋ด์ฉ (Content) |
์์ฐจ์ (Sequential) | ๊ณตํต (Common) |
ํต์ ์ (๊ตํ์ ) (Communicational) | ์ธ๋ถ (External) |
์ ์ฐจ์ (Procedural) | ์ ์ด (Control) |
์๊ฐ์ (Temporal) | ์คํฌํ (Stamp) |
๋ ผ๋ฆฌ์ (Logical) | ์๋ฃ (Data) |
์ฐ์ฐ์ (Accidental) |
1. ๐งฉ ๋ชจ๋ ์์ง๋ (Cohesion)
์์ง๋๋ ํ๋์ ๋ชจ๋์ด ๋จ์ผ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ๊ทธ ๊ตฌ์ฑ์์๋ค์ด ์ผ๋ง๋ ๊ธด๋ฐํ๊ฒ ํ๋ ฅํ๋์ง๋ฅผ ๋ํ๋ด๋ ์ฒ๋์ ๋๋ค. ์์ง๋๊ฐ ๋์์๋ก ๋ชจ๋์ ๋ ๋ฆฝ์ฑ์ด ๋์์ ธ ์ฌ์ฌ์ฉ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋๋ค.
์์ง๋ ์ ํ (๋์ ์ -> ๋ฎ์ ์)
-
๊ธฐ๋ฅ์ ์์ง๋ (Functional Cohesion)
- ๋ชจ๋ ๋ด๋ถ์ ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋จ์ผ ๋ชฉ์ ์ ์ํํ๊ธฐ ์ํด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฐ์ฅ ์ด์์ ์ธ ์์ง๋์ ๋๋ค.
- ์์:
์์_๋์ด_๊ณ์ฐ
๋ชจ๋์ ๋ฐ์ง๋ฆ์ ์ ๋ ฅ๋ฐ์ ์์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ ๋จ ํ๋์ ๊ธฐ๋ฅ๋ง ์ํํฉ๋๋ค.
-
์์ฐจ์ ์์ง๋ (Sequential Cohesion)
- ํ ๊ธฐ๋ฅ์ ์ถ๋ ฅ์ด ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉ๋๋ ์์ฐจ์ ์ธ ๊ด๊ณ๋ฅผ ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ๋ฌถ์ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์:
ํ์ผ_์ฒ๋ฆฌ
๋ชจ๋์์ํ์ผ_์ฝ๊ธฐ()
ํจ์์ ์ถ๋ ฅ(ํ์ผ ๋ด์ฉ)์ด๋ฐ์ดํฐ_์์ถ()
ํจ์์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ.
-
ํต์ ์ (๊ตํ์ ) ์์ง๋ (Communicational Cohesion)
- ๋์ผํ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋์ผํ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฌถ์ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์:
ํ์_์ ๋ณด_์ถ๋ ฅ
๋ชจ๋์ด 'ํ๋ฒ'์ ์ ๋ ฅ๋ฐ์ ํด๋น ํ์์์ด๋ฆ_์กฐํ()
,์ฑ์ _์กฐํ()
,์ฃผ์_์กฐํ()
๊ธฐ๋ฅ์ ์ํํ๊ณ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ.
-
์ ์ฐจ์ ์์ง๋ (Procedural Cohesion)
- ๋ชจ๋ ๋ด ๊ธฐ๋ฅ๋ค์ด ์ ํด์ง ์์์ ๋ฐ๋ผ ์คํ๋์ด์ผ ํ ๋ ์ด๋ฅผ ํ๋์ ๋ชจ๋๋ก ๋ฌถ์ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์:
์ฌ์ฉ์_๋ฐ์ดํฐ_์ฒ๋ฆฌ
๋ชจ๋๋ฐ์ดํฐ_์ฝ๊ธฐ()
,๋ฐ์ดํฐ_์ ํจ์ฑ_๊ฒ์ฌ()
,๋ฐ์ดํฐ_์ ์ฅ()
ํจ์๋ฅผ ์์๋๋ก ํธ์ถํ๋ ๊ฒฝ์ฐ.
-
์๊ฐ์ ์์ง๋ (Temporal Cohesion)
- ํน์ ์๊ฐ์ ํจ๊ป ์คํ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฌถ์ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์: ํ๋ก๊ทธ๋จ ์์ ์ ํจ๊ป ์คํ๋์ด์ผ ํ๋ ์ด๊ธฐํ ์ฝ๋๋ค(๋ณ์ ์ด๊ธฐํ, ํ๊ฒฝ ์ค์ , ๋ก๊ทธ ํ์ผ ์ด๊ธฐ)์ ๋ชจ์๋์
initialize
๋ชจ๋.
-
๋ ผ๋ฆฌ์ ์์ง๋ (Logical Cohesion)
- ์ ์ฌํ ์ฑ๊ฒฉ์ ๊ฐ๊ฑฐ๋ ํน์ ๋ถ๋ฅ์ ์ํ๋ ๊ธฐ๋ฅ๋ค์ ํ๋์ ๋ชจ๋๋ก ๋ฌถ์ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์: ๋ชจ๋ ์ข
๋ฅ์
์ ๋ ฅ
์์ ์ ์ฒ๋ฆฌํ๋ ๋ชจ๋. ๋ง์ฐ์ค, ํค๋ณด๋, ํฐ์น์คํฌ๋ฆฐ ์ ๋ ฅ์ด ๋ชจ๋ ํ ํจ์ ๋ด์์ case๋ฌธ์ผ๋ก ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฉ๋๋ค.
-
์ฐ์ฐ์ ์์ง๋ (Accidental Cohesion)
- ๋ชจ๋ ๋ด๋ถ์ ๊ตฌ์ฑ์์๋ค์ด ์๋ฌด๋ฐ ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฐ์ฅ ๋ฎ์ ์์ค์ ์์ง๋์ ๋๋ค.
- ์์:
Utils
๋ชจ๋์ ์๋ก ๊ด๋ จ ์๋ ํจ์๋ค(e.g.,sendEmail
,calculateSum
,printReport
)์ ๋ชจ์๋์ ๊ฒฝ์ฐ.
2. ๐ ๋ชจ๋ ๊ฒฐํฉ๋ (Coupling)
๊ฒฐํฉ๋๋ ๋ชจ๋ ๊ฐ์ ์๋ก ์ผ๋ง๋ ์์กดํ๋์ง๋ฅผ ๋ํ๋ด๋ ์ฒ๋์ ๋๋ค. ๊ฒฐํฉ๋๊ฐ ๋ฎ์์๋ก ํ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ฏธ์น๋ ์ํฅ์ด ์ ์ด์ ธ ์์คํ ์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ด ํฅ์๋ฉ๋๋ค.
๊ฒฐํฉ๋ ์ ํ (๋์ ์ -> ๋ฎ์ ์)
-
๋ด์ฉ ๊ฒฐํฉ๋ (Content Coupling)
- ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ด๋ถ ๊ธฐ๋ฅ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฐธ์กฐํ๊ฑฐ๋ ์์ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฐ์ฅ ๋์ ์์ค์ ๊ฒฐํฉ๋์ ๋๋ค.
- ์์: A ๋ชจ๋์ด B ๋ชจ๋์ ์ฝ๋ ์ค๊ฐ์ผ๋ก ๋ถ๊ธฐํ๊ฑฐ๋, B ๋ชจ๋ ๋ด๋ถ์ ์ง์ญ ๋ณ์๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ.
-
๊ณตํต ๊ฒฐํฉ๋ (Common Coupling)
- ์ฌ๋ฌ ๋ชจ๋์ด ํ๋์ ์ ์ญ ๋ณ์๋ ๊ณตํต ๋ฐ์ดํฐ ์์ญ์ ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์: ์ฌ๋ฌ ๋ชจ๋์ด
GlobalConfig
๋ผ๋ ์ ์ญ ๊ฐ์ฒด์ ์ค์ ๊ฐ์ ์ฝ๊ณ ์์ ํ๋ ๊ฒฝ์ฐ.
-
์ธ๋ถ ๊ฒฐํฉ๋ (External Coupling)
- ๋ ๋ชจ๋์ด ์ธ๋ถ์์ ์ ์๋ ๋ฐ์ดํฐ ํ์, ํต์ ํ๋กํ ์ฝ, ๋๋ ํน์ ํ๋์จ์ด๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์: ๋ ๋ชจ๋์ด ์ธ๋ถ ํ์ผ์ ํน์ ํฌ๋งท์ ๊ณต์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒฝ์ฐ.
-
์ ์ด ๊ฒฐํฉ๋ (Control Coupling)
- ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ๋์์ ์ ์ดํ๋ ์ ์ด ์ ํธ(Flag, Switch)๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์: A ๋ชจ๋์ด B ๋ชจ๋์ ํธ์ถํ๋ฉด์
์ ๋ ฌ_๋ฐฉ์
ํ๋๊ทธ๋ฅผ ์ ๋ฌํ์ฌ B ๋ชจ๋์ด ์ค๋ฆ์ฐจ์์ผ๋ก ๋์ํ ์ง ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋์ํ ์ง ๊ฒฐ์ ํ๊ฒ ํ๋ ๊ฒฝ์ฐ.
-
์คํฌํ ๊ฒฐํฉ๋ (Stamp Coupling)
- ๋ ๋ชจ๋์ด ์๋ฃ ๊ตฌ์กฐ(๊ฐ์ฒด, ๋ ์ฝ๋ ๋ฑ)๋ฅผ ์ฃผ๊ณ ๋ฐ์ง๋ง, ๊ทธ์ค ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- ์์:
ํ์
๊ฐ์ฒด(ํ๋ฒ, ์ด๋ฆ, ์ฃผ์, ์ฐ๋ฝ์ฒ ํฌํจ)๋ฅผ์ฃผ์_์ถ๋ ฅ
๋ชจ๋์ ์ ๋ฌํ์ง๋ง, ๋ชจ๋์์ฃผ์
ํ๋๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ.
-
์๋ฃ ๊ฒฐํฉ๋ (Data Coupling)
- ๋ ๋ชจ๋์ด ํ์ํ ์ต์ํ์ ๋ฐ์ดํฐ(๋จ์ ํ๋ผ๋ฏธํฐ)๋ง์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฐ์ฅ ์ด์์ ์ธ ๊ฒฐํฉ๋์ ๋๋ค.
- ์์:
๋ง์
๋ชจ๋์ด ๋ ๊ฐ์ ์ซ์a
์b
๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๊ทธ ํฉ์ ๋ฐํํ๋ ๊ฒฝ์ฐ.
๐ ์ ์ฒ๊ธฐ ์ค๊ธฐ ๋๋น ๋ฌธ์
๋ฌธ์ | ๋ชจ๋ ๋ด๋ถ์ ์์๋ค์ด ํ๋์ ๋ชฉ์ ์ ์ํด ์ผ๋ง๋ ๊ธด๋ฐํ๊ฒ ์ฐ๊ด๋์ด ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ฒ๋๋ ๋ฌด์์ธ๊ฐ? |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ๋ชจ๋ ๊ฐ์ ์ํธ ์์กด์ฑ ์ ๋๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ฎ์์๋ก ์ข์ ์ค๊ณ๋ก ํ๊ฐ๋ฐ๋ ๊ฒ์ ๋ฌด์์ธ๊ฐ? |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ์์ง๋ ์ ํ ์ค, ๋ชจ๋ ๋ด ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋จ์ผ ๋ชฉ์ ์ ์ํํ๊ธฐ ์ํด ๊ตฌ์ฑ๋์ด ๊ฐ์ฅ ์ด์์ ์ธ ๊ฒ์ผ๋ก ํ๊ฐ๋ฐ๋ ์์ง๋๋ ๋ฌด์์ธ๊ฐ? |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ๊ฒฐํฉ๋ ์ ํ ์ค, ๋ ๋ชจ๋์ด ํ์ํ ์ต์ํ์ ๋ฐ์ดํฐ๋ง์ ํ๋ผ๋ฏธํฐ๋ก ์ฃผ๊ณ ๋ฐ์ ๊ฐ์ฅ ๋ฐ๋์งํ ๊ฒ์ผ๋ก ํ๊ฐ๋ฐ๋ ๊ฒฐํฉ๋๋ ๋ฌด์์ธ๊ฐ? |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ์์ง๋, ๊ฒฐํฉ๋๋ฅผ ๋์ ๊ฒ๋ถํฐ ๋ฎ์ ์์ผ๋ก ๋์ดํ์์ค. |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ๋ค๋ฅธ ๋ชจ๋ ๋ด๋ถ์ ์๋ ๋ณ์๋ ๊ธฐ๋ฅ์ ๋ ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๊ฒฐํฉ๋ |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ๋ชจ๋ ๊ฐ์ ์ธํฐํ์ด์ค๋ก ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด, ๊ตฌ์กฐ ๋ฑ์ด ์ ๋ฌ๋๋ ๊ฒฝ์ฐ์ ๊ฒฐํฉ๋ |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๋ชจ๋ ๋ฐ์ ์ ์ธ๋ ์ ์ญ ๋ณ์๋ฅผ ์ฐธ์กฐํ๊ณ ์ ์ญ ๋ณ์๋ฅผ ๊ฐฑ์ ํ๋ ์์ผ๋ก ๋ชจ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒฝ์ฐ์ ๊ฒฐํฉ๋ |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ๊ฒฐํฉ๋ ์ค ์ ์ด ์์๊ฐ ์ ๋ฌ๋๋ ๊ฒฝ์ฐ์ ๊ฒฐํฉ๋๋ฅผ ์์ด๋ก ์ฐ์์ค. |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ์ ์ถ๋ ฅ ๊ฐ ์ฐ๊ด์ฑ์ ์์ผ๋ ์์์ ๋ฐ๋ผ ์คํ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ์ ์์ง๋ |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ๋์ผํ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋์ผํ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฌถ์ ๊ฒฝ์ฐ์ ์์ง๋ |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ๋ชจ๋ ๊ธฐ๋ฅ๋ค์ด ์ฐ๊ด๋์ด ์๋ ์์ง๋ |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |
๋ฌธ์ | ์ด์ ๊ธฐ๋ฅ์ ์ถ๋ ฅ์ ๋ค์ ๊ธฐ๋ฅ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ ์์ง๋ |
๋ต๋ณ | |
์ ๋ต | ์ ๋ต ๋ณด๊ธฐ |