Backend/Java

[JAVA] μ ‘κ·Όμ œμ–΄μž (public, protected, default, private)

carsumin 2022. 1. 11. 14:35

 

 

μ ‘κ·Όμ œμ–΄μž (Access Modifiers)
  • 클래슀, λ©”μ„œλ“œ, λ³€μˆ˜ 등에 λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ μ„€μ •ν•˜λŠ”λ° μ‚¬μš©
  • 클래슀 μ™ΈλΆ€μ—μ„œ ν•΄λ‹Ή 멀버에 μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„λ₯Ό μ œν•œν•˜κ±°λ‚˜ ν—ˆμš©
  • Java의 μ ‘κ·Όμ œμ–΄μžλŠ” public, protected, default, private 4κ°€μ§€ μ’…λ₯˜κ°€ μžˆλ‹€

 

public

 

  • public이 μ§€μ •λœ 클래슀, λ©”μ„œλ“œ, λ³€μˆ˜λŠ” μ–΄λ””μ„œλ‚˜ μ ‘κ·Ό κ°€λŠ₯
  • λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€μ—μ„œλ„ μ ‘κ·Ό κ°€λŠ₯
  • 주둜 λ‹€λ₯Έ ν΄λž˜μŠ€λ‚˜ νŒ¨ν‚€μ§€μ—μ„œ μ‚¬μš©ν•  ν•„μš”κ°€ μžˆλŠ” APIλ‚˜ μœ ν‹Έλ¦¬ν‹° 클래슀의 λ©”μ„œλ“œμ— μ‚¬μš©
public class MyClass {
    public int publicVariable;
    
    public void publicMethod() {
        System.out.println("This is a public method.");
    }
}

 

 

protected

 

  • protectedκ°€ μ§€μ •λœ λ©€λ²„λŠ” 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œλ„ μ ‘κ·Ό κ°€λŠ₯
  • μƒμ†κ΄€κ³„μ—μ„œλ§Œ μ ‘κ·Ό κΆŒν•œ λΆ€μ—¬
  • 상속받은 ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš©ν•  ν•„μš”κ°€ μžˆλŠ” λ©”μ„œλ“œλ‚˜ λ³€μˆ˜λ₯Ό λ³΄ν˜Έν•˜κ³ μž ν•  λ•Œ μ‚¬μš©
public class MyClass {
    protected int protectedVariable;
    
    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}

 

 

default

 

  • defaultλŠ” μ ‘κ·Όμ œμ–΄μžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•Šμ€ 경우
  • ν•΄λ‹Ή λ©€λ²„λŠ” 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλŠ” μ ‘κ·Ό λΆˆκ°€λŠ₯ (package-private)
  • 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ μ‚¬μš©ν•˜κ³  μ™ΈλΆ€μ—λŠ” λ…ΈμΆœν•˜κ³  μ‹Άμ§€ μ•Šμ€ 경우 μ‚¬μš©
class MyClass {
    int defaultVariable;
    
    void defaultMethod() {
        System.out.println("This is a default method.");
    }
}

 

 

private

 

  • privateκ°€ μ§€μ •λœ λ©€λ²„λŠ” ν•΄λ‹Ή 클래슀 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
  • 클래슀 μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Ό λΆˆκ°€λŠ₯, 같은 νŒ¨ν‚€μ§€μ˜ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œλ„ μ ‘κ·Ό λΆˆκ°€λŠ₯
  • 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ€‘μš”ν•œ λ°μ΄ν„°λ‚˜ λ©”μ„œλ“œμ— μ‚¬μš©
  • 객체의 μƒνƒœλ₯Ό μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•˜κΈ° μœ„ν•΄ private λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³ , 이에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ getter와 setter λ©”μ„œλ“œλ₯Ό 제곡
public class MyClass {
    private int privateVariable;
    
    private void privateMethod() {
        System.out.println("This is a private method.");
    }
    
    public int getPrivateVariable() {
        return privateVariable;
    }

    public void setPrivateVariable(int privateVariable) {
        this.privateVariable = privateVariable;
    }
}

 

 

정리

 

  • μ ‘κ·Ό μ œμ–΄μžλŠ” 클래슀 섀계 μ‹œ μ€‘μš”ν•œ μ—­ν• 
  • ν΄λž˜μŠ€μ™€ λ©€λ²„λ“€μ˜ μ ‘κ·Ό λ²”μœ„λ₯Ό μ œμ–΄ν•˜μ—¬ μ½”λ“œμ˜ ꡬ쑰λ₯Ό λͺ…ν™•νžˆ ν•˜κ³  μΊ‘μŠν™”λ₯Ό ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„± ν–₯μƒμ‹œν‚΄
μ ‘κ·Όμ œμ–΄μž 같은 클래슀 같은 νŒ¨ν‚€μ§€ ν•˜μœ„ 클래슀 λ‹€λ₯Έ νŒ¨ν‚€μ§€
public O O O O
protected O O O X
default O O X X
private O X X X