์†Œ์ˆ˜์„ค์—์„œ ํƒœ์–ด๋‚œ ๋‹ค์–‘ํ•œ ์ฃผ์žฅ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ADT์™€ PDA, Alan Kay์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

์ง€๊ธˆ๊นŒ์ง€..

  • ์ฃผ๋ฅ˜ OO์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
  • ์ด์ œ๋Š” ์†Œ์ˆ˜์„ค๋“ค์ด ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ์—ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.
  • ์ทจํ•  ๊ฒƒ์€ ์ทจํ•˜๊ณ , ์•„๋‹Œ ๊ฒƒ์€ ์•„๋‹Œ ๊ฒƒ์ž„์„ ์•Œ๊ธฐ ์œ„ํ•ด ๋ฐฐ์šด๋‹ค.
  • ๋ง๋„ ์•ˆ๋˜๋Š” ์ฃผ์žฅ์„ ํ•˜๋Š” ์‚ฌ๋žŒ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐ์›Œ๋‘์ž.
    • ์ด๋Ÿด ๋•Œ๋Š” ์ด๋Ÿฐ๊ฑธ ์จ์•ผํ•ด์š”! - (์ž˜๋ชจ๋ฅด๋‹ˆ) ์ •๋ง์š”?
    • ์ด๋Ÿฐ ์ƒํ™ฉ์„ ๋ง‰์•„์•ผ ํ•œ๋‹ค.

OOP ํ† ๋ก ์‹œ ํ”ผํ•ด์•ผ ํ•  ์‚ฌ๋žŒ

  1. ์ฒ˜์Œ ๋“ฃ๋Š” ์ฃผ์žฅ์„ ํ•˜๋ฉฐ โ€œ๊ทธ๊ฑด ์˜ฌ๋ฐ”๋ฅธ OOP๊ฐ€ ์•„๋‹ˆ์•ผโ€ ํ•˜๋Š” ์‚ฌ๋žŒ
  2. ์ด๊ฑด โ€œ์ˆœ์ˆ˜ OOP ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ์•ผโ€ ํ•˜๋Š” ์‚ฌ๋žŒ
  3. โ€œ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ OOP๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ดโ€ ํ•˜๋Š” ์‚ฌ๋žŒ
  4. โ€œ<์–ด์ฉŒ๊ณ >ํ•œ <๋ˆ„๊ตฌ>๊ฐ€ ์ด๋ฆฌ ๋งํ–ˆ์œผ๋‹ˆ ๋„ˆ๋Š” ํ‹€๋ คโ€ ํ•˜๋Š” ์‚ฌ๋žŒ : ๊ถŒ์œ„์— ํ˜ธ์†Œํ•˜๋Š” ๊ฒƒ์€ ๋ณธ์งˆ์„ ํ›ผ์†์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ
  5. โ€œ์ด ๋ฐฉ๋ฒ•๋งŒ ๋”ฐ๋ฅด๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ผโ€ ํ•˜๋Š” ์‚ฌ๋žŒ

ADT์™€ PDA

Object-Oriented Programming Versus Abstract Data Types: William R.Cook

  • ์ดˆ์ฐฝ๊ธฐ์— OOP๋ฅผ ๋ฐ”๋ผ๋ณด๋˜ ๋‘๊ฐ€์ง€ ๊ด€์ 
  • ํ˜„์žฌ๋Š” ๋‘˜๋‹ค ์„ž์—ฌ์žˆ์Œ
  • Abstract Data Types: ์ถ”์ƒ์  ๋ฐ์ดํ„ฐ ํƒ€์ž…
  • Procedural Data Abstraction: ์ ˆ์ฐจ์  ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™” - ํ•จ์ˆ˜์— ๊ฐ€๊นŒ์›€
  • ๋Œ€๋‹ค์ˆ˜๋Š” ADT๋กœ ๋ณด๊ณ  ์žˆ์Œ
  • PDA๋Š” ์ฒ˜์Œ ๊ฐœ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋Œ€๋‘๋˜๋ฉฐ ์‚ฌ์šฉํ–ˆ๋˜ ๋‹จ์–ด๋•Œ๋ฌธ์— ์ „ํ†ต์ด๋ผ ์šฐ๊ธฐ๋Š” ์ค‘

Alan Kay๊ฐ€ ๊ฐœ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ์ž…์žฅ

  • ์†Œ์ˆ˜์„ค ์ฃผ์ฐฝ์ž ์ค‘ ๊ฐ€์žฅ ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ์‚ฌ๋žŒ: Alan Kay
  • OOP๋ผ๋Š” ์šฉ์–ด๋ฅผ ์ฒ˜์Œ ๋งŒ๋“  ์‚ฌ๋žŒ
  • Alan Kay์˜ OOP ์ •์˜: โ€œOO์˜ ํ•ต์‹ฌ์€ ๋ฉ”์‹œ์ง€โ€
    • ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์› ๋˜ ๊ฒƒ์€ ์บก์Šํ™”, ๋ฐ์ดํ„ฐ, ๊ฐœ์ฒด์ฒ˜๋Ÿผ ์„ธ๊ณ„๋ฅผ ๋ณธ๋‹ค ์ด๋Ÿฐ ๊ฒƒ์ด์—ˆ์Œ
    • ๊ทผ๋ฐ ์ด์‚ฌ๋žŒ์€ โ€œ์ด๊ฑฐํ•ดโ€ ๊ฐ€ ์ค‘์‹ฌ์ด๋ผ๊ณ  ๋ด„
  • ๋ณธ์ธ์˜ ์ฃผ์žฅ์„ Smalltalk ์ด๋ผ๋Š” ์–ธ์–ด๋กœ๊นŒ์ง€ ๋งŒ๋“  ๋Œ€๋‹จํ•œ ์‚ฌ๋žŒ
  • ์ƒ๋ฌผํ•™, ์ˆ˜ํ•™ ์ „๊ณต (?)

๋ถˆ์Œํ•œ Alan Kay..

  • ๊ทน๋‹จ์  ์ฃผ์žฅ์„ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค: PDA์— ๊ธฐ๋ฐ˜
  • ์ž๊ธฐ๋“ค์˜ ์ฃผ์žฅ์— ๋Œ€ํ•œ ๊ทผ๊ฑฐ๋ฅผ Alan Kay๋„ ๊ทธ๋žฌ๋‹ค๋กœ ๋Œ€๊ณค ํ•จ
  • ํ•˜์ง€๋งŒ ํ™•์ธํ•ด๋ณด๋ฉด Alan Kay๋Š” ๋ณดํ†ต ๊ทธ๋Ÿฐ์ ์ด ์—†์Œ ใ…‹ใ…‹
  • ๊ทผ๊ฑฐ๊ฐ€ ๋นˆ์•ฝํ•œ ์‚ฌ๋žŒ๋“ค์ด ๊ถŒ์œ„์— ํ˜ธ์†Œํ•˜๋ ค๊ณ  ์ด์šฉํ•˜๋Š” ๊ฒƒ.
  • ๋ช…์˜ˆ ํšŒ๋ณต ์ธํ„ฐ๋ทฐ
    • ์ด๋ฉ”์ผ ๋‹ต๋ณ€์ž„

Alan Kay์˜ ์ž…์žฅ์— ๋Œ€ํ•œ ์ด์œ 

  • ๊ทธ์—๊ฒŒ ๊ฐœ์ฒด๋ž€ ์ƒ๋ฌผํ•™์—์„œ ์„ธํฌ๊ฐ™์€ ์กด์žฌ
    • ์ž๊ธฐ ๊ฒฐ์ •๊ถŒ์„ ๊ฐ€์ง„ ์ƒ๋ช…์ฒด
  • ์ƒ๋ฌผํ•™ ์ „๊ณต์ž๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ๋ณธ๋‹ค๊ณ  ๋งํ•จ
  • ๊ตณ์ด ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์—์„œ ๋น„์Šทํ•œ ๊ฒƒ์„ ์ฐพ์œผ๋ฉด, ๋„คํŠธ์›Œํฌ์— ์กด์žฌํ•˜๋Š” ์ปดํ“จํ„ฐ
    • ์ฆ‰, ๋‹จ์ˆœํ•œ ๊ฐœ์ฒด๋ณด๋‹ค๋Š” ์ž๊ธฐ ๊ฒฐ์ •๊ถŒ์„ ๊ฐ€์ง„ ์กด์žฌ๋ผ ์ƒ๊ฐํ•จ
  • ๊ฐœ์ฒด๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ผ๋Š” ์กด์žฌ๋ฅผ ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ  ์‹ถ์—ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€๋กœ ์„œ๋กœ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ, ์ฆ‰ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.
    • ํ™•์‹คํ•œ PDA ์ง„์˜
  • Smalltalk์—๋„ ๊ฐœ์ฒด๋“ค๋กœ ๊ตฌ์„ฑ๋œ ์‚ด์•„ ์ˆจ์‰ฌ๋Š” ํ™˜๊ฒฝ์ž„
    • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋„๋Š” ๋Š๋‚Œ

Alan Kay๊ฐ€ ์ด์šฉ๋‹นํ•˜๋Š” ์ˆœ๊ฐ„๋“ค

  • ๋‚ด ์ฃผ์žฅ์€ Alan Kay์˜ ์ฃผ์žฅ์— ๊ธฐ์ดˆํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ณ๋‹ค.

Alan Kay๊ฐ€ ์ฒ˜์Œ OO๋ฅผ ์ฐฝ์‹œํ•œ ์‚ฌ๋žŒ์ด๋‹ค? (X)

  • ์ž๊ธฐ๋Š” ์•„๋‹ˆ๋ผ๊ณ  ํ•จ
  • ์ด๋ฏธ ADT๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ์ฒด์ง€ํ–ฅ ๋น„์Šทํ•œ ์›€์ง์ž„์€ ์ง„ํ–‰๋˜๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ํ•จ
  • ๊ฑฐ๊ธฐ์˜ ์ž์‹ ์˜ ์ฃผ์žฅ์„ ํ•œ ๊ฒƒ์ผ ๋ฟ
  • ๋‹น์‹œ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์ž๋“ค์€ ์ด ์ฃผ์žฅ์„ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š์•˜๊ณ ,
  • ADT๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ค๋Š˜๋‚ ์˜ ๊ฐœ์ฒด์ง€ํ–ฅ์ด ์™„์„ฑ๋จ
  • ์•„์ง๋„ ์ž๊ธฐ ์ฃผ์žฅ์— ๊ธฐ๋ฐ˜์„ ๋‘” ์†Œ์ˆ˜์„ค์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์‹ ๊ธฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐ
  • ๊ทธ๋Ÿฐ๋ฐ โ€œ์ง€๊ธˆ ํ•˜๋Š”๊ฒŒ ๋ญ๋ƒโ€๋ผ๊ณ  ๋ฌผ์–ด๋ด์„œ OO๋ผ๋Š” ๋‹ต์„ ํ•˜๊ธด ํ–ˆ๋‹ค๊ณ  ํ•จ
  • ์ž๊ธฐ ์ฃผ์žฅ์— ๋งž์ง€ ์•Š๋Š” ์šฉ์–ด์˜€๊ณ , ์˜คํžˆ๋ ค ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ โ€œMessage-Orientedโ€๋ผ ํ–ˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ•จ
    • ๋ฐ์ดํ„ฐ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ๋งŒ ์ค‘์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ
    • ์‹ค์ œ๋กœ ํ•จ์ˆ˜ ์‹œ๊ทธ๋‚ด์ฒ˜๋„ ์ข€ ๋‹ค๋ฆ„

Smalltalk์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

public class Calculator {
    
    public int add(int a, int b) {
        return a + b;
    }
 
    ... 
 
    some method..{ 
        int val = Add(1, 2) // ์ปดํŒŒ์ผ ์—๋Ÿฌ
    }
}
  • ์‹ค์ˆ˜๋กœ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์ž˜๋ชป์ ์œผ๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚จ
  • smalltalk์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Œ
  • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฐœ๋…์ด ์—†๋‹ค.
  • ์ปดํŒŒ์ผ ์ค‘์— ์˜ฌ๋ฐ”๋ฅธ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‚ด์ฒ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ๋„ ๋ถˆ๊ฐ€
  • ๊ทธ๋ณด๋‹ค๋Š” ๋‹ค๋ฅธ ๊ฐœ์ฒด์— โ€œ์ด๊ฑฐ ํ•ด์ค˜โ€๋ผ๊ณ  ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๋‚ด๋Š” ์‹œ์Šคํ…œ
    • ์š”์ฒญ์„ ๋ฐ›์€ ๊ฐœ์ฒด๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜๋„, ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ
    • ๊ทธ๋Ÿผ์—๋„ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
public Object execute(String methodName, Object[] args) {
    switch (methodName) {
        case "add":
            // ์ธ์ž ๋‘๊ฐœ ๋ฐ›์•„์„œ ๋ฆฌํ„ด
        case "mad": // multiply , add
            // args[0] * args[1] + args[2] ๋ฐ˜ํ™˜
    }
}
  • ๊ตณ์ด ํ‘œํ˜„ํ•ด๋ณด๋ฉด ์œ„์™€ ๋น„์Šทํ๋‹ค.
  • ๋ฉ”์†Œ๋“œ ์ด๋ฆ„๋งŒ ๋ฐ›๊ณ , ๊ทธ๊ฑธ ๊ฒ€์‚ฌํ•ด์„œ ํ•จ์ˆ˜ ์‹คํ–‰
  • ๋งŒ์•ฝ ์ด์ƒํ™ฉ์—์„œ โ€œaddโ€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์šฉ์œผ๋กœ ์ธ์ž๊ฐ€ ๋“ค์–ด์™”๋Š”๋ฐ, ๋‚ด๊ฐ€ ์›ํ•œ๊ฑฐ๋ž‘ ๋‹ค๋ฅด๋‹ค๋ฉด?
    • ์˜ˆ์™ธ..
  • ์†ํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด?
    • ์˜ˆ์™ธ..
  • ๊ทธ๋ ‡๋‹ค๋ฉด smalltalk์˜ ๋‹คํ˜•์„ฑ์ด๋ž€?
    • ์–ด๋–ค ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‚ด์ฒ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ  ๋”ฐ๋ฅด๋Š” ๊ฐœ๋…์ด ์•„๋‹˜
    • ๋‹คํ˜•์„ฑ์ด ๋ถ€๋ชจ ํด๋ž˜์Šค ๊ณตํ†ต ์‹œ๊ทธ๋‚ด์ฒ˜์— ์˜์กดํ•˜์ง€ ์•Š์Œ
    • methodname์˜ ๋ฌธ์ž์—ด๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋‹คํ˜•์„ฑ
      • ์ผ๋ฐ˜์ ์ธ ๋‹คํ˜•์„ฑ์ด ์•„๋‹˜
  • smalltalk๋Š” ์˜ˆ์™ธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
    • ๋™์  ํƒ€์ž…์„ ์„ ํ˜ธํ•  ์ˆ˜๋ก ์˜ˆ์™ธ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ค‘์‹œ

Alan Kay๋Š” ์ •์  ํƒ€์ž… ์–ธ์–ด์— ๋ฐ˜๋Œ€ํ•œ๋‹ค, ์ด๋ฅธ ๋ฐ”์ธ๋”ฉ์— ๋ฐ˜๋Œ€ํ•œ๋‹ค.

  • smalltalk์˜ ๋ชจ๋“  ๊ฒƒ์€ ๋Šฆ์€ ๋ฐ”์ธ๋”ฉ
  • ๋ชจ๋“  ๊ฒƒ์ด ๋™์ ์ด๊ธฐ ๋•Œ๋ฌธ
  • ํŠนํžˆ alan kay๋Š” ๋ชจ๋“  ๊ฒƒ์— ๊ทน๋„๋กœ ๋Šฆ์€ ๋ฐ”์ธ๋”ฉ์„ ์›ํ–ˆ์Œ
  • ์ธํ„ฐ๋ทฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ๋ณด๋ฉด alan kay๊ฐ€ ์ •์  ํƒ€์ž…์— ๋ฐ˜๋Œ€ํ•œ ๊ฒƒ์ด ์•„๋‹˜
  • ๋‹ค๋งŒ ์ •์  ํƒ€์ž… ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํž˜๋“ค์—ˆ๋‹ค๊ณ  ํ•จ, ๋‚˜๋Š” ์‹ซ์—ˆ๋‹ค๊ฐ€ ์ „๋ถ€

๋™์  ํƒ€์ž…์˜ ๋ฌธ์ œ

  • ์‹ค์ˆ˜๋ฅผ ์œ ๋ฐœํ•œ๋‹ค.
  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹ค์ˆ˜๋ฅผ ์žก์•„์ค„ ์ˆ˜ ์—†๋‹ค.

Reference