Web
์คํ๋ง ์ค๋ช ํ - Dependency
11/5/2024

์์กด Dependency
์ด๋ ํ ๋์์ ๊ธฐ๋๊ณ ์ง์งํ๊ฒ ๋๋ ์ฆ์, ์ด๋ ํ ์ผ์ ์์ ์ ํ์ผ๋ก ํ์ง ๋ชปํ๊ณ ๋ค๋ฅธ ๊ฒ์ ๋์์ ๋ฐ์ ์์งํจ
๋ง๋ง๋ณด์ด๋ ์ค์ค๋ก ์ผ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์์ฌ๊ฒฐ์ ์ ํ์ง ๋ชปํ๊ณ ์ด๋จธ๋๊ป ์์กดํ๋ ๋จ์ฑ์ ์ง์นญํฉ๋๋ค. ํ๋ฃจ ์ข ์ผ ์ค๋งํธํฐ์ ๋ถ์ก๊ณ ์ฌ๋ ์ฌ๋๋ค์ ์ค๋งํธํฐ์ ๊ณผ์์กดํ๋ค๊ณ ํฉ๋๋ค. ๋จ์์น๊ตฌ์๊ฒ ๊ณผํ๊ฒ ์์งํ๊ณ ์ ์๋ ๋จ์ด์ง์ง ๋ชปํ๋ ์์กด์ ์ธ ์ฌ์์น๊ตฌ๊ฐ ์์ ์๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ ์ผ์์ํ์์ ์์กด์ด๋ ๋จ์ด๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณค ํฉ๋๋ค.
์์กด์ ํน์ฑ
์์กด์๋ ๋ช๊ฐ์ง ์ผ๋ฐ์ ์ธ ํน์ฑ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
1. ์์ง ๋ชปํ๋ค๋ฉด, ์์กด์ฑ์ด ์์ ์ ์๋ค.
๋ถ์ ๋ฌธ์ด ๋ ๊ฐ๊ฐ ๋ค์ด์์ด ํผ๋์ค๋ฌ์ด ๋ฌธ์ฅ์ ๋๋ค. ์ด๋ ํ ๋์์ ๋ชจ๋ฅด๋ ์ํ์์๋ ์์กด์ ํ ์๋ ์๋ค๋, ๋๋ฌด๋๋ ๋น์ฐํ ํน์ฑ์ ๋๋ค. ์ค๋งํธํฐ์ ์ด๋ฉด์ ํ ๋ฒ๋ ๋ณธ์ ์๊ณ ๋ญ์ง๋ ๋ชจ๋ฅด๋ ์ฌ๋์ ์ค๋งํธํฐ์ ์์กด์ ํ ์๊ฐ ์์ ๊ฒ์ ๋๋ค.
2. ์ด๋ค ๋์์ ์์กดํ๋ค๋ฉด, ๋์์ผ๋ก๋ถํฐ ์ํฅ์ ๋ฐ๋๋ค.
์ค๋งํธํฐ์ ๊ณผ์์กด์ ์ธ ์ฌ๋์ ์ค๋งํธํฐ ๋ฐฐํฐ๋ฆฌ๊ฐ ๋ค ๋จ์ด์ง๋ค๋ฉด ํฐ ๋ถํธํจ์ ๋๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ค๋งํธํฐ์ด ๊ณ ์ฅ๋๊ฑฐ๋, ํฐ ์ ๋ฐ์ดํธ๊ฐ ์๊ฒจ ๊ธฐ๋ฅ์ด ๋ง์ด ๋ฐ๋์ด๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ด๋ค ๋์์ ์์กดํ๋ค๋ฉด ๊ทธ ๋์์ ๋ณ๊ฒฝ์ ๋ํ ์ํฅ์ ๋ฐ๊ฒ๋ฉ๋๋ค.
3. ์์กด์๋ ๋ฐฉํฅ์ฑ์ด ์๋ค.
๋จ์์น๊ตฌ์๊ฒ ์์กดํ๋ ์ฌ์์น๊ตฌ๊ฐ ์์ต๋๋ค. ์ด ๋ ๋จ์์น๊ตฌ ์ญ์ ์ฌ์์น๊ตฌ์๊ฒ ์์กดํ๋ฆฌ๋ผ๋ ๋ฒ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์์น๊ตฌ๋ ๋จ์์น๊ตฌ์ ๋ณ์ฌ์ ์ํฅ์ ๋ฐ๊ฒ ์ง๋ง, ๋จ์์น๊ตฌ๋ ์ฌ์์น๊ตฌ๊ฐ ๋ ๋๊ฐ๋ ์๋ฌด๋ ์ง ์์์ง๋ ๋ชจ๋ฆ ๋๋ค. ์ด๋ ๊ฒ ์์กด์ฑ์๋ ๋ฐฉํฅ์ด ์กด์ฌํฉ๋๋ค.
4. ๋์๊ณผ์ ์ํธ์์ฉ์ด ๋ง์์๋ก, ์์กด๋๋ ์ปค์ง๋ค.
10๋ ๋๊ฒ Java๋ง์ ์ฌ์ฉํ ๊ฐ๋ฐ์๊ฐ ์์ต๋๋ค. ์ด ๊ฐ๋ฐ์๋ ์ด๋ฏธ ์ด ์ธ์ด์ ๋๋ฌด ๋ง์ ์๊ฐ์ ๋ณด๋ด์ด Java ์ ๋ฌธ๊ฐ๊ฐ ๋์์ต๋๋ค. ์ด๋ ๊ฒ ๋์๊ณผ ๋ง์ ์๊ฐ์ ์ํธ์์ฉ์ ํ ๊ฐ๋ฐ์๋ ์ด์ Java๊ฐ ์๋ ์ธ์ด๋ก ๊ฐ๋ฐํ ์ผ์ด ์๊ธฐ๋ฉด ๊ธฐ์กด์ ํผํฌ๋จผ์ค๋ ์ ๋์ค์ง ์๊ณ , ๋ณธ์ธ๋ ํฅ๋ฏธ๋ฅผ ์ด์ด๋๊ฐ๊ธฐ ์ด๋ ค์ธ์ง๋ ๋ชจ๋ฆ ๋๋ค. ์ด๋ ๊ฒ ๋์์ ๋ํ ๋ง์ ์ํธ์์ฉ์ ์์กด๋๋ฅผ ๋์ด๊ณ , ๋ค๋ฅธ ๋์์ผ๋ก์ ๋ณ๊ฒฝ์ ์ด๋ ต๊ฒ ๋ง๋ง๋๋ค.
Dependency in software
์ํํธ์จ์ด ์ธ๊ณ์์๋ ์์กด์ ์กด์ฌํฉ๋๋ค. ์ํํธ์จ์ด ์ธ๊ณ์์์ ์ฝ๋๋ค์ ํ๋ก์๋ ์ฌ์ฒ๋ผ ์กด์ฌํ์ง ์์ต๋๋ค. ์ํํธ์จ์ด์ ๊ฐ์ฒด๋ค์ ๊ฐ์์ ์ญํ ๊ณผ ์ฑ ์์ ๊ฐ์ง๋ฉฐ ์๋ก ํ์ ํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ๋์ํฉ๋๋ค.
์์กด์ฑ์ ์ค์ฒด
์ํํธ์จ์ด ์์กด์ฑ์ ์ํํธ์จ์ด ๊ฐ์ฒด ๊ฐ ๊ด๊ณ์ ์ํด์ ํ์ฑ์ด ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ํํธ์จ์ด ๊ฐ์ฒด๋ ๋จ์ํ ์ฝ๋์ ๋ฌถ์์ธ ํ์ผ๋ถํฐ ํจ์, ํด๋์ค, ๋ชจ๋, ์๋ธ์์คํ , ์์คํ ๋ฑ์ด ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํํธ์จ์ด ๊ฐ์ฒด๋ค์ด ๋์์ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋ ๋ ๊ฐ์ฒด ๊ฐ ๊ด๊ณ๊ฐ ํ์ฑ๋๋ฉฐ ์์กด์ฑ์ด ๋ฐ์ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์ด๋ ๋จ์ํ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋์ด ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๊ฑฐ๋, ์์ฑํ๊ฑฐ๋, ์์ํ๋ ๊ฒ๋ ํฌํจ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์์กด๊ด๊ณ๋ ํ์ค์ธ๊ณ์ ํน์ฑ์ ๊ทธ๋๋ก ๋ฐ๋ฆ ๋๋ค. A ๊ฐ์ฒด๊ฐ B ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์์กดํ๋ ์๊ฐ, A๋ B๋ฅผ ์๊ฒ๋๊ณ , B์ ๋ณ๊ฒฝ์ A๋ ์ํฅ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. B์ ์คํ์ด๋ ๋ก์ง์ ๋ณ๊ฒฝ์ด A์ ์ฝ๋์๋ ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒ์ ๋๋ค. B์ public API๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด A๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, B์ ๋ก์ง์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ์์ฐ์ค๋ฝ๊ฒ A์ ๋์๋ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
์์กด์ฑ๊ณผ UML Diagram
UML์ด๋ ์ํํธ์จ์ด ์์คํ ์ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ํํํ๋ ํ์ค ๋ฐฉ๋ฒ์ ๋๋ค. UML์์๋ ์ํํธ์จ์ด ๊ฐ์ฒด ๊ฐ ๊ด๊ณ๋ฅผ ํํํ๋ 6๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ๋ค์ ํตํด ์์กด์ฑ์ด ๋ฐ์ํ๋ ๊ฐ์ฒด ๊ฐ ๊ด๊ณ๋ฅผ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ํํํ ์ ์์ต๋๋ค.

์ง์ (solid line)๊ณผ ์ผ๊ฐํ ํ์ดํ๋ก ํํ๋๋ Inheritance๋ ์์๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, ํ์ดํ ๋ฐฉํฅ์ด ๋ถ๋ชจ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ํ ์์ ํด๋์ค๋ ๋ถ๋ชจ์ ์ํ์ ํ๋์ ๋ชจ๋ ๋ฌผ๋ ค๋ฐ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ถ๋ชจ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์์๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ ์์กด๊ด๊ณ๊ฐ ํ์ฑ๋ฉ๋๋ค.
์ ์ (dashed-line)๊ณผ ์ผ๊ฐํ ํ์ดํ๋ก ํํ๋๋ Realization์ ์ธํฐํ์ด์ค์ ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, ํ์ดํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
์ง์ ๊ณผ ์ง์ ํ์ดํ๋ก ํํ๋๋ Association์ ์ฃผ๋ก ํ๋์ ํด๋์ค์์ ๋ค๋ฅธ ํด๋์ค๋ฅผ ํ๋ ๋ ๋ฒจ๋ก ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ํ๋ํ๋ ์ฐ๊ด๊ด๊ณ๋ฅผ ํํํฉ๋๋ค. A ํด๋์ค์ ํ๋์ B๊ฐ ์กด์ฌํ๋ค๋ฉด A๊ฐ B์ ์์กดํ๋ ์ํฉ์ผ๋ก ํ์ดํ๋ B ์ธก์ ๊ฐ๋ฆฌํต๋๋ค.
์ ์ ๊ณผ ์ง์ ํ์ดํ๋ก ํํ๋๋ Dependency๋ ๊ทธ ์ฐ๊ด๊ด๊ณ๊ฐ ํ๋ผ๋ฏธํฐ, ๋ก์ปฌ ๋ณ์, ๋ฐํ ํ์ ๋ฑ ์ผ์์ ์ผ๋ก ๋ฐ์ํ๋ ๊ด๊ณ์ฑ์ ํํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ ์์์ ๊ณ์ ์ธ๊ธํ ์์กด์ฑ ์ด๋ก ์์์ Dependency๊ฐ ์๋ ํ๋์ ๊ฐ์ฒด๊ฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก์จ์ ์ฉ์ด๋ก์จ ์ธ์ํด์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
Aggregation๊ณผ Composition์ ๋ ๋ค ์ ์ฒด์ ๋ถ๋ถ ๊ด๊ณ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. Aggregation์ ๋ถ๋ถ์ด ์ ์ฒด์ ์ข ์๋์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ ๋์ ์ฌ์ฉํ๊ณ , Composition์ ์ ์ฒด๊ฐ ์๋ฉธ๋๋ฉด ๋ถ๋ถ๋ ํจ๊ป ์๋ฉธํด์ผํ๋ ๋ ๊ฐํ ๊ฒฐํฉ๊ด๊ณ์์ ์ฌ์ฉํฉ๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ง๋ฆ๋ชจ๋ ์ ์ฒด ์ธก์ ๊ฐ๋ฆฌ์ผ์ผํฉ๋๋ค.

์ ๋ค์ด์ด๊ทธ๋จ์ ํด๋์ค์ ๊ทธ๋ค๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค. Person์ Address๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด์ ํ์ ํ์ฌ ๋์ํฉ๋๋ค. Person์ Association์ด๋ผ๋ ๊ด๊ณ ํ์ฑ์ ํตํด Address์ ์์กดํฉ๋๋ค. Person์ ์ถ์ ํด๋์ค์ด๊ธฐ์, Student์ Processor์ ๊ฐ์ ํด๋์ค๋ Person์ ์์ํ๊ณ ์์ต๋๋ค. Student์ Professor๋ ์์์ด๋ผ๋ ๊ด๊ณ๋ฅผ ํตํด Person์ ์์กดํฉ๋๋ค.
//Address.java
class Address {
...
}//Person.java
abstract class Person {
private Address addess;
...
}//Student.java
class Student extends Person { ... }์ด ๋ ์ ์๋ฏธํ๊ฒ ๋ณผ ์ ์ A๊ฐ B์๊ฒ ์์กดํ ๋์ A์ ์ฝ๋์์๋ ์์กด ๋์์ด ๋ํ๋์ง๋ง, B์๊ฒ์๋ ๋ํ๋์ง ์๋๋ค๋ ์ ์ ๋๋ค. Student.java์๋ Student์ ํด๋์ค ์ ์ธ ๋ถ๋ถ์์ Person์ ์์ํ๋ค๋ ์ฝ๋๊ฐ ์กด์ฌํ์ง๋ง, Person ์ธก์์๋ Student์ ๊ด๋ จ๋ ์ด๋ ํ ๋ด์ฉ๋ ์ฐพ์ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก Person์ ์ฝ๋์๋ Address๊ฐ ๋ํ๋์ง๋ง, Address์ ์ฝ๋์๋ Person์ด ๋ํ๋์ง ์์ต๋๋ค.
์์กด์ฑ์ ์ ์ด์ ๋ณ๊ฒฝ์ ์ ํ
๊ฒฐ๊ตญ ์ด๋ ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ '์๊ณ ์๊ณ ', ๊ทธ๋ก ์ธํด ์์กด ๊ด๊ณ๊ฐ ํ์ฑ๋์๋ค๋ฉด, ๊ฐ์ฒด๋ ์์กดํ๋ ์๋๋ฐฉ์ ์ํด ์ํฅ์ ๋ฐ์ต๋๋ค. Person์ ์ด๋ฆ์ด ๋ฐ๋๋ฉด, Student์ ์ ์ธ์ ์๋ Person์ด๋ผ๋ ์ด๋ฆ๋ ๋ฐ๊พธ์ด์ผ ํฉ๋๋ค. ๋ํ Person์ ๊ธฐ๋ฅ์ด ๋ฐ๋๋ฉด, Student๋ ์์ฐ์ค๋ฝ๊ฒ ๋ณ๊ฒฝ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ฅด๊ฒ ๋ฉ๋๋ค.
abstract class AbstractPerson { ... } //rename to AbstractPerson
class Student extends Person { ... } //compile error!!์ด๋ฌํ ๋ณ๊ฒฝ์ ์ ํ๋ ์ธ์ ํ๊ฒ ๊ด๊ณ๋ฅผ ๋งบ์ ๊ฐ์ฒด์๋ง ์ ์ฉ๋๋ ๋ด์ฉ์ ์๋๋๋ค. ์์กด์ฑ์ ์ ์ด๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด Address์ ๋ณ๊ฒฝ์ Person์ ๋ณ๊ฒฝ์ ๋ณ๊ฒ ๋๊ณ , ์ด๋ ๋ค์ Student์ Professor์๊ฒ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
์์กด์ฑ์ด ๋์ ํ๋ก๊ทธ๋จ์ ํน์ง
ํ๋์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋๋ ๋ค๋ฅธ ์ฝ๋๋ค์ด ์ฐ์ด์ด ์์ ๋์ด์ผํ๊ณ , ์ด ์ฝ๋๋ค์ ๋ณ๊ฒฝํ๋๋ ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์์ ํด์ผํ๋ ์ํฉ์ด ๋ฐ๋ณต๋๋ ๊ฒฝํ์ ๋ค๋ค ํด๋ณด์ จ์ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ๊ฒ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋๋ ์ํฉ์ ์์กด์ฑ์ ์ํด ๋ฐ์ํฉ๋๋ค. ์ ์์์์ Address๋ฅผ ๋ณ๊ฒฝํ๋๋ ๊ทธ ๋ณ๊ฒฝ์ ์ ํ๊ฐ Person์ ๋์ด Student์ Professor๊น์ง ๋ฐ์ํ๋ ๊ฒ์ ์์๋ก ๋ค ์ ์๊ฒ ์ต๋๋ค.
๊ฒฐ๊ตญ ์์กด์ฑ์ด ๋๋ค๋ ๊ฒ, ์ฆ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์์กด๊ด๊ณ๊ฐ ์ฝํ๊ณ ์ฅํ์๋ ์ํ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ , ํ ๊ตฐ๋ฐ์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๊ณณ์ ์ํฅ์ ๋ฏธ์ณ์ ์ฝ๊ฒ ๊นจ์ง๊ฒ ๋ง๋ค๊ณ , ๋ชจ๋์ด ์ถ์ถ๋๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ , ๊ณ์ธต ๊ด๊ณ๋ฅผ ํ๋ฆฟํ๊ฒ ๋ง๋ง๋๋ค. ๋ฐ๋ผ์ ์์กด๊ด๊ณ๋ฅผ ์ ์ ํ ์ ์ดํ๋ ๊ฒ์ ๊ฐ๋ฐ์๋ค์ด ์ํํด์ผํ ์ค์ํ ์๋ฌด ์ค ํ๋์ ๋๋ค.
๋ง๋ฌด๋ฆฌ
๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ ์ ๋๋ฅผ ๊ฒฐํฉ๋ Coupling ๋ผ๊ณ ํํํ๊ธฐ๋ ํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ์๋ก ๋ง์ด ์๊ณ ์์ผ๋ฉด์ ์๋ก ๋๋ํ๊ฒ ์ฎ์ฌ์๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ฒด๋ ๊ฒฐํฉ๋๊ฐ ๋์ต๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ์ ํ๋ก๊ทธ๋จ ๊ตฌ์ฑ์์๋ค์ด ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ๋๋ก ์ค๊ณํ๋ค๋ฉด ์์คํ ์ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ณ ํ๋ณตํ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์์ต๋๋ค. ๋ค์ ๊ธ์์๋ ๋์จํ ๊ฒฐํฉ์ ๋ง๋๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น์ธ ์์กด์ฑ ์ญ์ ์์น์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.