μλ°μ μ κ·Ό μ μ΄μ default / public(package) / private / protected / static / final
βΆ default(package)
κ°μ₯ κΈ°λ³Έμ μΈ μ κ·Ό μ μ΄μλ‘ μλ΅μ΄ κ°λ₯νλ€. => μ κ·Ό μ μ΄μλ₯Ό μλ΅νλ©΄ defaultλ‘ μ€μ λλ€.
defaultλ κ°μ ν¨ν€μ§ λ΄μ μλ classλΌλ©΄ μ κ·Όμ΄ κ°λ₯νλ€.
1λ² ν¨ν€μ§μ 1λ² ν΄λμ€λ₯Ό μ μνμλ€.
2λ² ν¨ν€μ§λ₯Ό λ§λ€κ³ 2λ² ν΄λμ€λ₯Ό λ§λ€κ³ 2λ² ν΄λμ€μ 1λ² ν΄λμ€λ₯Ό λΆλ¬μ€κΈ°(import)λ₯Ό νμ λ, μ€λ₯ λ°μ
=> κ°μ ν¨ν€μ§ μμμλ§ λΆλ¬μ€κΈ° κ°λ₯
βΆ public
μ΄λ¦μ²λΌ μ΄λμλ λΆλ¬μ¬ μ μλ€.
λ€λ₯Έ ν¨ν€μ§ μμ λ€λ₯Έ ν΄λμ€μμλ λΆλ¬μ μ¬μ© κ°λ₯νλ€.
testPackage1 ν¨ν€μ§μ μλ TestClass2 ν΄λμ€μ μ κ·Ό μ μ΄μλ₯Ό publicμΌλ‘ λ³κ²½ν΄μ€¬λ€.
testPackage2 ν¨ν€μ§μ TestClass2 ν΄λμ€μμ λ€λ₯Έ ν¨ν€μ§μ μλ TestClass1μ λΆλ¬μλ μ μλλλ€.
βΆ private
μμ μ μ μΈν λ€λ₯Έ ν΄λμ€μμ μ κ·Ό λΆκ°λ₯
μ€μ§ μμ μ ν΄λμ€ μμμλ§ μ κ·Όμ΄ κ°λ₯νλ€.
testPackage1 ν¨ν€μ§μ TestClass1 ν΄λμ€μ νλ κ°μ μμ±νλ€. (public int, private int 1κ°μ©)
TestClass1μ publicμ΄κΈ° λλ¬Έμ λ€λ₯Έ ν¨ν€μ§(testPackage2)μμ λ€λ₯Έ ν΄λμ€(testClass2)λ‘ import ν μ μμμ§λ§, νλ κ°μ publicNum λ°μ μ κ·Όνμ§ λͺ»νλ€.
β· private μ κ·Όμλ₯Ό μ°λ μ΄μ ?
ν΄λμ€λ μΆμμ μΈ κ°λ μ μ λ¦¬ν΄ λκ³ ν΄λΉ ν΄λμ€λ₯Ό μμλ°μ νμ ν΄λμ€μμ ꡬ체νμμΌμ μ¬μ©νλ€. ex). μμ ν΄λμ€ : λν, λλ¬Ό... / νμ ν΄λμ€ : μ¬κ°ν, μΌκ°ν... κ°μμ§, κ³ μμ΄...
μ΄λ, κ°μ₯ ν° νμΈ μμ ν΄λμ€μ νλ κ°μ μ§μ μ κ·Όνλ©΄ νμ ν΄λμ€λ€μκ² λ¬Έμ κ° λ°μν μλ μκ³ μ¬μ©μμ μλͺ»λ κ°μ μ λ ₯λ°μ μλ μλ€.
ex): μλͺ»λ κ° λμ : 1~100κΉμ§λ§ μ μ₯ν΄μΌ νλ λ³μμ μ¬μ©μκ° 200μ μ μ₯
μ΄ κ°μ λ¬Έμ λ₯Ό λ°©μ§νκ³ μ μΌλ°μ μΌλ‘ νλ κ°μ privateλ‘ μ μνκ³ getter / setter ν¨μλ₯Ό λ§λ€μ΄ νλ κ°μ μ κ·Όνλ€.
βΆ protected
κ°μ ν¨ν€μ§ νΉμ μμν νμ(μμ, μλΈ) ν΄λμ€μμλ§ μ κ·Ό κ°λ₯ / μμλ°μ§ μμ ν΄λμ€λ λ€λ₯Έ ν¨ν€μ§μμ μ¬μ© λΆκ°λ₯
testPackage1 ν¨ν€μ§ μμ μμ ν΄λμ€μΈ SuperClassμμ protectedμ private νλ κ°μ κ°κ° μμ±νμ λ,
testPackage2 ν¨ν€μ§μμ νμ ν΄λμ€μΈ SubClassμμλ protectedλ‘ μ μλ νλ κ°λ§ μ κ·Όμ΄ κ°λ₯ν κ±Έ νμΈν μ μλ€.
βΆ static
β·κ³΅μ λ©λͺ¨λ¦¬μ μ‘΄μ¬
staticμΌλ‘ μ μλ κ°μ²΄λ νλ‘κ·Έλ¨μ΄ μ€νλλ λμ 곡μ λ©λͺ¨λ¦¬μ μμ£Όνλ©΄μ μ¬μ©λλ€.
μΌλ°μ μΌλ‘ κ°μ²΄λ₯Ό μμ±ν λλ©΄ λ©λͺ¨λ¦¬ 곡κ°μ μ°¨μ§νκ² λλ€.
νμ§λ§, μμ κ°μ²λΌ λ³ν¨μλ κ°μ κ²½μ° λ°λ³΅ν΄μ μμ±νκ² λλ©΄ λ©λͺ¨λ¦¬λ₯Ό λλΉνλ κΌ΄μ΄ λ μ μλ€.
μ΄λ λ°λ³΅μ μΌλ‘ μ¬μ©λλ κ°μ²΄λ 곡μ λ©λͺ¨λ¦¬μ ν λ²λ§ μ μ₯μν¨ ν νμν λλ§λ€ λΆλ¬μ μ¬μ©νλ©΄ λ©λͺ¨λ¦¬λ₯Ό λ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μκ² λλ€.
ex)
A ν΄λμ€μλ λ°μ΄ν°1, λ°μ΄ν° 2, λ°μ΄ν° 3 μ΄ μλ€κ³ κ°μ
λ°μ΄ν° 1μ κ°μ΄ μ λ λ³νμ§ μλλ€κ³ νμ λ, Aν΄λμ€λ₯Ό λ°λ³΅ν΄μ μμ±νκ² λΆλ¬μ€κ² λλ©΄ λ³νμ§ μμ κ°μΈ λ°μ΄ν° 1μ λ°λ³΅ν΄μ λ©λͺ¨λ¦¬μ μ μ₯νκ² λμ΄ λΉν¨μ¨μ μ΄λ€.
λ³νμ§ μμ λ°μ΄ν° κ°(μλ₯Ό λ€μ΄ μμ) μ staticμΌλ‘ μ μνμ¬ κ³΅μ λ©λͺ¨λ¦¬μ μ μ₯ -> λ©λͺ¨λ¦¬ ν¨μ¨μ± μ¦κ°
β·staticλΌλ¦¬λ§ νΈν
staticμΌλ‘ μ μλ λ°μ΄ν°λ₯Ό μ΄λμλ μ¬μ©ν μ μλ κ²μ μλλ€.
staticμΌλ‘ μ μλ λ°μ΄ν°λ κ°μ΄ staticμΌλ‘ μ μλ ν΄λμ€μμλ§ μ¬μ©ν μ μλ€.
λνμ μΈ static ν΄λμ€λ νλ‘κ·Έλ¨μ μ€νμν€λ main ν΄λμ€κ° μλ€.
staticμΌλ‘ μ μλ main ν΄λμ€μμ staticμΌλ‘ μ μλ MAX_NUM λ°μ΄ν° κ°μ΄ μ μ¬μ©λλ€.
staticμ΄ μλ ν΄λμ€ μμμ staticμΌλ‘ μ μλ λ°μ΄ν°λ₯Ό λΆλ¬μ μ¬μ©ν λμ λͺ¨μ΅μ΄λ€.
νλ‘κ·Έλ¨ μμ μ μλ λ¬Έλ²μ μλ¬κ° μμ΄μ κ²½κ³ λ¬Έμ΄ λνλμ§ μμ§λ§, νλ‘κ·Έλ¨μ μ€ννλ©΄ μμ²λΌ μλ¬κ° λλ©° μ€νλμ§ μλλ€.
MAX_NUMμ 곡μ λ©λͺ¨λ¦¬μ μμ£Όλλ static λ°μ΄ν°μΈλ° staticμ΄ μλ ν΄λμ€μμ λΆλ¬μκΈ° λλ¬Έμ΄λ€.
μ΄μ²λΌ static λ°μ΄ν°λ static ν΄λμ€μμλ§ μ¬μ©μ΄ κ°λ₯νλ€λ νΉμ§μ΄ μλ€.
βΆ final
μμλ₯Ό μ μ₯νλ μ κ·Ό μ μ΄μ
finalμ κ²½μ°λ staticμμ μ κΉ λμλλ° μμ(λ³νμ§ μλ κ°)λ₯Ό μ μ₯ν λ μ¬μ©λλ€.
finalλ‘ μ μλ MAX_NUMμ κ°μ λ³κ²½νλ €κ³ νλ©΄ μ€λ₯ λ©μμ§κ° λμ¨λ€.
λ³κ²½λμ΄μλ μ λλ κ°μ΄ κ²½μ°, μ¬μ©μ νΉμ κ°λ°μκ° μ€μλ‘λΌλ λ³κ²½ν μ μλλ‘ finalλ‘ μ μνλ€.
β· νμ ν΄λμ€μμ μλ‘ μμ± κ°λ₯
finalλ‘ μ μλ κ°μ νμ ν΄λμ€μμ μλ‘ μμ± κ°λ₯νλ€. -> κ°μ μ΄λ¦, λ€λ₯Έ λ©λͺ¨λ¦¬ μ£Όμ
νμ ν΄λμ€λ μμ ν΄λμ€μ μ’ μλμ΄ μκΈ° λλ¬Έμ μμ ν΄λμ€μ λ°μ΄ν° κ°μ μ§μ κ°λ₯, νμ ν΄λμ€μμ MAX_NUM μμ κ° μλ‘ μμ± κ°λ₯
νμ ν΄λμ€μμ μ μ¬μ§κ³Ό κ°μ΄ μμ κ°μ μ¬μ μ ν ν getter ν¨μλ₯Ό μ μν΄ λ¦¬ν΄ κ°μ μλ‘ μ μλ μμ κ°μΌλ‘ ν΄μ€λ€.
ν μ€νΈν΄λ³΄λ©΄ νμ ν΄λμ€μ μμ κ°μ΄ μ λμ€λ κ±Έ νμΈν μ μλ€.