๋ ˆ๊ฑฐ์‹œ

2022.02.23์˜ ๊ธฐ๋ก

GroovyArea 2022. 2. 23. 02:18

โ–ถ ์˜ค๋Š˜ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ ์„ธ๋ถ€ ๋ชฉํ‘œ

=>  ๊ณต๋ถ€ ๊ด€๋ จ

1) ์ŠคํŠธ๋ฆผ Stream / ๋ชจ๋˜ ์ž๋ฐ” 8 ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

2) ์ž๋ฐ” ๋ฆฌํŒฉํ† ๋ง

3) ๊ธˆ์ผ ๋ฐฐ์šด ๋‚ด์šฉ ๋ณต์Šต

4) ์Šคํ”„๋ง ๊ฐ์ฒด์ง€ํ–ฅ ์ฑ… 1๋‹จ์› 

 

=> ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ

1) ํ™”๋ฉด ๋ชฉ๋ก ๋ฐ ๊ฒ€์‚ฌ์„œ ํšŒ์˜


โ–ถ ๋ฌธ์ œ ์ •๋ฆฌ

1. ์šฉ์–ด ๊ด€๋ จ ๋ฌธ์ œ

๋ฌธ์ œ : ๊ตฌ๊ธ€๋ง ๊ฒ€์ƒ‰์„ ํ•˜๋ฉฐ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ชจ๋ฅด๋Š” ์šฉ์–ด ํˆฌ์„ฑ์ด๋‹ค.

ํ•ด๋‹ต : ๊ณ„์† ๊ฒ€์ƒ‰ํ•˜๋ฉฐ ์•Œ์•„๋ณด๊ณ  ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์ดํ•ดํ•˜์ž.

 


โ–ถ ๊ณต๋ถ€ ๋‚ด์šฉ

MyBatis (Framework)

SqlSessionFactory ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ

properties : property ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ

  • resource ์†์„ฑ : Properties ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ property ์—˜๋ฆฌ๋จผํŠธ ๋Œ€์‹  Properties ํŒŒ์ผ์—์„œ ์ œ๊ณต๋˜๋Š” ์ด๋ฆ„๊ณผ ๊ฐ’์„ ์ด์šฉ
  • property : XML ํ™˜๊ฒฝ์„ค์ •ํŒŒ์ผ์— ํ•„์š”ํ•œ ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
  • ⇒ ๋‹ค๋ฅธ ์—˜๋ฆฌ๋จผํŠธ์—์„œ ${์ด๋ฆ„} ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ์„ค์ •๊ฐ’์„ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉ
  • ⇒ ๋‹ค์ˆ˜์˜ ์—˜๋ฆฌ๋จผํŠธ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์„ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์„ ์–ธ

settings : setting ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ

  • setting : mybatis ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
  • ⇒ mybatis ์‹คํ–‰์— ํ•„์š”ํ•œ ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹Œ ๊ฐ’์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ setting ์—˜๋ฆฌ๋จผํŠธ ์„ ์–ธ

typeAliases : typeAlias ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ

  • typeAlias : ๋งตํผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Java ์ž๋ฃŒํ˜•์˜ ๋ณ„์นญ(AliasName)์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
  • ⇒ ๋งตํผ์—์„œ Java ์ž๋ฃŒํ˜•์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ⇒ mybatis ๋‚ด๋ถ€์ ์œผ๋กœ ์„ค์ •๋œ Java ์ž๋ฃŒํ˜•์— ๋Œ€ํ•œ ๋ณ„์นญ ์กด์žฌ
  • type ์†์„ฑ : Java ์ž๋ฃŒํ˜•์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • alias ์†์„ฑ : Java ์ž๋ฃŒํ˜•์— ๋Œ€ํ•œ ๋ณ„์นญ์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • package : ํŠน์ • ํŒจํ‚ค์ง€์— ์„ ์–ธ๋œ ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ณ„์นญ์„ ์ž๋™ ์„ค์ •ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ
  • ⇒ ํŒจํ‚ค์ง€์— ์„ ์–ธ๋œ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ œ์™ธํ•œ ํด๋ž˜์Šค๋ช…์ด ๋ณ„์นญ์œผ๋กœ ๋“ฑ๋ก
  • name ์†์„ฑ : ๋ณ„์นญ์„ ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์„ ์–ธ๋œ ํŒจํ‚ค์ง€๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •

environments : environment ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ

  • ⇒ default ์†์„ฑ : mybatis ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•  environment ์—˜๋ฆฌ๋จผํŠธ์˜ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • environment : DBMS ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ (์ปค๋„ฅ์…˜์ด๋ผ ์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉ DBMS๋Š” ์—ฌ๋Ÿฌ๊ฐœ์ผ ์ˆ˜ ์žˆ๋‹ค)
  • ⇒ DBCP ์ธ์Šคํ„ด์Šค์™€ Connection ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด ์ œ๊ณต
  • id ์†์„ฑ : environment ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • transactionManager : ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
  • ⇒ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž(TransactionManager) : ํŠธ๋žœ์žญ์…˜์˜ SQL ๋ช…๋ น์„ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ๋กค๋ฐฑํ•˜๊ธฐ ์œ„ํ•œ ๊ด€๋ฆฌ์ž
  • type ์†์„ฑ : [jdbc] (๋‚ด๋ถ€) ๋˜๋Š” [MANAGED] (์™ธ๋ถ€) ์ค‘ ํ•˜๋‚˜๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ JDBC ์†์„ฑ๊ฐ’ : JDBC ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹๊ณผ ๋กค๋ฐฑ์„ ์ฒ˜๋ฆฌ
  • ⇒ MANAGED ์†์„ฑ๊ฐ’ : ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹๊ณผ ๋กค๋ฐฑ ์ฒ˜๋ฆฌ
  • dataSource : Connection ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ
  • type ์†์„ฑ : [UNPOOLED], [POOLED], [JNDI] ์ค‘ ํ•˜๋‚˜๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ UNPOOLED ์†์„ฑ ๊ฐ’ : DBCP ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Connection ์ธ์Šคํ„ด์Šค ์ œ๊ณต
  • ⇒ POOLED ์†์„ฑ ๊ฐ’ : DBCP ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ Connection ์ธ์Šคํ„ด์Šค ์ œ๊ณต
  • ⇒ JNDI ์†์„ฑ ๊ฐ’ : JNDI ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ Connection ์ธ์Šคํ„ด์Šค ์ œ๊ณต

⇒ property : Connection ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ

mappers : mapper ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ

  • mapper : SQL ๋ช…๋ น์ด ๋“ฑ๋ก๋œ ๋งตํผ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
  • ⇒ XML ๊ธฐ๋ฐ˜์˜ ๋งตํผ ํŒŒ์ผ๊ณผ Interface ๊ธฐ๋ฐ˜์˜ ๋งตํผ ํŒŒ์ผ ์กด์žฌ
  • ⇒ ibatis์—์„œ๋Š” XML ๊ธฐ๋ฐ˜์˜ ๋งตํผ ํŒŒ์ผ๋งŒ ์กด์žฌ
  • resource ์†์„ฑ : XML ๊ธฐ๋ฐ˜์˜ ๋งตํผ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ XML ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„3
  • class ์†์„ฑ : Interface ๊ธฐ๋ฐ˜์˜ ๋งตํผ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •

Mapper

  • SQL ๋ช…๋ น์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ
  • ⇒ mybatis ํ™˜๊ฒฝ์„ค์ •ํŒŒ์ผ์—์„œ mapper ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งตํผ๋กœ ๋“ฑ๋ก

mapper

  • SQL ๋ช…๋ น์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ
  • namespace ์†์„ฑ : ๋งตํผ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ ๋‹ค๋ฅธ ๋งตํผ์— ๋“ฑ๋ก๋œ SQL ๋ช…๋ น๊ณผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ⇒ ์†์„ฑ๊ฐ’์€ ๋งตํผ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ Java ์ž๋ฃŒํ˜•์˜ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
  • ⇒ [ibatis] ์—์„œ๋Š” namespace ์†์„ฑ์ด ์ƒ๋žต ๊ฐ€๋Šฅํ•˜์ง€๋งŒ [mybatis] ์—์„œ๋Š” ํ•„์ˆ˜ ์†์„ฑ

select

  • SELECT ๋ช…๋ น์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
  • id ์†์„ฑ : SQL ๋ช…๋ น์ด ๋“ฑ๋ก๋œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • resultType ์†์„ฑ : SQL ๋ช…๋ น์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ(ํ–‰)๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ Java ์ž๋ฃŒํ˜•์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ select ๋ช…๋ น์œผ๋กœ ์‹คํ–‰๋œ ๊ฒฐ๊ณผ(ํ–‰)์„ Java ์ž๋ฃŒํ˜•์˜ ๊ฐ์ฒด(๊ฐ’)์œผ๋กœ ๋งคํ•‘ ์ฒ˜๋ฆฌ
  • ⇒ ์†์„ฑ๊ฐ’์ด DTO ํด๋ž˜์Šค์ธ ๊ฒฝ์šฐ DTO ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฒ€์ƒ‰ํ–‰์˜ ์ปฌ๋Ÿผ๊ฐ’์„ ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•„๋“œ์— ์ž๋™์œผ๋กœ ์ €์žฅํ•˜์—ฌ ์ œ๊ณต - ์ž๋™ ๋งคํ•‘
  • ⇒ resultType ์†์„ฑ๊ฐ’์œผ๋กœ Java ์ž๋ฃŒํ˜• ๋Œ€์‹  typeAlias ์—˜๋ฆฌ๋จผํŠธ์—์„œ ์„ค์ •ํ•œ ๋ณ„์นญ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

insert

  • INSERT ๋ช…๋ น์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ
  • id ์†์„ฑ : SQL ๋ช…๋ น์ด ๋“ฑ๋ก๋œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • parameterType ์†์„ฑ : SQL ๋ช…๋ น์— ํ•„์š”ํ•œ ๊ฐ’์ด ์ €์žฅ๋œ ์ธ์Šคํ„ด์Šค์˜ Java ์ž๋ฃŒํ˜•์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์„ค์ •
  • ⇒ Java ์ž๋ฃŒํ˜• ๋Œ€์‹  typeAlias ์—˜๋ฆฌ๋จผํŠธ๋กœ ์„ค์ •๋œ ๋ณ„์นญ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ⇒ SQL ๋ช…๋ น์— ํ•„์š”ํ•œ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ parameterType ์†์„ฑ ์ƒ๋žต
  • DML (INSERT, UPDATE, DELETE) ๋ช…๋ น ๊ด€๋ จ ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋“ฑ๋ก๋œ SQL ๋ช…๋ น ์‹คํ–‰ ํ›„ ์กฐ์ž‘ํ–‰์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ •์ˆ˜๊ฐ’(Integer)์œผ๋กœ ๋ฌด์กฐ๊ฑด ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ resultType ์—˜๋ฆฌ๋จผํŠธ ์ƒ๋žต
  • parameterType ์†์„ฑ์œผ๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์€ SQL ๋ช…๋ น์—์„œ #{๋ณ€์ˆ˜๋ช…|ํ•„๋“œ๋ช…|๋งตํ‚ค} ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ
  • ⇒ ibatis๋Š” #๋ณ€์ˆ˜๋ช…|ํ•„๋“œ๋ช…|๋งตํ‚ค# ํ˜•์‹์œผ๋กœ ๊ฐ’ ํ‘œํ˜„

update

  • UPDATE ๋ช…๋ น์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ

delete

  • DELETE ๋ช…๋ น์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์—˜๋ฆฌ๋จผํŠธ

DAO

SqlSessionFactory

  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • ⇒ SqlSessionFactory ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ mybatis ํ™˜๊ฒฝ์„ค์ •ํŒŒ์ผ
  • SqlSession ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ธ์Šคํ„ด์Šค
  • ⇒ ์ด ์ธ์Šคํ„ด์Šค๊ฐ€ dao ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์คŒ

Resources.getResourceAsStream(String resource)

  • ์„œ๋ฒ„ ์ปจํ…์ŠคํŠธ๋กœ ์กด์žฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณต๋ฐ›์•„ ์ž…๋ ฅ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

SqlSessionFactoryBuilder

  • SqlSessionFactory ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ธ์Šคํ„ด์Šค
  • build(InputStream inputStream) : mybatis ํ™˜๊ฒฝ์„ค์ •ํŒŒ์ผ์„ ์ž…๋ ฅ์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•˜์—ฌ ์ œ๊ณต ๋ฐ›์•„ SqlSessionFactory ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

SqlSessionFactory.openSession()

  • SqlSession ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

SqlSession

  • DBMS ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ ๋งตํผ์— ๋“ฑ๋ก๋œ SQL ๋ช…๋ น์„ ์ œ๊ณต๋ฐ›์•„ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ณ  ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ Java ์ž๋ฃŒํ˜•์˜ ๊ฐ์ฒด(๊ฐ’)๋กœ ๋งคํ•‘ํ•˜๋Š” ์ธ์Šคํ„ด์Šค
  • selectList(String elementId) : ๋งตํผ์— ๋“ฑ๋ก๋œ Select ๋ช…๋ น์„ ์ œ๊ณต๋ฐ›์•„ ์‹คํ–‰ํ•˜๊ณ  SELECT ๋ช…๋ น์˜ ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๋ฅผ List ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • ⇒ elementId : ๋งตํผ์˜ mapper ์—˜๋ฆฌ๋จผํŠธ์˜ namespace ์†์„ฑ๊ฐ’๊ณผ select ์—˜๋ฆฌ๋จผํŠธ์˜ id ์†์„ฑ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๋งตํผ์— ๋“ฑ๋ก๋œ SQL ๋ช…๋ น์„ ์ œ๊ณต๋ฐ›๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž
  • close() : SqlSession ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • insert(String elementId, Object parameterValue) : INSERT ๋ช…๋ น์ด ๋“ฑ๋ก๋œ ์—˜๋ฆฌ๋จผํŠธ์˜ SQL ๋ช…๋ น์„ ์ œ๊ณต๋ฐ›์•„ ์‹คํ–‰ ํ›„ ์‚ฝ์ž…ํ–‰์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • ⇒ parameterValue : SQL ๋ช…๋ น์— ํ•„์š”ํ•œ ๊ฐ’์ด ์ €์žฅ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์ €์žฅ, ์ „๋‹ฌ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ๋žต ๊ฐ€๋Šฅ

mybatis ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Autocommit ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌํ•˜๊ณ  SQL ๋ช…๋ น์„ ์‹คํ–‰

⇒ DML ๋ช…๋ น์„ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ

  • SqlSession.commit() : ํŠธ๋ž™์žญ์…˜ ์ ์šฉ ๋ช…๋ น(commit) ์„ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • SqlSession.rollback() : ํŠธ๋žœ์žญ์…˜ ์ทจ์†Œ ๋ช…๋ น(rollback)์„ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • SqlSessionFactory.openSession(boolean autoCommit) : SqlSession ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ
  • ⇒ false : autocommit ๋น„ํ™œ, true : ํ™œ์„ฑํ™”

Javascript

  • history.back() : ์ „ํŽ˜์ด์ง€๋กœ ์ด๋™

โ–ถ ๊ฐœ์ธ ๊ณต๋ถ€

์ต๋ช… ๊ฐ์ฒด

  • ์ด๋ฆ„์ด ์—†๋Š” ๊ฐ์ฒด
  1. ์‚ฌ์šฉ ๋ชฉ์  : ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ / ์Šค๋ ˆ๋“œ ๊ฐ์ฒด๋ฅผ ๊ฐ„ํŽธ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด
  2. ์‚ฌ์šฉ ์šฉ๋„ : ํ•„๋“œ / ๋กœ์ปฌ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ
  3. ๋‹จ๋…์œผ๋กœ ์ƒ์„ฑ ๋ถˆ๊ฐ€. ํด๋ž˜์Šค ์ƒ์† or ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  4. ์ผํšŒ์„ฑ

์ต๋ช… ์ž์‹ ๊ฐ์ฒด ์ƒ์„ฑ

  • ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์žฌ์‚ฌ์šฉ ๋˜์ง€ ์•Š๊ณ , ํ•„๋“œ/๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ๋Š” ์ต๋ช… ์ž์‹ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ์ข‹๋‹ค.
  • ์ต๋ช… ์ž์‹ ๊ฐ์ฒด์— ์ƒˆ๋กญ๊ฒŒ ์ •์˜๋œ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ. ์™ธ๋ถ€์—์„œ๋Š” ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€.
  • ⇒ ๋ถ€๋ชจ ํƒ€์ž… ๋ณ€์ˆ˜์— ๋Œ€์ž…๋˜๋ฏ€๋กœ, ๋ถ€๋ชจ ํƒ€์ž…์— ์„ ์–ธ๋œ ๊ฒƒ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ. (ํ˜•๋ณ€ํ™˜ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ???)

์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด ์ƒ์„ฑ

  • ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ํ•„๋“œ์™€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ตฌํ˜„ ํด๋ž˜์Šค๊ฐ€ ์žฌ์‚ฌ์šฉ ๋˜์ง€ ์•Š๊ณ , ํ•„๋“œ/๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ๋Š” ์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ์ข‹๋‹ค.
  • ์ฃผ์˜ํ•  ์ ์œผ๋กœ ์ค‘๊ด„ํ˜ธ ์•ˆ์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์•ผํ•จ!

์ต๋ช… ๊ฐ์ฒด์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

  • ์ต๋ช… ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
  • ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋กœ์ปฌ๋ณ€์ˆ˜๋ฅผ ์ต๋ช… ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ ๋ฐœ์ƒ
  • ⇒ ์™œ?
  1. ๋ฉ”์„œ๋“œ ๋‚ด์— ์ƒ์„ฑ๋œ ์ต๋ช… ๊ฐ์ฒด๋Š” ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ข…๋ฃŒ ํ›„ ๊ณ„์† heap ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
  2. ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋กœ์ปฌ๋ณ€์ˆ˜๋Š” ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ์‹œ stack์—์„œ ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ์ต๋ช… ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€.
  • ์ต๋ช… ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋กœ์ปฌ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ ์‹œ final ํŠน์„ฑ์„ ์ง€๋…€์•ผ ํ•จ
  • (์ž๋ฐ” 8 ์ดํ›„๋Š” ์ž๋™์œผ๋กœ ํŠน์„ฑ์„ ์ง€๋‹ˆ๊ฒŒ ๋จ)

๋ชจ๋˜ ์ž๋ฐ” - Java 8

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • ์ฒ˜๋ฆฌ ์ž์ฒด๋ฅผ ๋ฐ์ดํ„ฐ์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ
  • ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๊ฐ’์œผ๋กœ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ตฌํ˜„์ด ์‰ฌ์›Œ์ง. ⇒ ์š”๊ฒŒ ํ•ต์‹ฌ..
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ๊ฐ’์€ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ ์ด ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ API๊ฐ€ ์ž๋ฐ” 8์˜ ํ•ต์‹ฌ

ํ•จ์ˆ˜ํ˜• ๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•˜์ž

์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ์–ด๋–ป๊ฒŒ๊ฐ€ ์•„๋‹Œ ๋ฌด์—‡์„์— ์ง‘์ค‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹.
  • ์งˆ์˜๋ฌธ ์ž์ฒด๋กœ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€์–ด๋‚˜๊ฐˆ์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์ ์ด ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ์˜ ์ฐจ์ด.
  • ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ด๊ณ  ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€์˜ ๊ทœ์น™์„ ์„ธ์›€.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ⇒ ํ•จ์ˆ˜๋Š” ๋ถ€์ž‘์šฉ์ด ์—†์–ด์•ผ ํ•จ
  • ํ•จ์ˆ˜ํ˜• : ์ˆ˜ํ•™์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ถ€์ž‘์šฉ์ด ์—†๋‹ค ?
  • ⇒ ํ•จ์ˆ˜๋Š” ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค → ์ฐธ์กฐ ํˆฌ๋ช…์„ฑ
  • ์ธ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ˆ˜ํ•™์  ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜

์ฐธ์กฐ ํˆฌ๋ช…์„ฑ

  • ์ฐธ์กฐ ํˆฌ๋ช…์„ฑ์ด๋ž€ '๋ถ€์ž‘์šฉ์„ ๊ฐ์ถฐ์•ผ ํ•œ๋‹ค'๋ผ๋Š” ์ œ์•ฝ์œผ๋กœ ๊ท€๊ฒฐ๋œ๋‹ค. ๊ฐ™์€ ์ธ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ์ฐธ์กฐ์ ์œผ๋กœ ํˆฌ๋ช…ํ•œ ํ•จ์ˆ˜๋ผ ํ‘œํ˜„ํ•œ๋‹ค. ์ฐธ์กฐ ํˆฌ๋ช…์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์ดํ•ด์— ํฐ ๋„์›€์„ ์ค€๋‹ค.
  • ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ๊ธฐ์–ตํ™”(memorization) ๋˜๋Š” ์บ์‹ฑ(caching)์„ ํ†ตํ•ด ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฐ˜๋Œ€๋˜๋Š” ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ , ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ด€๋ จ ๊ฐ์ฒด๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฐธ์กฐ์  ํˆฌ๋ช…์„ฑ์„ ์ค‘์š”์‹œํ•œ๋‹ค. ์ฆ‰, ๋ณ€ํ™”๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•

๊ณ ์ฐจ์› ํ•จ์ˆ˜(higher-order functions)

  • ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›์•„์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ์ฐจ ํ•จ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ณ ์ฐจ์› ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ๋•Œ ์–ด๋–ค ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ธ์ˆ˜๊ฐ€ ๋ถ€์ž‘์šฉ์„ ํฌํ•จํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๋ถ€์ž‘์šฉ์„ ํฌํ•จํ•˜๊ฒŒ ๋ ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ปค๋ง(currying)

  • ์ปค๋ง์€ x์™€ y๋ผ๋Š” ๋‘ ์ธ์ˆ˜๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜ f๋ฅผ ํ•œ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ๋ฐ›๋Š” g๋ผ๋Š” ํ•จ์ˆ˜๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ด๋•Œ g๋ผ๋Š” ํ•จ์ˆ˜ ์—ญ๊ธฐ ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋•Œ ํ•จ์ˆ˜ g์˜ ์ƒํƒœ๋Š” ์—ฌ๋Ÿฌ ๊ณผ์ •์ด ๋๋‚˜์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ๊ฐ€๋ฆฌ์ผœ 'ํ•จ์ˆ˜๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ(partially) ์ ์šฉ๋˜์—ˆ๋‹ค'๋ผ๊ณ  ๋งํ•œ๋‹ค.
  • ์ปค๋ง์€ ํ•จ์ˆ˜๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ๊ธฐ์กด ๋ณ€ํ™˜๋กœ์ง์„ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

์˜์†(persistent) ์ž๋ฃŒ๊ตฌ์กฐ

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์˜์† ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์˜์† ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐฑ์‹ ๋  ๋•Œ ๊ธฐ์กด ๋ฒ„์ „์˜ ์ž์‹ ์„ ๋ณด์กดํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž์‹ ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์ด ๋”ฐ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ํ‘œํ˜„ํ•  ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๊ธฐ์กด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๋„๋ก ์ƒˆ๋กœ์šด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๋Œ€์‹  ์ „์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ธ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  • ํ•จ์ˆ˜ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋งํ•˜๋Š” ์˜์†์€ ์ €์žฅ๋œ ๊ฐ’์ด ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ŠคํŠธ๋ฆผ์˜ ์ž๊ธฐ์ฐธ์กฐ

  • ์ŠคํŠธ๋ฆผ์€ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ž๋ฐ”์˜ ์ŠคํŠธ๋ฆผ์€ ์žฌ๊ท€์ ์œผ๋กœ ์ž์‹ ์„ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค.

๊ฒŒ์œผ๋ฅธ ํ‰๊ฐ€(lazy evaluation)

  • ์ž๋ฐ”์—์„œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ชจ๋“  ์ธ์ˆ˜๊ฐ€ ์ฆ‰์‹œ ํ‰๊ฐ€๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ŠคํŠธ๋ฆผ์—์„œ๋Š” ์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ตœ์ข… ์—ฐ์‚ฐ์„ ์ ์šฉํ•ด์„œ ์‹ค์ œ ๊ณ„์‚ฐ์„ ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ์‹ค์ œ ์—ฐ์‚ฐ์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด ์ด์œ ๋Š” ์ŠคํŠธ๋ฆผ์˜ ์ธ์ž๊ฐ€ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ž๋ฐ” 8 ์ดํ›„ ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰ ์‹œ๋ฏผ์ด ๋˜๋ฉด์„œ ํ•จ์ˆ˜๋ฅผ ์ž๋ฃŒ๊ตฌ์กฐ ๋‚ด๋ถ€๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฐ ํ•จ์ˆ˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ์‹œ์ ์ด ์•„๋‹ˆ๋ผ ์š”์ฒญ ์‹œ์ ์— ์‹คํ–‰๋œ๋‹ค. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์ธ Supplier <T>๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒŒ์œผ๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. Supplier ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํŒจํ„ด ๋งค์นญ(pattern matching)

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ค‘์š”ํ•œ ํŠน์ง•์œผ๋กœ๋Š” ํŒจํ„ด ๋งค์นญ์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ •๊ทœํ‘œํ˜„์‹๊ณผ ๊ด€๋ จ๋œ ๋งค์นญ๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค. ์—ฌ๊ธฐ์„œ์˜ ํŒจํ„ด ๋งค์นญ์€ ํ•œ ๊ฐœ ์ด์ƒ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ๋ฉ€ํ‹ฐ ๋งค์นญ์„ ์˜๋ฏธํ•œ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” ํŒจํ„ด ๋งค์นญ ๋Œ€์‹  if-then-else ๊ตฌ๋ฌธ์„ ์ค‘์ฒฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์Šค์นผ๋ผ์—์„œ๋Š” ์ด๋ฏธ ํŒจํ„ด ๋งค์นญ์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์ˆ˜์ค€(multilevel)์˜ switch ๋ฌธ์ด๋ผ๊ณ  ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํŒจํ„ด ๋งค์นญ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
def simplifyExpression(expr: Expr): Expr = expr match {
	case BinOp("+", e, Number(0)) => e// 0 ๋”ํ•˜๊ธฐcase BinOp("*", e, Number(1)) => e// 1 ๊ณฑํ•˜๊ธฐcase BinOp("/", e, Number(1)) => e// 1 ๋‚˜๋ˆ„๊ธฐcase _ => expr// expr์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์—†๋‹ค
}

⇒ ์ž๋ฐ”์—์„œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ํŒจํ„ด ๋งค์นญ์„ ํ‰๋‚ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

์บ์‹ฑ(caching) ๋˜๋Š” ๊ธฐ์–ตํ™”(memorization)

  • ์ฐธ์กฐ ํˆฌ๋ช…์„ฑ์ด ์œ ์ง€๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ๊ธฐ์–ตํ™”๋ฅผ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์–ตํ™”๋Š” ๋ฉ”์„œ๋“œ์— ๋ž˜ํผ๋กœ ์บ์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

'๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•จ'์˜ ์˜๋ฏธ

  • ์ฐธ์กฐ ํˆฌ๋ช…์„ฑ์€ '์ธ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ฒฐ๊ณผ๋„ ๊ฐ™์•„์•ผ ํ•œ๋‹ค'๋ผ๋Š” ๊ทœ์น™์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์ด๋‚˜ ๊ฐ™์€ ์ฐธ์กฐ๋ฅผ ๊ฐ–์ง€ ์•Š์œผ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์ฐธ์กฐ์ด๋ฏ€๋กœ == ์—ฐ์‚ฐ์ด ์„ฑ๋ฆฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์—์„œ ์ฐธ์กฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์€ ํฐ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฉฐ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™๊ธฐ์—, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๊ตฌ์กฐ์ ์ธ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ๋‘˜์€ ๊ฐ™์€ ๊ฐ์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝค๋น„๋„ค์ดํ„ฐ

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„  ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ  ์กฐํ•ฉํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•์‹์˜ ๊ณ ์ฐจ์› ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ด์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ฝค๋น„๋„ค์ดํ„ฐ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

โ–ถ ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ

> ํ•„์ˆ˜ ํ•ญ๋ชฉ & ์œ ํšจ์„ฑ ์™„๋ฃŒ

> ์ •๊ธฐ ๋ฐฐ์†ก ํ™•์žฅ์„ฑ ์งˆ๋ฌธ

> ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ํ†ต์ผ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์งˆ๋ฌธ

> 9์‹œ UI ํšŒ์˜

๋ฐ˜์‘ํ˜•