Home > CS > 2024 > ๐Ÿ’พ [CS] ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ ๊ณผ์ •์€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’พ [CS] ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ ๊ณผ์ •์€ ๋ฌด์—‡์ผ๊นŒ์š”?
CS

๐Ÿ’พ [CS] ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ ๊ณผ์ •์€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ ๊ณผ์ •์€ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •๊ณผ, ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programming, OOP)์—์„œ ์ด ๊ณผ์ •์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์œผ๋กœ, ๊ฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๊ณ , ์†Œ๋ฉธ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๋ฉด ๋” ํšจ์œจ์ ์ด๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory leak)๊ฐ€ ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ™‹โ€โ™‚๏ธ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programming, OOP)๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

1๏ธโƒฃ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •.

  • ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.
      1. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น.
      1. ์ƒ์„ฑ์ž ํ˜ธ์ถœ.
      1. ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”.
      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()๋Š” ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์–ธ์ œ ์ผ์–ด๋‚ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋ฆฌ์†Œ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด์ œํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด, 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)๊ฐ€ ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์—†์ด ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ์ž˜ ํŒŒ์•…ํ•˜๊ณ , ์ ์ ˆํ•œ ์‹œ์ ์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.