하리Hari

2. 접근 제한자 (비밀과 공개)

남들이 내 객체의 속을 함부로 들여다보지 못하게 막아봅시다!

내가 만든 객체의 속성과 기능을 남들이 밖에서 함부로 건드리지 못하게 하고 싶다면 어떡할까요? 하리는 동사의 **꼬리(어미)**만 살짝 바꿔주면 아주 쉽게 비밀을 지킬 수 있어요.

  • 공개 (Public): 널리 쓰일 때는 정하자 / 만들자
  • 비밀 (Private): 나 혼자 몰래 쓸 때는 숨기자를 써요 (예: 정하여 숨기자 / 만들어 숨기자). 밖에서 부르면 에러가 나요!
  • 보호 (Protected): 내 자식에게만 알려줄 때는 물려주자를 써요 (예: 정하여 물려주자 / 만들어 물려주자).
[금고]를 설계하자:
    (참고) 이 비밀번호는 금고 밖에서 절대로 볼 수 없어요!
    '비밀번호'를 [숫자]인 1234로 정하여 숨기자

    <비밀번호확인>을 만들어 숨기자 ([숫자]인 '입력값'):
        만약 ('나'의 '비밀번호'와 '입력값'이 같다) 라면:
            참을 돌려주자
        거짓을 돌려주자

    <금고열기>를 만들자 ([숫자]인 '입력값'):
        만약 ('나'의 <비밀번호확인>('입력값')이 참과 같다) 라면:
            "찰칵! 금고가 열렸습니다."를 출력하자
        그렇지 않다면:
            "경고! 비밀번호가 틀렸습니다."를 출력하자

'내금고'를 [금고]인 새로운 [금고]()로 정하자
'내금고'의 <금고열기>(9999)를 실행하자
'내금고'의 <금고열기>(1234)를 실행하자

이렇게 하면 밖에서 실수로 남의 비밀번호를 바꾸거나 훔쳐보는 불상사를 깐깐하게 막아낼 수 있답니다.


금지된 선을 넘으면 어떻게 될까요?

만약 밖에서 억지로 숨겨진(비밀) 기능을 부르려고 하면 하리가 무서운 에러를 내며 막아준답니다. 아래 코드를 쳐서 직접 에러를 구경해 볼까요?

[비밀노트]를 설계하자:
    '내일기'를 [문자열]인 "오늘은 늦잠을 잤다"로 정하여 숨기자

    <일기읽기>를 만들어 숨기자 ():
        '나'의 '내일기'를 출력하자

'내노트'를 [비밀노트]인 새로운 [비밀노트]()로 정하자

(참고) 앗! 밖에서 몰래 일기를 읽으려고 하면 에러가 발생해요!
'내노트'의 <일기읽기>()를 실행하자

이 코드를 실행하면 “AccessViolationError: ‘일기읽기’ 기능은 내부 전용(private)이라 외부에서 부를 수 없어요.” 라는 빨간 에러 메시지가 뜨면서 실행이 중단될 거예요!


속성 접근자 (Getter/Setter)로 안전하게 값 다루기

비밀로 숨겨둔 변수를 밖에서 안전하게 읽고 쓸 수 있게 열어주고 싶다면 속성 접근자를 써보세요! 가져올 때:정할 때: 블록을 쓰면, 값을 가져가거나 바꿀 때 내가 원하는 검사를 먼저 할 수 있답니다.

[지갑]을 설계하자:
    '_돈'을 [숫자]인 0으로 정하여 숨기자
    
    '돈'을 [숫자]로 정하자:
        가져올 때:
            '나'의 '_돈'을 돌려주자
        정할 때 ('금액'):
            만약 ('금액'이 0보다 작다) 라면:
                "돈은 마이너스가 될 수 없어요!"를 출력하자
            그렇지 않다면:
                '나'의 '_돈'을 '금액'으로 정하자

'내지갑'을 [지갑]인 새로운 [지갑]()으로 정하자
'내지갑'의 '돈'을 1000으로 정하자
'내지갑'의 '돈'을 -500으로 정하자
틀"현재 내 지갑엔 {'내지갑'의 '돈'}원이 있어요."를 출력하자

이렇게 하면 잘못된 값이 들어오는 걸 막으면서도, 밖에서는 변수처럼 아주 편하게 쓸 수 있어요!

놀이터
결과
코드를 작성하고 '실행' 버튼을 눌러보세요.