강의로 돌아가기
성동기

public 접근제어자에 대한 질문

이 예제에서는 클래스를 그냥 선언하고 생성자에 public을 붙였는데

이전 예제까지는 클래스 선언할때 public class 이렇게 선언했습니다.

왜 이런 차이가 나는건가요?

구글링을 해봐서 클래스내 변수를 보호하기위해(?) 때에따라 사용하는 접근제어자라는걸 만들었다는 것 정도 알고있습니다.

1 개의 답변
Demi

접근제어자가 필요한 이유에 대해서 간략한 예를 들겠습니다.
만원이 필요한데, 빠방한 엄마 지갑이 눈에 띄었다고 생각해보세요. 이 때 선택지는 두 가지가 있을겁니다.

  1. 엄마 지갑에서 직접 만원을 꺼낸다
  2. 엄마한테 돈이 필요하다고 말한다.

1번의 경우, 돈을 꺼내는데 엄마의 허락이 필요 없으니 돈이 무조건 생길겁니다. 대신 들키면 엄청난 후폭풍을 마주하겠지요.
2번의 경우, 엄마의 결정에 따라 돈이 생길지 혹은 생기지 않을지가 결정됩니다. 대신 1과 같은 후폭풍은 없겠지요.

객체지향은 이런 현실 상황을 반영한 개념입니다. 예제의 상황을 자바코드로 만든다면 다음과 같을 겁니다.

1번 - 엄마지갑에서 돈꺼내가기

class Mom {
    public wallet 엄마지갑;
}

public class Daughter{
    static void main(String[] args){
        Mom 엄마 = new Mom();
        챙기다(엄마.엄마지갑.돈빼다(10000));
    }
}

2번 - 엄마한테 물어보기

class Mom {
    public wallet 엄마지갑;
    public int 돈좀주세요(int amount){
        if(싫다) return 0;
        else return wallet.돈빼다(amount);
    }
}

public class Daughter{
    static void main(String[] args){
        Mom 엄마 = new Mom();
        챙기다(엄마.돈좀주세요(10000));
    }
}

차이를 알겠나요? 만약에 성동기님이 엄마라면, 당연히 자신의 지갑이 2번째 방법으로 설정되길 바라겠지요?

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.