1 minute read

접근제어자란? =>클래스 외부에서 직접적인 접근 허용하지않은 멤버를 설정하여 은닉하는 것

1.private
2.public
3.protected

private

private 로 선언된 클래스 멤버는 외부에 공개되지 않으며 외부에서 접근도 하지 못합니다. 말도 안되는 코드지만 private 는 같은 클래스 안에서 접근 가능하다는 것을 보여주기 위함으로 짜봤습니다.

public class AccessModifier {

    private String name;
    public LocalDate birth;

    private String condition;

    public AccessModifier() {
        this.condition = "good";
    }

    public AccessModifier(String name, LocalDate birth) {
        this.name = name;
        this.birth = birth;
        this.condition = "good";
    }

    public void setBirth(LocalDate birth) {
        this.birth = birth;
    }

    public void getWorse() {
        this.condition = "bad";
    }

    public void getSick() {
        this.condition = "sick";
    }

    public void getBetter() {
        this.condition = "good";
    }

    public String getCondition() {
        return this.condition;
    }

    public String getName () {
        return this.name;
    }
    
    =====
    
    public class AccessModifierSamePackageClass {
    
        public void someMethodA() {
    
            AccessModifier am = new AccessModifier();
            am.birth = LocalDate.now(); // public 이라 해당 클래스의 멤버 변수에 직접 set이 가능, 보통 이렇게 안함
            am.setBirth(LocalDate.now()); // 보통 이렇게 하는데, 이것도 좋은 방법은 아님
    
            AccessModifier am2 = new AccessModifier("홍길동", LocalDate.now());
    
            System.out.println(am2.getCondition());
    
            System.out.println(am2.getName() + "이 추운데 나가서 놀았어요");
    
            am2.getWorse();
    
            System.out.println(am2.getName() + "의 상태는 " + am2.getCondition());
    
            am2.getSick();
    
            System.out.println(am2.getName() + "의 상태는 " + am2.getCondition());
        }

스크린샷 2020-02-06 오전 11 36 50

protected

protected 는 상속받은 클래스나 같은 클래스 내에서 접근 혹은 사용 가능합니다.


public abstract class Human {
    protected String name;
    protected String head;
    protected String arm;
    protected String leg;

    protected String getName() {
        return name;
    }

    protected String getHead() {
        return head;
    }

    protected String getArm() {
        return arm;
    }

    protected String getLeg() {
        return leg;
    }
}

//////////////////사람을 상속받은 하치

public class Hachi extends Human{

    @Override
    public String getLeg() {
        return super.getLeg();
    }

    @Override
    public String getArm() {
        return super.getArm();
    }
}

스크린샷 2020-02-06 오후 12 12 24

public

public 은 어떤 클래스든지 접근 사용 가능합니다.

public class Hachi2 {
    protected String name = "hachi";
    public String message = "this is public message.";
}

스크린샷 2020-02-06 오후 12 08 30

출처 : http://tcpschool.com/java/java_modifier_accessModifier

https://wikidocs.net/232