μ κ·Όμ§μ μ
μ κ·Όμ§μ μλ ν΄λμ€, λ©μλ, λ³μμ μ κ·Ό λ²μλ₯Ό μ ννλ ν€μλμ
λλ€.
public(λͺ¨λ κ³³μμ μ κ·Ό κ°λ₯), protected(κ°μ ν¨ν€μ§μ μμ ν΄λμ€μμ μ κ·Ό κ°λ₯), default(κ°μ ν¨ν€μ§μμλ§ μ κ·Ό κ°λ₯), private(κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Ό κ°λ₯)μ΄ μμ΅λλ€. μ½λμ μμ μ±κ³Ό μΊ‘μνλ₯Ό μν΄ μ¬μ©λ©λλ€.
μ κ·Όμ§μ μ
β’
public
β’
protected
β’
default
β’
private
public vs protected vs defaultp vs private
μ κ·Ό μ§μ μ | κ°μ ν΄λμ€ | κ°μ ν¨ν€μ§ | λ€λ₯Έ ν¨ν€μ§μ μμ ν΄λμ€ | λ€λ₯Έ ν¨ν€μ§ |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
μ κ·Ό λ²μ
public > protected > default > private
μ κ·Όμ§μ μλ ν΄λμ€μ κ·Έ λ©€λ²λ€(λ³μ, λ©μλ, μ€μ²© ν΄λμ€ λ±)μ μ κ·Ό λ²μλ₯Ό κ²°μ ν©λλ€:
β’
public: κ°μ₯ λμ λ²μλ‘, μ΄λμλ μ κ·Ό κ°λ₯ν©λλ€. λ€λ₯Έ ν¨ν€μ§μμλ μμ λ‘κ² μ κ·Όν μ μμ΅λλ€.
β’
protected: κ°μ ν¨ν€μ§ λ΄μμμ λ€λ₯Έ ν¨ν€μ§μ μλ μμ ν΄λμ€μμ μ κ·Όμ΄ κ°λ₯ν©λλ€. μμ κ΄κ³κ° μμ λ μ€μν μλ―Έλ₯Ό κ°μ§λλ€.
β’
default: μ κ·Ό μ νμλ₯Ό λͺ
μνμ§ μμ λ μλμΌλ‘ μ μ©λλ©°, κ°μ ν¨ν€μ§ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯ν©λλ€.
β’
private: κ°μ₯ μ νμ μΈ λ²μλ‘, κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯ν©λλ€. μΈλΆμμλ μ§μ μ κ·Όν μ μμ΅λλ€.
μ¬μ© λͺ©μ
β’
μΊ‘μν(Encapsulation): λ°μ΄ν°μ λ©μλλ₯Ό νλμ λ¨μλ‘ λ¬Άκ³ μΈλΆμμμ μ κ·Όμ μ ννμ¬ μ½λμ μμ μ±μ λμ
λλ€.
β’
μ 보 μλ(Information Hiding): ꡬν μΈλΆ μ¬νμ μ¨κΈ°κ³ νμν μΈν°νμ΄μ€λ§ λ
ΈμΆμμΌ λ³΅μ‘μ±μ κ΄λ¦¬ν©λλ€.
β’
μ½λ μμ μ±: μΈλΆμμ λ°μ΄ν°λ₯Ό μ§μ μ‘°μνμ§ λͺ»νκ² ν¨μΌλ‘μ¨ μμμΉ λͺ»ν μ€λ₯λ₯Ό λ°©μ§ν©λλ€.
β’
μ½λ μ μ§λ³΄μ: λ΄λΆ ꡬνμ λ³κ²½ν΄λ μΈλΆ μΈν°νμ΄μ€κ° μ μ§λλ©΄ λ€λ₯Έ λΆλΆμ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
β’
보μ: λ―Όκ°ν λ°μ΄ν°λ κΈ°λ₯μ λν μ κ·Όμ μ ννμ¬ λ³΄μμ κ°νν©λλ€.
μ κ·Ό μ§μ μ λΆλ₯
1. public
β’
κ°μ₯ λμ λ²μμ μ κ·Ό μ§μ μ
β’
νλ‘μ νΈ μ΄λμλ μ κ·Ό κ°λ₯
β’
λ€λ₯Έ ν¨ν€μ§μμλ μμ λ‘κ² μ κ·Όν μ μμ
β’
μ: public class, public method, public variable
2. protected
β’
λμΌ ν¨ν€μ§ λ΄μ ν΄λμ€μ λ€λ₯Έ ν¨ν€μ§μ μμ ν΄λμ€μμ μ κ·Ό κ°λ₯
β’
μμ κ΄κ³μμ μ€μν μν
β’
μ: protected method, protected variable
3. default (package-private)
β’
μ κ·Ό μ νμλ₯Ό λͺ
μνμ§ μμ λ μλμΌλ‘ μ μ©λ¨
β’
κ°μ ν¨ν€μ§ λ΄μ ν΄λμ€λ€λ§ μ κ·Ό κ°λ₯
β’
λ€λ₯Έ ν¨ν€μ§μ ν΄λμ€λ μ κ·Ό λΆκ°
β’
μ: class, method, variable (μ κ·Ό μ νμ μμ΄ μ μΈ)
4. private
β’
κ°μ₯ μ νμ μΈ μ κ·Ό μ§μ μ
β’
λμΌ ν΄λμ€ λ΄μμλ§ μ κ·Ό κ°λ₯
β’
ν΄λμ€ μΈλΆμμλ μ§μ μ κ·Ό λΆκ°
β’
μΊ‘μνλ₯Ό μν΄ μ£Όλ‘ μ¬μ©λ¨
β’
μ: private method, private variable
// μ κ·Όμ§μ μ μμ μ½λ
package com.example;
public class AccessModifierExample {
public String publicVar = "λꡬλ μ κ·Ό κ°λ₯";
protected String protectedVar = "κ°μ ν¨ν€μ§ λλ μμ ν΄λμ€μμ μ κ·Ό κ°λ₯";
String defaultVar = "κ°μ ν¨ν€μ§μμλ§ μ κ·Ό κ°λ₯";
private String privateVar = "κ°μ ν΄λμ€μμλ§ μ κ·Ό κ°λ₯";
public void publicMethod() {
System.out.println("κ³΅κ° λ©μλμ
λλ€.");
}
protected void protectedMethod() {
System.out.println("보νΈλ λ©μλμ
λλ€.");
}
void defaultMethod() {
System.out.println("κΈ°λ³Έ λ©μλμ
λλ€.");
}
private void privateMethod() {
System.out.println("λΉκ³΅κ° λ©μλμ
λλ€.");
}
}
Java
볡μ¬
μ κ·Ό μ§μ μ μ¬μ© μ κ³ λ €μ¬ν
β’
νμν μ΅μνμ μ κ·Ό λ²μλ₯Ό μ ννλ κ²μ΄ μ’μ (μΊ‘μν μμΉ)
β’
ν΄λμ€ λ©€λ² λ³μλ λ³΄ν΅ privateμΌλ‘ μ μΈνκ³ getter/setterλ₯Ό ν΅ν΄ μ κ·Ό
β’
μμμ κ³ λ €ν λλ protected μ¬μ©μ κ²ν
β’
APIλ‘ μ 곡λλ κΈ°λ₯μ publicμΌλ‘ μ μΈ
μ κ·Όμ§μ μ μμμ½λ
// packageA/Person.java
package packageA;
public class Person {
public String publicName = "λꡬλ μ κ·Ό κ°λ₯ν μ΄λ¦";
protected int protectedAge = 30;
String defaultAddress = "μμΈμ"; // default μ κ·Ό μ§μ μ
private String privatePhoneNumber = "010-1234-5678";
public void publicMethod() {
System.out.println("λͺ¨λ κ³³μμ νΈμΆ κ°λ₯ν λ©μλ");
}
protected void protectedMethod() {
System.out.println("κ°μ ν¨ν€μ§μ μμ ν΄λμ€μμ νΈμΆ κ°λ₯ν λ©μλ");
}
void defaultMethod() {
System.out.println("κ°μ ν¨ν€μ§μμλ§ νΈμΆ κ°λ₯ν λ©μλ");
}
private void privateMethod() {
System.out.println("κ°μ ν΄λμ€ λ΄μμλ§ νΈμΆ κ°λ₯ν λ©μλ");
// privatePhoneNumberμ μ κ·Ό κ°λ₯
System.out.println("μ νλ²νΈ: " + privatePhoneNumber);
}
}
Java
볡μ¬
// packageB/Student.java
package packageB;
import packageA.Person;
public class Student extends Person {
public void accessTest() {
// λΆλͺ¨ ν΄λμ€(Person)μ λ©€λ²μ μ κ·Ό ν
μ€νΈ
System.out.println(publicName); // public - μ κ·Ό κ°λ₯
System.out.println(protectedAge); // protected - μμ ν΄λμ€μ΄λ―λ‘ μ κ·Ό κ°λ₯
// System.out.println(defaultAddress); // default - λ€λ₯Έ ν¨ν€μ§λΌμ μ κ·Ό λΆκ°
// System.out.println(privatePhoneNumber); // private - λ€λ₯Έ ν΄λμ€λΌμ μ κ·Ό λΆκ°
publicMethod(); // public - μ κ·Ό κ°λ₯
protectedMethod(); // protected - μμ ν΄λμ€μ΄λ―λ‘ μ κ·Ό κ°λ₯
// defaultMethod(); // default - λ€λ₯Έ ν¨ν€μ§λΌμ μ κ·Ό λΆκ°
// privateMethod(); // private - λ€λ₯Έ ν΄λμ€λΌμ μ κ·Ό λΆκ°
}
}
Java
볡μ¬
// packageB/Manager.java
package packageB;
import packageA.Person;
public class Manager {
public void accessTest() {
Person person = new Person();
// Person ν΄λμ€μ λ©€λ²μ μ κ·Ό ν
μ€νΈ
System.out.println(person.publicName); // public - μ κ·Ό κ°λ₯
// System.out.println(person.protectedAge); // protected - μμ ν΄λμ€κ° μλλ―λ‘ μ κ·Ό λΆκ°
// System.out.println(person.defaultAddress); // default - λ€λ₯Έ ν¨ν€μ§λΌμ μ κ·Ό λΆκ°
// System.out.println(person.privatePhoneNumber); // private - λ€λ₯Έ ν΄λμ€λΌμ μ κ·Ό λΆκ°
person.publicMethod(); // public - μ κ·Ό κ°λ₯
// person.protectedMethod(); // protected - μμ ν΄λμ€κ° μλλ―λ‘ μ κ·Ό λΆκ°
// person.defaultMethod(); // default - λ€λ₯Έ ν¨ν€μ§λΌμ μ κ·Ό λΆκ°
// person.privateMethod(); // private - λ€λ₯Έ ν΄λμ€λΌμ μ κ·Ό λΆκ°
}
}
Java
볡μ¬
μ κ·Όμ§μ μ μμ μ€λͺ
μ μ½λ μμλ μΈ κ°μ§ ν΄λμ€λ₯Ό ν΅ν΄ μλ‘ λ€λ₯Έ ν¨ν€μ§μ μμ κ΄κ³μμ κ° μ κ·Ό μ§μ μκ° μ΄λ»κ² λμνλμ§ λ³΄μ¬μ€λλ€:
β’
Person ν΄λμ€(packageA): λͺ¨λ μ κ·Ό μ§μ μλ₯Ό κ°μ§ λ©€λ² λ³μμ λ©μλλ₯Ό ν¬ν¨ν©λλ€.
β’
Student ν΄λμ€(packageB): Personμ μμλ°μ λ€λ₯Έ ν¨ν€μ§μμ μμ ν΄λμ€λ‘ μ κ·Όνλ μν©μ 보μ¬μ€λλ€.
β’
Manager ν΄λμ€(packageB): Personμ κ°μ²΄λ₯Ό μμ±ν΄ λ€λ₯Έ ν¨ν€μ§μμ μΌλ°μ μΈ μ¬μ© κ΄κ³λ‘ μ κ·Όνλ μν©μ 보μ¬μ€λλ€.