
ํจ์์ ๋ํด์ ์ด์ผ๊ธฐ๋ฅผ ํ๊ธฐ ์ , ์ดํด๋ฅผ ๋๊ธฐ ์ํด ํจ์์ ๋น๋ฐ์์์ ๋งค์นญํด์ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. ๋น๋ฐ์์์ ์๋ฌด๊ฐ ๋จ์ด์ง๊ธฐ ์ , ๋ณธ๋ถ์์ ๋๊ธฐํ๊ณ ์์ ๋ ์๋ฌด๋ฐ ๋ฌด๊ธฐ๋ ์ฅ๋น๊ฐ ์์ต๋๋ค. ๊ทธ์ ์๋ฌด ์ง์นจ์(ํจ์ ์ ์)๋ง ๊ธฐ์ตํ๊ณ ์์ ๋ฟ์ ๋๋ค. ๊ทธ๋ฌ๋ค ๋ณธ๋ถ๋ก๋ถํฐ ์ถ๋ ๋ช ๋ น์ด ๋จ์ด์ง๋ ์๊ฐ(ํจ์ ํธ์ถ), ๋น๋ฐ ์์์ ์์ ๋ง์ ๋ ๋ฆฝ๋ ์๋ฌด ์ํ ๊ณต๊ฐ(ํจ์ ์คํ ์ปจํ ์คํธ)์ผ๋ก ์ง์ ํฉ๋๋ค. ์๋ฌด ์ํ ๊ณต๊ฐ์ผ๋ก ๋ค์ด๊ฐ๋ฉด์ ๋ณธ๋ถ ๊ฐ๋ฐฉ ์ ๋ฌ์ฑ ์ผ๋ก๋ถํฐ ์ด๋ฒ ์์ ์ ํ์ํ ํน์ ์ฅ๋น์ ์ํธ(์ ๋ฌ์ธ์: Arguments)๊ฐ ๋ด๊ธด ๊ฐ๋ฐฉ์ ๊ฑด๋ค๋ฐ์ต๋๋ค. ์์์ ์์ ๊ณต๊ฐ ์์์ ์ค์ง ๊ทธ ๊ฐ๋ฐฉ ์์ ๋ค์ด์๋ ์ฅ๋น๋ค๋ง ๊บผ๋ด์ด ์๋ฌด๋ฅผ ์ํํฉ๋๋ค. ์์ ๊ณต๊ฐ ์ธ๋ถ์ ์๋ ์ผ๋ฐ์ธ๋ค์ ์์์ ๊ฐ๋ฐฉ ๋ด๋ถ์ ์ด๋ค ์น๋ช ์ ์ธ ๋ฌด๊ธฐ๊ฐ ๋ค์ด์๋์ง ์ ๋ ๋ค์ฌ๋ค๋ณผ ์ ์๊ณ ๊ฐ์ญํ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ด ๋น๋ฐ ์์์ ์๋ฌด ์ํ ๊ณผ์ ๊ณผ ๋์ผํฉ๋๋ค.
ํจ์ ์ ์ธ(Declaration)๊ณผ ํธ์ถ(Invocation)์ ์ฐจ์ด
๊ฐ์ฅ ๋ง์ด ํ๋ ์ค์ ์ค ํ๋๋ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ ์ ํผ๋ํ๋ ๊ฒ์ ๋๋ค. ํจ์๊ฐ ์ ์ธ๋ ๋๋ ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋์ง ์์ต๋๋ค. ํจ์ ์ ์ธ ์์ (ํ๊ฐ ๋จ๊ณ)์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์๊ฐ ์ ํ ๋ฌผ๋ฆฌ์ ์์น๋ฅผ ๋ณด๊ณ 'A ํจ์๊ฐ ์ฌ๊ธฐ์ ์์ฑ๋ฌ๊ตฌ๋'ํ๊ณ ์์ ์ฃผ์(Outer ์ฐธ์กฐ)๋ง ํจ์ ๊ฐ์ฒด์ ์ ์ด๋๊ณ ์ ์ญ ๋ฉ๋ชจ๋ฆฌ ํ(Heap)์ ์ฌ๋ ค๋ง ๋ก๋๋ค. ๊ทธ๋ฆฌ๊ณ ํจ์ ํธ์ถ ์์ (๋ฐํ์ ๋จ๊ณ)์์ ์ฝ๋ ๋ผ์ธ์ ํ ์ค์ฉ ์ฝ๋ค๊ฐ ํจ์ ์ด๋ฆ ๋ค์ '๊ดํธ()'๋ฅผ ๋ถ์ฌ ์คํํ๋ ์๊ฐ, ์์ง์ ์ฝ ์คํ(Call Stack)์ ์ ์ญ ์ปจํ ์คํธ ์์ ์๋ก์ด ํจ์ ์คํ ์ปจํ ์คํธ๋ฅผ ์ฌ๋ฆฝ๋๋ค.
์ฆ, ๋งค๊ฐ๋ณ์์ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋งคํ๋๊ณ ๋ด์ญ์ด ์ค๋น๋๋ ๋ฐ์ธ๋ฉ ์์ ์ 'ํจ์๊ฐ ํธ์ถ๋๋ ๋ฐํ์ ๊ทธ ์๊ฐ'์๋ง ์ผ์ด๋ฉ๋๋ค.
๋งค๊ฐ๋ณ์์ ํ๊ฒฝ ๋ ์ฝ๋
ํจ์๊ฐ ํธ์ถ๋์ด ํจ์ ์ปจํ ์คํธ๊ฐ ์ด๋ฆฌ๋ฉด, ์์ง์ ๊ฐ์ฅ ๋จผ์ ํด๋น ๊ณต๊ฐ์ ๋ณ์ ๋์ฅ์ธ ํ๊ฒฝ ๋ ์ฝ๋(Environment Record)๋ฅผ ๋ค์ฌ๋ค๋ด ๋๋ค. ์ ํํ๋ ํจ์ ์ปจํ ์คํธ์ ๊ฒฝ์ฐ Declarative Environment Record ์ค์์๋ Function Environment Record๋ผ๋ ํน์ํ ์ฅ๋ถ๊ฐ ์์ฑ๋ฉ๋๋ค. ํด๋น ์ฅ๋ถ๋ ์ฐ๋ฆฌ๊ฐ ํจ์๋ฅผ ๋ง๋ค ๋ ๋ช ์ํ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ๋ค์ด ๋ณ์์ฒ๋ผ ๋ฑ๋ก๋๋๋ฐ, ์ฌ๊ธฐ์ ์ ๋ฌ์ธ์๋ ๋ฑ๋ก๋ฉ๋๋ค.
๋งค๊ฐ๋ณ์ ๋ฑ๋ก ํ๋ก์ธ์ค
1. ๋งค๊ฐ๋ณ์(Parameter) ์ด๋ฆ ๋ฑ๋ก
- ํจ์ ์ ์์ ์ ํ ์์๋๋ก ๋ณ์ ์ด๋ฆ์ ์ฅ๋ถ์ ๊ธฐ๋กํฉ๋๋ค.
2. ๊ฐ ํ ๋น(Binding)
- ํธ์ถ ํ ๋ ๋์ ธ์ค ์ ๋ฌ์ธ์(Arguments)๋ฅผ ์์๋๋ก ๋งค์นญํ์ฌ ๊ฐ์ ์ง์ด๋ฃ์ต๋๋ค. ๋ง์ฝ ๋งค๊ฐ๋ณ์ ๊ฐ์๋ณด๋ค ์ธ์๋ฅผ ์ ๊ฒ ๋์ง ๊ฒฝ์ฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋ฌ๋ฅผ ๋ด์ง ์๊ณ ๋งค์นญ๋์ง ์์ ๋๋จธ์ง ๋งค๊ฐ๋ณ์์ 'undefined'๋ฅผ ํ ๋นํฉ๋๋ค.
3. ๋ด์ฅ ์ ๋ฌ์ธ์ ๊ฐ์ฒด ์์ฑ
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์ ๋ด๋ถ์์ ์ธ์ ๋ ๋์ ธ์ง ์ธ์๋ค์ ๋ฐฐ์ด ํํ๋ก ๊บผ๋ด๋ณผ ์ ์๋๋ก, ๋ก์ปฌ ๊ฐ์ฒด์ธ Arguments ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด ์ฅ๋ถ์ ์ถ๊ฐํฉ๋๋ค.
์์ค ํ์ธ
function methodA(id, name){
console.log("๋งค๊ฐ๋ณ์ ํ์ธ: ", id, name);
console.log("๋ด์ฅ arguments ๊ฐ์ฒด: ", arguments);
console.log("์ ๋ฌ๋ ์ธ์์ ๊ฐ์: ", arguments.length);
}
// ์ ์ธ๋ ํจ์๋ ์ธ์ 2๊ฐ๋ฅผ ๋ฐ์ง๋ง, ์คํ๋ 3๊ฐ์ ์ธ์๋ฅผ ๋์ ธ๋ด.
methodA("P20260528001", "Hongkildong", 20); // ํจ์๊ฐ ์คํ๋๋ ์๊ฐ, ์คํ ์ปจํ
์คํธ๊ฐ Call Stack์ ์์.
methodA("P20260528001", "Hongkildong", 20) ํจ์๊ฐ ์คํ๋๋ ์๊ฐ, ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋๋ methodA ํจ์์ ํ๊ฒฝ ๋ ์ฝ๋(Environment Record) ๋ด๋ถ ์ํ๋ ์๋์ ๊ฐ์ต๋๋ค.
[ methodA ํจ์์ ํ๊ฒฝ ๋ ์ฝ๋ ]
{
ใid : "P20260528001", // ์ฒซ ๋ฒ์งธ ์ธ์ ๋ฐ์ธ๋ฉ
ใname : "Hongkildong", // ๋ ๋ฒ์งธ ์ธ์ ๋ฐ์ธ๋ฉ
ใarguments: {
ใใ0: "P20260528001",
ใใ1: "Hongkildong",
ใใ2: 20, // ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์์ง๋ง arguments ๊ฐ์ฒด์๋ ์ ์ฅ๋จ
ใใlength: 3,
ใใcallee: ƒ methodA(id, name)
ใ}
}

๋ณ์ ์ด๋ฆ์ผ๋ก ๋งคํ๋ ๊ฒ์ id์ name ๋ ๋ฟ์ด์ง๋ง, ์์ง์ด ์๋์ผ๋ก ๋ง๋ arguments ๊ฐ์ฒด์๋ ๋์น๊ฒ ๋ค์ด์จ ์ธ ๋ฒ์งธ ์ธ์์ธ 20๊น์ง ์์ ํ๊ฒ ์ ์ฅ๋์ด ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ธ์์ ๊ฐ์๊ฐ ๋ง์ง ์์๋ ๋ฐํ์ ์๋ฌ๋ฅผ ๋ฟ์ง ์๋ ๋น๊ฒฐ์ด ๋ฐ๋ก ์ด arguments ๊ฐ์ฒด์ ์ ์ฐ์ฑ ๋๋ถ์ ๋๋ค.
ES6+์์์ ๋งค๊ฐ๋ณ์์ ํ๊ฒฝ ๋ ์ฝ๋
ํ์ ์์๋ arguments ๊ฐ์ฒด๋ฅผ ์ฐ๊ธฐ ๋ณด๋จ, ๊ธฐ๋ณธ๊ฐ(Default Parameter)๊ณผ ๋๋จธ์ง ๋งค๊ฐ๋ณ์(Rest Parameter)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ค ํ์ธ
// ๊ธฐ๋ณธ๊ฐ ๋งค๊ฐ๋ณ์ ์ฌ์ฉ
function calculate(first, second = 10){
console.log(first);
console.log(second);
}
calculate(200); // ์ธ์๋ฅผ ํ๋๋ง ๋์ง.
// Rest Parameter ์ฌ์ฉ
function sum(first, ...remains){
console.log(remains);
}
sum(10,20,30,40,"50");

โ๏ธ ๋งค๊ฐ๋ณ์ ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ
๊ณผ๊ฑฐ์๋ ์ ๋ฌ์ธ์๊ฐ ์ ๋ค์ด์ค๋ฉด undefined๋ฅผ ํ๊ฒฝ ๋ ์ฝ๋์ ๋ฃ์์ต๋๋ค. ํ์ง๋ง, ES6+ ํ๊ฒฝ์์ ๊ธฐ๋ณธ๊ฐ์ด ์ง์ ๋๋ฉด ์์ง์ ์ธ์ ๊ฐ์ ๋ฐ์ธ๋ฉํ ๋ ์กฐ๊ฑด์ ๊ฒ๋๋ค.
"์ ๋ฌ๋ ์ธ์๊ฐ ์๊ฑฐ๋ undefined์ด๋ฉด ์ฅ๋ถ์ ๊ธฐ๋กํ ๋ ์์ง์ด ํ๊ฐ ๋จ๊ณ์์ ๋ฏธ๋ฆฌ ์ค๋นํด ๋ ๊ธฐ๋ณธ๊ฐ(10)์ ๋์ ์ฑ์ ๋ฃ๋๋ค."
์ด๋ ๊ฒ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด, 'second๊ฐ ์์ ๋ ํน์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ๋ค (if(!second) second = 10;)'์ ๊ฐ์ ๋ก์ง์ด ํ์ ์๊ณ ์์ง ๋ ๋ฒจ์ด ์ฅ๋ถ ์ด๊ธฐํ ๋จ๊ณ๋ก ํก์๋์ด ๊น๋ํ ๋ก์ง์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ๏ธ ๋๋จธ์ง ๋งค๊ฐ๋ณ์(Rest Parameter) ์ฌ์ฉ
arguments ๊ฐ์ฒด๋ ๋ฐฐ์ด์ฒ๋ผ ์๊ฒผ์ง๋ง ์ง์ง ๋ฐฐ์ด์ด ์๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด(Array-like Object)๊ธฐ ๋๋ฌธ์ map์ด๋ forEach ๊ฐ์ ๊ฐ๋ ฅํ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฐ์ง ๋ชปํฉ๋๋ค. ํ์ง๋ง, '... remains'๋ผ๋ Rest Parameter๋ฅผ ์ฐ๋ฉด ์์ง์ ํ๊ฒฝ ๋ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฌํ ๋, ๋งคํ๋๊ณ ๋จ์ ์ธ์๋ค์ ๋ชจ์์ ์ง์ง Array ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
[ sum ํจ์ Environment Record ]
{
ใfirst: 1,
ใremains: [20,30,40,"50"]ใใใ<< ๊ฐ์ง ๋ฐฐ์ด์ด ์๋, Array.prototype์ ์์๋ฐ์ ์ง์ง ๋ฐฐ์ด ๊ฐ์ฒด
}
์ด๋ ๋ฏ ์ค๋ฌด์์๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด arguments ๋์ ์์ ํ๊ณ ๊ฐ๋ ฅํ ์ง์ง ๋ฐฐ์ด Rest Parameter๋ก ๋์ฒดํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์์ต๋๋ค.
๋งค๊ฐ๋ณ์ ๊ฒฉ๋ฆฌ์ ์๋ํ(Encapsulation)
ํ๋ ์ํํธ์จ์ด ๊ณตํ์์ ์ ์ญ ๋ณ์์ ๋ฌด๋ถ๋ณํ ์ฌ์ฉ์ ์ง์ํ๊ณ , ํจ์๋ผ๋ ๋ ๋ฆฝ๋ ๋จ์๋ฅผ ํตํด ๋งค๊ฐ๋ณ์(Parameter)๋ฅผ ๊ฐ์ ํ๋ ์ด์ ๋ ์ํํธ์จ์ด์ ์์ ์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ ํ๋ณดํ๊ธฐ ์ํจ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ ๊ณตํ๋ 'ํจ์ ์คํ ์ปจํ ์คํธ'์ ๋ ๋ฆฝ๋ ์ฅ๋ถ ๊ตฌ์กฐ๋ ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ์ ์์ธ ์๋ํ๋ฅผ ๊ตฌํํ๋ ๋ฌผ๋ฆฌ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ด ์ ๊ณตํ๋ ์ธ ๊ฐ์ง ํต์ฌ์ ์ธ ๊ณตํ์ ์ด์ ์ด ์์ต๋๋ค.
๐ก๏ธ ํจ์ ์ปจํ ์คํธ ๊ฒฉ๋ฆฌ๊ฐ ๋ณด์ฅํ๋ 3๋ ์์ ์ฑ
1. ์ ๋ณด ์๋์ ํตํ ๋ธ๋๋ฐ์คํ(Black Box)
ํจ์๊ฐ ์คํ๋ ๋ ์์ฑ๋๋ ํ๊ฒฝ ๋ ์ฝ๋(Environment Record)๋ ์ธ๋ถ ์์ญ์์ ์ ๋๋ก ์ง์ ์ ๊ทผํ๊ฑฐ๋ ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณผ ์ ์๋ ๊ฒฉ๋ฆฌ ๊ณต๊ฐ์ ๋๋ค. ์ธ๋ถ ์์คํ ์ ์ค์ง ํจ์๊ฐ ์ ์ํ ๊ณต์ ํต๋ก์ธ '๋งค๊ฐ๋ณ์'๋ฅผ ํตํด์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ผ๋ฉฐ, ๋ด๋ถ์์ ๊ทธ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๊ฐ๊ณต๋๊ณ ์ฒ๋ฆฌ๋๋์ง๋ ์ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ์ํํธ์จ์ด ๊ณตํ์์๋ '์ ๋ณด ์๋(Information Hiding)'์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๋ด๋ถ ํต์ฌ ๋ก์ง๊ณผ ๋ณ์๋ฅผ ์ธ๋ถ์ ๋ฌด๋ถ๋ณํ ์ ๊ทผ ๋ฐ ์๋์น ์์ ์ค์ผ์ผ๋ก๋ถํฐ ์๋ฒฝํ๊ฒ ๋ฐฉ์ดํจ์ผ๋ก์จ, ์ฝ๋์ ๋ ๋ฆฝ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๊ฒ ๋ฉ๋๋ค.
2. ๋ถ์ ํจ๊ณผ(Side Effect)์ ์์ฒ ์ฐจ๋จ๊ณผ ๋ถ๋ณ์ฑ ์งํฅ
์ ์ญ ๋ณ์๋ฅผ ์์ ํ๋ ํจ์๋ ํธ์ถํ๋ ํ์ด๋ฐ์ด๋ ์์์ ๋ฐ๋ผ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๋คํ๋๋ ๋ถ์ ํจ๊ณผ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ถ์ ํ๊ธฐ ๊ทน๋๋ก ์ด๋ ค์ด ๋ฐํ์ ๋ฒ๊ทธ์ ์ฃผ์์ธ์ด ๋ฉ๋๋ค.
๋ฐ๋ฉด, ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ์ด๋๋ ํจ์๋ ์ธ๋ถ ์ํ๋ฅผ ์ง์ ์ฐธ์กฐํ๊ฑฐ๋ ์์ ํ์ง ์์ต๋๋ค. ์ธ์๋ก ๋์ด์จ ๊ฐ๋ค์ ๋ ๋ฆฝ๋ ํจ์ ์ปจํ ์คํธ ๋ด๋ถ ์ฅ๋ถ์ ๋ณต์ฌํ๊ฑฐ๋ ์ฐธ์กฐํ์ฌ ์ฐ์ฐํ ๋ค, ๊ฒฐ๊ณผ๋ง์ return์ผ๋ก ์์ ํ๊ฒ ๋๋ ค์ค๋๋ค.
๋ํ ํจ์ ๋ด๋ถ์์ ์ ์ธ๋ ์ง์ญ ๋ณ์์ ๋งค๊ฐ๋ณ์๋ค์ ํจ์ ์คํ์ด ์ข ๋ฃ๋์ด ์ปจํ ์คํธ๊ฐ ์ฝ ์คํ์์ ์๋ฉธํ๋ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ์์์ ํจ๊ป ์์ ํ๊ฒ ์๊ฑฐ(Garbage Collection)๋ฉ๋๋ค. ์ ์ญ ๊ณต๊ฐ์ ์ด๋ ํ ํ์ ๋ ๋จ๊ธฐ์ง ์์ผ๋ฏ๋ก, ์ธ์ ์ด๋์ ํธ์ถํ๋๋ผ๋ ํญ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๋ ์์ ํ ํจ์๋ฅผ ์ค๊ณํ ์ ์์ต๋๋ค.
3. ๋ชจ๋์ ๋ ๋ฆฝ์ฑ ํ๋ณด์ ๋์จํ ๊ฒฐํฉ(Loose Coupling)
์ข์ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ์ ๋ ๋ค๋ฅธ ์ฝ๋๊ฐ ์ฐ์์ ์ผ๋ก ๋ฌด๋์ง๋ ํ๊ธ ํจ๊ณผ๋ฅผ ์ต์ํํด์ผ ํฉ๋๋ค. ๋งค๊ฐ๋ณ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ฌ ์ค๊ณ๋ ํจ์๋ ์ธ๋ถ์ ํน์ ํ๊ฒฝ์ด๋ ์ ์ญ ๋ณ์์ ์กด์ฌ ์ฌ๋ถ์ ์์กดํ์ง ์๊ณ , ์ค์ง ์์ ์๊ฒ ์ฃผ์ด์ง๋ ๋งค๊ฐ๋ณ์๋ง์ ๋ฐ๋ผ๋ณด๊ณ ์๋ฌด๋ฅผ ์ํํฉ๋๋ค. ์ด๋ฅผ '๋์จํ ๊ฒฐํฉ(Loose Coupling)'์ด๋ผ๊ณ ํ๋ฉฐ, ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํฉ๋๋ค. ์ ์ญ ํ๊ฒฝ์ด ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋๋ ๊ด๊ณ์์ด ํจ์ ์์ฒด๋ฅผ ๋ค๋ฅธ ํ์ผ์ด๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ก ๊ทธ๋๋ก ์ฎ๊ฒจ ์ฌ์ด๋ ์๋ฒฝํ๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋ ๋จ๋จํ ์ํํธ์จ์ด ๋ชจ๋์ด ์์ฑ๋๋ ๊ฒ์ ๋๋ค.
@Junesker