인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

chrischoi님의 프로필 이미지

작성한 질문수

김영한의 실전 자바 - 기본편

접근 제어자 종류

접근제어자, 클래스 질문

작성

·

21

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

class의 접근제어자를 private으로 설정시 외부 호출을 막는 것은 이해를 합니다.

class의 volume 변수에 대해 실제 수정 해야 상황일 경우 (volume 200이 가능하게 되었을 때) privat로 설정된 volume 변수 수정 권한을 setting하는 것은 어떤 조직 구성과 방법으로 하는지 실제 경험을 사례로 설명을 요망합니다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. chrischoi님께서 질문하신 내용에 대해 기존 강의 자료와 질문 게시판에서 유사한 질문과 답변을 참고하여 도움을 드리겠습니다.

클래스에 선언된 변수에 대해 private 접근 제어자를 사용하는 것은 외부에서 직접적인 접근을 제한하여 변수의 무결성을 보장하고, 안전한 방식으로 데이터 조작을 가능하게 하기 위해서입니다. 이러한 조건은 캡슐화(encapsulation)라는 객체지향 프로그래밍의 원칙 중 하나로, 객체의 상태를 보호하고 클래스의 내부 구현을 외부로부터 숨길 수 있게 합니다.

만약 private로 선언된 volume 변수의 값을 외부에서 설정해야 하는 경우, 일반적으로는 클래스 내부에 public인 Setter 메서드를 제공하여 이를 제어합니다. Setter 메서드는 다음과 같은 방식으로 구현될 수 있습니다:

public class Speaker {
    private int volume;

    public void setVolume(int volume) {
        if(volume >= 0 && volume <= 200) { // 유효성 검사
            this.volume = volume;
        } else {
            throw new IllegalArgumentException("Volume must be between 0 and 200.");
        }
    }
}

이처럼 Setter 메서드 내부에서 값의 범위를 검사함으로써 데이터의 유효성을 보장하고, 의도치 않은 값이 설정되는 것을 방지할 수 있습니다. 이는 클래스가 다른 클래스나 객체로부터 직접적인 접근을 막고 안전한 값 변경을 가능하게 합니다.

유사한 상황에 대해 다른 유저들이 남긴 질문을 통해 추가적인 정보를 얻고자 한다면 다음 링크를 확인해 보세요:
- 접근제어자 1번째 문제

이 링크에서 설명된 사례들은 접근 제어의 개념과 Setter 메서드를 활용한 데이터 캡슐화 방법에 대한 설명을 제공합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.