์ก์๋ฆฌ1
by JiwonDevDRY
Dont Repeat Yourself
OCP
Solid ์ ์ฒด๊ฐ OCP๋ฅผ ์ํ ํ๋ถ์์น์ด๋ผ๊ณ ๋ ๋ณผ ์ ์๋ค.
์ํํธ์จ์ด์ ๊ตฌ์ฑ์์๋ ํ์ฅ์ ๊ฐ๋ฅํ์ง๋ง ์์ ์ ๋ถ๊ฐ๋ฅํด์ผํ๋ค.
๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ํ์ฌ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ๊ฐ๋ฅํด์ผํ๋ค.
๋จ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ ํ ๋, ๋ค๋ฅธ ๋ชจ๋์ด ์ํฅ๋ฐ์ง ์๋๋ก ํ๋ผ. (์ธํฐํ์ด์ค๋ฅผ ์์ ํ๋ ค๊ณ ํ์ง๋ง๋ผ)
์ํคํ ์ฒ๋ฅผ ์ด์ผ๊ธฐํ ๋์๋, ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(Separation of Concerns) ๋ผ๋ ์ฉ์ด๋ฅผ ์์ฃผ ๋ฃ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์๋ก ๋ค๋ฅด๊ณ ๊ด๋ จ์ด ์๋ ์ฑ ์(Responsibility)๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค.
๐ญ ์ปดํจํฐ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋๊ตฌ์ด๋ค.
์ฌ์ฉ์์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ํธ๋์ญ์ ๋จ์๋ก ๊ตฌ๋ถ ์ง๊ฒ ๋๋ค.
์ฆ ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ปดํจํฐ๋ก ์ฌ๋ฌ ํธ๋์ญ์ (์ด๋ฒคํธ)๋ฅผ ์ฒ๋ฆฌํ๋ ์คํฌ๋ฆฝํธ์ ๋ชจ์์ด๋ค.
๐ญ ์ํคํ ์ฒ์ ์ญ์ฌ
์ค๋๋ ์ฐ๋ฆฌ๋ ๋ค์ค ๊ณ์ธต ์ํคํ ์ฒ (Multi-Layer Architecture)๋ฅผ ๋น์ฐํ๊ฒ ์ฌ์ฉํ๋ค.
๊ตฌ์กฐ๋ ์ด๋ฆ์ ๋ค ๋ค๋ฅด์ง๋ง ๊ฒฐ๊ตญ ํฐ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด [ํํ - ๋น์ฆ๋์ค - ๋ฐ์ดํฐ] 3๊ณ์ธต์ผ๋ก ๋๋๋๊ฒ ์ ์ผ ํํ๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ Web Service๋ฅผ ์์๋ก ๋ค๋ฉด
1. ์ฌ์ฉ์๊ฐ Client (์น ๋ธ๋ผ์ฐ์ )์ UI๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ฉด, Client๋ ์น ์๋ฒ๋ก ์์ฒญ์ ์ ์กํจ.
2. ์น ์๋ฒ๋ ๋ธ๋ผ์ฐ์ ์ ์์ฒญ์ ๋ฐ๊ณ , ์ฌ๋ฐ๋ฅธ ์์ฒญ์ธ์ง ๊ฒ์ฆํ ํ [๋น์ฆ๋์ค ๋ก์ง]์ ํธ์ถํจ
3. [๋น์ฆ๋์ค ๋ก์ง]์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ณ , ํ์์ ๋ฐ๋ผ [๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต]์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ฑฐ๋ ์ ์ฅํจ.
4. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด [ํ๋ ์ ํ ์ด์ ๊ณ์ธต]์ ๊ฒฐ๊ณผ ๊ฐ์ ์ ๋ฌํ๊ณ , ๋ค์ ์น ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ฐํํจ.
5. ์น ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ์ฒ๋ฆฌ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฌ์ฉ์์๊ฒ ์์ฒญํ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ฑฐ๋, ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ค.
1. ๋น์ฐํ ์ต์ด์ ์ปดํจํฐ๋ ์ํคํ ์ฒ๋ผ๋ ๊ฐ๋ ์ด ์์๋ค.
๊ทธ๋ฅ ์ค์์ง์ค ์ฒ๋ฆฌ๋ฐฉ์.
์ผ๊ด ์ฒ๋ฆฌ ์์คํ (Batch)์ ๊ตฌ์ถํด์ ์ฌ์ฉ์์ ์์ฒญ์์ (๊ทธ ๋น์ ์ฒ๊ณต์นด๋)๋ฅผ ๋ชจ์๋์ ์ผ์ ์๊ฐ๋ง๋ค ํ๋ฒ์ ๊ณ์ฐํ๋ ๋ฐฉ์์ด์๋ค. ์ด๋ ์ฌ์ฉ์ ์ ์ฅ์์ ์์ฒญ์ด ๋ฐ๋ ค์๋ค๋ฉด ๋ด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ธฐ๊น์ง 5~6์๊ฐ์ด ๊ฑธ๋ฆฌ๋๊ฒ ๋น์ฐํ์๋ค.
2. ๋น์ฐํ ์ด ๋ฐฉ์์ ๋นํจ์จ์ ์ด์๋ค. ์๋ก์ด ๋ชจ๋ธ์ด ํ์ํ๋ค.
์ดํ ์๋๊ฐ ๋ฐ์ ํ๋ฉฐ ๊ฐ์ธ์ฉ ์ปดํจํฐ(PC), ์๋ฒ์ฉ ์ํฌ์คํ ์ด์ ์ด ๋ฑ์ฅํ์ ์์คํ ๊ฐ๋ฐ์๋ค์ '์๋ฒ์์๋ง ๋ชจ๋ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ์ ๊ณต'ํ๋๊ฒ ์๋๋ผ, ์ฌ์ฉ์ ์ฅ๋น์์๋ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋๋ก ์์คํ ์ ๊ตฌ์ถํ์๋ค. ์ด๊ฒ ๋ฐ๋ก ๊ทธ ์ ๋ช ํ Client-Server ๋ชจ๋ธ์ ์์ด.
3. Client-Server๋ ๋งค์ฐ ํฐ ๋จ์ ์ด ์์๋ค.
์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ํ ๊ตฌ๋ถ์ด ๊ฑฐ์ ์์๋ค. ๋๋ก ์ฌ์ฉ์ PC(Client ์ฝ๋)์์ ๋ก์ง์ด ํฌํจ๋ ์ํ๋ก ์กด์ฌํ๊ธฐ๋ ํ์๋ค. ์ด๋ ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ์ฝ๋๊ฐ ์ ๋ง ๋์กํ๊ฒ ๋ง๋ค์ด์ก์๋ค.
2000๋ ๋ ์น์๋น์ค๋ ๊ฐ๋ฐ ์ 'ํ๋ฉด ๋จ์'๋ก ์์ ์ ๋๋๋๊ฒ ์ผ๋ฐ์ ์ด ์๋ค. ์ด๋ ์๋ ์ Client - Server ๋จ์ผ ๊ตฌ์กฐ์ ๊ฐ๋ฐ ๋ฐฉ์์ด์๋ค. ์ด ๋ฐฉ๋ฒ์ ํ ๊ฐ๋ฐ์๊ฐ ๋๋ฌด ๋ง์ ๊ด์ฌ์ฌ๋ฅผ ๊ฐ์ง๊ฒ ๋๊ณ , ๋ถ์ ์ด๋ ์ ์ง๋ณด์๋ ๋งค์ฐ ์ด๋ ค์ ์๋ค.
4. ์ด๋ ๊ฒ ๊ณ ํต์ ๋ฐ๋ค๋ณด๋, ์ญํ ๋ณ๋ก ์์ญ์ ๋ถ๋ฆฌํ๋๊ฒ ์ค์ํ๋ค๋๊ฑธ ๊นจ๋ฌ์๋ค.
๊ฐ ์ญํ ์ ํ์คํ๊ฒ ๋ถ๋ฆฌํ๊ธฐ ์ํด์ Cilent-Server ์ฌ์ด์ ์ฌ๋ฌ ๊ณ์ธต(๋ฏธ๋ค ์จ์ด)๋ฅผ ๋ผ์๋ฃ์๋ค. ์ฆ [๋น์ฆ๋์ค๋ฅผ ๋ด๋นํ๋ App Server] [DB๋ฅผ ๋ด๋นํ๋ ์ฝ๋]๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์๋ค.
์ด๋ ๊ฒ ๊ณ์ธต์ ํ์คํ๊ฒ ๋๋๋ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ ๊ฒ๋ ์์ง๋ง, ์๋์ ๊ฐ์ ํน์ง๋ ์์๋ค.
- ํด๋ผ์ด์ธํธ์ ๋น์ฆ๋์ค ๋ก์ง์ด ํ์คํ๊ฒ ๋ถ๋ฆฌ๊ฐ ๋๋ค๋ณด๋ ๊ฐ์๊ฐ ๋งก์ ๋ถ๋ถ๋ง ๋ถ๋ด, ์ง์คํด์ ๊ฐ๋ฐํ ์ ์์๋ค.
โก ๊ด์ฌ์ฌ๊ฐ ๋ถ๋ฆฌ๋์๋ค. UI ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ํ ๊ณ ๋ฏผ์ ํ์ง ์์๋ ๋๋ค. - ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ๋ก ๋ง๋ค์ด ์๋น์ค๋ฅผ ๋น ๋ฅด๊ฒ ์์ฐํ ์ ์์๋ค.
5. ๊ทธ๋ฐ๋ฐ ์์ญ์ ๋๋๋ ์์ผ๊ฐ ์ข์์ง๊ฒ ๋๋ค.
ํ์คํ๊ฒ ๋ถ์ ์ ํ๋ค๋ณด๋ ๊ฐ๋ฐ ํจ์จ์ ๋งค์ฐ ์ข์์ก๊ณ , ์ ์ง๋ณด์๋ ์ฌ์์ก๋ค.
ํ์ง๋ง ์ด๋ก์ธํด ์๊ธด ๋จ์ ์ด ํ๋์๋๋ฐ, [๊ธฐํ์ - ๊ฐ๋ฐ์ - ๊ทธ ์ธ ํ์๋ค]์ด ๊ฐ์ ์์ผ๋ฅผ ๊ณต์ ํ๊ธฐ ์ด๋ ค์์ง ๊ฒ์ด๋ค.
๋ชจ๋ ์๋น์ค๊ฐ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค๋ฉด, ํ์๋ค์ด ๊ฐ์ ์์ผ๋ฅผ ๊ฐ์ง ํ์๊ฐ ์๋ค.
๊ทธ๋ฅ ๊ณต์ฅ์์ ๋ถํ์ ์ฐ์ด๋ด๋ฏ์ด ๋ณธ์ธ์ด ํ ์ผ๋ง ์ํ๋ค๋ฉด, ์๋น์ค๋ ์ ๋์๊ฐ ๊ฒ์ด๋ค.
ํ์ง๋ง ํ์ค์ ์ธ ์ฑ์ ๊ทธ๋ ๊ฒ ๋์ํ์ง ์๋๋ค. ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ด ํ์ ํ๊ณ , ์ฌ๋ฌ DB์ ์์ฒญ์ ํ๋ค.
[ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ๋ง๋๋๊ฐ] ์ ๋ํ ์ดํด๊ฐ ์๋ ๊ฐ๋ฐ์, ์๋น์ค๋ฅผ ๋ง๋ค์ด๋๊ฐ๋๋ฐ ํฐ ๊ฑธ๋ฆผ๋์ด ๋์๋ค.
์ด๊ฒ ๊ฑด๋ฌผ์ ์ง๋ ๊ฑด์ง ํต๋ก๋ฅผ ๋ง๋๋ ๊ฑด์ง ๋ชจ๋ฅด๊ณ ๊ทธ๋ฅ ๋ฌด์์ ๋ ์๋ค ์ฝ์งํ๋ ๊ฒ๊ณผ ๊ฐ์๋ค.
์๋ ์ Client-Server ๊ตฌ๋ฅ๋ค๋ฆฌ ๋ฐฉ์์ ๊ฐ๋ฐ ํจ์จ์ ๋๋นด์ง๋ง, ์ ์ด๋ ๋ชจ๋ ํ์์ด ๊ณตํต๋ ์๋น์ค์ ๋ํ ์ดํด๊ฐ ์์๋ค. ํ์ง๋ง ์ง๊ธ์ ๊ทธ๋ ์ง ์๋ค. ๋ถ์ ์ ์ฝ๊ฒ ๊ฐ๋ฅํ์ง๋ง ๋ด๊ฐ ๋ฌด์์ ๋ง๋๋์ง์ ๋ํ ์ดํด๊ฐ ์ด๋ ค์์ก๋ค.
๐ญ ์ค๋งํธ DAO, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ๋ ๊ฐ๋ฐ
๊ธฐ์กด์ DAO๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๊ฒ ์์ํ๋ ๊ฐ๋จํ ์ญํ ๋ง ๋งก์์๋ค.
๊ทธ๋์ ์ค์ ๋น์ฆ๋์ค ๋ก์ง๋ค์ ์๋ SQL๋ฌธ์์ ๋ น์ ๋ค๊ฒ ๋๋ค.
SELECT username, secword
FROM user
WHERE UID=1 AND birday > "20000101" AND gender='F' AND rate > 40 AND status='T';
UPDATE users
SET rate = rate + 10
WHERE UID=112 AND gender='F' AND rate > 40 AND status='T';
์ฐ๋ฆฌ๋ ์ํํธ์จ์ด์ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ธฐ์ํด์, ๊ฐ์ฒด์งํฅ์ด๋ ์๋์ ๊ฐ์ ์ฌ๋ฌ ๊ธฐ์ ๋ค์ ๋ฐฐ์์์๋ค.
- Abstraction (์ถ์ํ)
- Encapsulation (์บก์ํ) & Information Hiding ( ์ ๋ณด ์๋)
- Modularization (๋ชจ๋ํ)
- Seprataion of Concerns (๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ)
- Coupling and Cohesion (์์ง๋์ ๊ฒฐํฉ๋)
- Divide And Conquer (๋ถํ ์ ๋ณต)
๊ทธ๋ฌ๋ ์์ ๊ฐ์ด SQL์ ๋ชจ๋ ๋ก์ง์ ๋ด์๋ฒ๋ฆฌ๋ฉด, ๋ฐฉ๊ธ ์ธ๊ธํ ๋ชจ๋ ๊ฐ๋ ๋ค์ ๋ฌด์ฉ์ง๋ฌผ์ด ๋์ด๋ฒ๋ฆฐ๋ค.
SQL์ ์ญํ ์ ์ค์ฌ์ผํ๋ค. ๋ก์ง์ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋์์ ์ฒ๋ฆฌํด์ผํ๋ค.
- Active Record ๋๋ ORM
- Query Builder (JooQ, QueryDSL)
- Table Data Gateway
์ํ๋ฅผ ์์ํ ํด์ผํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ์ ์ฅํ๋๊ฒ ๋จ์ํ SQL๋ฌธ์ด ์๋ค๋ฉด, ๋ฉ๋ชจ๋ฆฌ์์ ์ํ๋ฅผ ๋ณด๊ด(์์ํ)ํด์ผ ํ๋ค.
DB์ ์ ์ฅํ๋ค๋ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ง์ ์ํ ์กฐ์์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ํ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ณต์ก๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๋ค.
์ด๋ ์ดํ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ค๋ช ํ๋ฉด์ ์ถ๊ฐ๋ก ์ค๋ช ํ๊ฒ ๋ค.
๐ญ ๋ค๋ฒ๋ฒ ์ํคํ ์ฒ
์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ก์ง์ด ๋๋ฌด ์์ฌ์๋ค.
๋ฉ์๋๋ง๋ค [๋ก๊ทธ, ์ธ์ฆ์ธ๊ฐ, ๋ชจ๋ํฐ๋ง]๋ฑ ๋ฐ๋ณต์ ์ธ ํก์ ์ธ ๊ด์ฌ์ฌ ๋ก์ง์ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ต๋ค.
- ํ์ดํ & ํํฐ ํจํด (์์๋๋ก ๋์ดํ๊ณ , ํ์ดํ๋ก ์ฒ๋ฆฌ. ์๋ธ๋ฆฟ ํํฐ)
- AOP
๐ญ ๊ธด ๊ณต๊ฐ ๋ฉ์๋ (๋ฉ์๋ ๋จ์์ ๊ธฐ๋ฅ ๋ถ์ )
๋ฉ์๋ ๋จ์์ ๋ฆฌํํ ๋ง์ด ๋์ด์์ง ์๋ค. ๋ฉ์๋๋ ๊ธฐ๋ฅ์ด ๋ถํ๋์ด์์ด์ผ ํ๋ค.
ํด๋์ค์ ๊ณต๊ฐ๋ฉ์๋๋ง ์กด์ฌํ๊ณ ๊ฐ ๋ฉ์๋์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ๊ธธ๋ฉด ์ ์ง๋ณด์์ฑ์ด ๋จ์ด์ง๋ค.
- ๊ธฐ๋ฅ๋จ์์ ๋ฉ์๋ ๋ถ๋ฆฌ, ์ค๋ณต์ ์ ๊ฑฐ
- ๋จ์ผ ์ฑ ์ ์์น ์๋ฐ
- ์ฌ์ฌ์ฉ ์ฝ๋์ ๋ฐ๊ฒฌ, ์ถ์ํ์ ๊ธฐํ
๋ณต์กํ ๊ธฐ๋ฅ์ ๋ฉ์๋๋ค์ ํ์ ์ผ๋ก ๊ตฌํํด์ผํ๋ค. ๊ธฐ๋ฅ์ ์ถ์ํํ์.
์๋์ StringCalculator ํด๋์ค๋ฅผ ์๋ฅผ ๋ค์ด๋ณด์.
public class StringCalculator {
public int calculate(String text) {
if (text == null || text.length() == 0) {
return 0;
} else if (text.contains(",")) {
String[] values = text.split(",");
int sum = 0;
for (String val : values) {
sum += Integer.parseInt(val);
}
return sum;
}
return Integer.parseInt(text);
}
}
๋์์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๋ค. ํ์ง๋ง ํ ๋ฉ์๋์์ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ณ ์๊ณ , ์ฝ๋๋ง์ผ๋ก ๋์์ ์ดํดํ๊ธฐ๋ ์ด๋ ต๋ค.
๊ธด ๋ฉ์๋์ ์ญํ ์ ๋ถ๋ฆฌํ๊ณ , ๋์์ ๋ฉ์๋์ ์กฐํฉ์ผ๋ก ๊ตฌํํด์ผํ๋ค.
public class StringCalculator {
public int calculate(String text) {
if (isBlank(text)) {
return 0;
}
String[] values = splitToken(text);
return sum(toInt(values));
}
}
์ด์ calculate๊ฐ ๋ฌด์จ ๋์์ ํ๋์ง ์๊ฒ ๋๊ฐ? isBlank -> split -> toInt -> sum
๊ตณ์ด ์ธ๋ถ ๋ฉ์๋๋ฅผ ๊น๋ณด์ง์๋๋ผ๋, ๋์์ ์ถฉ๋ถํ ์ ์ถํ ์ ์๋ค. ๋ง์น ์ฝ๋๋ก ์์ฌ์ํต ํ๋ ๊ฒ ๊ฐ๋ค.
๋ด๋ถ ๊ตฌํ์ ์ ํ ๋ชจ๋ฅด๋๋ผ๋, ๋น์ฆ๋์ค ๋ก์ง๋ง์ผ๋ก ์ด๋ ํ ๋์์ ํ๋์ง ํ๋์ ์ ์ ์๋ค. ๋ํ ๊ฐ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ํ์ฅํ๊ธฐ๋ ์ฉ์ดํ๋ค. ์๋ฅผ ๋ค์ด ๋ง์ฝ ์ ๋ ฅ ๋ฌธ์์ด์ ์ข ๋ฅ๋ฅผ ํ์ฅํ๊ณ ์ถ๋ค๋ฉด splitToken()๋ง ์์ ํ๋ฉด ๋๋ค.
public class StringCalculator {
public int calculate(String text) {
if (isBlank(text)) {
return 0;
}
String[] values = splitToken(text);
return sum(toInt(values));
}
private int sum(int[] values) {
return Arrays.stream(values)
.sum();
}
private int[] toInt(String[] values) {
return Arrays.stream(values)
.mapToInt(Integer::parseInt)
.toArray();
}
private String[] splitToken(String text) {
return text.split(",");
}
private boolean isBlank(String text) {
return text == null || text.isEmpty();
}
}
์์ ๋ ๋๋ฌด ์ฌํ๊ฒ ๋๋ ๊ฒ์ด ์๋๊ฐ ๊ฑฑ์ ๋๊ธฐ๋ ํ๋ค. ํ์ง๋ง ํ์์ ์ด๋ฌํ ์ต๊ด์ ๊ฐ์ง๊ณ ์์ด์ผ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๋ฌ์ ๋, ๋ฉ์๋๋ฅผ ๋๋๋ ์ต๊ด์ด ๋ค๊ฒ ๋๋ค.
- Public ๋ฉ์๋๋ ์ถ์ํ๋ ์ด์ผ๊ธฐ(์๋, ์์ ํ๋ฆ)์ ๋ํ๋ด๋ผ.
- Private ๋ฉ์๋๋ ์ด์ผ๊ธฐ์ ์๋ฏธ๋ฅผ ์ ์ํ๋ผ.
- ์๊ฒ ๋ง๋ค๊ณ ํ๊ฐ์ง๋ง ํ๋ผ(SRP)
- ํจ์๋ด ๋์ผํ ์ถ์ํ ์์ค์ ์ ์งํ๋ผ.
- ๋ช ๋ น๊ณผ ์กฐํ๋ฅผ ๋ถ๋ฆฌํ๊ณ ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ.
- ๊ณ ์ฐจ ํจ์๋ฅผ ์ด์ฉํด์ ํจ์ ์์ค์ผ๋ก ์ถ์ํํ๋ผ (๋๋ค์)
public String renderPage(PageData data, boolean isSuite) {
ResultPage result = prepareResultPage(isSuite);
if (isTestPage(data)) {
result.includeSetup(data);
result.includeTeardown(data);
}
return result.getHtml();
}
๐ญ ํด๋์ค ์ถ๊ฐ ๊ณตํฌ์ฆ
OCP๋ฅผ ์ ์ง์ผฐ๋ค๋ฉด ์ ํ ๋ฌด์ญ์ง์๋ค.
TDD์ ๋ํด์๋ ์์๋ณด์.
๐ญ ๋ฌด๊ฑฐ์ด ์๋น์ค ์ ๋ฆฌ
AOP๋ฅผ ์ด์ฉํด์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์
์กฐํฉ ๋ฉ์๋๋ฅผ ํ์ฉํ๊ณ DSL(๋๋ฉ์ธ ์ ์ ์ธ์ด)๋ฅผ ๊ฐ๋ฐํ์
๋๋ฉ์ธ ๋ชจ๋ธ์ ๋์ ํ์
ํฐ ์๋น์ค๋ฅผ ์์ ํด๋์ค๋ก ๋ถํดํ๊ณ ์์ํ์
๋์ ์์ง๋๋ฅผ ๊ฐ์ง๊ณ , ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ๋๋ก ์ค๊ณํ์.
'๐์ผ์ > ๋ฉํ ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์กด์ฑ์ ์ด์ฉํด ์ค๊ณ ์งํ์ํค๊ธฐ (0) | 2021.11.13 |
---|---|
์ก์๋ฆฌ3 (0) | 2021.11.12 |
์ก์๋ฆฌ2 (0) | 2021.11.12 |
ํ๋ก์ ํธ ๊ธฐํ (2021 11 06) (0) | 2021.11.06 |
2์ฃผ์ฐจ (0) | 2021.08.04 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev