2022.02.23์ ๊ธฐ๋ก
โถ ์ค๋ ์คํ ๊ฐ๋ฅํ ์ธ๋ถ ๋ชฉํ
=> ๊ณต๋ถ ๊ด๋ จ
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() : ์ ํ์ด์ง๋ก ์ด๋
โถ ๊ฐ์ธ ๊ณต๋ถ
์ต๋ช ๊ฐ์ฒด
- ์ด๋ฆ์ด ์๋ ๊ฐ์ฒด
- ์ฌ์ฉ ๋ชฉ์ : ์ด๋ฒคํธ ์ฒ๋ฆฌ / ์ค๋ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐํธ ์์ฑํ๊ธฐ ์ํด
- ์ฌ์ฉ ์ฉ๋ : ํ๋ / ๋ก์ปฌ๋ณ์์ ์ด๊ธฐ๊ฐ, ๋งค๊ฐ๋ณ์์ ๋งค๊ฐ๊ฐ์ผ๋ก ์ฌ์ฉ
- ๋จ๋ ์ผ๋ก ์์ฑ ๋ถ๊ฐ. ํด๋์ค ์์ or ์ธํฐํ์ด์ค ๊ตฌํ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ์ผํ์ฑ
์ต๋ช ์์ ๊ฐ์ฒด ์์ฑ
- ์์ ํด๋์ค๊ฐ ์ฌ์ฌ์ฉ ๋์ง ์๊ณ , ํ๋/๋ณ์์ ์ด๊ธฐ๊ฐ์ผ๋ก๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ๋ ์ต๋ช ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ด๊ธฐ๊ฐ์ผ๋ก ๋์ ํ๋ ๊ฒ์ด ์ ์ผ ์ข๋ค.
- ์ต๋ช ์์ ๊ฐ์ฒด์ ์๋กญ๊ฒ ์ ์๋ ํ๋์ ๋ฉ์๋๋ ๊ฐ์ฒด ๋ด๋ถ์์๋ง ์ฌ์ฉ. ์ธ๋ถ์์๋ ํ๋์ ๋ฉ์๋์ ์ ๊ทผ ๋ถ๊ฐ.
- ⇒ ๋ถ๋ชจ ํ์ ๋ณ์์ ๋์ ๋๋ฏ๋ก, ๋ถ๋ชจ ํ์ ์ ์ ์ธ๋ ๊ฒ๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ. (ํ๋ณํํ๋ฉด ๋์ง ์์๊น???)
์ต๋ช ๊ตฌํ ๊ฐ์ฒด ์์ฑ
- ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ํ๋์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ๋์ ํ๋ ๊ฒฝ์ฐ
- ๋ง์ฐฌ๊ฐ์ง๋ก ๊ตฌํ ํด๋์ค๊ฐ ์ฌ์ฌ์ฉ ๋์ง ์๊ณ , ํ๋/๋ณ์์ ์ด๊ธฐ๊ฐ์ผ๋ก๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ๋ ์ต๋ช ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ด๊ธฐ๊ฐ์ผ๋ก ๋์ ํ๋ ๊ฒ์ด ์ ์ผ ์ข๋ค.
- ์ฃผ์ํ ์ ์ผ๋ก ์ค๊ดํธ ์์๋ ์ธํฐํ์ด์ค์ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํด์ผํจ!
์ต๋ช ๊ฐ์ฒด์ ๋ก์ปฌ ๋ณ์ ์ฌ์ฉ
- ์ต๋ช ๊ฐ์ฒด ๋ด๋ถ์์๋ ์ธ๋ถ ํด๋์ค์ ํ๋์ ๋ฉ์๋๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅ.
- ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ๋ก์ปฌ๋ณ์๋ฅผ ์ต๋ช ๊ฐ์ฒด์์ ์ฌ์ฉํ ๋ ๋ฌธ์ ๋ฐ์
- ⇒ ์?
- ๋ฉ์๋ ๋ด์ ์์ฑ๋ ์ต๋ช ๊ฐ์ฒด๋ ๋ฉ์๋ ์คํ ์ข ๋ฃ ํ ๊ณ์ heap ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํด์ ์ฌ์ฉ ๊ฐ๋ฅ.
- ๋งค๊ฐ๋ณ์๋ ๋ก์ปฌ๋ณ์๋ ๋ฉ์๋ ์ข ๋ฃ ์ 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 ํ์