Post

๐Ÿฅ”ย ์šฉ์–ด ์ •๋ฆฌ (ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค, OOP ๊ฐ์ฒด - JS Object)

๐Ÿฅ”ย ์šฉ์–ด ์ •๋ฆฌ (ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค, OOP ๊ฐ์ฒด - JS Object)

๐Ÿฅ”ย 1. ๊ฐ์ฒด(Object)์™€ ์ธ์Šคํ„ด์Šค(Instance)์˜ ์ฐจ์ด

๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ์ฒด์ง€๋งŒ, ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ธ์Šคํ„ด์Šค๋Š” ์•„๋‹ˆ๋‹ค.

๐Ÿ“Œย ๊ฐ์ฒด(Object) โ‡’ ์‹ค์ œ ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ชจ๋“  ๊ฒƒ

๐Ÿ“Œย ์ธ์Šคํ„ด์Šค(Instance) โ‡’ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ํด๋ž˜์Šค ์ •์˜
class Car {
  constructor(public brand: string) {}
}

// ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด ์ƒ์„ฑ (์ธ์Šคํ„ด์Šค)
const myCar = new Car("Tesla");

// ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ
const anotherCar = { brand: "BMW" };

console.log(myCar instanceof Car); // true (ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ธ์Šคํ„ด์Šค)
console.log(anotherCar instanceof Car); // false (๊ทธ๋ƒฅ ๊ฐ์ฒด)

  1. ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹ (ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด ์ƒ์„ฑ)
    • Car๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  new Car()๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹.
    • myCar๋Š” Car ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ, ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  2. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹
    • ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ์†์„ฑ๊ณผ ๊ฐ’์„ ์ •์˜ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹.
    • anotherCar๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋กœ, ํด๋ž˜์Šค ์—†์ด ์ •์˜๋œ ๋‹จ์ˆœ ๊ฐ์ฒด์ž„.
๊ฐ์ฒด์„ค๋ช…instanceof Car ๊ฒฐ๊ณผ
myCarCar ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ๋จ โ†’ ์ธ์Šคํ„ด์Šค์ด๋ฉด์„œ ๊ฐ์ฒดtrue
anotherCar๋‹จ์ˆœํ•œ {} ๊ฐ์ฒด โ†’ ๊ฐ์ฒด์ด์ง€๋งŒ ์ธ์Šคํ„ด์Šค๋Š” ์•„๋‹˜false

๐Ÿฅ”ย 2. ํด๋ž˜์Šค(Class)๋ž€?

๐Ÿ“Œย ํด๋ž˜์Šค (Class) = ๊ฐ์ฒด๋ฅผ ์ฐ์–ด๋‚ด๋Š” ํˆด (์„ค๊ณ„๋„)

  • ํด๋ž˜์Šค ์ž์ฒด๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์ง€๋งŒ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
1
2
3
4
5
6
class Person {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
}
  • Person์€ ํด๋ž˜์Šค(Class)
  • new Person(โ€Aliceโ€)๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋Š” Person์˜ ์ธ์Šคํ„ด์Šค(Instance)

๐Ÿฅ”ย 3. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์˜ค๋ธŒ์ ํŠธ(Object)์™€ OOP์—์„œ์˜ ๊ฐ์ฒด์˜ ๊ด€๊ณ„

GPT: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ค๋ธŒ์ ํŠธ๋Š” ํด๋ž˜์Šค ์—†์ด ์ •์˜๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ , OOP์—์„œ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์‹ค์ฒด๋ผ๊ณ  ๋ณด๋ฉด ๋ผ. ๋‘ ๊ฐœ๋…์€ ๋น„์Šทํ•˜์ง€๋งŒ โ€œํด๋ž˜์Šค์˜ ์กด์žฌ ์—ฌ๋ถ€โ€œ๊ฐ€ ํฐ ์ฐจ์ด์•ผ!

๋‚˜: ์ด์ƒํ•œ๋ฐ? ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์‹ค์ฒด๋Š” ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•˜์ž–์•„ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ์ฒด๊ฐ€ ๋งž์ง€๋งŒ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด๋„ ์žˆ๋Š” ๊ฑฐ ์•„๋…€?

GPT: ๋งž์•„, ์ž˜ ์ง€์ ํ–ˆ์–ด! ๐Ÿ˜… ๋‚ด๊ฐ€ ๋” ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์•ผ ํ–ˆ์–ด. ์ธ์Šคํ„ด์Šค๋Š” ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์ง€๋งŒ, ๊ฐ์ฒด๋Š” ๋” ๋„“์€ ๊ฐœ๋…์œผ๋กœ, ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์•„.

๋‚˜: ๊ทธ๋Ÿฌ๋ฉด OOP์—์„œ์˜ ๊ฐ์ฒด๋ž‘ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด๋ž‘ ๋ฌด์Šจ ์ฐจ์ด๊ฐ€ ์žˆ๋ƒ๋Š” ๊ฑฐ์ง€ ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ž‘ ๋˜‘๊ฐ™์€ ๊ฑฐ ์•„๋‹˜?

GPT: ๋งž์•„, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํด๋ž˜์Šค ์—†์ด๋„ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ, ๊ทธ๋Ÿฐ ๊ด€์ ์—์„œ๋Š” ๋‘˜์ด ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์•„. ๋‹ค๋งŒ ์•ฝ๊ฐ„์˜ ๋‰˜์•™์Šค ์ฐจ์ด๊ฐ€ ์žˆ์–ด:

  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ OOP์—์„œ๋Š” ๋ณดํ†ต ๊ฐ์ฒด๋ผ๊ณ  ํ•˜๋ฉด ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•ด. ์ฆ‰, ํด๋ž˜์Šค๋ผ๋Š” ์„ค๊ณ„๋„๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ตฌ์ฒด์ ์ธ ์‹ค์ฒด๋ฅผ ๋งํ•ด.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด๋ผ์„œ ๊ฐ์ฒด๊ฐ€ ๋” ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์•ผ. ํด๋ž˜์Šค๊ฐ€ ES6์— ์ถ”๊ฐ€๋˜๊ธด ํ–ˆ์ง€๋งŒ, ์›๋ž˜๋ถ€ํ„ฐ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด {} ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด์•ผ.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค์˜ ๊ตฌ๋ถ„์ด ์—„๊ฒฉํ•˜์ง€ ์•Š์•„์„œ, โ€œํด๋ž˜์Šค ์—†์ด ์ •์˜๋œ ๊ฐ์ฒดโ€์™€ โ€œํด๋ž˜์Šค์—์„œ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šคโ€๋ฅผ ๋ชจ๋‘ ๊ทธ๋ƒฅ ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋งฅ๋ฝ์—์„œ๋Š” ๊ฒฐ๊ตญ ๋˜‘๊ฐ™๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ๋‹ค๋งŒ, ์ „ํ†ต์ ์ธ OOP ์–ธ์–ด์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ผ ๋ณด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์„œ ์šฉ์–ด ์ฐจ์ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ๋ฟ!


๐Ÿฅ”ย 4. ์ •๋ฆฌ

  • ํด๋ž˜์Šค (Class)
    • ์ •์˜: ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„(blueprint)
    • ํŠน์ง•:
      • OOP ์–ธ์–ด์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ‹€
      • Java, C++ ๋“ฑ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
      • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ES6 ํด๋ž˜์Šค ๋ฌธ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์ด๋ผ โ€œ๋ฌธ๋ฒ•์  ์„คํƒ•โ€ ์ •๋„๋กœ ๋ณด๋ฉด ๋จ
  • ์ธ์Šคํ„ด์Šค (Instance)
    • ์ •์˜: ํด๋ž˜์Šค(์„ค๊ณ„๋„)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด
    • ํŠน์ง•:
      • โ€œnewโ€ ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๊ฐ€ ๋ฐ”๋กœ ์ธ์Šคํ„ด์Šค
      • ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ์ฒด์ด์ง€๋งŒ, ํด๋ž˜์Šค ์—†์ด ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋Š” ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š์Œ
  • OOP ๊ฐ์ฒด
    • ์ •์˜: ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฐ์ฒด
    • ํŠน์ง•:
      • ๋ณดํ†ต ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ, ์–ธ์–ด์— ๋”ฐ๋ผ ํ”„๋กœํ† ํƒ€์ž… ๋ฐฉ์‹ ๋“ฑ ํด๋ž˜์Šค ์—†์ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ
      • OOP์—์„œ๋Š” โ€œ๊ฐ์ฒดโ€๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•œ๋ฐ ๋ฌถ์€ ์‹ค์ฒด๋ฅผ ๋งํ•จ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด
    • ์ •์˜: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋กœ, ํด๋ž˜์Šค ์—†์ด๋„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
    • ํŠน์ง•:
      • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด({})๋กœ ์ •์˜ ๊ฐ€๋Šฅ
      • ES6 ํด๋ž˜์Šค ๋ฌธ๋ฒ•์œผ๋กœ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ, ๊ทธ ์ด์ „๋ถ€ํ„ฐ ๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•จ
      • ์ฆ‰, OOP์˜ ๊ฐ์ฒด ๊ฐœ๋…๊ณผ ์œ ์‚ฌํ•˜๋‚˜ ํด๋ž˜์Šค์— ์–ฝ๋งค์ด์ง€ ์•Š๋Š” ๋” ์œ ์—ฐํ•œ ๊ฐœ๋…
๊ตฌ๋ถ„์ •์˜ ๋ฐ ํŠน์ง•์˜ˆ์‹œ/์„ค๋ช…
ํด๋ž˜์Šค (Class)๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„class Car { ... } (Java, ES6 ๋“ฑ)
์ธ์Šคํ„ด์Šค (Instance)ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด (์‹ค์ฒด)const myCar = new Car("Tesla")
OOP ๊ฐ์ฒดOOP์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฐ์ฒด. ์ฃผ๋กœ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋‚˜, ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ์˜ ์ง‘ํ•ฉJava์—์„œ new Car()๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด; Python์˜ ๋ชจ๋“  ๊ฐ์ฒด
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒดํด๋ž˜์Šค ์—†์ด๋„ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ. ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ๋ฐฉ์‹๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด: { name: "Alice", age: 30 } ๋˜๋Š” new Car()
  • ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„.
  • ์ธ์Šคํ„ด์Šค๋Š” ๊ทธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ตฌ์ฒด์  ๊ฐ์ฒด.
  • OOP ๊ฐ์ฒด๋Š” ๋ณดํ†ต ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ, ์–ธ์–ด์— ๋”ฐ๋ผ ํด๋ž˜์Šค ์—†์ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค ์—†์ด๋„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ, OOP ๊ฐ์ฒด์˜ ๊ฐœ๋…๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๊ฒŒ ์“ฐ์ด์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š์Œ.
This post is licensed under CC BY 4.0 by the author.