[Lisp] ํด๋ž˜์Šค

[์›๋ณธ ๋งํฌ]

๋†€๋ž๊ฒŒ๋„ ๋ฆฌ์Šต์€ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
์ข€ ํ˜•ํƒœ๊ฐ€ ๊ธฐ๊ดดํ•˜๊ธด ํ•˜๋‹ค๋งŒ

๋ฆฌ์Šต์—์„œ ํด๋ž˜์Šค๋Š” defclass๋ผ๋Š” ํ•จ์ˆ˜๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
(defclass ํด๋ž˜์Šค๋ช… (์Šˆํผํด๋ž˜์Šค๋ช…)
**ย ย ย  (๋ฉค๋ฒ„๋“ค...)**
**ย ย ย  (ํด๋ž˜์Šค์˜ต์…˜...)**
)

๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ƒ์„ฑ์€ make-instance ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. image

image ์ด์ƒํ•˜๊ธดํ•œ๋ฐ ์‹คํ–‰์€ ๋œ๋‹ค.

๊ทผ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
x์™€ y๋ฅผ ๋ฉค๋ฒ„๋กœ ๋‘๊ธด ํ–ˆ๋Š”๋ฐ, ์ €๊ธฐ์— ์ ‘๊ทผํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค...

์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ณ„๋„์˜ ์†์„ฑ์„ ๋ถ™์—ฌ์ค˜์•ผํ•œ๋‹ค.
๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ :accessor๋‹ค.
๊ฐ ์†์„ฑ์„ ์†Œ๊ด„ํ˜ธ๋กœ ๋‹ค์‹œ ๋ถ„๋ฆฌํ•ด์„œ, :accessor์™€ ์ ‘๊ทผํ•จ์ˆ˜๋ช…์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ์ง€์ •ํ•œ ์ด๋ฆ„์œผ๋กœ ์™ธ๋ถ€์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. image

image ์ฐธ๊ณ ๋กœ ์ฝœ๋ก (:)์€ ์ € ์†์„ฑ ์•ž์— ๋”ฑ ๋ถ™์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋ฉ”์„œ๋“œ์˜ ์ •์˜๋Š” defmethod ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
(defmethod ๋ฉ”์„œ๋“œ๋ช… ((object ํด๋ž˜์Šค๋ช…))
**ย ย ย  (๋ฐ˜ํ™˜์‹)**
)

์ถœ๋ ฅ๋งŒ ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฉ”์„œ๋“œ print-point๋ฅผ ์ •์˜ํ•œ ์ฝ”๋“œ๋‹ค. image

image

์ด์ œ๊ป ์†์œผ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ดˆ๊ธฐํ™”ํ–ˆ์ง€๋งŒ, ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์†์„ฑ์€ initform์ด๋‹ค. image

image

initarg๋กœ ์ƒ์„ฑ์‹œ ํ˜ธ์ถœ๋  ์ด๋ฆ„์„ ๋“ฑ๋กํ•˜๋ฉด, make-instance๋กœ ์ƒ์„ฑํ• ๋•Œ ์ธ์ž๋ฅผ ๋„˜๊ฒจ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค.
์ด๋ฆ„์€ ์ฝœ๋ก ์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค. image

image


์ƒ์†๋ฐ›๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. x, y์— ๋”ํ•ด z๊นŒ์ง€ ๊ฐ–๋Š” ํด๋ž˜์Šค Point3๋ฅผ ํ™•์žฅํ•ด๋ณธ๋‹ค. image

image Point3๋ผ๋Š” ๋ณ„๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ๋์ง€๋งŒ ์—ฌ์ „ํžˆ Point์˜ ๋ฉ”์„œ๋“œ๋‚˜ ์ ‘๊ทผ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


์ฐธ๊ณ 
https://www.tutorialspoint.com/lisp/lisp_clos.htm
http://www.gigamonkeys.com/book/object-reorientation-classes.html