์ฝ”๋“œ์˜ ๊ด€๋ฆฌ๋Š” ์ค‘์š”ํ•˜๋‹ค. ์œ„๊ณ„ ์งˆ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜ผ๋ž€์„ ์ดˆ๋ž˜ํ•œ๋‹ค. ์ ‘๊ทผ ์ œ์–ด๋Š” ํŠนํžˆ SDK ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์•Œ์•„๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Module & Source file

  • ์ ‘๊ทผ ์ œ์–ด๋Š” module๊ณผ source file ๋‹จ์œ„๋กœ ์ด๋ค„์ง
    • Module
      • code ๋ฐฐํฌ์˜ ๋‹จ์œ„
        • App, Framework, Library
    • Source file
      • ํ•˜๋‚˜์˜ source file
  • ๋‹ค๋ฅธ module์˜ code๋ฅผ ์ฐธ์กฐํ•˜๋ ค ํ•˜๋ฉด import ํ•ด์•ผํ•จ
  • ๊ฐ™์€ module์•ˆ์—์„œ๋Š” ๋‹ค๋ฅธ source file์„ importํ•  ํ•„์š” ์—†์Œ

Access Control Levels (ACL)

์ข…๋ฅ˜

Open

  • module ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

  • class์—์„œ๋งŒ ์‚ฌ์šฉ

  • ์ •์˜๋œ ๋ชจ๋“ˆ ๋ฐ–์—์„œ๋„ ์ƒ์† ๊ฐ€๋Šฅ

    Public

    • module ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

Internal

  • ๊ฐ™์€ module ์•ˆ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • access modifier๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด default์ž„

fileprivate

  • ๊ฐ™์€ source file์•ˆ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

private

  • ๊ธฐ๋Šฅ ์ •์˜ ๋‚ด๋ถ€ ๋˜๋Š” ๋™์ผ ํŒŒ์ผ๋‚ด extension์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

์•Œ์•„๋‘˜ ์ 

  • ๋ณ„๋„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด default internal
  • Framework์˜ ๊ฒฝ์šฐ, ์™ธ๋ถ€ ์ œ๊ณต interface๋ฅผ open/public์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•จ
  • Unit Test์—์„œ @testable attribute ๋ฅผ ์จ์ฃผ๋ฉด ํ•ด๋‹น framework์˜ internal์—๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ

์ฃผ์˜ํ•  ์ 

  • ๋ชจ๋“  entity์™€ ๊ทธ๊ฒƒ์ด ์‚ฌ์šฉํ•˜๋Š” entity๋Š” access level์ด ๋งž์•„์•ผ ํ•จ
    • public function์€ parameter๋กœ internal, private level ๋ชป ๋ฐ›์Œ
    • public class์˜ super class๊ฐ€ internal์ด๋‚˜ private์ผ ์ˆ˜ ์—†์Œ
  • ์–ด์ฐจํ”ผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—๋Ÿฌ๋‚ด ์คŒ!