2024. 6. 10. 23:28ใTIL
๐ก๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
1. ๊ฐ์ฒด์งํฅ
*๊ฐ์ฒด๋ ํ์ค ์ธ๊ณ์ ๋ฌผ์ฒด๋ ๊ฐ๋ ์ ์ํํธ์จ์ด ์ธ๊ณ๋ก ์ฎ๊ธด ๊ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ '์๋์ฐจ'๋ '์ฌ๋'์ผ๋ก ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ๊ฐ์ฒด๋ ์ ๋ณด์ ๊ทธ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋(ํจ์)์ ๊ฐ์ง๋ค.
- ๊ฐ์ฒด์งํฅ์ ๊ฐ๋ฐ์์ ์ฃผ์ ๊ตฌ์ฑ์์๋ฅผ๊ธฐ๋ฅ์ด ์๋๊ฐ์ฒด๋ก ์ผ์ "์ด๋ค ๊ฐ์ฒด๊ฐ ์ด๋ค ์ผ์ ํ ๊ฒ์ธ๊ฐ"์ ์ด์ ์ ๋ง์ถ๋ค.
- ์ฑ ์๊ณผ ๊ถํ์ ๊ฐ์ง ๊ฐ์ฒด๋ค์ด ์๋ก ๋ฉ์ธ์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ํ์ญํ์ฌ ํ์ํ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
- ์ด๋ฌํ ๊ฐ์ฒด์งํฅ ๋ฐฉ๋ฒ๋ก ์ ๋ณต์กํ ์์คํ ์ ํจ๊ณผ์ ์ผ๋ก ๋ถํดํ๊ณ ๊ตฌ์ฑํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์์ฝ๊ฒ ์ดํดํ๊ณ ํจ์จ
์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ๋์์ค๋ค.
2. ๊ฐ์ฒด์งํฅ ์ํํธ์จ์ด์ ์ ์ฐจ์งํฅ ์ํํธ์จ์ด ๊ตฌ๋ถ
- ๊ฐ์ฒด์งํฅ ์ํํธ์จ์ด๋ ์บก์ํ, ๋คํ์ฑ, ์์์ ์ง์ํ๋ฉฐ ๋ฐ์ดํฐ ์ ๊ทผ ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ด๋ฌํ ํน์ง์ ๋ง์กฑํ์ง ์๋ ๋ค๋ฉด ์ ์ฐจ์งํฅ ์ํํธ์จ์ด๋ผ ๋ณผ ์ ์๋ค.(ex. ํจ์๊ฐ ์คํ๋๋ ์์๋ก ์์ฑํ๊ฒ)
3.ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
- ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฉ์์ด๋ ๊ด์ ์ ๋ฐํ์ผ๋ก ํจ์จ์ ์ผ๋ก ๋ช ํํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค.
* ๊ฐ์ฅ ๋ํ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
- ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ (Structured Programming) : ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ๊ธฐ์ ์ด ์์๋๋ฉด์ ๊ฐ์ฅ ์ฒ์ ์ ์ฉ๋ ํจ๋ฌ๋ค์์ผ๋ก ๊ธฐ๋ฅ์ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (Object-Oriented Programming, OOP) : "ํ์ค ์ธ๊ณ๋ฅผ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ชจ๋ธ๋ง"ํ๋ ๊ฐ์ฅ ๋ํ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ฒ๋ฆฌ๋จ์๊ฐ ๊ฐ์ฒด์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ด๋ค.
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (Functional Programming) : ๊ฐ์ฅ ์ด๊ธฐ์ ๋ง๋ค์ด์ง ํจ๋ฌ๋ค์์ด์ง๋ง, ์ต๊ทผ ์ฃผ๋ชฉ๋ฐ๊ธฐ ์์ํ ํจ๋ฌ๋ค์์ผ๋ก ํจ์๋ฅผ ์ค์ฌ์ ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ๋ค.
4. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
• ์์์ ํน์ง
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ฉ์๋๊ฐ ๊ฐ์ ๋ชจ๋ ๋ด๋ถ์ ๋ฐฐ์น๋๋ ๋ฐฉ์์ ๋งํ๋ค.
- ์ฝ๋๋ฅผ ์ถ์ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋์ฑ ์ง๊ด์ ์ผ๋ก ์ฌ๊ณ ํ ์ ์๊ฒ ํ๋ ๋ํ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ๋ก ์ด ์ ์ฉ๋๋ค.
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์๋์ฐจ, ๋๋ฌผ, ์ฌ๋ ๋ฑ๊ณผ ๊ฐ์ ํ์ค ์ธ๊ณ๋ฅผ ์ ์ฐํ๊ฒ ํํํ ์ ์๋ค.
- ๊ฐ์ฒด๋ ๊ณ ์ ํ ํน์ฑ์ ๊ฐ์ง๋ฉฐ, ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ค.
- ex) ์๋์ฐจ๋ผ๋ ๊ฐ์ฒด๋ ์ถ๋ฐ, ์ ์ง, ์ดํ ๋ฐ ์ ๋๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค.
• ์ฝ๋ ์์ฑ์ ๋ชฉํ
- ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ํจ์จ์ ์ผ๋ก ์๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฝ๋ ๋ณ๊ฒฝ์ ์ด ๋ฐ์ํ๋๋ผ๋ ์ค๋ฅ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ณ ์ต๋ํ ์ ๊ฒ ์์ ํ์ฌ ๋์ฑ ๋ง์ ์๊ฐ์ ๋ง๋ค ์ ์์ด์ผํ๊ธฐ ๋๋ฌธ์ ์์ฑํ ์ฝ๋๋ ๊ฐ๋ ์ฑ์ด ์ข๊ณ , ์ฌ์ฌ์ฉ์ฑ์ด ๋์ผ๋ฉฐ, ์ ์ง๋ณด์๊ฐ ์ฌ์์ผ ํ๋ค.
• ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ ์ด์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฉ์์ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ด ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๊ตฌ์กฐ์ ๋์์ ์ง๊ด์ ์ผ๋ก ํ์ ํ ์ ์๋ค.
- ํ๋์ ๊ฐ์ฒด์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ทธ ๊ฐ์ฒด์ ๋ด๋ถ๋ง ์ดํด๋ณด๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ฐพ๊ธฐ๋ ์ฝ๋ค.
- ๋ํ ํ๋์ ๊ฐ์ฒด์ ์ ์๋ ๊ธฐ๋ฅ์ด๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ค๋ฅธ ๊ฐ์ฒด์์๋ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์๋ค.
• ํต์ฌ ์์น
1) ์บก์ํ : ๊ฐ์ฒด ๋ด๋ถ์ ์ธ๋ถ์ ์ธ ์ฌํญ(์ค์ํ ์ ๋ณด)์ ์ธ๋ถ์ ๋ ธ์ถ์ํค์ง ์๋๋ก ๊ฐ์ถ๋๊ฒ์ ๋งํ๋ค.
class User {
private name: string;
private age: number;
setName(name: string) {
this.name = name;}
getName() {
return this.name;}
}
- private์ด๋ผ๋ ์ ๊ทผ ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ๋ด๋ถ์์๋ง ํด๋น ๋ณ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ ํํ๋ค.
2) ์์ : ํ๋์ ํด๋์ค๊ฐ ๊ฐ์ง ํน์ง(ํจ์, ๋ณ์ ๋ฐ ๋ฐ์ดํฐ)์ ๋ค๋ฅธ ํด๋์ค๊ฐ ๊ทธ๋๋ก ๋ฌผ๋ ค ๋ฐ๋ ๊ฒ์ ๋งํ๋ค.
์์ ํด๋์ค์ ํน์ง์ ํ์ ํด๋์ค์์ ๋ฌผ๋ ค๋ฐ์์ผ๋ก์จ ์ฝ๋์ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ์ฆ๋์ํจ๋ค.
class Mother {
constructor(name, age, tech) {
this.name = name;
this.age = age;
this.tech = tech;
}
getTech(){ return this.tech; } // ๋ถ๋ชจ ํด๋์ค getTech ๋ฉ์๋
}
class Child extends Mother{
constructor(name, age, tech) {
super(name, age, tech); // ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถ
}
}
const child = new Child("์์ด", "20", "Node.js");
console.log(child.name); // ์์ด
console.log(child.age); // 20
Mother ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ์ Child ์์ ํด๋์ค์์ name,age ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ง์ ์ ๊ทผํ๊ณ ํธ์ถํ์ฌ ์ฌ์ฉํ๋ค.
3) ์ถ์ํ : ๊ฐ์ฒด์์ ๊ณตํต๋ ๋ถ๋ถ์ ๋ชจ์ ์์ ๊ฐ๋ ์ผ๋ก ์๋กญ๊ฒ ์ ์ํ๋ ๊ฒ์ ๋งํ๋ค. ์ฆ, ๋ถํ์ํ ์ธ๋ถ ์ฌํญ์ ์๋ตํ๊ณ , ์ค์ํ ํน์ง๋ง ๊ฐ์กฐํ๋ฉด์ ์ฝ๋๋ฅผ ๋์ฑ ๊ฐ๊ฒฐํ๊ณ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
interface Human {
name: string;
setName(name);
getName();
}
class Employee implements Human {
constructor(public name: string) { }
setName(name) { this.name = name; }
getName() { return this.name; }
}
const employee = new Employee("");
employee.setName("์ฒ ์");
console.log(employee.getName()); // ์ฒ ์
์ธํฐํ์ด์ค์์ ์์๋ฐ์ ํ๋กํผํฐ์ ๋ฉ์๋๋ ๊ตฌํํ์ง ์์ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ Employee ํด๋์ค๋ Human ์ธํฐํ์ด์ค์์ ์ ์ํ name ํ๋กํผํฐ์ setName, getName ๋ฉ์๋๋ฅผ ๊ฐ์ ๋ก ๊ตฌํํ๊ฒ ๋๋ค.(์ฝ๋์ ์ผ๊ด์ฑ ์ ์ง)
4) ๋คํ์ฑ : ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค์ํ ํํ๋ก ๋์ํ๋ ๊ฒ์ ๋งํ๋ฉฐ, ์ด๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ํน์ฑ์ ๋ฐ๋ผ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ค๋ฅด๊ฒ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
=> ๋์ผํ ๋ฉ์๋๋ ํจ์ ๋ช ์ ์ฌ์ฉํ๋๋ผ๋, ํด๋์ค๋ง๋ค ๊ทธ ๋ฉ์๋๊ฐ ๋ค๋ฅด๊ฒ ๋์ํ๋ ๊ฒ์ด ํน์ง์ด๋ค.
class Person {
constructor(name) { this.name = name; }
buy() {}
}
class Employee extends Person {
buy() { console.log(`${this.constructor.name} ํด๋์ค์ ${this.name}๋์ด ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ์์ต๋๋ค.`); }
}
class User extends Person {
buy() { console.log(`${this.constructor.name} ํด๋์ค์ ${this.name}๋์ด ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ์์ต๋๋ค.`); }
}
const employee1 = new Employee("์ํฌ");
const user1 = new User("์
์ด");
const personsArray = [employee1, user1];
personsArray.forEach((person) => person.buy());
// Employee ํด๋์ค์ ์ํฌ๋์ด ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ์์ต๋๋ค.
// User ํด๋์ค์ ์
์ด๋์ด ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ์์ต๋๋ค.
- personsArray.forEach( ) ์์ person ๋ณ์๋ Person ํด๋์ค๋ฅผ ์์๋ฐ์ Employee ๋๋ User ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ค.
- ์ฌ๊ธฐ์ ๊ฐ ์ธ์คํด์ค๋ buy ๋ฉ์๋๋ฅผ ๋์ผํ๊ฒ ํธ์ถํ์ง๋ง ์๋ก ๋ค๋ฅธ ํ์๋ฅผ ์ํํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL ( Layered Architecture Pattern ) (0) | 2024.06.12 |
---|---|
TIL (์ํคํ ์ฒ ํจํด) (0) | 2024.06.11 |
TIL(์ฝ๋๋ฆฌํํ ๋ง Code-Refactoring) (0) | 2024.06.07 |
TIL ( API, REST API ) (0) | 2024.06.05 |
TIL ( ํํ๋ก์ ํธ-ํ๋ก์ฐ๊ธฐ๋ฅ ) (1) | 2024.06.04 |