ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋žจ(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
Designed by Tistory.