SlideShare a Scribd company logo
1 of 50
Download to read offline
Scala generic ํ‘œํ˜„
abstract type, bounded type,
type variance
myjlms99@gmail.com
์ถ”์ƒ ํƒ€์ž…
abstract type
Abstract type
์ถ”์ƒํƒ€์ž…์€ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…์„ธ
์ด๋‹ค. ์ถ”์ƒ ํƒ€์ž…์€ ๋ณดํŽธ์ ์œผ๋กœ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ฆ‰
ํ—ˆ์šฉ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ํƒ€์ž… ๋งค
๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
ํŠธ๋ ˆ์ดํŠธ ๋‚ด๋ถ€์— type ํ‚ค
์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ถ”์ƒํƒ€์ž…
์„ ์–ธ
์ถ”์ƒํƒ€์ž…์„ ์ง€์ •ํ•œ ๊ฒƒ์„
์ƒ์†ํ•˜๊ณ  ์ด์— ๋ช…ํ™•ํ•œ ํƒ€
์ž…์„ ์ง€์ •ํ•˜๊ณ  ํด๋ž˜์Šค๊นŒ์ง€
๋งŒ๋“ฆ
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜
type parameter
ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ€๋Šฅํ•œ ๊ณณ
4๊ฐœ์˜ ๋Œ€ํ‘œ์ ์ธ ๊ณณ์— ํƒ€์ž…์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ
๋‹ค.
class
trait
function
method
ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ํ‘œ๊ธฐ๋ฒ•
4๊ฐœ์˜ ๋Œ€ํ‘œ์ ์ธ ๊ณณ์— ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ด๋ถ€
์— ํƒ€์ž…์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
class/trait/function/method[ํƒ€์ž…์ธ์ž]
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฏธ์‚ฌ์šฉ ์ฒ˜๋ฆฌ
์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์œ„ ํƒ€์ž…์— ํ•˜์œ„ ํƒ€์ž…์„ ์ง€์ •
ํ•ด์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ํŠน์ •ํ•œ ํด๋ž˜์Šค๊ฐ€
์•„๋‹Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋œ๋‹ค
ํด๋ž˜์Šค ๋ช…๊ณผ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜
๋ช…์ด ๊ฐ™์ง€๋งŒ ์‹ค์ œ ํƒ€์ž…๋งค๊ฐœ
๋ณ€์ˆ˜๋Š” ๋‹จ์ˆœํžˆ ์ธ์ž๋ฅผ ๋ฐ›๋Š”
๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์ข…๋ฅ˜
ํƒ€์ž… ๊ฐ€๋ณ€์„ฑ์„ ์ง€์ •ํ•˜๋ฉด ๊ทธ ํƒ€์ž…์˜ ์ƒ์†๊ด€๊ณ„
๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๋ช…ํ™•ํ•œ ํƒ€์ž…์„ ์ถ”๊ฐ€
์ ์œผ๋กœ ์ง€์ •ํ•˜๊ณ ์ž ํ•˜๋ฉด ๊ฒฝ๊ณ„ ํƒ€์ž…์„ ์ง€์ •ํ•ด
์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฒฝ๊ณ„๊ฐ€ ์žˆ๋Š” ํƒ€์ž… : Bounded type
=> ์ œํ•œ์  ์ฒ˜๋ฆฌ, ํƒ€์ž…์ด ์–ด๋Š ๋ฒ”์ฃผ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”
ํƒ€์ž… ๋ณ€์„ฑ : type variance
=> ๊ฒฝ๊ณ„ ํƒ€์ž…๋ณด๋‹ค ๋œ ์ œํ•œ์  ์ฒ˜๋ฆฌ, ์ฃผ๋กœ ํƒ€์ž… ์น˜ํ™˜
Type Parameter
์ง€์ •ํ•˜๊ธฐ
์ œ๋„ˆ๋ฆญ ํด๋ž˜์Šค
ํ•˜๋‚˜ ์ด์ƒ์˜ ํƒ€์ž…์ธ์ž๊ฐ€ ์žˆ๋Š” ํด๋ž˜์Šค๋Š” โ€˜์ œ
๋„ค๋ฆญ ํด๋ž˜์Šคโ€™์ด๊ณ  ํƒ€์ž…์ธ์ž๋ฅผ ์‹ค์ œ ํƒ€์ž…์œผ
๋กœ ๋Œ€์ฒดํ•˜๋ฉด ์ผ๋ฐ˜ ํด๋ž˜์Šค์ด๋‹ค.
์ƒ์„ฑ์ž์— ์ถ”๋ก ์„ ํ•˜๊ฑฐ๋‚˜
๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •
์ œ๋„ˆ๋ฆญ ํ•จ์ˆ˜
ํƒ€์ž…์ธ์ž๋ฅผ ์ด์šฉํ•ด์„œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‹ค์–‘
ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค
ํ•จ์ˆ˜์— ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์ฃผ์˜ ์‚ฌํ•ญ
ํ•จ์ˆ˜์— ํƒ€์ž…์ธ์ž๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹ค์ œ ๋กœ์ง์—์„œ ํ•จ์ˆ˜
์˜ ์—ฐ์‚ฐ์ž ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹ค์ œ ์ธ์‹์„ ํ•˜์ง€ ๋ชปํ•˜๋ฏ€
๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
Type variance
์ƒ์†๊ด€๊ณ„๋กœ ์ œํ•œํ•˜๊ธฐ
๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๊ณต๋ณ€์„ฑ
๊ณต๋ณ€์„ฑ์€ ์ž์‹ ํƒ€์ž…์œผ๋กœ ์น˜ํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ณ 
๋ฐ˜๊ณต๋ณ€์„ฑ์€ ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์น˜ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋ฌด๊ณต๋ณ€์„ฑ์€ ์ง€์ •๋œ ํƒ€์ž…์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.
์ƒ์†์— ๋”ฐ๋ฅธ ๋ณ€์„ฑ
ํƒ€์ž…์‹œ์Šคํ…œ์„ ์ดํ•ด ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ƒ์†์— ๋‹ค๋ฅธ ๋ณ€์„ฑ(variance)์„ ์ดํ•ด
ํ•ด์•ผ ํ•œ๋‹ค.
๋ฌด๊ณต๋ณ€์„ฑ
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์„ ์„ ์–ธํ•  ๊ฒฝ์šฐ ์‹ค์ œ ์ธ์Šคํ„ด
์Šค ์ƒ์„ฑํ•  ๋•Œ ํƒ€์ž…์ด ํ•œ์ •๋˜๋ฉด ์ƒ์†๊ด€๊ณ„์™€
์ƒ๊ด€์—†์ด ํ•œ์ •๋˜์–ด ์ฒ˜๋ฆฌ๋œ๋‹ค.
class ํด๋ž˜์Šค๋ช…[ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜]
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ œ
์•ฝ์ด ์—†๋‹ค
๋ณ€ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ
์ฃผ์–ด์ง„ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ๋งŒ ๊ฒฐ์ •๋˜์–ด
์ฒ˜๋ฆฌ๋œ๋‹ค.
๋ณ€ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ํ• ๋‹น
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•  ๊ฒฝ์šฐ ์‹ค์ œ ์ƒ์œ„
ํด๋ž˜์Šค ๋‚ด์— ํ•˜์œ„ํด๋ž˜์Šค๋กœ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ ๋ช…
ํ™•ํžˆ ํด๋ž˜์Šค๋“ค์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค.
ํƒ€์ž… ๋ณ€์„ฑ ์ฒ˜๋ฆฌ ๊ธฐ์ค€
์ผ๋ฐ˜์ ์œผ๋กœ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ๋•Œ๋Š” ํด
๋ž˜์Šค์™€ ๋ฐ˜ํ™˜๊ฐ’, ๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜ ๋“ฑ์„ ๊ตฌ๋ถ„ํ•ด์„œ
ํƒ€์ž… ๊ฐ€๋ณ€์„ฑ์„ ํ‘œ์‹œํ•˜๋ฉฐ, "์ œ๋„ค๋ฆญ ์œ ํ˜•"๊ฐœ๋…์ด
๋ฉฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™” ๋œ ์œ ํ˜•์„ ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌํ•  ์ˆ˜
์žˆ๋Š” ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค
๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜๋Š” ๋ฐ˜๊ณต๋ณ€์„ฑ
ํด๋ž˜์Šค ์ •์˜ ๋ฐ ๋ฐ˜ํ™˜๊ฐ’์€ ๊ณต๋ณ€์„ฑ
ํƒ€์ž…๋ณ€์„ฑ ์ฒ˜๋ฆฌ๊ธฐ์ค€
๊ณต๋ณ€์„ฑ์€ ํ˜„์žฌ ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๊ธฐ
์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ˜๊ณต๋ณ€์„ฑ์€ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ
๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๋ณ€์ˆ˜ ํ• ๋‹น์€ ๊ณต๋ณ€์„ฑ ์ฒ˜๋ฆฌ
ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ๋Œ€ ํƒ€์ž… ๋ฒ ๋ฆฌ์–ธ์Šค๋กœ ์ฒ˜๋ฆฌ
ํ•ด์•ผ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ง€์ •๋œ ๋ณ€์ˆ˜์— ํ• ๋‹น์ด
๊ฐ€๋Šฅํ•˜๋‹ค.
๋ถ€๋ชจํด๋ž˜์Šค
์ž์‹ํด๋ž˜์Šค
๊ณต๋ณ€์„ฑ์€ ๋ถ€๋ชจ
ํด๋ž˜์Šค๋กœ ์ง€์ •
๋œ ๊ฒƒ์„ ์ž์‹
ํด๋ž˜์Šค๋กœ ๋Œ€์ž…
ํ•ด๋„ ์ฒ˜๋ฆฌ๋œ๋‹ค.
ํƒ€์ž…๋ณ€์„ฑ : ๊ณต๋ณ€์„ฑ ์‚ฌ์šฉ
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ํƒ€์ž…๋ณ€์„ฑ์„ ๊ณต๋ณ€์„ฑ์œผ๋กœ
์ง€์ •ํ•˜๋ฉด ๋ณธ์ธ๋ถ€ํ„ฐ ํ•˜์œ„ ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ
๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ๋„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
์„œ๋ธŒํƒ€์ž…์ด ๊ธฐ๋ณธํƒ€์ž…์˜
๋ณ€์ˆ˜์— ํ• ๋‹น์ด ๋˜์—ˆ๋‹ค
๋ณ€์ˆ˜ ํ• ๋‹น์„ ๋‘ ๊ฐœ ๋™์‹œ ์‚ฌ์šฉ
๋ฐ”์šด๋“œ ํƒ€์ž…๊ณผ ํƒ€์ž…๋ณ€์„ฑ์„ ๋‹ค ์‚ฌ์šฉํ•ด์„œ ์ฒ˜
๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŠน์ •ํ•ด์„œ
์ œํ•œํ•˜๊ธฐ(Bounded Type)
ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์ œํ•œํ•˜๊ธฐ
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ๋•Œ ๋‹คํ˜•์„ฑ์— ๋Œ€ํ•œ
ํŠน์ • ๊ฒฝ๊ณ„๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŠน์ • ์ƒ์† ๊ด€๊ณ„์˜ ํƒ€์ž…
๋งค๊ฐœ๋ณ€์ˆ˜(๋ณ€์„ฑ ์ง€์ •)
ํŠน์ • ๋ฒ”์œ„ ์ œํ•œ ํƒ€์ž…
<:
>:
<%
:
ํŠน์ • ๋ฒ”์œ„ ์ œํ•œ์„ ์œ„ํ•œ ์—ฐ
์‚ฐ
Bounded type ์‚ฌ์šฉ ์ด์œ  1
๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•œ ํƒ€์ž…์ด๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ• 
๋•Œ, ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์ธ ๋ฐ”์šด๋“œ
๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
Bounded type ์‚ฌ์šฉ ์ด์œ  2
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํŠน์ • ํƒ€์ž…์œผ๋กœ ์ธ์‹์ด ํ•„
์š”ํ•˜๋ฏ€๋กœ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜
์Šค๋ฅผ ํ•œ์ •ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
์ƒ์œ„ Bound ์ดํ•ดํ•˜๊ธฐ
์ƒ์œ„๊ฒฝ๊ณ„์™€ ํ•˜์œ„๊ฒฝ๊ณ„
์ƒ์œ„๊ฒฝ๊ณ„๊ณผ ํ•˜์œ„๊ฒฝ๊ณ„๋Š” ์ •ํ•ด์ง„ ๊ฒฝ๊ณ„๋ฅผ ์ค‘
์‹ฌ์œผ๋กœ ์ƒ์œ„ ํƒ€์ž…๊ณผ ํ•˜์œ„ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
์ƒ์œ„๊ฒฝ๊ณ„ [ T <: A] ๋กœ ํ‘œ์‹œ ํ•ด๋‹น A ํƒ€์ž…๊ณผ ๊ทธ ํ•˜์œ„ ํƒ€์ž…๋“ค์„ ํฌํ•จํ•ด
์„œ ์ฒ˜๋ฆฌ
Upper Bound (T <: Pet) : T๋Š” ์ ์–ด๋„ Pet ํด๋ž˜์Šค ๋‚˜ Pet์˜ ํ•˜์œ„ ํด๋ž˜
์Šค๋ฅผ ์ƒ์† ํ•œ ๋ชจ๋“  ํด๋ž˜์Šค์— ์ ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ƒ์œ„๊ฒฝ๊ณ„: upper bound 1
ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ƒ์†์„ ํ•œ๋‹ค. ์‹ค์ œ ์ฒ˜
๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค ๋‚ด์˜ ๋ฉ”์†Œ๋“œ ๋‚ด์— ์ƒ์œ„๊ฒฝ๊ณ„
๋ฅผ ์ง€์ •ํ•œ๋‹ค
์ƒ์œ„๊ฒฝ๊ณ„: upper bound 2
์ƒ์œ„ ๊ฒฝ๊ณ„๋ฅผ ์ตœ์ƒ์œ„ A ํด๋ž˜์Šค๋กœ ์ง€์ •ํ•˜์ง€
์•Š์•„์„œ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์˜ˆ์™ธ๊ฐ€
๋ฐœ์ƒํ•œ๋‹ค.
๋ณ€์ˆ˜ ํ• ๋‹น์— bounded type 1
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ํƒ€์ž… ๋ฐ”์šด๋“œ๋กœ ์ง€์ •ํ•  ๊ฒฝ
์šฐ๋Š” ์‹ค์ œ ํ•˜์œ„ํƒ€์ž…์ด ์ƒ์œ„ํƒ€์ž…์— ๋งž์ถฐ ๋ณ€
ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Bounded type ์œผ๋กœ
์ง€์ •ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜ ํ• 
๋‹น์—๋Š” ๊ณต๋ณ€์„ฑ์ด ํ•„
์š”ํ•˜๋‹ค.
๋ณ€์ˆ˜ ํ• ๋‹น์— bounded type 2
์œ„ ํŽ˜์ด์ง€์ด ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ€
์ž… ๊ณต๋ณ€์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
๊ณต๋ณ€์„ฑ์„ ์ง€์ •ํ•ด์„œ
์ƒ์†๊ด€๊ณ„๋ฅผ ์ง€์ •ํ•˜
๊ณ  ํŠน์ • ํด๋ž˜์Šค๋กœ
๋ฐ”์šด๋“œ๋ฅผ ์ง€์ •ํ•ด์„œ
์ฒ˜๋ฆฌํ•˜๋ฉด ๋ณ€์ˆ˜์— ์ง€
์ •ํ•ด์„œ ์ฒ˜๋ฆฌ
ํ•จ์ˆ˜ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŠน์ •ํ™”ํ•˜๊ธฐ
์ œ๋„ˆ๋ฆญ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋ณด๋‹ค ํŠน์ • ํƒ€์ž…์„
์ง€์ •ํ•ด์„œ ์ง€์ • ๋ฒ”์œ„ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด
์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฉ”์†Œ๋“œ์— bounded type
๋ฉ”์†Œ๋“œ ๋‚ด์˜ ํŠน์ • ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ
๊ทธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŠน์ • ๊ฒฝ๊ณ„๋กœ ํ•œ์ •ํ•˜๋ฉด ์‹ค์ œ
๊ทธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•จ์ˆ˜์—์„œ ์ƒ์œ„๊ฒฝ๊ณ„: upper bound
<: ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผํ•  ๋•Œ
๊ณต๋ณ€์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
์ƒ์œ„๊ฒฝ๊ณ„๋Š”
invariant์—์„œ๋งŒ
๊ฐ€๋Šฅ
ํ•จ์ˆ˜์—์„œ ์ƒ์œ„๊ฒฝ๊ณ„์— ์ƒ์œ„ ํด๋ž˜์Šค
์ง€์ •
<: ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผ ๋ถ€์—ฌ
ํ•˜๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ
ํ•˜๋‹ค.
์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜
๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค์— ๋Œ€
ํ•œ ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜
ํ•˜์œ„ Bound ์ดํ•ดํ•˜๊ธฐ
ํ•˜์œ„๊ฒฝ๊ณ„
ํ•˜์œ„๊ฒฝ๊ณ„๋Š” ์ •ํ•ด์ง„ ๊ฒฝ๊ณ„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒ์œ„
ํƒ€์ž…๊ณผ ํ•˜์œ„ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
ํ•˜์œ„๊ฒฝ๊ณ„ [ T >: A] ๋กœ ํ‘œ์‹œ ํ•ด๋‹น A ํƒ€์ž…๊ณผ ๊ทธ ์ƒ์œ„ ํƒ€์ž…๋“ค์„ ํฌํ•จํ•ด
์„œ ์ฒ˜๋ฆฌ
Lower Bound (T >: Pet) : T๋Š” Pet ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค ์ค‘ ์ ์–ด๋„
ํ•˜๋‚˜๋ฅผ ์ƒ์†๋ฐ›์€ ๋ชจ๋“  ํด๋ž˜์Šค์— ์ ์šฉ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์œ„๊ฒฝ๊ณ„ ์ดํ•ดํ•˜๊ธฐ
>: ๋กœ ์ง€์ •ํ•˜๋ฉด ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜๋ฉด ์‹ค์ œ
ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋œ ๋ชจ
๋“  ๊ฒƒ์ด ํ•ด๋‹นํ•˜๋ฏ€๋กœ ์ˆซ์ž๋ง๊ณ ๋„ ๋ฌธ์ž์—ด๋„ ์ฒ˜
๋ฆฌ๋œ๋‹ค.
ํ•˜์œ„๊ฒฝ๊ณ„ ์ดํ•ดํ•˜๊ธฐ
>: ๋กœ ์ง€์ •ํ•˜๋ฉด ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜๋ฉด ์‹ค์ œ
ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋œ ๋ชจ
๋“  ๊ฒƒ์ด ํ•ด๋‹นํ•˜๋ฏ€๋กœ ์ˆซ์ž๋ง๊ณ ๋„ ๋ฌธ์ž์—ด๋„ ์ฒ˜
๋ฆฌ๋œ๋‹ค.
ํ•˜์œ„๊ฒฝ๊ณ„: lower bound
>: ๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผ ๋ถ€์—ฌํ•˜
๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
์ผ๋‹จ AnyVal๋กœ ์ง€์ •ํ•˜๊ณ  Long ์ž๋ฃŒํ˜•์„ ๋„ฃ์–ด
์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์œ„๊ฒฝ๊ณ„: lower bound
>: ๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผ ๋ถ€์—ฌํ•˜
๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
์ผ๋‹จ String์œผ๋กœ ์ฒ˜๋ฆฌํ•ด๋„ ํ•ด๋‹น ํƒ€์ž…๋„ ์ฒ˜๋ฆฌ๊ฐ€
๋œ๋‹ค.
๋ทฐ Bound ์ดํ•ดํ•˜๊ธฐ
๋ทฐ ๊ฒฝ๊ณ„
๋ทฐ ๋ฐ”์šด๋“œ (view bound)๋Š” ์–ด๋–ค ํƒ€์ž… A๋ฅผ
๋งˆ์น˜ ์–ด๋–ค ํƒ€์ž… T (์‹ค์ œ ํƒ€์ž…)์ฒ˜๋Ÿผ ์‚ฌ์šฉํ• 
์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” Scala์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.
๋ทฐ ๊ฒฝ๊ณ„ [ T <% A] ๋กœ ํ‘œ์‹œ ์–ด๋–ค ํƒ€์ž…์„ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ โ€œ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€โ€
๋ฅผ ์ง€์ •ํ•œ๋‹ค
ํด๋ž˜์Šค์— ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ •
๋ทฐ ๊ฒฝ๊ณ„๋Š” ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •๋œ ํƒ€์ž…
์œผ๋กœ ์ธ์ •ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.
ํ•จ์ˆ˜์— ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ •
<% ๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ์•”
๋ฌต์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด์„œ ์ฒ˜๋ฆฌ
์ปจํ…์ŠคํŠธ Bound ์ดํ•ดํ•˜๊ธฐ
์ปจํ…์ŠคํŠธ ๊ฒฝ๊ณ„
์ปจํ…ํŠธ์Šค ๊ฒฝ๊ณ„๋Š” T : M์œผ๋กœ ์“ฐ์—ฌ์ง„๋‹ค. M [T]
์— ๋Œ€ํ•œ ์•”๋ฌต์ ์ธ ๊ฐ’์˜ ์กด์žฌ๋ฅผ ํ•„์š”๋กœํ•œ๋‹ค.
์ปจํ…์ŠคํŠธ ๊ฒฝ๊ณ„ [ T : A] ๋กœ ํ‘œ์‹œ ํ•ด๋‹น A ํƒ€์ž…๊ณผ ๊ทธ ์ƒ์œ„ ํƒ€์ž…๋“ค์„ ํฌํ•จ
ํ•ด์„œ ์ฒ˜๋ฆฌ
์ปจํ…์ŠคํŠธ ๋ฐ”์šด๋“œ๋Š” ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํƒ€์ž… ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์ œ์•ฝ ์กฐ๊ฑด
์ด๋‹ค
์ปจํ…์ŠคํŠธ ๋ฐ”์šด๋“œ๋Š” ๋ทฐ ๋ฐ”์ธ๋”ฉ์˜ ์•”์‹œ์  ๋ณ€ํ™˜ ๋Œ€์‹  ์•”์‹œ์  ๊ฐ’์„ ์„ค๋ช…
ํ•ฉ๋‹ˆ๋‹ค
context bound๋Š” ์•”์‹œ์ ์ธ ๊ฐ’์˜ ์กด์žฌ๋ฅผ ์ฃผ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค
์ปจํ…์ŠคํŠธ ๋ฐ”์šด๋“œ
ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ํ•จ์ˆ˜์— ์ปจํ…์ŠคํŠธ
๋ฐ”์šด๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์ด ๋‚ด๋ถ€์— ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ
์ถœํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ

More Related Content

What's hot

Scala companion object
Scala companion objectScala companion object
Scala companion objectYong Joon Moon
ย 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritanceYong Joon Moon
ย 
Scala trait usage
Scala trait usageScala trait usage
Scala trait usageYong Joon Moon
ย 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong Joon Moon
ย 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processingYong Joon Moon
ย 
JavaScript Fundermetal
JavaScript FundermetalJavaScript Fundermetal
JavaScript FundermetalKwangho SEO
ย 
Java generics
Java genericsJava generics
Java genericsJaesup Kwak
ย 
Start IoT with JavaScript - 1.๊ธฐ์ดˆ
Start IoT with JavaScript - 1.๊ธฐ์ดˆStart IoT with JavaScript - 1.๊ธฐ์ดˆ
Start IoT with JavaScript - 1.๊ธฐ์ดˆPark Jonggun
ย 
์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅ
์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅ์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅ
์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅJinhwa Hong
ย 
แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6
แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6
แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6๋ฏผํƒœ ๊น€
ย 
Start IoT with JavaScript - 6.ํ•จ์ˆ˜
Start IoT with JavaScript - 6.ํ•จ์ˆ˜Start IoT with JavaScript - 6.ํ•จ์ˆ˜
Start IoT with JavaScript - 6.ํ•จ์ˆ˜Park Jonggun
ย 
Start IoT with JavaScript - 5.๊ฐ์ฒด2
Start IoT with JavaScript - 5.๊ฐ์ฒด2Start IoT with JavaScript - 5.๊ฐ์ฒด2
Start IoT with JavaScript - 5.๊ฐ์ฒด2Park Jonggun
ย 
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉํ•ด๊ฐ•
ย 
Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)
Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)
Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)์žฌ์˜ ์ด
ย 
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)์ต์„ฑ ์กฐ
ย 
๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””
๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””
๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””quxn6
ย 
ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰
ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰
ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰Yong Joon Moon
ย 
Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…
Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…
Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…Park Jonggun
ย 
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””quxn6
ย 

What's hot (20)

Scala companion object
Scala companion objectScala companion object
Scala companion object
ย 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
ย 
Scala trait usage
Scala trait usageScala trait usage
Scala trait usage
ย 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
ย 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
ย 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy
ย 
JavaScript Fundermetal
JavaScript FundermetalJavaScript Fundermetal
JavaScript Fundermetal
ย 
Java generics
Java genericsJava generics
Java generics
ย 
Start IoT with JavaScript - 1.๊ธฐ์ดˆ
Start IoT with JavaScript - 1.๊ธฐ์ดˆStart IoT with JavaScript - 1.๊ธฐ์ดˆ
Start IoT with JavaScript - 1.๊ธฐ์ดˆ
ย 
์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅ
์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅ์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅ
์ƒ์ฝ”์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šคํ„ฐ๋””3์žฅ
ย 
แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6
แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6
แ„‡แ…ตแ„€แ…ขแ„‡แ…กแ†ฏแ„Œแ…กแ„…แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ Javascript แ„‹แ…กแ†ฏแ„‹แ…กแ„€แ…กแ„€แ…ต #6
ย 
Start IoT with JavaScript - 6.ํ•จ์ˆ˜
Start IoT with JavaScript - 6.ํ•จ์ˆ˜Start IoT with JavaScript - 6.ํ•จ์ˆ˜
Start IoT with JavaScript - 6.ํ•จ์ˆ˜
ย 
Start IoT with JavaScript - 5.๊ฐ์ฒด2
Start IoT with JavaScript - 5.๊ฐ์ฒด2Start IoT with JavaScript - 5.๊ฐ์ฒด2
Start IoT with JavaScript - 5.๊ฐ์ฒด2
ย 
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
[์•„๊ฟˆ์‚ฌ] The C++ Programming Language 11์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
ย 
Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)
Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)
Ruby - 6th (๋ฃจ๋น„ 6์žฅ ๋ณ€์ˆ˜์™€ ์‹)
ย 
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)
์ดํŽ™ํ‹ฐ๋ธŒ C++ (7~9)
ย 
๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””
๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””
๋ชจ์–ด ์ดํŽ™ํ‹ฐ๋ธŒ c++ 1,2์žฅ ์Šคํ„ฐ๋””
ย 
ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰
ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰
ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰
ย 
Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…
Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…
Start IoT with JavaScript - 7.ํ”„๋กœํ† ํƒ€์ž…
ย 
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””
์ดํŽ™ํ‹ฐ๋ธŒ C++ ์Šคํ„ฐ๋””
ย 

More from Yong Joon Moon

rust ownership
rust ownership rust ownership
rust ownership Yong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตYong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตYong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตYong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต Yong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธYong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตYong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐYong Joon Moon
ย 
ํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐ
ํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐ
ํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐYong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตYong Joon Moon
ย 
ํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐ
ํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐ
ํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐYong Joon Moon
ย 
Python+numpy pandas 4แ„‘แ…งแ†ซ
Python+numpy pandas 4แ„‘แ…งแ†ซPython+numpy pandas 4แ„‘แ…งแ†ซ
Python+numpy pandas 4แ„‘แ…งแ†ซYong Joon Moon
ย 
Python+numpy pandas 3แ„‘แ…งแ†ซ
Python+numpy pandas 3แ„‘แ…งแ†ซPython+numpy pandas 3แ„‘แ…งแ†ซ
Python+numpy pandas 3แ„‘แ…งแ†ซYong Joon Moon
ย 
Python+numpy pandas 2แ„‘แ…งแ†ซ
Python+numpy pandas 2แ„‘แ…งแ†ซPython+numpy pandas 2แ„‘แ…งแ†ซ
Python+numpy pandas 2แ„‘แ…งแ†ซYong Joon Moon
ย 
Python+numpy pandas 1แ„‘แ…งแ†ซ
Python+numpy pandas 1แ„‘แ…งแ†ซPython+numpy pandas 1แ„‘แ…งแ†ซ
Python+numpy pandas 1แ„‘แ…งแ†ซYong Joon Moon
ย 
ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆ
ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆ
ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆYong Joon Moon
ย 
แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ
แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ
แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ Yong Joon Moon
ย 

More from Yong Joon Moon (17)

rust ownership
rust ownership rust ownership
rust ownership
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„Œแ…ก แ„‰แ…ขแ†ผแ„‰แ…ฅแ†ผแ„Œแ…ก แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ„…แ…ฉแ„‘แ…ฅแ„แ…ต แ„ƒแ…ตแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ฅ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„†แ…ฎแ†ซแ„Œแ…กแ„‹แ…งแ†ฏ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‘แ…ณแ†ฏแ„…แ…กแ„‰แ…ณแ„แ…ณ แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ แ„‚แ…ขแ„‡แ…ฎ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Xml แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ class ๋ฐ function namespace ์ดํ•ดํ•˜๊ธฐ
ย 
ํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐ
ํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐ
ํŒŒ์ด์ฌ ์—‘์…€_csv ์ฒ˜๋ฆฌํ•˜๊ธฐ
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ตแ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ Special method แ„‹แ…ตแ„’แ…ขแ„’แ…กแ„€แ…ต
ย 
ํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐ
ํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐ
ํŒŒ์ด์ฌ ํŒŒ์ผ์ฒ˜๋ฆฌ ์ดํ•ดํ•˜๊ธฐ
ย 
Python+numpy pandas 4แ„‘แ…งแ†ซ
Python+numpy pandas 4แ„‘แ…งแ†ซPython+numpy pandas 4แ„‘แ…งแ†ซ
Python+numpy pandas 4แ„‘แ…งแ†ซ
ย 
Python+numpy pandas 3แ„‘แ…งแ†ซ
Python+numpy pandas 3แ„‘แ…งแ†ซPython+numpy pandas 3แ„‘แ…งแ†ซ
Python+numpy pandas 3แ„‘แ…งแ†ซ
ย 
Python+numpy pandas 2แ„‘แ…งแ†ซ
Python+numpy pandas 2แ„‘แ…งแ†ซPython+numpy pandas 2แ„‘แ…งแ†ซ
Python+numpy pandas 2แ„‘แ…งแ†ซ
ย 
Python+numpy pandas 1แ„‘แ…งแ†ซ
Python+numpy pandas 1แ„‘แ…งแ†ซPython+numpy pandas 1แ„‘แ…งแ†ซ
Python+numpy pandas 1แ„‘แ…งแ†ซ
ย 
ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆ
ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆ
ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋“ˆ
ย 
แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ
แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ
แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅแ„‹แ…ช แ„‹แ…ตแ†ซแ„†แ…ฎแ†ซแ„’แ…กแ†จ
ย 

Scala type args

  • 1. Scala generic ํ‘œํ˜„ abstract type, bounded type, type variance myjlms99@gmail.com
  • 3. Abstract type ์ถ”์ƒํƒ€์ž…์€ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…์„ธ ์ด๋‹ค. ์ถ”์ƒ ํƒ€์ž…์€ ๋ณดํŽธ์ ์œผ๋กœ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ฆ‰ ํ—ˆ์šฉ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ํƒ€์ž… ๋งค ๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ํŠธ๋ ˆ์ดํŠธ ๋‚ด๋ถ€์— type ํ‚ค ์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ถ”์ƒํƒ€์ž… ์„ ์–ธ ์ถ”์ƒํƒ€์ž…์„ ์ง€์ •ํ•œ ๊ฒƒ์„ ์ƒ์†ํ•˜๊ณ  ์ด์— ๋ช…ํ™•ํ•œ ํƒ€ ์ž…์„ ์ง€์ •ํ•˜๊ณ  ํด๋ž˜์Šค๊นŒ์ง€ ๋งŒ๋“ฆ
  • 5. ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ€๋Šฅํ•œ ๊ณณ 4๊ฐœ์˜ ๋Œ€ํ‘œ์ ์ธ ๊ณณ์— ํƒ€์ž…์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ ๋‹ค. class trait function method
  • 6. ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ํ‘œ๊ธฐ๋ฒ• 4๊ฐœ์˜ ๋Œ€ํ‘œ์ ์ธ ๊ณณ์— ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ด๋ถ€ ์— ํƒ€์ž…์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. class/trait/function/method[ํƒ€์ž…์ธ์ž]
  • 7. ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฏธ์‚ฌ์šฉ ์ฒ˜๋ฆฌ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์œ„ ํƒ€์ž…์— ํ•˜์œ„ ํƒ€์ž…์„ ์ง€์ • ํ•ด์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 8. ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ํŠน์ •ํ•œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋œ๋‹ค ํด๋ž˜์Šค ๋ช…๊ณผ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ช…์ด ๊ฐ™์ง€๋งŒ ์‹ค์ œ ํƒ€์ž…๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๋‹จ์ˆœํžˆ ์ธ์ž๋ฅผ ๋ฐ›๋Š” ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • 9. ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์ข…๋ฅ˜ ํƒ€์ž… ๊ฐ€๋ณ€์„ฑ์„ ์ง€์ •ํ•˜๋ฉด ๊ทธ ํƒ€์ž…์˜ ์ƒ์†๊ด€๊ณ„ ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๋ช…ํ™•ํ•œ ํƒ€์ž…์„ ์ถ”๊ฐ€ ์ ์œผ๋กœ ์ง€์ •ํ•˜๊ณ ์ž ํ•˜๋ฉด ๊ฒฝ๊ณ„ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ๊ณ„๊ฐ€ ์žˆ๋Š” ํƒ€์ž… : Bounded type => ์ œํ•œ์  ์ฒ˜๋ฆฌ, ํƒ€์ž…์ด ์–ด๋Š ๋ฒ”์ฃผ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š” ํƒ€์ž… ๋ณ€์„ฑ : type variance => ๊ฒฝ๊ณ„ ํƒ€์ž…๋ณด๋‹ค ๋œ ์ œํ•œ์  ์ฒ˜๋ฆฌ, ์ฃผ๋กœ ํƒ€์ž… ์น˜ํ™˜
  • 11. ์ œ๋„ˆ๋ฆญ ํด๋ž˜์Šค ํ•˜๋‚˜ ์ด์ƒ์˜ ํƒ€์ž…์ธ์ž๊ฐ€ ์žˆ๋Š” ํด๋ž˜์Šค๋Š” โ€˜์ œ ๋„ค๋ฆญ ํด๋ž˜์Šคโ€™์ด๊ณ  ํƒ€์ž…์ธ์ž๋ฅผ ์‹ค์ œ ํƒ€์ž…์œผ ๋กœ ๋Œ€์ฒดํ•˜๋ฉด ์ผ๋ฐ˜ ํด๋ž˜์Šค์ด๋‹ค. ์ƒ์„ฑ์ž์— ์ถ”๋ก ์„ ํ•˜๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •
  • 12. ์ œ๋„ˆ๋ฆญ ํ•จ์ˆ˜ ํƒ€์ž…์ธ์ž๋ฅผ ์ด์šฉํ•ด์„œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‹ค์–‘ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค
  • 13. ํ•จ์ˆ˜์— ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์ฃผ์˜ ์‚ฌํ•ญ ํ•จ์ˆ˜์— ํƒ€์ž…์ธ์ž๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹ค์ œ ๋กœ์ง์—์„œ ํ•จ์ˆ˜ ์˜ ์—ฐ์‚ฐ์ž ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹ค์ œ ์ธ์‹์„ ํ•˜์ง€ ๋ชปํ•˜๋ฏ€ ๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • 15. ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๊ณต๋ณ€์„ฑ ๊ณต๋ณ€์„ฑ์€ ์ž์‹ ํƒ€์ž…์œผ๋กœ ์น˜ํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฐ˜๊ณต๋ณ€์„ฑ์€ ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์น˜ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฌด๊ณต๋ณ€์„ฑ์€ ์ง€์ •๋œ ํƒ€์ž…์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ƒ์†์— ๋”ฐ๋ฅธ ๋ณ€์„ฑ ํƒ€์ž…์‹œ์Šคํ…œ์„ ์ดํ•ด ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ƒ์†์— ๋‹ค๋ฅธ ๋ณ€์„ฑ(variance)์„ ์ดํ•ด ํ•ด์•ผ ํ•œ๋‹ค.
  • 16. ๋ฌด๊ณต๋ณ€์„ฑ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์„ ์„ ์–ธํ•  ๊ฒฝ์šฐ ์‹ค์ œ ์ธ์Šคํ„ด ์Šค ์ƒ์„ฑํ•  ๋•Œ ํƒ€์ž…์ด ํ•œ์ •๋˜๋ฉด ์ƒ์†๊ด€๊ณ„์™€ ์ƒ๊ด€์—†์ด ํ•œ์ •๋˜์–ด ์ฒ˜๋ฆฌ๋œ๋‹ค. class ํด๋ž˜์Šค๋ช…[ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜] ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ œ ์•ฝ์ด ์—†๋‹ค
  • 17. ๋ณ€ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ฃผ์–ด์ง„ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ๋งŒ ๊ฒฐ์ •๋˜์–ด ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • 18. ๋ณ€ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ํ• ๋‹น ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•  ๊ฒฝ์šฐ ์‹ค์ œ ์ƒ์œ„ ํด๋ž˜์Šค ๋‚ด์— ํ•˜์œ„ํด๋ž˜์Šค๋กœ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ ๋ช… ํ™•ํžˆ ํด๋ž˜์Šค๋“ค์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • 19. ํƒ€์ž… ๋ณ€์„ฑ ์ฒ˜๋ฆฌ ๊ธฐ์ค€ ์ผ๋ฐ˜์ ์œผ๋กœ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ๋•Œ๋Š” ํด ๋ž˜์Šค์™€ ๋ฐ˜ํ™˜๊ฐ’, ๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜ ๋“ฑ์„ ๊ตฌ๋ถ„ํ•ด์„œ ํƒ€์ž… ๊ฐ€๋ณ€์„ฑ์„ ํ‘œ์‹œํ•˜๋ฉฐ, "์ œ๋„ค๋ฆญ ์œ ํ˜•"๊ฐœ๋…์ด ๋ฉฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™” ๋œ ์œ ํ˜•์„ ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค ๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜๋Š” ๋ฐ˜๊ณต๋ณ€์„ฑ ํด๋ž˜์Šค ์ •์˜ ๋ฐ ๋ฐ˜ํ™˜๊ฐ’์€ ๊ณต๋ณ€์„ฑ
  • 20. ํƒ€์ž…๋ณ€์„ฑ ์ฒ˜๋ฆฌ๊ธฐ์ค€ ๊ณต๋ณ€์„ฑ์€ ํ˜„์žฌ ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๊ธฐ ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ˜๊ณต๋ณ€์„ฑ์€ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • 21. ๋ณ€์ˆ˜ ํ• ๋‹น์€ ๊ณต๋ณ€์„ฑ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ๋Œ€ ํƒ€์ž… ๋ฒ ๋ฆฌ์–ธ์Šค๋กœ ์ฒ˜๋ฆฌ ํ•ด์•ผ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ง€์ •๋œ ๋ณ€์ˆ˜์— ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ถ€๋ชจํด๋ž˜์Šค ์ž์‹ํด๋ž˜์Šค ๊ณต๋ณ€์„ฑ์€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ์ง€์ • ๋œ ๊ฒƒ์„ ์ž์‹ ํด๋ž˜์Šค๋กœ ๋Œ€์ž… ํ•ด๋„ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • 22. ํƒ€์ž…๋ณ€์„ฑ : ๊ณต๋ณ€์„ฑ ์‚ฌ์šฉ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ํƒ€์ž…๋ณ€์„ฑ์„ ๊ณต๋ณ€์„ฑ์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ๋ณธ์ธ๋ถ€ํ„ฐ ํ•˜์œ„ ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ๋„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์„œ๋ธŒํƒ€์ž…์ด ๊ธฐ๋ณธํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ํ• ๋‹น์ด ๋˜์—ˆ๋‹ค
  • 23. ๋ณ€์ˆ˜ ํ• ๋‹น์„ ๋‘ ๊ฐœ ๋™์‹œ ์‚ฌ์šฉ ๋ฐ”์šด๋“œ ํƒ€์ž…๊ณผ ํƒ€์ž…๋ณ€์„ฑ์„ ๋‹ค ์‚ฌ์šฉํ•ด์„œ ์ฒ˜ ๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 25. ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์ œํ•œํ•˜๊ธฐ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ๋•Œ ๋‹คํ˜•์„ฑ์— ๋Œ€ํ•œ ํŠน์ • ๊ฒฝ๊ณ„๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠน์ • ์ƒ์† ๊ด€๊ณ„์˜ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜(๋ณ€์„ฑ ์ง€์ •) ํŠน์ • ๋ฒ”์œ„ ์ œํ•œ ํƒ€์ž… <: >: <% : ํŠน์ • ๋ฒ”์œ„ ์ œํ•œ์„ ์œ„ํ•œ ์—ฐ ์‚ฐ
  • 26. Bounded type ์‚ฌ์šฉ ์ด์œ  1 ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•œ ํƒ€์ž…์ด๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ, ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์ธ ๋ฐ”์šด๋“œ ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 27. Bounded type ์‚ฌ์šฉ ์ด์œ  2 ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํŠน์ • ํƒ€์ž…์œผ๋กœ ์ธ์‹์ด ํ•„ ์š”ํ•˜๋ฏ€๋กœ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜ ์Šค๋ฅผ ํ•œ์ •ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • 29. ์ƒ์œ„๊ฒฝ๊ณ„์™€ ํ•˜์œ„๊ฒฝ๊ณ„ ์ƒ์œ„๊ฒฝ๊ณ„๊ณผ ํ•˜์œ„๊ฒฝ๊ณ„๋Š” ์ •ํ•ด์ง„ ๊ฒฝ๊ณ„๋ฅผ ์ค‘ ์‹ฌ์œผ๋กœ ์ƒ์œ„ ํƒ€์ž…๊ณผ ํ•˜์œ„ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ƒ์œ„๊ฒฝ๊ณ„ [ T <: A] ๋กœ ํ‘œ์‹œ ํ•ด๋‹น A ํƒ€์ž…๊ณผ ๊ทธ ํ•˜์œ„ ํƒ€์ž…๋“ค์„ ํฌํ•จํ•ด ์„œ ์ฒ˜๋ฆฌ Upper Bound (T <: Pet) : T๋Š” ์ ์–ด๋„ Pet ํด๋ž˜์Šค ๋‚˜ Pet์˜ ํ•˜์œ„ ํด๋ž˜ ์Šค๋ฅผ ์ƒ์† ํ•œ ๋ชจ๋“  ํด๋ž˜์Šค์— ์ ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • 30. ์ƒ์œ„๊ฒฝ๊ณ„: upper bound 1 ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ƒ์†์„ ํ•œ๋‹ค. ์‹ค์ œ ์ฒ˜ ๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค ๋‚ด์˜ ๋ฉ”์†Œ๋“œ ๋‚ด์— ์ƒ์œ„๊ฒฝ๊ณ„ ๋ฅผ ์ง€์ •ํ•œ๋‹ค
  • 31. ์ƒ์œ„๊ฒฝ๊ณ„: upper bound 2 ์ƒ์œ„ ๊ฒฝ๊ณ„๋ฅผ ์ตœ์ƒ์œ„ A ํด๋ž˜์Šค๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•„์„œ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • 32. ๋ณ€์ˆ˜ ํ• ๋‹น์— bounded type 1 ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ํƒ€์ž… ๋ฐ”์šด๋“œ๋กœ ์ง€์ •ํ•  ๊ฒฝ ์šฐ๋Š” ์‹ค์ œ ํ•˜์œ„ํƒ€์ž…์ด ์ƒ์œ„ํƒ€์ž…์— ๋งž์ถฐ ๋ณ€ ํ•˜์ง€ ์•Š๋Š”๋‹ค. Bounded type ์œผ๋กœ ์ง€์ •ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜ ํ•  ๋‹น์—๋Š” ๊ณต๋ณ€์„ฑ์ด ํ•„ ์š”ํ•˜๋‹ค.
  • 33. ๋ณ€์ˆ˜ ํ• ๋‹น์— bounded type 2 ์œ„ ํŽ˜์ด์ง€์ด ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ€ ์ž… ๊ณต๋ณ€์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ณต๋ณ€์„ฑ์„ ์ง€์ •ํ•ด์„œ ์ƒ์†๊ด€๊ณ„๋ฅผ ์ง€์ •ํ•˜ ๊ณ  ํŠน์ • ํด๋ž˜์Šค๋กœ ๋ฐ”์šด๋“œ๋ฅผ ์ง€์ •ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ณ€์ˆ˜์— ์ง€ ์ •ํ•ด์„œ ์ฒ˜๋ฆฌ
  • 34. ํ•จ์ˆ˜ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŠน์ •ํ™”ํ•˜๊ธฐ ์ œ๋„ˆ๋ฆญ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋ณด๋‹ค ํŠน์ • ํƒ€์ž…์„ ์ง€์ •ํ•ด์„œ ์ง€์ • ๋ฒ”์œ„ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 35. ๋ฉ”์†Œ๋“œ์— bounded type ๋ฉ”์†Œ๋“œ ๋‚ด์˜ ํŠน์ • ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ทธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŠน์ • ๊ฒฝ๊ณ„๋กœ ํ•œ์ •ํ•˜๋ฉด ์‹ค์ œ ๊ทธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 36. ํ•จ์ˆ˜์—์„œ ์ƒ์œ„๊ฒฝ๊ณ„: upper bound <: ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผํ•  ๋•Œ ๊ณต๋ณ€์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ƒ์œ„๊ฒฝ๊ณ„๋Š” invariant์—์„œ๋งŒ ๊ฐ€๋Šฅ
  • 37. ํ•จ์ˆ˜์—์„œ ์ƒ์œ„๊ฒฝ๊ณ„์— ์ƒ์œ„ ํด๋ž˜์Šค ์ง€์ • <: ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผ ๋ถ€์—ฌ ํ•˜๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ ํ•˜๋‹ค. ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜ ๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค์— ๋Œ€ ํ•œ ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜
  • 39. ํ•˜์œ„๊ฒฝ๊ณ„ ํ•˜์œ„๊ฒฝ๊ณ„๋Š” ์ •ํ•ด์ง„ ๊ฒฝ๊ณ„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒ์œ„ ํƒ€์ž…๊ณผ ํ•˜์œ„ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ•˜์œ„๊ฒฝ๊ณ„ [ T >: A] ๋กœ ํ‘œ์‹œ ํ•ด๋‹น A ํƒ€์ž…๊ณผ ๊ทธ ์ƒ์œ„ ํƒ€์ž…๋“ค์„ ํฌํ•จํ•ด ์„œ ์ฒ˜๋ฆฌ Lower Bound (T >: Pet) : T๋Š” Pet ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค ์ค‘ ์ ์–ด๋„ ํ•˜๋‚˜๋ฅผ ์ƒ์†๋ฐ›์€ ๋ชจ๋“  ํด๋ž˜์Šค์— ์ ์šฉ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • 40. ํ•˜์œ„๊ฒฝ๊ณ„ ์ดํ•ดํ•˜๊ธฐ >: ๋กœ ์ง€์ •ํ•˜๋ฉด ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜๋ฉด ์‹ค์ œ ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋œ ๋ชจ ๋“  ๊ฒƒ์ด ํ•ด๋‹นํ•˜๋ฏ€๋กœ ์ˆซ์ž๋ง๊ณ ๋„ ๋ฌธ์ž์—ด๋„ ์ฒ˜ ๋ฆฌ๋œ๋‹ค.
  • 41. ํ•˜์œ„๊ฒฝ๊ณ„ ์ดํ•ดํ•˜๊ธฐ >: ๋กœ ์ง€์ •ํ•˜๋ฉด ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜๋ฉด ์‹ค์ œ ํ•˜์œ„๊ฒฝ๊ณ„๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋œ ๋ชจ ๋“  ๊ฒƒ์ด ํ•ด๋‹นํ•˜๋ฏ€๋กœ ์ˆซ์ž๋ง๊ณ ๋„ ๋ฌธ์ž์—ด๋„ ์ฒ˜ ๋ฆฌ๋œ๋‹ค.
  • 42. ํ•˜์œ„๊ฒฝ๊ณ„: lower bound >: ๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผ ๋ถ€์—ฌํ•˜ ๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ผ๋‹จ AnyVal๋กœ ์ง€์ •ํ•˜๊ณ  Long ์ž๋ฃŒํ˜•์„ ๋„ฃ์–ด ์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 43. ํ•˜์œ„๊ฒฝ๊ณ„: lower bound >: ๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜์œ„ ํด๋ž˜์Šค ๊ฒฝ๊ณ„๋ฅผ ๋ถ€์—ฌํ•˜ ๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ผ๋‹จ String์œผ๋กœ ์ฒ˜๋ฆฌํ•ด๋„ ํ•ด๋‹น ํƒ€์ž…๋„ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.
  • 45. ๋ทฐ ๊ฒฝ๊ณ„ ๋ทฐ ๋ฐ”์šด๋“œ (view bound)๋Š” ์–ด๋–ค ํƒ€์ž… A๋ฅผ ๋งˆ์น˜ ์–ด๋–ค ํƒ€์ž… T (์‹ค์ œ ํƒ€์ž…)์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” Scala์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ทฐ ๊ฒฝ๊ณ„ [ T <% A] ๋กœ ํ‘œ์‹œ ์–ด๋–ค ํƒ€์ž…์„ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ โ€œ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€โ€ ๋ฅผ ์ง€์ •ํ•œ๋‹ค
  • 46. ํด๋ž˜์Šค์— ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ • ๋ทฐ ๊ฒฝ๊ณ„๋Š” ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •๋œ ํƒ€์ž… ์œผ๋กœ ์ธ์ •ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • 47. ํ•จ์ˆ˜์— ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ • <% ๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์— ์•” ๋ฌต์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด์„œ ์ฒ˜๋ฆฌ
  • 49. ์ปจํ…์ŠคํŠธ ๊ฒฝ๊ณ„ ์ปจํ…ํŠธ์Šค ๊ฒฝ๊ณ„๋Š” T : M์œผ๋กœ ์“ฐ์—ฌ์ง„๋‹ค. M [T] ์— ๋Œ€ํ•œ ์•”๋ฌต์ ์ธ ๊ฐ’์˜ ์กด์žฌ๋ฅผ ํ•„์š”๋กœํ•œ๋‹ค. ์ปจํ…์ŠคํŠธ ๊ฒฝ๊ณ„ [ T : A] ๋กœ ํ‘œ์‹œ ํ•ด๋‹น A ํƒ€์ž…๊ณผ ๊ทธ ์ƒ์œ„ ํƒ€์ž…๋“ค์„ ํฌํ•จ ํ•ด์„œ ์ฒ˜๋ฆฌ ์ปจํ…์ŠคํŠธ ๋ฐ”์šด๋“œ๋Š” ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํƒ€์ž… ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์ œ์•ฝ ์กฐ๊ฑด ์ด๋‹ค ์ปจํ…์ŠคํŠธ ๋ฐ”์šด๋“œ๋Š” ๋ทฐ ๋ฐ”์ธ๋”ฉ์˜ ์•”์‹œ์  ๋ณ€ํ™˜ ๋Œ€์‹  ์•”์‹œ์  ๊ฐ’์„ ์„ค๋ช… ํ•ฉ๋‹ˆ๋‹ค context bound๋Š” ์•”์‹œ์ ์ธ ๊ฐ’์˜ ์กด์žฌ๋ฅผ ์ฃผ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค
  • 50. ์ปจํ…์ŠคํŠธ ๋ฐ”์šด๋“œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ํ•จ์ˆ˜์— ์ปจํ…์ŠคํŠธ ๋ฐ”์šด๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์ด ๋‚ด๋ถ€์— ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ ์ถœํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ