์ถ์ฒ
ChatGPT
Gemini
์ํ ์์กด์ฑ Circular Dependency
๋ ๊ฐ ์ด์์ ํด๋์ค๋ ๋ชจ๋์ด ์๋ก๋ฅผ ์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก ์์กดํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ . ๋ง์น ๋ฑ์ด ์์ ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ ์๋ ๋ชจ์ต๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋๋ค.
์ํ ์์กด์ฑ์ ๋ฌธ์ ์
1. ์ ์ง๋ณด์ ์ด๋ ค์
ํด๋์ค ๊ฐ์ ์์กด์ฑ์ด ๋ณต์กํ๊ฒ ์ฝํ ์์ด ์ฝ๋์ ๋ณ๊ฒฝ์ด๋ ํ์ฅ์ด ์ด๋ ค์์ง ์ ์๋ค.ํ ํด๋์ค๋ฅผ ์์ ํ๋ฉด ์ฐ์์ ์ผ๋ก ๋ค๋ฅธ ํด๋์ค์๋ ์ํฅ์ ๋ฏธ์ณ ์ฝ๋ ๋ณ๊ฒฝ์ด ๋ณต์กํด์ง๊ณ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
2. ํ ์คํธ์ ์ด๋ ค์
๊ฐ๋ณ ํด๋์ค๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ๊ธฐ ์ด๋ ค์์ง๊ณ , ์์คํ ์ ์ฒด๋ฅผ ํ ์คํธํด์ผ ํ๋ ๋ถ๋ด์ด ์ปค์ง๋ค.
3. ์ฝ๋ ์ดํด๋ ์ ํ
์ฝ๋์ ํ๋ฆ์ ํ์ ํ๊ธฐ ์ด๋ ค์์ ธ ์ ์ง๋ณด์ ์ธ๋ ฅ์ด ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
4. ๊ฒฐํฉ๋ ์ฆ๊ฐ
ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ ธ ์์คํ ์ ์ ์ฐ์ฑ์ด ๋จ์ด์ง๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋ฎ์์ง๋ค.
์ํ ์์กด์ฑ์ด ๋ฐ์ํ๋ ์ด์
1. ์๋ชป๋ ์ค๊ณ
์์คํ ์ค๊ณ ์ด๊ธฐ ๋จ๊ณ์์ ํด๋์ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ์ง ์์ ๋ฐ์ํ ์ ์๋ค.
2. ์ค๋ณต๋ ๊ธฐ๋ฅ
๋ ๊ฐ ์ด์์ ํด๋์ค์์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋๊ฐ ์กด์ฌํ ๋ ๋ฐ์ํ ์ ์๋ค.
3. ๊ณผ๋ํ ์์กด์ฑ
ํ ํด๋์ค๊ฐ ๋๋ฌด ๋ง์ ํด๋์ค์ ์์กดํ ๋ ๋ฐ์ํ ์ ์๋ค.
์ํ ์์กด์ฑ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
1. ๋ฆฌํฉํ ๋ง / ๋์์ธ ๊ฐ์
์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ํด๋์ค ๊ฐ์ ์์กด์ฑ์ ์ค์ด๊ณ ๋ชจ๋ํ๋ฅผ ๋์ธ๋ค.
ํด๋์ค์ ์ฑ ์์ ๋ถ๋ฆฌํ๊ณ , ์์กด์ฑ์ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ฅผ ๊ฐ์ ํ๋ค. SOLID ์์น ์ค ๋จ์ผ ์ฑ ์ ์์น(SRP)์ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(ISP)์ ์ ์ฉํด ํด๋์ค๋ฅผ ๋ ์๊ณ ์์ง๋ ฅ ์๊ฒ ๋ง๋ ๋ค.
2. ์ค๊ฐ์ ํจํด Mediator Pattern
ํด๋์ค ๊ฐ์ ์ง์ ์ ์ธ ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ , ์ค๊ฐ์ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ฅผ ๋์ ํ์ฌ ํด๋์ค ๊ฐ์ ์ํธ์์ฉ์ ๊ด๋ฆฌํ๋ค. ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ๊ฐ์ ์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ ์ํ ์์กด์ฑ์ ํผํ ์ ์๋ค.
์
class Mediator(val classA: ClassA, val classB: ClassB) {
fun doSomething() {
classA.doA()
classB.doB()
}
}
3. ์์กด์ฑ ์ญ์ ์์น Dependency Inversion Principle
๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ์์กดํ์ง ์๋๋ก ์ถ์ํ ๊ณ์ธต(์ธํฐํ์ด์ค)์ ๋์ ํ๋ค.
4. ๋ชจ๋ํ
์์คํ ์ ์์ ๋ชจ๋๋ก ๋๋๊ณ , ๊ฐ ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ ์ต์ํํ๋ค.
์์ฑ์ ์ฃผ์ ์ด ์ํ ์์กด์ฑ์ ํผํ๋ ๋ฐฉ๋ฒ
1. ์ปดํ์ผ ํ์ ์ค๋ฅ
์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉฐ, ์ํ ์์กด์ฑ์ด ์์ ๋ ์ปดํ์ผ ํ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ ์ ์๊ฒ ํด์ค๋ค.
์
class ClassA(val classB: ClassB)
class ClassB(val classA: ClassA)
์์ ์ฝ๋์์ 'ClassA'์ 'ClassB'๋ ์๋ก ์์ฑ์์์ ์ฃผ์ ๋ฐ๊ธฐ ๋๋ฌธ์, ์ํ ์์กด์ฑ์ผ๋ก ์ธํด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
2. ์ค๊ณ ๊ฐ์ ์ ๋
์์ฑ์ ์ฃผ์ ์ ๊ฐ์ฒด ์ค๊ณ๋ฅผ ๊ฐ์ ํ๋๋ก ์ ๋ํ๋ค. ์ํ ์์กด์ฑ์ ํผํ๊ธฐ ์ํด ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํด ์ค๊ณ๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
3. ์์กด์ฑ ์ฃผ์ ์์ ๊ฒฐ์
์์ฑ์ ์ฃผ์ ์ ์์กด์ฑ ์ฃผ์ ์์๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ๋ค. ๋ชจ๋ ์์กด์ฑ์ ๊ฐ์ฒด ์์ฑ ์์ ์ ๊ณต๋์ด์ผ ํ๊ธฐ์, ์ํ ์์กด์ฑ์ด ์กด์ฌํ ๊ฒฝ์ฐ DI ์ปจํ ์ด๋๋ ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์์กด์ฑ ์ฃผ์ ์์๋ฅผ ๋ช ํํ ์ดํดํ๊ณ ๊ด๋ฆฌํ๋๋ก ๋๋๋ค.
๊ฒฐ๋ก
์์ฑ์ ์ฃผ์ ์ ๊ฐ์ฒด ์ค๊ณ๋ฅผ ๋จ์ํ๊ณ ๋ช ํํ๊ฒ ํด ์ํ ์์กด์ฑ์ ํผํ๋ ๋ฐ ํจ๊ณผ์ ์ด๋ค. ์ด๋ ์์คํ ์ ์ ์ง๋ณด์์ฑ๊ณผ ์์ ์ฑ์ ๋์ต๊ณ , ์ปดํ์ผ ํ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๊ฒ ํด ๊ฐ๋ฐ ๊ณผ์ ์ ๊ฐ์ ํ๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JVM] HotSpot compilation (0) | 2024.07.31 |
---|---|
[OOP] ๊ฐ์ฒด๋ ์ ์ผ๊ด์ฑ์ ๊ฐ์ ธ์ผ ํ๋๊ฐ (0) | 2024.07.31 |
[OOP] ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ๊ณผ ์ค๋ ๋ ์์ ์ฑ (0) | 2024.07.31 |
[Android] ๋ฐ์น ๋ชจ๋ ์ข ๋ฅ ๋ฐ ๊ฐ ์ฅ๋จ์ (0) | 2024.07.30 |
[Android]์กํฐ๋นํฐ์ ๋ฐ์น๋ชจ๋์ ํ๋๊ทธ์ ์ฐจ์ด (0) | 2024.07.30 |