๐ฅย ์ฉ์ด ์ ๋ฆฌ (ํด๋์ค, ์ธ์คํด์ค, 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 (๊ทธ๋ฅ ๊ฐ์ฒด)
- ํด๋์ค๋ฅผ ์ด์ฉํ ๋ฐฉ์ (ํด๋์ค ๊ธฐ๋ฐ ๊ฐ์ฒด ์์ฑ)
Car๋ผ๋ ํด๋์ค๋ฅผ ์ ์ํ๊ณnew Car()๋ฅผ ์ฌ์ฉํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ์.myCar๋Carํด๋์ค์ ์ธ์คํด์ค๋ก, ํด๋์ค๋ฅผ ํตํด ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ค.
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์
- ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ์์ฑ๊ณผ ๊ฐ์ ์ ์ํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ์.
anotherCar๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ก, ํด๋์ค ์์ด ์ ์๋ ๋จ์ ๊ฐ์ฒด์.
| ๊ฐ์ฒด | ์ค๋ช | instanceof Car ๊ฒฐ๊ณผ |
|---|---|---|
myCar | Car ํด๋์ค์์ ์์ฑ๋จ โ ์ธ์คํด์ค์ด๋ฉด์ ๊ฐ์ฒด | 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 ๊ฐ์ฒด์ ๊ฐ๋ ๊ณผ ๊ฑฐ์ ์ ์ฌํ๊ฒ ์ฐ์ด์ง๋ง ๋ฐ๋์ ํด๋์ค์ ์์กดํ์ง ์์.