(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

지시자 클래스 내부 동일 패키지 상속받은 클래스 이외의 영역
private O X X X
default O O X X
protected O O O X
public O O O O

 

■ 정보 은닉

- 변수를 private으로 선언하는 경우 다른 클래스에서 이를 직접 참조할 수 없다. 따라서 getter, setter라고 불리는 get(), set() 메소드를 통해 private 변수의 값을 설정하거나 가져와야 하는데, 이렇게 직접 접근하지 못하고 getter, setter로 접근하도록 숨겨 놓는 것을 정보 은닉이라고 한다. 단순히 변수에 직접 대입하여 사용하는 경우 양수만 사용해야 되는 상황에서 음수를 사용했을 때 컴파일러가 에러를 인지하지 못해 문제 상황을 인지하지 못할 수도 있다. 하지만 setter 메소드에서 변수 값을 대입하는 경우 조건문을 통해 판단하여 에러 상황을 처리해 줄 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Calendar {
    private int month;
 
    public int getMonth() {
        return month;
    }
 
    public void setMonth(int month) {
        if(month >= 1 && month <= 12) {
            this.month = month;
        } else {
            System.out.println("잘못된 값을 입력하셨습니다!");
            return;
        }
    }
}
 
public class Main {
    public static void main(String[] args) {
        Calendar calendar1 = new Calendar();
        calendar1.setMonth(1);
        
        Calendar calendar2 = new Calendar();
        calendar2.setMonth(13); // 잘못된 값을 입력하셨습니다!
    }
}
cs

Line 2 : 정수형 변수 month를 private으로 선언

Line 4 ~ 6 : month의 값을 얻어오기 위한 get 메소드

Line 8 ~ Line 15 : month의 값을 설정하기 위한 set 메소드 (month 값에 따른 조건 분기)

Line 20 : 인스턴스 생성

Line 21 : 참조 변수 calendar1의 month를 1로 설정

Line 23 : 인스턴스 생성

Line 24 : 참조 변수 calendar2의 month를 2로 설정 (범위에 벗어난 값을 입력하여 메시지 출력 후 종료)

+ Recent posts