-
๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋จ(OOP)์ด๋ก ๊ณต๋ถ 2023. 4. 25. 01:05
๐ Class
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์์ ํน์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ, ์ด๋ฌํ ๊ฐ์ฒด๋ ํด๋์ค์ ์ ์๋ ์์ฑ๊ณผ ๋์์ ๊ฐ์ง๊ฒ ๋๋ค.
- ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ๊ฐ๋ฅผ ์์ฑํด์ผํ ๊ฒฝ์ฐ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค.
// index.js class Mycar { limt = 30 enginStart = () => { console.log("์๋๊ฑธ๋ฆฐ๋ค") } enginOff = () => { console.log("์๋์ค์ง") } } const Car = new Mycar() // new ์ฐ์ฐ์์ ์์ฑ์ ํจ์ ์ฌ์ฉ Car.enginStart() Car.enginOff() const SecondCar = new Mycar() Car.enginStart() Car.enginOff() //Car // ์๋๊ฑธ๋ฆฐ๋ค. // ์๋์ค์ง //SecondCar // ์๋๊ฑธ๋ฆฐ๋ค. // ์๋์ค์ง
Mycar ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
- ํด๋์ค ์์๋ ํจ์ ๋ฟ๋ง ์๋๋ผ, ๋ณ์๋ ๋ฃ์ ์ ์์ง๋ง ๋ณ์๋ฅผ ๋ฃ์ ๋๋ Let๊ณผ cont๋ฑ์ ์ฌ์ฉํ์ง ์๋๋ค.
- new Mycar : new๋ผ๋ ์ฐ์ฐ์์ ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Mycar ๋ผ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
์ด์ ๋ณ์๋ฅผ ๋ฃ์ด limt ์๋๋ฅผ ๋ณ๊ฒฝํด๋ณด์!
// index.js class Mycar { limt = 30 constructor(qqq) { this.limt = qqq; } enginStart = () => { console.log("์๋๊ฑธ๋ฆฐ๋ค") console.log("์ด์ฐจ์ limt์?"+this.limt+"์ ๋๋ค.") } enginOff = () => { console.log("์๋์ค์ง") console.log("์ด์ฐจ์ limt์?"+this.limt+"์ ๋๋ค.") } } const Car = new Mycar(40) // new ์ฐ์ฐ์์ ์์ฑ์ ํจ์ ์ฌ์ฉ Car.enginStart() Car.enginOff() const SecondCar = new Mycar(60) Car.enginStart() Car.enginOff() //Car // ์๋๊ฑธ๋ฆฐ๋ค. // ์๋์ค์ง // ์ด์ฐจ์ limt์? 40์ ๋๋ค. //SecondCar // ์๋๊ฑธ๋ฆฐ๋ค. // ์๋์ค์ง // ์ด์ฐจ์ limt์? 60์ ๋๋ค.
๐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (Object-Oriented-Programming)
- ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์ ์ค ํ๋์ด๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ฏ๋ก์ ์ฝ๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๋ฉฐ ์ ์ง ๋ณด์๊ฐ ๊ฐํธํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋๋ถ์์ด ๊ฐ๋ฅํ๋ค.
๐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (OOP) 4๊ฐ์ง ํน์ง
- ์ถ์ํ (Abstraction)
์ถ์ํ๋, ๋ณต์กํ ๊ธฐ๋ฅ์ ๋จ์ํํ์ฌ ํํํ๋ ๊ฒ์ด๋ค. ์ฆ, ๊ฐ์ฒด ์์ ๊ณตํต์ ์ธ ํน์ง์ ์ถ์ถํ์ฌ ํ๋์ ๊ฐ๋ ๋๋ ๊ธฐ๋ฅ์ผ๋ก ์ ์ํจ์ผ๋ก์จ ์ธํฐํ์ด์ค ์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ํน์ง์ด๋ค. ์ด๋ฅผ ํตํด ์ธ๋ถ์์๋ ๋ด๋ถ ์ฝ๋์ ์๋ ๋ฐฉ์์ ์ดํดํ์ง ์๊ณ ๋, ๋จ์ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๊ฐ๋ น, ์์ ์ฝ๋์์ score, curve, getTotal ์ ๋ชจ๋ '์ฑ์ '์ ๊ตฌํ๊ธฐ ์ํด ํ์ํ ๊ฐ๊ณผ ๊ธฐ๋ฅ๋ค์ด๋ค. ๋ฐ๋ผ์ ์ด ๋ชจ๋ ๊ฐ์ด ๋ด๊ธด ๊ฐ์ฒด์ ์ด๋ฆ์ 'Grade' ๋ก ์ ์๋์๋ค. ๋ํ, ์ธ๋ถ์์๋ Grade ๋ด์ getTotal() ๋ฉ์๋๊ฐ ์ด๋ค ๋ฐฉ์์ ํตํด ์ฑ์ ์ ์ฐ์ถํ๋์ง ์ ํ ์์ง ๋ชปํด๋ ์ด๋ฅผ ํธ์ถํ์ฌ ์ฑ์ ์ ๊ตฌํ ์ ์๋ค.
์ถ์ํ์ ์ฅ์ ์ ๊ฐ์ฒด ๋ด๋ถ์ ๋ณํ๊ฐ ์ธ๋ถ์ ๋ฏธ์น๋ ์ํฅ๋ ฅ์ ์ค์ผ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ธ๋ถ์ ๊ตฌํ๋ ์ธํฐํ์ด์ค๋ ๊ทธ๋๋ก ์ ์ง๋๋ค๋ฉด, ๋ด๋ถ์ ๋ก์ง์ด๋ ๊ฐ์ด ์ด๋ป๊ฒ ๋ฐ๋๋ ์ด๋ฅผ ํ์ฉํ์ฌ ์ฐ๋ ์ฌ์ฉ์ (ํ๋ก๊ทธ๋๋จธ) ๋ ๊ธฐ์กด ๋ช ์นญ์ ๊ทธ๋๋ก ํ์ฉํ์ฌ ๊ฐ์ ์ฐ์ถํ ์ ์๋ค.
- ์บก์ํ (Encapsulation)
๊ฐ์ฒด์งํฅ์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ ์๋ก ๊ด๋ จ๋์ด ์๋ ๋ณ์์ ํจ์๋ฅผ ํ๋์ ๋จ์๋ก ๋ฌถ๋๋ค๋ ๊ฒ์ด๋ค. (๊ฐ์ ๋ชฉ์ ์ ๊ฐ๋ ๊ธฐ๋ฅ๊ณผ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ๋ ๊ฒ๊ณผ๋ ๊ฐ๋ค) ์ฐ๊ด์ฑ ๋์ ๊ฒ๋ค๋ผ๋ฆฌ ํ๋์ ๋จ์, ์ฆ ์บก์ ์์ ๋ด๋๋ค๊ณ ํ์ฌ '์บก์ํ' ๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ฌ๊ธฐ์ ๋งํ๋ ๋จ์๋ ์บก์์ด ๊ณง ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ด๋ค.
ํ๋์ ์บก์ ์์๋ ๋ฐ์ดํฐ์ ์ด ๋ฐ์ดํฐ์ ๋ํ ํน์ ์์ ์ ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ด ํจ๊ป ๋ด๊ธด๋ค. ์ค๋ช ์ด ์กฐ๊ธ ์ถ์์ ์ธ๋ฐ, ํด๋์ค์ ํ๋กํผํฐ์ ๋ฉ์๋์ ๊ฐ๋ ์ ๋ ์ฌ๋ฆฌ๋ฉด ์กฐ๊ธ ์ดํด๊ฐ ์ฌ์ธ ๊ฒ์ด๋ค. ํ๋กํผํฐ๋ ํด๋์ค์ ์์ฑ์ด๋ฉฐ, ๋ฉ์๋๋ ์ด๋ค ๋ช ๋ น์ ํตํด ํด๋์ค์ ๊ฐ์ ์ ๊ทผํ์ฌ ํน์ ์์ ์ ํ ์ ์๋ค.
์บก์ํ๋ฅผ ํตํด ์ธ๋ถ๋ก๋ถํฐ ๋ด๋ถ๋ฅผ ๊ฐ์ธ ์จ๊ธธ ์ ์๋ค๋ ํน์ง์ด ์๋ค. ์ฆ, ์ธ๋ถ์์๋ ๊ฐ์ฒด ๋ด๋ถ์ ๋ณ์์ ์ง์ ์ ๊ทผํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ ๋ฐ์ดํฐ๊ฐ ์๋์น ์๊ฒ ๋ณํ๋ ์๊ธฐ์น ๋ชปํ ์ํฉ์ ์๋ฐฉํด์ค๋ค. ๋ํ, ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ด์ด์ ์ฝ๋ ์ ์ฒด์ ๋ณต์ก๋๊ฐ ๋ฎ์์ง๋ค. ์ด๊ฒ์ด ์ฅ์ ์ด ๋๋ ์ด์ ๋, ๋ณต์ก์ฑ์ด ์ค๋ฉด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์(Inheritance)
์์์ ์ด๋ฏธ ๋ง๋ค์ด๋์ ๊ฐ์ฒด์ ํน์ง์ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์ด์ด๋ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ์์ ๊ฐ์ฒด๋ฅผ ์์๋ฐ์ ํ์๊ฐ์ฒด๋ ์์ ๊ฐ์ฒด์ ํน์ง์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด์๋, ๋ณธ์ธ๋ง์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์์ Grade ๋ฅผ ์์๋ฐ์ ์์ ๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ letterGrade ํด๋์ค ์์ ๋ฅผ ๋ณด๋ฉด ์ด๋ฅผ ํ์ธํ ์ ์๋ค.
- ๋คํ์ฑ (Polymorphism)
๋คํ์ฑ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ์ฑ์ง์ ์์๋ฐ์๋, ๊ฒฐ๊ณผ๋ ๋ค์ํ๊ฒ ํํ๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์์ ์ดํ ๊ธฐ์กด์ ๊ธฐ๋ฅ๋ช ์ ํ์ฉํ ์๋ก์ด ๋ก์ง์ ์ง๊ฑฐ๋, ์๋ก์ด ๊ฐ์ ๋ถ์ฌํจ์ผ๋ก์จ ๋ฌ์ฑํ ์ ์๋ ํน์ง์ด๋ค.
๋คํ์ฑ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ์ฑ์ง์ ์์๋ฐ์๋, ๊ฒฐ๊ณผ๋ ๋ค์ํ๊ฒ ํํ๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์์ ์ดํ ๊ธฐ์กด์ ๊ธฐ๋ฅ๋ช ์ ํ์ฉํ ์๋ก์ด ๋ก์ง์ ์ง๊ฑฐ๋, ์๋ก์ด ๊ฐ์ ๋ถ์ฌํจ์ผ๋ก์จ ๋ฌ์ฑํ ์ ์๋ ํน์ง์ด๋ค.
์ฐธ๊ณ ์๋ฃ:https://haeunyah.tistory.com/90
https://www.youtube.com/watch?v=dy9yQIx38u8
[CS] OOP (๊ฐ์ฒด์งํฅ) & Functional (ํจ์ํ) ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด
OOP, ์ ์ฐจ์งํฅ, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ .. ๋ง์ด ์ฌ์ฉํ์ง๋ง ์ ํํ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์๊ณ ์์ง ์๋ค๋ ์๊ฐ์ด ๋ค์ด, ๊ด๋ จ ๋ด์ฉ์ ๋ด์ ์ ๋ฆฌํ ๊ธ์ ์จ ๋ณธ๋ค. ๐ Introdction ์ ์ฐจ์งํฅํ ํ๋ก๊ทธ๋๋ฐ, ๊ฐ์ฒด์งํฅ
haeunyah.tistory.com
'์ด๋ก ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React(Next.JS)? Node.JS(Nest.JS)? (0) 2023.07.12 CORS & CORS์๋ฌ (0) 2023.06.18 HTTP (0) 2023.06.18