์ฝ๋์ ๊ด๋ฆฌ๋ ์ค์ํ๋ค. ์๊ณ ์ง์๋ฅผ ๊ฐ์ง๊ณ ๊ตฌ๋ถํ์ง ์์ผ๋ฉด ํผ๋์ ์ด๋ํ๋ค. ์ ๊ทผ ์ ์ด๋ ํนํ SDK ์์ ์ ํ๋ ๊ฒฝ์ฐ ์ธํฐํ์ด์ค ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์ ์์๋๋ ๊ฒ์ด ์ข๋ค.
Module & Source file
- ์ ๊ทผ ์ ์ด๋ module๊ณผ source file ๋จ์๋ก ์ด๋ค์ง
- Module
- code ๋ฐฐํฌ์ ๋จ์
- App, Framework, Library
- code ๋ฐฐํฌ์ ๋จ์
- Source file
- ํ๋์ source file
- Module
- ๋ค๋ฅธ 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์ผ ์ ์์
- ์ด์ฐจํผ ์ปดํ์ผ๋ฌ๊ฐ ์๋ฌ๋ด ์ค!