-
Notifications
You must be signed in to change notification settings - Fork 2
The Law of Demeter(Don't Talk to Strangers)
๋ณธ ๋ด์ฉ์ ์ดํด๋ฅผ ์ํด ๊ฐ๋จํ ์ค๋ช ํ ๋ด์ฉ์ผ๋ก
์๋ ๋ด์ฉ๊ณผ ํ๋ฆฐ์ ์ด ์กด์ฌํ ์ ์์ต๋๋ค.
ํ๋ฆฐ์ ์ด ๋ฐ๊ฒฌ๋๋ฉด ๋ด๋น์์๊ฒ ๋ฌธ์๋จ๊ฒจ์ฃผ์ธ์.
๋๋ฏธํฐ ํน์ ๋๋ฉํ ๋ฅด๋ผ ๋ถ๋ฆฌ๋ ์ด ๋ฒ์น์ด๋.
๊ฐ์ฒด ์งํฅ ๋์์ธ ์์น์ค ํ๋๋ก "์ต์ ์ง์ ์์น"
๊ฒฐํฉ๋๊ฐ ๋ฎ์ ์ค๊ณ๋ฅผ ์ํ ์์น์ด๋ค.
๊ฒฐํฉ๋๊ฐ ๋์ผ๋ฉด ํ๋๋ฅผ ์์ ํ๋ฉด ํด๋น ์ฌํญ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ณณ์์ ์์ ์ด ์ผ์ด๋์ผํ๋ค.
ํ์ง๋ง ๊ฒฐํฉ๋๊ฐ ๋ฎ์ผ๋ฉด ์ด๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ค ๋๋ฏธํฐ์ ๋ฒ์น์ ๋ฉ์๋ ๋ด์ ๋ค๋ฅธ ๊ฐ์ฒด/API ๋ฑ์ ํธ์ถ์ ๊ด๋ จ๋ ์์น์ ๋งํ๋ค.
๋๋ฏธํฐ ๋ฒ์น์ "ํด๋์ค C์ ๋ฉ์๋ f๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด์ ๋ฉ์๋๋ง ํธ์ถํด์ผ ํ๋ค"๊ณ ์ฃผ์ฅํ๋ค.
- ํด๋์ค C
- f๊ฐ ์์ฑํ ๊ฐ์ฒด
- f ์ธ์๋ก ๋์ด์จ ๊ฐ์ฒด
- C ์ธ์คํด์ค ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ฒด
์ฝ๊ฒ ๋งํด์ A๊ฐ B๋ฅผ ์ฌ์ฉํ๊ณ B๊ฐ C๋ฅผ ์ฌ์ฉํ ๋ A๊ฐ C๋ฅผ ์ํ์๊ฐ ์๋ค.
๊ฐ๋จํ๊ฒ ํํํ์๋ฉด ์๋์ ๊ฐ๋ค.
ํ ๋ชจ๋์ด ๋ด๋ถ ๊ตฌํ์ ์์์ผํ๋ ๋ค๋ฅธ ๋ชจ๋๋ค์ ์ต๋ํ ์ ๊ฒ ์ ์งํ๋ค.
- ํด๋์ค ์๊ธฐ ์์ ์ ๋ฉ์๋ ๋๋ ์ธ์คํด์ค ๋ณ์์ ๋ฉ์๋ ๋ง ์คํ ๊ฐ๋ฅํ๋ค.
- ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋ณด๋ด์ง ๊ฐ์ฒด์ ๋ฉ์๋๋ง ์คํ ๊ฐ๋ฅํ๋ค.
- ๋ฉ์๋ ๋๋ ์ธ์คํด์ค ๋ณ์๊ฐ ์ง์ ์ด๊ธฐํํ ๊ฐ์ฒด์ผ๋ ์คํ ๊ฐ๋ฅํ๋ค.
- ํธ์ถ์ ์ํด์ ๋ฉ์๋ ๋๋ ์์ฑ์ผ๋ก ๊ฐ์ ํด๋์ค ์์์ ์ ์ธ๋ ๊ฐ์ฒด๋ง ์คํ ๊ฐ๋ฅํ๋ค.
- ์ฑ๊ธํด ๊ฐ์ ์ ์ญ ๊ฐ์ฒด์ผ๋๋ง ์คํ ๊ฐ๋ฅํ๋ค.
๋๋ฏธํฐ ๋ฒ์น์ ๋ชป ์งํจ ํํโ
human.Stomach.IsEmpty()
๋๋ฏธํฐ ๋ฒ์น์ ์ ์งํจ ํํโ
human.IsHungry()
์ human.Stomach.IsEmpty() ๊ฒฝ์ฐ
human๊ฐ์ฒด ์์ Stomach๊ฐ์ฒด๋ฅผ ๋ฐ์์ IsEmpty()๋ฅผ ํธ์ถํ๊ณ ํ๋ณํ์ฌ ๋ฐํํ๋ IsHungry()๋ก ์จ์ผ ์ถํ Stomach์ IsEmpty()๋ฅผ ์์ ํ๋๋ผ๋ human๊น์ง ์์ ํ ํ์๊ฐ ์์ด์ง๋ค.
๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๊ฒฝ์ฐ๋ ํด๋น ์์น์ ๋ฐ๋ฅผ ํ์๊ฐ ์๋ค๊ณ ํ๋ค. ์๋ฃ ๊ตฌ์กฐ์์๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ ธ์ถํ๊ธฐ ๋๋ฌธ์ด๋ค.
val myFile:File = mfile.getFile()
val myFilePaht:String = mfile.getFile().getFileAbsolutePath()
๋๋ฏธํฐ ๋ฒ์น์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ํ๋ณํด์ผํ๋ค. ๋ํ ๊ทธ ํ๋ณ์ด ์ํฉ๋ง๋ค ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ์ด๋ถ๋ฒ ์ ์ผ๋ก ์๊ฐํ์ง ์์์ผํ๋ค.
๊ธฐ์ฐจ ์ถฉ๋ ํผํ๊ธฐ(๋๋ฏธํฐ ๋ฒ์น ์๋ฐ)
object.getChild().getContent().getItem().getTitle()
ํ๋ก๊ทธ๋จ ์ํ ๊ฒฝ๋ก๊ฐ ๊ธธ์๋ก ๋ถ์์ ํ๊ธฐ ๋๋ฌธ์ ์์ ๋ฐฉ์์ ํผํ๋๋ก ํ๋ค.
//myService๋ ์ธํฐํ์ด์ค์ด๊ณ ์ฑ๊ธํด์ผ๋ก instance๋ฅผ ํธ์ถํ์ฌ ์ธ์คํด์ค๋ก ์์ฑ๋๋ค.
myService.getInstance()
.requestToMyAPI(...)
/*
์์ ๊ฒฝ์ฐ๋ myService๋ ์ธํฐํ์ด์ค ์ด๊ณ .getInstance๋ก ์ธ์คํด์ค๊ฐ ๋์ด myService๊ฐ ๋ค๋ฅธ myService๋ก ๋ณํ๋๊ณ . ์ด๋ฅผ ๋๋ฌ์ผ ์บก์์ ์ ์ง๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ์ธ์คํด์ค์ ๋ฉ์๋๊ฐ requestToMyAPI()์ด๋ค.
*/
//๋๋ค๋ฅธ ์๋ฐ8์ IntStream ์์
IntStream.of(1,20,3,40)
.filter(x -> x>10)
.distinct()
.count()
/*
์์ ๊ฒฝ์ฐ๋ of,filter,distinct ๋ฉ์๋๊ฐ ๋ชจ๋ IntStream์ด๋ผ๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ์ฌ ๊ฐ์ผ ์บก์์ด ์ ์ง ๋๋ค.
*/