Scala
Block expression
์ดํ•ดํ•˜๊ธฐ
myjlms99@gmail.com
Block expression
๋ธ”๋ก ํ‘œํ˜„์‹
๋ธ”๋ก ํ‘œํ˜„์‹์€ ๋ฌธ์žฅ๊ณผ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ
์œผ๋ฉด ๋ฐ”๋กœ ํ‰๊ฐ€๊ฐ€ ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋งˆ์ง€๋ง‰ ํ‘œํ˜„
์‹์„ ๋ณด๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.
{
๋ฌธ์žฅ๊ณผ ํ‘œํ˜„์‹
ํ‘œํ˜„์‹ // ๋งˆ์ง€๋ง‰ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์ธ์‹
}
๋ธ”๋ก ํ‘œํ˜„์‹
๋ธ”๋ก ํ‘œํ˜„์‹์— ๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋ณ€์ˆ˜ ํ• ๋‹น ๋“ฑ์„ ํ•˜๊ณ 
์‹คํ–‰ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ํ‰๊ฐ€๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์ฒ˜๋ฆฌ
ํ•œ๋‹ค
๋ณ€์ˆ˜์— ํ• ๋‹น
val, var ๋ณ€์ˆ˜์— ํ• ๋‹น
ํ‘œํ˜„์‹์ด ํ‰๊ฐ€๋˜์–ด ๋ฐ”๋กœ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋ฏ€
๋กœ ๋ณ€์ˆ˜์— ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
lazy val์— ํ• ๋‹น
lazy ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ง€์—ฐํ‰๊ฐ€์ด๋ฏ€๋กœ ์‹ค
์ œ ์ด ๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ํ•œ๋ฒˆ ์‹คํ–‰๋˜์–ด ์ฒ˜๋ฆฌ๋œ
๋‹ค.
Def ์— ํ• ๋‹น
def ๋ณ€์ˆ˜๋ช…์— ํ• ๋‹นํ•˜๋ฉด ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฉด
๋งค๋ฒˆ ๋‹ค์‹œ ์‹คํ–‰๋œ๋‹ค. ํ•จ์ˆ˜ ์ •์˜์ด์ง€๋งŒ ์‹ค์ œ ๋งค
๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๋Š” ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋˜์–ด ์ฒ˜
๋ฆฌ๋˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.
Scope
์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ๊ธฐ์ค€
์Šค์นผ๋ผ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ๋œ ์œ„์น˜์— ๋”ฐ๋ผ ์„ธ ๊ฐ€์ง€
๋ฒ”์œ„๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ํ•„๋“œ, ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ
๋กœ์ปฌ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
ํ•„๋“œ
๋ฉ”์†Œ๋“œ(ํ•จ์ˆ˜) ๋งค๊ฐœ๋ณ€์ˆ˜
๋กœ์ปฌ ๋ณ€์ˆ˜
ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ์— ๋”ฐ๋ฅธ ๋ณ„๋„์˜ ๋„ค์ž„
์ŠคํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
๋กœ์ปฌ๋ณ€์ˆ˜๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜ ๋„ค์ž„์Šค
ํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
๋ธ”๋ก ์ •์˜
๋ธ”๋ก์œผ๋กœ ์ •์˜๋œ ๊ฒƒ์€ def(ํ•จ์ˆ˜,๋ฉ”์†Œ๋“œ), class,
trait ์„ ์–ธ์— ๋”ฐ๋ผ ๋‚ด๋ถ€์— ์ •์˜๋œ ๋ณ€์ˆ˜๊ฐ€ ํ•„๋“œ
๊ฐ€ ๋˜๊ฑฐ๋‚˜ ๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ธ์‹๋œ๋‹ค.
ํด๋ž˜์Šค๋‚˜ ํŠธ๋ ˆ์ดํŠธ์— ๋ธ”๋ก ์ •์˜๋ฅผ ํ•˜๋ฉด ๋ณ€์ˆ˜๋Š” ํ•„๋“œ๋กœ ์ธ
์‹๋œ๋‹ค
ํ•จ์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์— ๋ธ”๋ก์˜ ์ •์˜๋˜๋ฉด ๋‚ด๋ถ€์— ์ •์˜๋œ ๋ณ€์ˆ˜๋Š”
๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ธ์‹๋œ๋‹ค.
ํ•„๋“œ field
ํด๋ž˜์Šค, ๊ฐ์ฒด, trait ๋“ฑ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๋งํ•˜๋ฉด ์•ก์„ธ์Šค
์ˆ˜์ • ์ž ์œ ํ˜•์— ๋”ฐ๋ผ ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์™€ ๊ฐ์ฒด ์™ธ๋ถ€์—
์„œ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๊ณ , var ๋ฐ val ํ‚ค์›Œ๋“œ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๊ฐ€
๋Šฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค.
ํด๋ž˜์Šค์— ์ •์˜๋œ ํ•„
๋“œ๋Š” ๊ธฐ๋ณธ public์ด๋‹ค
๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ : ๋ฉ”์†Œ๋“œ
๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ๋งˆ๋‹ค ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์˜
๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜
๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ : ํด๋ž˜์Šค
์ผ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋งค๊ฐœ๋ณ€
์ˆ˜๋Š” ํ•จ์ˆ˜์—์„œ ๋ฐ”๋กœ ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ
๋‹ค.
์Šค์นผ๋ผ ํด๋ž˜์Šค๋„ ๋งค
๊ฐœ๋ณ€์ˆ˜๋กœ ์ •์˜๊ฐ€ ๊ฐ€
๋Šฅํ•˜๊ณ  ์ด๋ฅผ ๋‚ด๋ถ€ ๋ฉ”
์†Œ๋“œ์—์„œ ๋ฐ”๋กœ ์ ‘๊ทผ
๊ฐ€๋Šฅ
๋กœ์ปฌ ๋งค๊ฐœ๋ณ€์ˆ˜
์ง€์—ญ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ
๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ํ•  ์ˆ˜
์žˆ๋‹ค. var ๋ฐ val ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ
ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ๋‚ด์—
์ •์˜๋œ ๋ณ€์ˆ˜๋Š” ์™ธ
๋ถ€์—์„œ ์ฐธ์กฐ๊ฐ€ ๋˜
์ง€ ์•Š๋Š”๋‹ค.
ํ•จ์ˆ˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ
๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ง€์ •
๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜๋ฉด
์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋™์ผํ•œ ์ด๋ฆ„์— ๋Œ€ํ•œ ์ฒดํฌ
๋ฅผ ํ•ด์„œ ์žฌ์ •์˜๋ฅผ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ•œ๋‹ค.
Class๋„ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ •์ด ๊ฐ€๋Šฅ
ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ 
๋ธ”๋กํ‘œํ˜„์‹์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ํ•จ์ˆ˜
์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋•Œ ๋ธ”๋Ÿญ์‹
์ด ๊ตฌ๋™๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ
๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค์—
์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์•Œ
์ˆ˜ ์žˆ๋‹ค.
๋ชจ๋“ˆ์— ํ•จ์ˆ˜ ์ •์˜ ํ• ๋•Œ
scope ๋น„๊ต
ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์„ ๋ธ”๋ก์—
์ง€์ •
๋ชจ๋“ˆ์— ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ทธ ๋‚ด๋ถ€์˜ ๋ธ”๋ก์—
๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ–ˆ์ง€๋งŒ ์‹ค์ œ
๋‘ scope๊ฐ€ ๋‹ฌ๋ผ ํ˜ธ์ถœ๋  ๋•Œ ์ฒ˜๋ฆฌ๊ฐ€ ๋‹ค๋ฅด๋‹ค
ํ•จ์ˆ˜์™€ ๋ธ”๋ก ๊ด€๊ณ„
ํ•จ์ˆ˜ ์ •์˜
ํ•จ์ˆ˜๋ช…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜๊ฐ’์„ ์ •์˜ํ•œ ํ›„์— ๋ธ”
๋Ÿญํ‘œํ˜„์‹์„ ์ •์˜ํ•˜๋ฉด ์ด ๋ธ”๋Ÿญํ‘œํ˜„์‹ ๋‚ด์— ํ•จ
์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•จ์ˆ˜ ์ •์˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ
๋ธ”๋ก ๋‚ด๋ถ€์—์„œ ์ฐธ์กฐํ•ด์„œ
์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
ํ•จ์ˆ˜ ํ˜ธ์ถœ
ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ•  ๋•Œ ์ธ์ž๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ๋Š” ํ‘œ
ํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ˜ํ™˜๋งŒ์„ ํ‘œ์‹œํ•˜๋ฏ€๋กœ
ํ•จ์ˆ˜๋ช… ๋‹ค์Œ์— ๋ธ”๋Ÿญ์‹์„ ์‚ฌ์šฉ ์ฒ˜๋ฆฌ
ํด๋ž˜์Šค์™€ ๋ธ”๋Ÿญ๊ด€๊ณ„
ํด๋ž˜์Šค ์ •์˜
ํด๋ž˜์Šค๋„ ๋ธ”๋Ÿญํ‘œํ˜„์‹ ์—†์ด ์ •์˜๋„ ๊ฐ€๋Šฅํ•˜์ง€
๋งŒ ๋‚ด๋ถ€ ๋ฉค๋ฒ„๋“ค์„ ๋ธ”๋Ÿญํ‘œํ˜„์‹์— ์ •์˜ํ•˜๋ฉด ์ธ
์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ณ„๋„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ 
๋‹ค.
B, C ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ
๋งŒ๋“ค๋ฉด ๋ธ”๋Ÿญ์‹œ ๋‚ด์˜ ํ•„๋“œ
๊ฐ€ ํ• ๋‹น๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ
๋‹ค..
class ์ •์˜: ๋งค๊ฐœ๋ณ€์ˆ˜
ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ 
๋ธ”๋กํ‘œํ˜„์‹์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ํ•จ์ˆ˜
์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋•Œ ๋ธ”๋Ÿญ์‹
์ด ๊ตฌ๋™๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ
๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค์—
์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์•Œ
์ˆ˜ ์žˆ๋‹ค.
Trait์—
๋ธ”๋Ÿญ์ง€์ •ํ•˜๊ธฐ
Trait
ํ•˜๋‚˜๋Š” ์ถ”์ƒ ํ•„๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , ํ•˜๋‚˜๋Š” ๊ตฌ์ƒ ํ•„
๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค. ๋‘ ๊ฐœ๋ฅผ ๊ฐ๊ฐ ํด๋ž˜์Šค์—์„œ ์ƒ์†
ํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ํ•„๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ฒ˜
๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
Object ์—
๋ธ”๋Ÿญ์ง€์ •ํ•˜๊ธฐ
object ์ •์˜
์Šค์นผ๋ผ์—์„œ๋Š” object ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ
์ •์˜ํ•˜๋ฉด ํด๋ž˜์Šค์˜ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€
๋Š” ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
Object๋Š” ํƒ€์ž…์œผ๋กœ
์ง€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ
์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ด ๋ถˆ
๊ฐ€
์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ
๋ธ”๋Ÿญ์ง€์ •ํ•˜๊ธฐ
ํด๋ž˜์Šค๋‚˜ trait๋กœ ํƒ€์ž… ์ง€์ •
ํด๋ž˜์Šค๋‚˜ trait๋ฅผ ๋ณ€์ˆ˜๋ช… ๋‹ค์Œ์— ์ง€์ •ํ•ด์„œ
ํƒ€์ž…์„ ํ™•์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
Trait๊ฐ€ ํƒ€์ž…์ด ๋˜๋ ค๋ฉด
trait๊ฐ€ ์ •์˜๋˜๊ณ  ์ƒ์†์ด ๋˜๊ฑฐ๋‚˜ trait๋ฅผ ์ด
์šฉํ•ด์„œ ์ต๋ช…์ด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ํด๋ž˜์Šค์—์„œ ๋ธ”๋Ÿญ์ง€
์ •
ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”
๋ก ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ต๋ช… ํด๋ž˜์Šค์˜ ์ธ์Šค
ํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”๋ก
ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ ํ•„
๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘ ์ฐธ์กฐ๋„
๊ฐ€๋Šฅํ•˜๋‹ค.
ํด๋ž˜์Šค ์†์„ฑ ์ •์˜ ํ›„ ์ถ”๊ฐ€ ๋ธ”๋Ÿญ์ง€
์ •
ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”
๋ก ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ต๋ช… ํด๋ž˜์Šค์˜ ์ธ์Šค
ํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”๋ก
ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ ํ•„
๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘ ์ฐธ์กฐ๋„
๊ฐ€๋Šฅํ•˜๋‹ค.
Trait ์ •์˜ ํ›„ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ• ๋•Œ
์ถ”๊ฐ€ ๋ธ”๋Ÿญ์ง€์ •
์ธ์Šคํ„ด์Šค ์ •์˜ํ•˜๋Š” ์ถ”๊ฐ€ ๋ธ”๋ก์„ ์ง€์ •ํ•˜๋ฉด
new ํ‚ค์›Œ๋“œ์™€ trait๋ฅผ ์ด์šฉํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ
๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”๋ก
ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ ํ•„
๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘ ์ฐธ์กฐ๋„
๊ฐ€๋Šฅํ•˜๋‹ค.
๋ธ”๋ก์— ์ถ”์ƒ ํƒ€์ž… ์‚ฌ์šฉํ•˜๊ธฐ
- ๊ตฌ์กฐ์  ํƒ€์ž…
๋ธ”๋ก์— ์ถ”์ƒ ํƒ€์ž… ์ง€์ •
๋ธ”๋ก์— ์ถ”์ƒํƒ€์ž…์„ ์ง€์ •ํ•ด์„œ trait/abstract/
๋งค๊ฐœ๋ณ€์ˆ˜/self type์— ์ •์˜ํ•ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
ํ•˜๋‹ค.
{ ์ถ”์ƒ ํ•„๋“œ, ์ถ”์ƒ ํ•จ์ˆ˜/๋ฉ”์†Œ๋“œ }
๋งค๊ฐœ๋ณ€์ˆ˜
Self type
trait
abstract class
ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ถ”์ƒํƒ€์ž… ์„ ์–ธ
ํ•จ์ˆ˜ ๋‚ด์˜ ์ธ์ž๋กœ ํŠน์ • ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ ์ž„์˜์˜
๊ตฌ์กฐ์  ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค. ์‹ค์ œ ํด๋ž˜์Šค์˜ ์ธ์Šค
ํ„ด์Šค๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š”
๋œ๋‹ค.
ํƒ€์ž… ๋ณ„์นญ์— ๊ตฌ์กฐ์  ํƒ€์ž… ์ง€์ •
๊ตฌ์กฐ์  ํƒ€์ž…์„ ํƒ€์ž… ๋ณ„์นญ์œผ๋กœ ์ง€์ •ํ•ด์„œ ํ•จ
์ˆ˜์— ์„ ์–ธํ•˜๋ฉด ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋” ๋ช…ํ™•
ํ•ด ๋ณด์ธ๋‹ค.
๊ตฌ์กฐ์  ํƒ€์ž…์„ self type ์ง€์ •
์‹ค์ œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ง์ ‘ ์ •์˜ํ•ด์„œ ๊ตฌ์กฐ์ 
ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•ด์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ตฌ์กฐ์  ํƒ€์ž…์˜ ๋ฉ”์†Œ๋“œ
๋Š” ์ถ”์ƒ ํƒ€์ž…์œผ๋กœ ์ง€์ •
ํ•œ๋‹ค.
๊ตฌ์กฐ์  ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„
๊ฐ๊ฐ์˜ trait์— ์ •์˜ํ•˜๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ •
์˜ํ•˜๊ณ  ์ด๋ฅผ ์ƒ์†ํ•˜๊ฑฐ๋‚˜ with ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉ
ํ•ด์„œ ๋‹ค์ค‘์ƒ์†์„ ์ฒ˜๋ฆฌ

Scala block expression

  • 1.
  • 2.
  • 3.
    ๋ธ”๋ก ํ‘œํ˜„์‹ ๋ธ”๋ก ํ‘œํ˜„์‹์€๋ฌธ์žฅ๊ณผ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ ์œผ๋ฉด ๋ฐ”๋กœ ํ‰๊ฐ€๊ฐ€ ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋งˆ์ง€๋ง‰ ํ‘œํ˜„ ์‹์„ ๋ณด๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค. { ๋ฌธ์žฅ๊ณผ ํ‘œํ˜„์‹ ํ‘œํ˜„์‹ // ๋งˆ์ง€๋ง‰ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์ธ์‹ }
  • 4.
    ๋ธ”๋ก ํ‘œํ˜„์‹ ๋ธ”๋ก ํ‘œํ˜„์‹์—๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋ณ€์ˆ˜ ํ• ๋‹น ๋“ฑ์„ ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ํ‰๊ฐ€๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์ฒ˜๋ฆฌ ํ•œ๋‹ค
  • 5.
  • 6.
    val, var ๋ณ€์ˆ˜์—ํ• ๋‹น ํ‘œํ˜„์‹์ด ํ‰๊ฐ€๋˜์–ด ๋ฐ”๋กœ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋ฏ€ ๋กœ ๋ณ€์ˆ˜์— ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • 7.
    lazy val์— ํ• ๋‹น lazyํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ง€์—ฐํ‰๊ฐ€์ด๋ฏ€๋กœ ์‹ค ์ œ ์ด ๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ํ•œ๋ฒˆ ์‹คํ–‰๋˜์–ด ์ฒ˜๋ฆฌ๋œ ๋‹ค.
  • 8.
    Def ์— ํ• ๋‹น def๋ณ€์ˆ˜๋ช…์— ํ• ๋‹นํ•˜๋ฉด ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฉด ๋งค๋ฒˆ ๋‹ค์‹œ ์‹คํ–‰๋œ๋‹ค. ํ•จ์ˆ˜ ์ •์˜์ด์ง€๋งŒ ์‹ค์ œ ๋งค ๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๋Š” ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋˜์–ด ์ฒ˜ ๋ฆฌ๋˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.
  • 9.
  • 10.
    ์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜๊ด€๋ฆฌ๊ธฐ์ค€ ์Šค์นผ๋ผ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ๋œ ์œ„์น˜์— ๋”ฐ๋ผ ์„ธ ๊ฐ€์ง€ ๋ฒ”์œ„๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ํ•„๋“œ, ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ ๋กœ์ปฌ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•„๋“œ ๋ฉ”์†Œ๋“œ(ํ•จ์ˆ˜) ๋งค๊ฐœ๋ณ€์ˆ˜ ๋กœ์ปฌ ๋ณ€์ˆ˜ ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ์— ๋”ฐ๋ฅธ ๋ณ„๋„์˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ๋กœ์ปฌ๋ณ€์ˆ˜๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜ ๋„ค์ž„์Šค ํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
  • 11.
    ๋ธ”๋ก ์ •์˜ ๋ธ”๋ก์œผ๋กœ ์ •์˜๋œ๊ฒƒ์€ def(ํ•จ์ˆ˜,๋ฉ”์†Œ๋“œ), class, trait ์„ ์–ธ์— ๋”ฐ๋ผ ๋‚ด๋ถ€์— ์ •์˜๋œ ๋ณ€์ˆ˜๊ฐ€ ํ•„๋“œ ๊ฐ€ ๋˜๊ฑฐ๋‚˜ ๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ธ์‹๋œ๋‹ค. ํด๋ž˜์Šค๋‚˜ ํŠธ๋ ˆ์ดํŠธ์— ๋ธ”๋ก ์ •์˜๋ฅผ ํ•˜๋ฉด ๋ณ€์ˆ˜๋Š” ํ•„๋“œ๋กœ ์ธ ์‹๋œ๋‹ค ํ•จ์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์— ๋ธ”๋ก์˜ ์ •์˜๋˜๋ฉด ๋‚ด๋ถ€์— ์ •์˜๋œ ๋ณ€์ˆ˜๋Š” ๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ธ์‹๋œ๋‹ค.
  • 12.
    ํ•„๋“œ field ํด๋ž˜์Šค, ๊ฐ์ฒด,trait ๋“ฑ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๋งํ•˜๋ฉด ์•ก์„ธ์Šค ์ˆ˜์ • ์ž ์œ ํ˜•์— ๋”ฐ๋ผ ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์™€ ๊ฐ์ฒด ์™ธ๋ถ€์— ์„œ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๊ณ , var ๋ฐ val ํ‚ค์›Œ๋“œ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๊ฐ€ ๋Šฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ž˜์Šค์— ์ •์˜๋œ ํ•„ ๋“œ๋Š” ๊ธฐ๋ณธ public์ด๋‹ค
  • 13.
    ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ :๋ฉ”์†Œ๋“œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ๋งˆ๋‹ค ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜
  • 14.
    ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ :ํด๋ž˜์Šค ์ผ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋งค๊ฐœ๋ณ€ ์ˆ˜๋Š” ํ•จ์ˆ˜์—์„œ ๋ฐ”๋กœ ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ ๋‹ค. ์Šค์นผ๋ผ ํด๋ž˜์Šค๋„ ๋งค ๊ฐœ๋ณ€์ˆ˜๋กœ ์ •์˜๊ฐ€ ๊ฐ€ ๋Šฅํ•˜๊ณ  ์ด๋ฅผ ๋‚ด๋ถ€ ๋ฉ” ์†Œ๋“œ์—์„œ ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • 15.
    ๋กœ์ปฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์—ญ ๋ณ€์ˆ˜๋Š”ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ ๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. var ๋ฐ val ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ ํ•จ์ˆ˜, ๋ฉ”์†Œ๋“œ ๋‚ด์— ์ •์˜๋œ ๋ณ€์ˆ˜๋Š” ์™ธ ๋ถ€์—์„œ ์ฐธ์กฐ๊ฐ€ ๋˜ ์ง€ ์•Š๋Š”๋‹ค.
  • 16.
    ํ•จ์ˆ˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ง€์ • ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋ฆ„์œผ๋กœ ๋กœ์ปฌ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋™์ผํ•œ ์ด๋ฆ„์— ๋Œ€ํ•œ ์ฒดํฌ ๋ฅผ ํ•ด์„œ ์žฌ์ •์˜๋ฅผ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ•œ๋‹ค.
  • 17.
    Class๋„ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ •์ด๊ฐ€๋Šฅ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ธ”๋กํ‘œํ˜„์‹์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ํ•จ์ˆ˜ ์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋•Œ ๋ธ”๋Ÿญ์‹ ์ด ๊ตฌ๋™๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค์— ์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • 18.
    ๋ชจ๋“ˆ์— ํ•จ์ˆ˜ ์ •์˜ํ• ๋•Œ scope ๋น„๊ต
  • 19.
    ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ์ด๋ฆ„์„ ๋ธ”๋ก์— ์ง€์ • ๋ชจ๋“ˆ์— ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ทธ ๋‚ด๋ถ€์˜ ๋ธ”๋ก์— ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ–ˆ์ง€๋งŒ ์‹ค์ œ ๋‘ scope๊ฐ€ ๋‹ฌ๋ผ ํ˜ธ์ถœ๋  ๋•Œ ์ฒ˜๋ฆฌ๊ฐ€ ๋‹ค๋ฅด๋‹ค
  • 20.
  • 21.
    ํ•จ์ˆ˜ ์ •์˜ ํ•จ์ˆ˜๋ช…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜,๋ฐ˜ํ™˜๊ฐ’์„ ์ •์˜ํ•œ ํ›„์— ๋ธ” ๋Ÿญํ‘œํ˜„์‹์„ ์ •์˜ํ•˜๋ฉด ์ด ๋ธ”๋Ÿญํ‘œํ˜„์‹ ๋‚ด์— ํ•จ ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ์ •์˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ ์ฐธ์กฐํ•ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 22.
    ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ•จ์ˆ˜ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ž๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ๋Š” ํ‘œ ํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ˜ํ™˜๋งŒ์„ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜๋ช… ๋‹ค์Œ์— ๋ธ”๋Ÿญ์‹์„ ์‚ฌ์šฉ ์ฒ˜๋ฆฌ
  • 23.
  • 24.
    ํด๋ž˜์Šค ์ •์˜ ํด๋ž˜์Šค๋„ ๋ธ”๋Ÿญํ‘œํ˜„์‹์—†์ด ์ •์˜๋„ ๊ฐ€๋Šฅํ•˜์ง€ ๋งŒ ๋‚ด๋ถ€ ๋ฉค๋ฒ„๋“ค์„ ๋ธ”๋Ÿญํ‘œํ˜„์‹์— ์ •์˜ํ•˜๋ฉด ์ธ ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ณ„๋„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“  ๋‹ค. B, C ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋ธ”๋Ÿญ์‹œ ๋‚ด์˜ ํ•„๋“œ ๊ฐ€ ํ• ๋‹น๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ ๋‹ค..
  • 25.
    class ์ •์˜: ๋งค๊ฐœ๋ณ€์ˆ˜ ํด๋ž˜์Šค๋ฅผ์ •์˜ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ธ”๋กํ‘œํ˜„์‹์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ํ•จ์ˆ˜ ์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋•Œ ๋ธ”๋Ÿญ์‹ ์ด ๊ตฌ๋™๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค์— ์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • 26.
  • 27.
    Trait ํ•˜๋‚˜๋Š” ์ถ”์ƒ ํ•„๋“œ๋ฅผ์ •์˜ํ•˜๊ณ , ํ•˜๋‚˜๋Š” ๊ตฌ์ƒ ํ•„ ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค. ๋‘ ๊ฐœ๋ฅผ ๊ฐ๊ฐ ํด๋ž˜์Šค์—์„œ ์ƒ์† ํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ํ•„๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ฒ˜ ๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 28.
  • 29.
    object ์ •์˜ ์Šค์นผ๋ผ์—์„œ๋Š” objectํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ •์˜ํ•˜๋ฉด ํด๋ž˜์Šค์˜ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€ ๋Š” ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. Object๋Š” ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ด ๋ถˆ ๊ฐ€
  • 30.
  • 31.
    ํด๋ž˜์Šค๋‚˜ trait๋กœ ํƒ€์ž…์ง€์ • ํด๋ž˜์Šค๋‚˜ trait๋ฅผ ๋ณ€์ˆ˜๋ช… ๋‹ค์Œ์— ์ง€์ •ํ•ด์„œ ํƒ€์ž…์„ ํ™•์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 32.
    Trait๊ฐ€ ํƒ€์ž…์ด ๋˜๋ ค๋ฉด trait๊ฐ€์ •์˜๋˜๊ณ  ์ƒ์†์ด ๋˜๊ฑฐ๋‚˜ trait๋ฅผ ์ด ์šฉํ•ด์„œ ์ต๋ช…์ด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • 33.
    ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ํด๋ž˜์Šค์—์„œ๋ธ”๋Ÿญ์ง€ ์ • ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ” ๋ก ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ต๋ช… ํด๋ž˜์Šค์˜ ์ธ์Šค ํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”๋ก ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ ํ•„ ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘ ์ฐธ์กฐ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 34.
    ํด๋ž˜์Šค ์†์„ฑ ์ •์˜ํ›„ ์ถ”๊ฐ€ ๋ธ”๋Ÿญ์ง€ ์ • ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ” ๋ก ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ต๋ช… ํด๋ž˜์Šค์˜ ์ธ์Šค ํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”๋ก ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ ํ•„ ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘ ์ฐธ์กฐ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 35.
    Trait ์ •์˜ ํ›„์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ• ๋•Œ ์ถ”๊ฐ€ ๋ธ”๋Ÿญ์ง€์ • ์ธ์Šคํ„ด์Šค ์ •์˜ํ•˜๋Š” ์ถ”๊ฐ€ ๋ธ”๋ก์„ ์ง€์ •ํ•˜๋ฉด new ํ‚ค์›Œ๋“œ์™€ trait๋ฅผ ์ด์šฉํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋ธ”๋ก ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ ํ•„ ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘ ์ฐธ์กฐ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • 36.
    ๋ธ”๋ก์— ์ถ”์ƒ ํƒ€์ž…์‚ฌ์šฉํ•˜๊ธฐ - ๊ตฌ์กฐ์  ํƒ€์ž…
  • 37.
    ๋ธ”๋ก์— ์ถ”์ƒ ํƒ€์ž…์ง€์ • ๋ธ”๋ก์— ์ถ”์ƒํƒ€์ž…์„ ์ง€์ •ํ•ด์„œ trait/abstract/ ๋งค๊ฐœ๋ณ€์ˆ˜/self type์— ์ •์˜ํ•ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ ํ•˜๋‹ค. { ์ถ”์ƒ ํ•„๋“œ, ์ถ”์ƒ ํ•จ์ˆ˜/๋ฉ”์†Œ๋“œ } ๋งค๊ฐœ๋ณ€์ˆ˜ Self type trait abstract class
  • 38.
    ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ถ”์ƒํƒ€์ž…์„ ์–ธ ํ•จ์ˆ˜ ๋‚ด์˜ ์ธ์ž๋กœ ํŠน์ • ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ ์ž„์˜์˜ ๊ตฌ์กฐ์  ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค. ์‹ค์ œ ํด๋ž˜์Šค์˜ ์ธ์Šค ํ„ด์Šค๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋œ๋‹ค.
  • 39.
    ํƒ€์ž… ๋ณ„์นญ์— ๊ตฌ์กฐ์ ํƒ€์ž… ์ง€์ • ๊ตฌ์กฐ์  ํƒ€์ž…์„ ํƒ€์ž… ๋ณ„์นญ์œผ๋กœ ์ง€์ •ํ•ด์„œ ํ•จ ์ˆ˜์— ์„ ์–ธํ•˜๋ฉด ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋” ๋ช…ํ™• ํ•ด ๋ณด์ธ๋‹ค.
  • 40.
    ๊ตฌ์กฐ์  ํƒ€์ž…์„ selftype ์ง€์ • ์‹ค์ œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ง์ ‘ ์ •์˜ํ•ด์„œ ๊ตฌ์กฐ์  ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•ด์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ตฌ์กฐ์  ํƒ€์ž…์˜ ๋ฉ”์†Œ๋“œ ๋Š” ์ถ”์ƒ ํƒ€์ž…์œผ๋กœ ์ง€์ • ํ•œ๋‹ค.
  • 41.
    ๊ตฌ์กฐ์  ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœํ‘œํ˜„ ๊ฐ๊ฐ์˜ trait์— ์ •์˜ํ•˜๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ • ์˜ํ•˜๊ณ  ์ด๋ฅผ ์ƒ์†ํ•˜๊ฑฐ๋‚˜ with ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉ ํ•ด์„œ ๋‹ค์ค‘์ƒ์†์„ ์ฒ˜๋ฆฌ