5์ฅ์ GRASP ์ฑ ์ํ ๋นํจํด์ ๋ํด์ ์ค๋ช ํ๊ณ ,
์ฑ ์์ ์ค์ฌ์ผ๋ก ์ค๊ณ๋ฅผ ํ๋ ๊ฒ์ด ์บก์ํ, ์์ง๋, ๊ฒฐํฉ๋ ๊ด์ ์์ ์ค๊ณ๋ฅผ ๊ฐ์ ํ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค.
๊ฐ์ฒด ๋์์ธ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๊ฒ ์ค์ ํ๋๋ ์ฑ ์์ ์ด๋์ ๋ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ค. ๋๋ ์ญ๋ ์ด์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์ผํ์ง๋ง ์ฒ์ ์์ํ ๋๋ ์ฌ์ ํ ์ ๋นํ ์์น๋ฅผ ์ฐพ์ง ๋ชปํ๋ค. ๋ ์ด๋ฐ ์ ์ด ๋๋ฅผ ๊ดด๋กญํ์ง๋ง, ์ด์ ๋ ์ด๋ฐ ๊ฒฝ์ฐ์ ๋ฆฌํฉํฐ๋ง์ ์ฌ์ฉํ๋ฉด ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค [Fowler 1999a](p.166).
GRASP
"General Responsibility Assignment Software Pattern
(์ผ๋ฐ์ ์ธ ์ฑ ์ ํ ๋น์ ์ํ ์ํํธ์จ์ด ํจํด)"
INFORMATION EXPERT(์ ๋ณด ์ ๋ฌธ๊ฐ) ํจํด
- ์ฑ ์์ ์ํํ ์ ๋ณด๋ฅผ ์๊ณ ์๋ ๊ฐ์ฒด์๊ฒ ์ฑ ์ ํ ๋น
- ์ฃผ์ํ ์ ์ ์ ๋ณด๋ ๋ฐ์ดํฐ์ ๋ค๋ฅด๋ค. ์ฆ, ์ ๋ณด ์ ๋ฌธ๊ฐ๋ ์ ๋ณด๋ฅผ ์๊ณ ์๋ค๊ณ ํด์ ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์์ ํ์๋ ์๋ค.
CREATOR(์ฐฝ์กฐ์) ํจํด
- ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ฑ ์์ ์ด๋ค ๊ฐ์ฒด์๊ฒ ํ ๋นํ ์ง์ ๋ํ ์ง์นจ ์ ๊ณต
- ์๋ฅผ ๋ค์ด, ์ํ ์๋งค ํ๋ ฅ์ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ Reservation ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ธ๋ฐ Reservation์ ์ ์๊ณ ์๊ฑฐ๋, ๊ธด๋ฐํ๊ฒ ์ฌ์ฉํ๊ฑฐ๋, ์ด๊ธฐํ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ ๋ฌด์์ธ๊ฐ? ์ ๊ฐ์ ์ง๋ฌธ์ ํตํด ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ฑ ์์ ํ ๋นํ๋ค.
POLYMORPHISM(๋คํ์ฑ) ํจํด
- ๊ฐ์ฒด์ ํ์ ์ ๋ฐ๋ผ ๋ณํ๋ ๋ก์ง์ด ์์ ๋ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ํ๊ณ ๊ฐ ํ์ ์ ๋คํ์ ์ผ๋ก ํ๋ํ๋ ์ฑ ์ ํ ๋น
- ํด๋์ค ๋ถํด -> ์ฑ ์ ๋ถ์ฐ
PROTECTED VARIATIONS(๋ณ๊ฒฝ ๋ณดํธ) ํจํด
- ๋ณํ๊ฐ ์์๋๋ ๋ถ์์ ํ ์ง์ ๋ค์ ์๋ณํ๊ณ ๊ทธ ์ฃผ์์ ์์ ๋ ์ธํฐํ์ด์ค๋ฅผ ํ์ฑํ๋๋ก ์ฑ ์ ํ ๋น
- ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ์ฌ ๋ณ๊ฒฝ์ ์บก์ํ
์ค๊ณ๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ
๋ฎ์ ์์ง๋๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณ๊ฒฝ์ ์ด์ ์ ๋ฐ๋ผ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ค.
์๋ํ๋ฉด ํด๋์ค๊ฐ ํ๋ ์ด์์ ์ด์ ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค๋ฉด ์์ง๋๊ฐ ๋ฎ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ผ ๋ณ๊ฒฝ์ ์ด์ ๋ ์ด๋ป๊ฒ ํ์ ํ ์ ์์๊น?
์ฒซ๋ฒ์งธ๋ก๋, ์ธ์คํด์ค ๋ณ์๊ฐ ์ด๊ธฐํ๋๋ ์์ ์ ์ดํด๋ณด๋ ๊ฒ์ด๋ค.
์์ง๋๊ฐ ๋์ ํด๋์ค๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๋ชจ๋ ์์ฑ์ ํจ๊ป ์ด๊ธฐํํ๋ค.
-> ํจ๊ป ์ด๊ธฐํ๋๋ ์์ฑ์ ๊ธฐ์ค์ผ๋ก ์ฝ๋ ๋ถ๋ฆฌ
๋ ๋ฒ์งธ๋ก๋, ๋ฉ์๋๋ค์ด ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ดํด๋ณด๋ ๊ฒ์ด๋ค.
๋ชจ๋ ๋ฉ์๋๊ฐ ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ ์ฌ์ฉํ๋ค๋ฉด ํด๋์ค์ ์์ง๋๋ ๋๋ค๊ณ ๋ณผ ์ ์๋ค
-> ์์ฑ ๊ทธ๋ฃน๊ณผ ํด๋น ๊ทธ๋ฃน์ ์ ๊ทผํ๋ ๋ฉ์๋ ๊ทธ๋ฃน์ ๊ธฐ์ค์ผ๋ก ์ฝ๋ ๋ถ๋ฆฌ
4์ฅ๊น์ง ์คํฐ๋๋ฅผ ํ๋ฉด์ ๋ง์ด ์ดํดํ๋ค๊ณ ์๊ฐํ๋๋ฐ ๋งค๋ฒ ์๋กญ๋ค.
์ฑ ์์ ์ค์ฌ์ผ๋ก ์ค๊ณํ๊ณ ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์์ง๋๋ฅผ ๊ณ ๋ คํ๊ณ ,
๋ณํํ๋ ๊ฒ์ ์บก์ํํ์ฌ ๋ณ๊ฒฝ์ ๋์ฒํ ์ ์๋ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ.
๊ฐ์ฒด์งํฅ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๋ด๊ฐ ๊ณ์ ๊ณ ๋ฏผํด ๋ณด๊ณ ์ถ๊ตฌํด์ผ ํ๋ ๋ฐฉํฅ์ด๋ค.
๊ฐ๋ ์ ๊ณ์ ๋ฐ๋ณต์ ์ผ๋ก ๊ณต๋ถํ๋๊น ์ด์ ์ ์ดํด๊ฐ ๋๋๋ฐ
์ด์์ ์ผ๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ด๋ ต๋ค. ํ์ง๋ง, ์ฐ๋ฆฌ์๊ฒ ๋ฆฌํฉํ ๋ง์ด ์๋ค.
๋จผ์ ์คํ๋๋ ์ฝ๋๋ถํฐ ์์ฑํ ๋ค์์ ์ฑ ์์ ์ด๋์ํค๋ฉด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด ๋ณด๋ ๊ฑฐ๋ค.
๋ฐ์ดํฐ ์ค์ฌ์ผ๋ก ๊ตฌํํ ๋ค์์ ๋ฆฌํฉํฐ๋งํด๋ ๊ด์ฐฎ๋ค.
์๋ฐ ๋ฌธ๋ฒ(์๋ฐ์ ์ ์ ์ฑํฐ 14 ์ฐธ๊ณ )
๋๋ค์ Stream
Stream์
- ๋ฐ์ดํฐ ์์ค๋ฅผ ์ถ์ํํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ค์ ์ ์ํด ๋์
- ๋ฐ์ดํฐ ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์์
- ์ผํ์ฉ์
- ์์ ์ ๋ด๋ถ ๋ฐ๋ณต์ผ๋ก ์ฒ๋ฆฌ(๋ฐ๋ณต๋ฌธ์ ๋ฉ์๋ ๋ด๋ถ์ ์จ๊น)
- ์คํธ๋ฆผ ์ฐ์ฐ
- ์ค๊ฐ์ฐ์ฐ/์ต์ข ์ฐ์ฐ์ผ๋ก ๋ถ๋ฅ
private boolean checkSequenceConditions(Screening screening) {
return sequenceConditions.stream()
.anyMatch(condition -> condition.isSatisfiedBy(Screening));
}
sequenceConditions๋ List <>์ธ๋ฐ ์ด ๊ฐ์ ๋ฐ์์ stream์ ์ต์ข ์ฐ์ฐ ์ค ํ๋์ธ boolean anyMatch (Predicate <T> p)๋ฅผ ํ์ฉํด isSatisfiedBy ์กฐ๊ฑด์ ํ๋๋ผ๋ ๋ง์กฑํ๋์ง ํ์ธํจ.
// TODO
๋๋ค/์คํธ๋ฆผ ๋ค์ ๊ณต๋ถ.
Predicate <T>๋ ๋ญ๊น..?
๋๋ค์ ์คํธ๋ฆผ ์ ๋ฆฌํ ๋ด์ฉ
์ฐธ๊ณ ์๋ฃ
https://docs.oracle.com/javase/tutorial/extra/generics/morefun.html
https://stackoverflow.com/questions/2827585/what-is-super-t-syntax
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
'์คํฐ๋ > ์ค๋ธ์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๋ธ์ ํธ] 7์ฅ '๊ฐ์ฒด ๋ถํด' (0) | 2022.11.25 |
---|---|
[์ค๋ธ์ ํธ] 6์ฅ '๋ฉ์์ง์ ์ธํฐํ์ด์ค' (1) | 2022.11.18 |
[์ค๋ธ์ ํธ] 4์ฅ '์ค๊ณ ํ์ง๊ณผ ํธ๋ ์ด๋์คํ' (0) | 2022.11.04 |
[์ค๋ธ์ ํธ] 3์ฅ '์ญํ , ์ฑ ์, ํ๋ ฅ' (0) | 2022.10.27 |
[์ค๋ธ์ ํธ] 2์ฅ '๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ' (0) | 2022.10.21 |
๋๊ธ