-
[๐ ์ดํํฐ๋ธ ์ฝํ๋ฆฐ] 4 ์ถ์ํBook/Effective Kotlin 2023. 7. 4. 16:09๋ฐ์ํ
๐ item 26 ํจ์ ๋ด๋ถ์ ์ถ์ํ ๋ ๋ฒจ์ ํต์ผํ๋ผ
์ถ์ํ ๋ ๋ฒจ ํต์ผ ์์น(Single Level Of Abstraction, SLA) ์ด๋?
์ปดํจํฐ ๊ณผํ์ด ๋์ ๋ ๋ฒจ๊ณผ ๋ฎ์ ๋ ๋ฒจ์ ํ์คํ๊ฒ ๊ตฌ๋ถํ๊ณ ์๋ ๊ฒ์ฒ๋ผ, ํจ์๋ ๋์ ๋ ๋ฒจ๊ณผ ๋ฎ์ ๋ ๋ฒจ์ ๊ตฌ๋ถํด์ ์ฌ์ฉํด์ผํ๋ค๋ ์์น
๋์ ๋ ๋ฒจ์ ๋ชจ๋ - ๋น์ฆ๋์ค ๋ก์ง
๋ฎ์ ๋ ๋ฒจ์ ๋ชจ๋ - ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ํ๋ด๋ ๋ชจ๋(view, http ์์ฒญ ์ฒ๋ฆฌ ๋ฑ)
๊ณ์ธต์ด ์ ๋ถ๋ฆฌ๋ ํ๋ก์ ํธ = ์ข์ ํ๋ก์ ํธ
๐ item 27 ๋ณํ๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋ณดํธํ๋ ค๋ฉด ์ถ์ํ๋ฅผ ์ฌ์ฉํ๋ผ
- ์์ ์ถ์ถ
- ํจ์ (๋์ ๋ํ)
- ํด๋์ค (ํจ์ ๋ํ)
- ์ธํฐํ์ด์ค
- ํน์ํ ๊ฐ์ฒด (๋ณดํธ์ ์ธ ๊ฐ์ฒด ๋ํ)
์ด๋ป๊ฒ ๊ท ํ์ ๋ง์ถ๊น?
์ถ์ํ์ ๊ท ํ์ ์ฐพ๋ ๊ฒ์ ๊ฑฐ์ ๊ฐ๊ฐ์ ์์กดํด์ผํ๋ ์์ ์ ๊ฐ๊น๋ค. ๊ทธ๋๋ ์ฌ์ฉํ ์ ์๋ ๋ช๊ฐ์ง ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ฐธ์ฌํ๋ ํ๋ก์ ํธ๋ ์ดํ์ ๊ฐ์ฒด ์์ฑ๊ณผ ์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ค์ฐ๋ฏ๋ก ์ถ์ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค. ์ต๋ํ ๋ชจ๋๊ณผ ๋ถ๋ถ(part)์ ๋ถ๋ฆฌํ์.
- ์์กด์ฑ ์ฃผ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด, ์์ฑ์ด ์ผ๋ง๋ ๋ณต์กํ์ง๋ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค. ํด๋์ค ๋ฑ์ ํ ๋ฒ๋ง ์ ์ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ ์คํธ๋ฅผ ํ๊ฑฐ๋ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ ๋ค๋ฉด ์ถ์ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
- ํ๋ก์ ํธ๊ฐ ์๊ณ ์คํ์ ์ด๋ผ๋ฉด ์ถ์ํ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ต๋ํ ๋นจ๋ฆฌ ์ง์ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
์ถ์ํ๋ฅผ ์ฌ์ฉํ ๋์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ชจ๋ ์ดํดํ๊ณ , ํ๋ก์ ํธ ๋ด์์ ๊ทธ ๊ท ํ์ ์ฐพ์์ผํ๋ค. ์ถ์ํ๊ฐ ๋๋ฌด ๋ง๊ฑฐ๋ ๋๋ฌด ์ ์ ์ํฉ ๋ชจ๋ ์ข์ ์ํฉ์ด์๋๋ค.
๐ item 28 API ์์ ์ฑ์ ํ์ธํ๋ผ
API = Application Programming Interface
- ์์ ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋๋ ค์ํ์ง๋ง๋ผ
- ์๋ก์ด API ๋ฅผ ๋ฐฐ์์ผํ๋ค.
๋ชจ๋๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋์ฌ๋์ ์ด๋ค์ ์ฌ์ฉํ๋ ์ฌ๋๋ค๊ณผ ์ปค๋ฎค๋์ผ์ด์ ์ด ์ ์ผ ์ค์ํ๋ค.
๋ํ ์์ ์ ์ธ API์ ๋ณ๊ฒฝ์ ๊ฐํ ๋๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ์๊ฐ์ ์ถฉ๋ถํ ์ค์ผํ๋ค.
๐ item 29 ์ธ๋ถ API๋ฅผ ๋ฉ(wrap)ํด์ ์ฌ์ฉํ๋ผ
๋ถ์์ ํ API๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ ์ํํ๋ค. ๋ถ์์ ํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฉํด์ ์ฌ์ฉํด์ผํ๋ค.
๐ item 30 ์์์ ๊ฐ์์ฑ์ ์ต์ํํ๋ผ
- ๊ฐ์์ฑ ํ์ ์ ์ฌ์ฉํ๊ธฐ
- ํด๋์ค ๋ฉค๋ฒ
- public
- private
- protected
- internal
- top level
- public
- private
- internal
- ํด๋์ค ๋ฉค๋ฒ
internal : ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ์ํด์ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์๋, ๊ณต๊ฐํ๊ณ ์ถ์ง ์์ ์์๋ฅผ ์จ๊ธด๋ค.
protected : ์์๊ฐ ์์์ ์ํด ์ค๊ณ๋์ด ์์ ๋, ํด๋์ค์ ์๋ธํด๋์ค์์๋ง ์ฌ์ฉ๋๊ฒ ๋ง๋ ๋ค.
private : ๋์ผํ ํ์ผ ๋๋ ํด๋์ค์์๋ง ์์๋ฅผ ์ฌ์ฉ
์๋ ์ด์ ๋ก ์์์ ๊ฐ์์ฑ์ ์ต๋ํ ์ ํ์ ์ธ ๊ฒ์ด ์ข๋ค.
- ์ธํฐํ์ด์ค๊ฐ ์์์๋ก ์ด๋ฅผ ๊ณต๋ถํ๊ณ ์ ์งํ๋ ๊ฒ์ด ์ฝ๋ค.
- ์ต๋ํ ์ ํ์ด ๋์ด ์์ด์ผ ๋ณ๊ฒฝํ๊ธฐ ์ฝ๋ค.
- ํด๋์ค์ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ๊ฐ ๋ ธ์ถ๋์ด ์๋ค๋ฉด, ํด๋์ค๊ฐ ์์ ์ ์ํ๋ฅผ ์ฑ ์์ง ์ ์๋ค.
- ๊ฐ์์ฑ์ด ์ ํ๋๋ฉด API์ ๋ณ๊ฒฝ์ ์ฝ๊ฒ ์ถ์ ํ ์ ์๋ค.
๐ item 31 ๋ฌธ์๋ก ๊ท์ฝ์ ์ ์ํ๋ผ
- ์ด๋ฆ
- ์ผ๋ฐ์ ์ธ ๊ฐ๋ ๊ณผ ๊ด๋ จ๋ ๋งค์๋๋ ์ด๋ฆ๋ง์ผ๋ก ๋์์ ์์ธกํ ์ ์๋ค
- ์ฃผ์๊ณผ ๋ฌธ์
- ํจ์ ์ด๋ฆ๊ณผ ํ๋ผ๋ฏธํฐ๋ง์ผ๋ก ์ ํํ๊ฒ ํํ๋๋ ์์์๋ ๋ฐ๋ก ์ฃผ์์ ๋ฃ์ง ์๋ ๊ฒ์ด ์ข๋ค.
- KDoc
- ์ฒซ๋ฒ์งธ ์ค : ์์ฝ ์ค๋ช
- ๋๋ฒ์งธ ์ค : ์์ธ ์ค๋ช
- ๊ทธ ๋ค์ ๋ชจ๋ ์ค : @tag๋ก ์์
- @param <name> : ํจ์ ํ๋ผ๋ฏธํฐ or ํด๋์ค, ํ๋กํผํฐ, ํจ์ ํ์ ํ๋ผ๋ฏธํฐ
- @return : ํจ์์ ๋ฆฌํด ๊ฐ
- @constructor : ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์
- @receiver : ํ์ฅ ํจ์์ ๋ฆฌ์๋ฒ
- @property <name> : ๋ช ํํ ์ด๋ฆ์ ๊ฐ๊ณ ์๋ ํด๋์ค์ ํ๋กํผํฐ๋ฅผ ๋ฌธ์ํ
- @throw <class>, @exception <class> : ๋ฉ์๋ ๋ด๋ถ์์ ๋ฐ์ํ ์ ์๋ ์์ธ
- @sample <identifier> : ์ ๊ทํ๋ ํ์ ์ด๋ฆ์ ์ฌ์ฉํด์ ํจ์์ ์ฌ์ฉ ์์
- @see <identifier> : ํน์ ํ ํด๋์ค ๋๋ ๋ฉ์๋์ ๋ํ ๋งํฌ ์ถ๊ฐ
- @author : ์์์ ์์ฑ์๋ฅผ ์ง์
- @since : ์์์ ๋ํ ๋ฒ์ ์ ์ง์
- @supress : ์ด๋ฅผ ์ง์ ํ๋ฉด ๋ง๋ค์ด์ง ๋ฌธ์์์ ํด๋น ์์๊ฐ ์ ์ธ
- ํ์
- ํ์ ์ ๊ฐ์ฒด์ ๋ํ ๋ง์ ๊ฑธ ์๋ ค์ค๋ค. ์ด๋ค ํจ์์ ์ ์ธ์ ์๋ ๋ฆฌํด ํ์ , ์๊ท๋จผํธ ํ์ ์ ํฐ ์๋ฏธ๊ฐ ์๋ค. ์์ฃผ ์ฐ์ด๋ ํ์ ์ ๊ฒฝ์ฐ, ํ์ ๋ง ๋ด๋ ์ด๋ป๊ฒ ์ฐ๋์ง ์ ์ ์์ง๋ง ์ผ๋ถ ํ์ ์ ๋ฌธ์์ ์ถ๊ฐ๋ก ์ค๋ช ํด์ผ ํ ์๋ฌด๊ฐ ์๋ค
๊ตฌํ์ ์ธ๋ถ ์ฌํญ์ ํญ์ ๋ฌ๋ผ์ง ์ ์์ง๋ง ์ต๋ํ ๋ง์ด ๋ณดํธํ๋ ๊ฒ ์ข๋ค. ์ผ๋ฐ์ ์ผ๋ก ์บก์ํ๋ฅผ ํตํด ๋ณดํธํ๋ค.
์บก์ํ๋ "ํ์ฉํ๋ ๋ฒ์"๋ฅผ ์ง์ ํ๋ ๋ฐ ๋์์ ์ฃผ๋ ๋๊ตฌ๋ค. ์บก์ํ๊ฐ ๋ง์ด ์ ์ฉ๋ ์๋ก ์ฌ์ฉ์๊ฐ ๊ตฌํ์ ์ ๊ฒฝ์ ๋ง์ด ์ธ ํ์๊ฐ ์์ด์ง๋ฏ๋ก ๋ง์ ์์ ๋ฅผ ๊ฐ๊ฒ ๋๋ค.
ํนํ ์ธ๋ถ API๋ฅผ ๊ตฌํํ ๋๋ ๊ท์ฝ์ ์ ์ ์ํด์ผ ํ๋ค.
๐ item 32 ์ถ์ํ ๊ท์ฝ์ ์ง์ผ๋ผ
๋ฐ์ํ'Book > Effective Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๐ ์ดํํฐ๋ธ ์ฝํ๋ฆฐ] 3 ์ฌ์ฌ์ฉ์ฑ (0) 2023.06.12 [๐ ์ดํํฐ๋ธ ์ฝํ๋ฆฐ] 2 ๊ฐ๋ ์ฑ (0) 2023.06.06 [๐ ์ดํํฐ๋ธ ์ฝํ๋ฆฐ] 1 ์์ ์ฑ (3) 2023.06.06