ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๐Ÿ ์ดํŽ™ํ‹ฐ๋ธŒ ์ฝ”ํ‹€๋ฆฐ] 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

    1. ์•ˆ์ •์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜์ง€๋งˆ๋ผ
    2. ์ƒˆ๋กœ์šด API ๋ฅผ ๋ฐฐ์›Œ์•ผํ•œ๋‹ค.

    ๋ชจ๋“ˆ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š”์‚ฌ๋žŒ์€ ์ด๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ์ œ์ผ ์ค‘์š”ํ•˜๋‹ค.

    ๋˜ํ•œ ์•ˆ์ •์ ์ธ API์— ๋ณ€๊ฒฝ์„ ๊ฐ€ํ•  ๋•Œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ ์‘ํ•  ์‹œ๊ฐ„์„ ์ถฉ๋ถ„ํžˆ ์ค˜์•ผํ•œ๋‹ค.

    ๐Ÿ item 29 ์™ธ๋ถ€ API๋ฅผ ๋žฉ(wrap)ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ผ

    ๋ถˆ์•ˆ์ •ํ•œ API๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋‹ค. ๋ถˆ์•ˆ์ •ํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋žฉํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

    ๐Ÿ  item 30 ์š”์†Œ์˜ ๊ฐ€์‹œ์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๋ผ

    • ๊ฐ€์‹œ์„ฑ ํ•œ์ •์ž ์‚ฌ์šฉํ•˜๊ธฐ
      • ํด๋ž˜์Šค ๋ฉค๋ฒ„
        • public
        • private
        • protected
        • internal
      • top level
        • public
        • private
        • internal

    internal : ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ•ด์„œ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„๋•Œ, ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์š”์†Œ๋ฅผ ์ˆจ๊ธด๋‹ค.

    protected : ์š”์†Œ๊ฐ€ ์ƒ์†์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์–ด ์žˆ์„ ๋•Œ, ํด๋ž˜์Šค์™€ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

    private : ๋™์ผํ•œ ํŒŒ์ผ ๋˜๋Š” ํด๋ž˜์Šค์—์„œ๋งŒ ์š”์†Œ๋ฅผ ์‚ฌ์šฉ

     

    ์•„๋ž˜ ์ด์œ ๋กœ ์š”์†Œ์˜ ๊ฐ€์‹œ์„ฑ์€ ์ตœ๋Œ€ํ•œ ์ œํ•œ์ ์ธ ๊ฒƒ์ด ์ข‹๋‹ค.

    • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ž‘์„์ˆ˜๋ก ์ด๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๋‹ค.
    • ์ตœ๋Œ€ํ•œ ์ œํ•œ์ด ๋˜์–ด ์žˆ์–ด์•ผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฝ๋‹ค.
    • ํด๋ž˜์Šค์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋…ธ์ถœ๋˜์–ด ์žˆ๋‹ค๋ฉด, ํด๋ž˜์Šค๊ฐ€ ์ž์‹ ์˜ ์ƒํƒœ๋ฅผ ์ฑ…์ž„์งˆ ์ˆ˜ ์—†๋‹ค.
    • ๊ฐ€์‹œ์„ฑ์ด ์ œํ•œ๋˜๋ฉด API์˜ ๋ณ€๊ฒฝ์„ ์‰ฝ๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๐Ÿ item 31 ๋ฌธ์„œ๋กœ ๊ทœ์•ฝ์„ ์ •์˜ํ•˜๋ผ

    1. ์ด๋ฆ„
      1. ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…๊ณผ ๊ด€๋ จ๋œ ๋งค์„œ๋“œ๋Š” ์ด๋ฆ„๋งŒ์œผ๋กœ ๋™์ž‘์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค
    2. ์ฃผ์„๊ณผ ๋ฌธ์„œ
      1. ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„๋˜๋Š” ์š”์†Œ์—๋Š” ๋”ฐ๋กœ ์ฃผ์„์„ ๋„ฃ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
      2. KDoc
      • ์ฒซ๋ฒˆ์งธ ์ค„ : ์š”์•ฝ ์„ค๋ช…
      • ๋‘๋ฒˆ์งธ ์ค„ : ์ƒ์„ธ ์„ค๋ช…
      • ๊ทธ ๋’ค์— ๋ชจ๋“  ์ค„ : @tag๋กœ ์‹œ์ž‘
        • @param <name> : ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ or ํด๋ž˜์Šค, ํ”„๋กœํผํ‹ฐ, ํ•จ์ˆ˜ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ
        • @return : ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’
        • @constructor : ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
        • @receiver : ํ™•์žฅ ํ•จ์ˆ˜์˜ ๋ฆฌ์‹œ๋ฒ„
        • @property <name> : ๋ช…ํ™•ํ•œ ์ด๋ฆ„์„ ๊ฐ–๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฌธ์„œํ™”
        • @throw <class>, @exception <class> : ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ
        • @sample <identifier> : ์ •๊ทœํ™”๋œ ํ˜•์‹ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์„œ ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ
        • @see <identifier> : ํŠน์ •ํ•œ ํด๋ž˜์Šค ๋˜๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋งํฌ ์ถ”๊ฐ€
        • @author : ์š”์†Œ์˜ ์ž‘์„ฑ์ž๋ฅผ ์ง€์ •
        • @since : ์š”์†Œ์— ๋Œ€ํ•œ ๋ฒ„์ „์„ ์ง€์ •
        • @supress : ์ด๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋งŒ๋“ค์–ด์ง„ ๋ฌธ์„œ์—์„œ ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์ œ์™ธ
    3. ํƒ€์ž…
      1. ํƒ€์ž…์€ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋งŽ์€ ๊ฑธ ์•Œ๋ ค์ค€๋‹ค. ์–ด๋–ค ํ•จ์ˆ˜์˜ ์„ ์–ธ์— ์žˆ๋Š” ๋ฆฌํ„ด ํƒ€์ž…, ์•„๊ทœ๋จผํŠธ ํƒ€์ž…์€ ํฐ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ์ž์ฃผ ์“ฐ์ด๋Š” ํƒ€์ž…์˜ ๊ฒฝ์šฐ, ํƒ€์ž…๋งŒ ๋ด๋„ ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ถ€ ํƒ€์ž…์€ ๋ฌธ์„œ์— ์ถ”๊ฐ€๋กœ ์„ค๋ช…ํ•ด์•ผ ํ•  ์˜๋ฌด๊ฐ€ ์žˆ๋‹ค

    ๊ตฌํ˜„์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ํ•ญ์ƒ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋ณดํ˜ธํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ๋ณดํ˜ธํ•œ๋‹ค.

    ์บก์Šํ™”๋Š” "ํ—ˆ์šฉํ•˜๋Š” ๋ฒ”์œ„"๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๋„๊ตฌ๋‹ค. ์บก์Šํ™”๊ฐ€ ๋งŽ์ด ์ ์šฉ๋ ์ˆ˜๋ก ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌํ˜„์— ์‹ ๊ฒฝ์„ ๋งŽ์ด ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์ง€๋ฏ€๋กœ ๋งŽ์€ ์ž์œ ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

    ํŠนํžˆ ์™ธ๋ถ€ API๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๊ทœ์•ฝ์„ ์ž˜ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

    ๐Ÿ item 32 ์ถ”์ƒํ™” ๊ทœ์•ฝ์„ ์ง€์ผœ๋ผ

    ๋ฐ˜์‘ํ˜•
Designed by Tistory.