๐พ [CS] ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ ๊ณผ์ ์ ๋ฌด์์ผ๊น์?
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ ๊ณผ์ ์ ํ๋ก๊ทธ๋จ์ด ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๊ณ ์ฌ์ฉํ๋ ๊ณผ์ ๊ณผ, ๋ ์ด์ ํ์ํ์ง ์์ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP)์์ ์ด ๊ณผ์ ์ ๋งค์ฐ ์ค์ํ ๊ฐ๋ ์ผ๋ก, ๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ์์ฑ๋๊ณ , ์๋ฉธ๋๋์ง ์ดํดํ๋ฉด ๋ ํจ์จ์ ์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory leak)๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค.
๐โโ๏ธ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP)๋ ๋ฌด์์ผ๊น์?
1๏ธโฃ ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ .
- ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
-
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
-
- ์์ฑ์ ํธ์ถ.
-
- ๊ฐ์ฒด์ ์ด๊ธฐํ.
-
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ฐํ.
-
1๏ธโฃ ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋จผ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋๋ค.
- ์๋ฐ์ ๊ฒฝ์ฐ, ๊ฐ์ฒด๋ ํ ๋ฉ๋ชจ๋ฆฌ(Heap)์ ํ ๋น๋ฉ๋๋ค.
- ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋
new
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋ฉ๋ชจ๋ฆฌ(Heap)์์ ํ์ํ ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค.
- ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋
MyClass obj = new MyClass();
- ์ ์ฝ๋์์
new MyClass()
๋ ํ ๋ฉ๋ชจ๋ฆฌ(Heap)์MyClass
ํ์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์์ฑ๋ ๊ฐ์ฒด์ ๋งค๋ชจ๋ฆฌ ์ฃผ์๋ฅผobj
๋ณ์์ ํ ๋นํฉ๋๋ค.
๐ ํ ๋ฉ๋ชจ๋ฆฌ(Heap Memory)
ํ ๋ฉ๋ชจ๋ฆฌ(Heap Memory)๋ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ ์์ญ์ผ๋ก, ํ์ํ ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํ์์ ๋์ ์ผ๋ก ํ ๋นํ๊ณ ํด์ ํ ์ ์์ต๋๋ค.
์ด๋ ์ ์ญ ๋ณ์๋ ์ง์ญ ๋ณ์์ฒ๋ผ ์ปดํ์ผ ์์ ์ ํฌ๊ฐ๊ฐ ๊ฒฐ์ ๋์ง ์๊ณ , ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋์ด ๋ฌ๋ผ์ง ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ ์์ฑ์(Constructor) ํธ์ถ.
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ฉด, ์์ฑ์(Constructor)๊ฐ ํธ์ถ๋์ด ๊ฐ์ฒด์ ์ด๊ธฐํ ์์
์ด ์ด๋ฃจ์ด์ง๋๋ค.
- ์์ฑ์(Constructor)๋ ๊ฐ์ฒด์ ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ๊ณ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์ค๋นํ๋ ์ญํ ์ ํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์์ฑ์๋ฅผ ํตํด ๊ฐ์ฒด์ ์ด๊ธฐ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
public class MyClass {
private int value;
// ์์ฑ์
public MyClass(int value) {
this.value = value; // ์ด๊ธฐํ ์์
}
}
MyClass obj = new MyClass(10); // ์์ฑ์๋ฅผ ํตํด ์ด๊ธฐ๊ฐ ์ค์ .
3๏ธโฃ ๊ฐ์ฒด์ ์ด๊ธฐํ.
- ์์ฑ์๊ฐ ํธ์ถ๋๋ฉด์ ๊ฐ์ฒด์ ํ๋(๋ฉค๋ฒ ๋ณ์)๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค.
- ์ด ๋จ๊ณ์์ ๊ฐ์ฒด์ ์ํ๊ฐ ์ค์ ๋๊ณ , ํ์ํ ๋ฆฌ์์ค๊ฐ ์ค๋น๋ฉ๋๋ค.
- ์๋ฐ๋ ๊ธฐ๋ณธ ์์ฑ์(์ธ์๊ฐ ์๋ ์์ฑ์)๋ฅผ ์ ๊ณตํ์ฌ, ๊ฐ๋ฐ์๊ฐ ๋ณ๋๋ก ์์ฑ์๋ฅผ ์ ์ํ์ง ์์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
4๏ธโฃ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ฐํ.
- ๊ฐ์ฒด๊ฐ ์์ฑ๋ ํ, ์ฐธ์กฐ ๋ณ์๋ ์์ฑ๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
- ์ด๋ก ์ธํด ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ํ๋ก๊ทธ๋จ ๋ด์์ ์ ๊ทผํ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
2๏ธโฃ ๊ฐ์ฒด์ ์๋ฉธ ๊ณผ์ .
- ๊ฐ์ฒด์ ์๋ฉธ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ ๊ณผ์ ์
๋๋ค.
- ๊ฐ์ฒด์ ์๋ฉธ์ ์ธ์ด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค.
1๏ธโฃ ์๋ฐ์์์ ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection)
- ์๋ฐ๋ ๊ฐ์ฒด์ ์๋ฉธ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ดํ์ง ์๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbege Collector)๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์งํ๊ณ , ํ ๋ฉ๋ชจ๋ฆฌ(Heap Memory)์์ ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ฉฐ, ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ํ์งํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํฉ๋๋ค.
๐ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)
ํ๋ก๊ทธ๋จ์ด ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์๊ณ ๊ณ์ํด์ ์ ์ ํ๊ณ ์๋ ์ํ๋ฅผ ๋งํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๊ฐ ๋ฐ์ํ๋ฉด ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ์์ฌ์ ์์คํ ์ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ด๋ค๊ฒ ๋๊ณ , ๊ฒฐ๊ตญ์๋ ํ๋ก๊ทธ๋จ์ด๋ ์์คํ ์ ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํด ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํค๊ฑฐ๋ ๋น์ ์ ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
obj1 = null; // obj1์ด ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์
- ์ ์ฝ๋์์
obj1
์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ผ๋ฏ๋ก, ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)๊ฐ ์ด ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
2๏ธโฃ ๊ฐ์ฒด์ ์๋ฉธ๊ณผ ์ข ๋ฃ์(Finalizer)
- ์๋ฐ๋ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๊ธฐ ์ ์ ํธ์ถ๋๋
finalize()
๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.- ๊ทธ๋ฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)์ ๋์์ ์ ์ดํ๊ฑฐ๋ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์,
finalize()
๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)์ ๋์์ ์ ์ดํ๊ฑฐ๋ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์,
- ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ์ธ์ ์ผ์ด๋ ์ง ์์ธกํ ์ ์์ผ๋ฏ๋ก, ๋ฆฌ์์ค๋ฅผ ๋ช
์์ ์ผ๋ก ํด์ ํ ํ์๊ฐ ์๋ค๋ฉด,
try-with-resource
๋finally
๋ธ๋ก์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
3๏ธโฃ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํค๋ ๊ธฐ์ค.
- ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๊ฑฐ๋, ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํด ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)๋ ์ด ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๐ ์ํ ์ฐธ์กฐ(Circular Reference)
๋ ๊ฐ ์ด์์ ๊ฐ์ฒด๋ ๋ฆฌ์์ค๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๋ฉด์ ์ฐธ์กฐ์ ์ํ ๊ณ ๋ฆฌ๊ฐ ํ์ฑ๋๋ ์ํฉ์ ์๋ฏธํฉ๋๋ค.
์ด๋ฌํ ์ํฉ์ด ๋ฐ์ํ๋ฉด, ๊ฐ์ฒด๋ ๋ฆฌ์์ค๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ณ ์์ด ํด์ ๋์ง ์๋ ์ํ๊ฐ ๋๋ฉฐ, ํนํ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.์ํ ์ฐธ์กฐ(Circular Reference)๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP)์์ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๊ฐ ๋ณต์กํ๊ฒ ์ฝํ ๋ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ์๋ ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ํ์ํ ์ธ์ด(C/C++)์์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
Java, Python๊ณผ ๊ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์๋ ์ธ์ด์์๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ง๋ง, ์ํ ์ฐธ์กฐ(Circular Reference)๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฉ์ปค๋์ฆ(์: ์ฝํ ์ฐธ์กฐ)์ด ์กด์ฌํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)๋ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ด ์ฌํ๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ด ์ค๋ ์๊ฐ ๋์ ์คํ๋ ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
3๏ธโฃ ๋ค๋ฅธ ์ธ์ด์์์ ๊ฐ์ฒด ์๋ฉธ.
1๏ธโฃ C++์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ.
- C++์์๋ ์๋ฐ์ ๋ฌ๋ฆฌ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด์ ์๋ฉธ ์์ ์
delete
๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ผ ํฉ๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด์ ์๋ฉธ ์์ ์
- C++์์๋ ์๋ฉธ์(Destructor)๊ฐ ์์ด ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋์ด, ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ ๋ฆฌ์์ค ๋ฐํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
class MyClass {
public:
~MyClass() { // ์๋ฉธ์
// ๋ฉ๋ชจ๋ฆฌ ํด์ ์์
์ํ
}
};
MyClass* obj = new MyClass();
delete obj; // ์ง์ ๋ฉ๋ชจ๋ฆฌ ํด์
2๏ธโฃ ํ์ด์ฌ๊ณผ ์ฐธ์กฐ ์นด์ดํ
- ํ์ด์ฌ์ ์ฐธ์กฐ ์นด์ดํ
(Reference Counting)์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ์๋ฉธ์ ๊ด๋ฆฌํฉ๋๋ค.
- ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๊ฐ ์์ ๋, ํด๋น ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ฉ๋๋ค.
- ๊ทธ๋ฌ๋ ์ํ ์ฐธ์กฐ(Circular Reference) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํ์ด์ฌ์ ์ถ๊ฐ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ ์ฌ์ฉํฉ๋๋ค.
4๏ธโฃ ๊ฐ์ฒด ์์ฑ๊ณผ ์๋ฉธ์์ ์ฃผ์ํ ์ .
1๏ธโฃ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak).
- ๊ฐ์ฒด๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ฐธ์กฐ๋ฅผ ํด์ ํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐํ๋์ง ์๊ณ ๊ณ์ ์ฌ์ฉ๋ ์ํ๋ก ๋จ์ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๋ผ๊ณ ํ๋ฉฐ, ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ์น๋ช ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ์๋ฐ์์๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง๋ง, C++์ ๊ฐ์ ์ธ์ด์์๋ ์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด์ผ ํฉ๋๋ค.
2๏ธโฃ ์ ํํ ๋ฆฌ์์ค ํด์ .
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ํ์ผ ์
์ถ๋ ฅ, ๋คํธ์ํฌ ์์ผ ๋ฑ๊ณผ ๊ฐ์ ์ธ๋ถ ๋ฆฌ์์ค๋ ๋ช
์์ ์ผ๋ก ํด์ ํด์ผ ํฉ๋๋ค.
- ์๋ฐ์์๋
try-with-resources
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ํด์ ํ ์ ์์ต๋๋ค.
- ์๋ฐ์์๋
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
// ํ์ผ์ ์ฝ๋ ์์
์ํ
} // try ๋ธ๋ก์ด ๋๋๋ฉด BufferedReader๊ฐ ์๋์ผ๋ก ๋ซํ
๐ ๋คํธ์ํฌ ์์ผ(Network Socket)
๋คํธ์ํฌ๋ฅผ ํตํด ํต์ ์ ์ํํ๊ธฐ ์ํ ์ ๋๋จ์ ์ฐ๊ฒฐ ์ธํฐํ์ด์ค๋ก, ๋ ์ปดํจํฐ ๊ฐ์ ๋ฐ์ดํฐ ํต์ ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ์ํํธ์จ์ด ์๋ํฌ์ธํธ์ ๋๋ค.
์์ผ(Socket)์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ๋จ์๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๐ ์ํํธ์จ์ด ์ธํฐํ์ด์ค(Software Interface)
์ํํธ์จ์ด ์์คํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ํํธ์จ์ด, ํ๋์จ์ด, ์ฌ์ฉ์ ๋๋ ์์คํ ๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ์์ ์ ์ํ๋ ๊ฐ๋ ์ ๋๋ค.
์ธํฐํ์ด์ค(Interface)๋ ์ํํธ์จ์ด ์ปดํฌ๋ํธ(Component) ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ๋ฐฉ๋ฒ์ ํ์คํํ์ฌ, ์๋ก ๋ค๋ฅธ ์์คํ ์ด๋ ๋ชจ๋์ด ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ ๊ธฐ๋ฅ์ ํธ์ถํ ์ ์๋๋ก ํด์ค๋๋ค.
5๏ธโฃ ์์ฝ.
- ๊ฐ์ฒด์ ์์ฑ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ์์ฑ์ ํธ์ถ, ์ด๊ธฐํ ์์ ์ ํฌํจํ๋ฉฐ, ํ ๋ฉ๋ชจ๋ฆฌ(Heap Memory)์์ ์ด๋ฃจ์ด์ง๋๋ค.
- ๋ฐ๋๋ก ๊ฐ์ฒด์ ์๋ฉธ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ ๊ณผ์ ์ผ๋ก, ์๋ฐ์์๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)๊ฐ ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์ ์ ์ดํดํ๊ณ ๊ด๋ฆฌํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋์ ์์ด ํจ์จ์ ์ธ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ ํ์ ํ๊ณ , ์ ์ ํ ์์ ์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ต์ ํํด์ผ ํฉ๋๋ค.