210110_JAVA

정재현·2021년 1월 10일
0

TIL

목록 보기
40/80

오늘은 7일에 이어서 챕터09, 정보 은닉 그리고 캡슐화에 들어간다.
오늘은 09-1 정보 은닉에 관하여 공부했다.

자바에서 말하는 '정보'는 '인스턴스 변수'를 뜻한다.
결국 정보은닉이란 인스턴스 변수를 숨긴다는 뜻이다.

책에서는 원의 넓이를 구하는 클래스에서 반지름의 선언을 예로 들었는데,
코드에는

반지름의 길이 rad에 0보다 작은 값이 저장되는 일이 발생하지 않도록 하겠다.

라는 코드가 setRad(double r) 에 내포되어 있다.

 public void setRad(double r) {
        if (r < 0) {
            rad = 0;
            return;
        }

        rad = r;
    }

이런식으로 ㅇㅇ

때문에 이러한 의도를 따르기 위해서라도 반지름의 길이를 변경할 때는
반드시 위의 메소드 호출을 통해서만 변경을 진행해야하는 것이다.
이렇듯 인스턴스 변수에 저장되는 값의 종류와 범위 쓰임새는 클래스를 정의한
사람이 가장 잘 아는데~

만약 다음 메서드를 사용하지 않고

c.rad = -4.5

main에서 이렇게 사용하게 된다면???
이러한 잘못된 사용방식은 컴파일 과정에서 드러나지 않고 실행결과에서도
드러나지 않아 큰 문제가 된다.

때문에 위와 같은 접근을 허용하지 않도록 클래스를 설계할 필요가 있는것!

이러한 클래스의 설계를 '정보 은닉' 이라고 한다.

private double rad = 0;

요렇게 접근수준지시자를 private으로 선언해주어

변수 rad는 클래스 내부에서만 접근을 허용할게요.

라고 선언해주면 된다.

인스턴스 변수 rad를 private으로 선언했으니, 다음과 같은

setRad() => 값 설정, getRad() => 값 참조

를 선언해줄 필요가 있다.

Getter 는
인스턴스 변수의 값을 참조하는 용도로 정의된 메소드로써
변수의 이름이 name일 때, 메소드의 이름은 getName으로 짓는 것이 관례이다

Setter 는
인스턴스 변수의 값을 설정하는 용도로 정의된 메소드로써
마찬가지로 setName으로 짓는 것이 관례이다.

물론! private으로 선언했다고 모두 세터와 게터를 선언해줘야 하는 것은 아니다.
필요에 따라 정의하면 되지만~ 당장 필요하지 않더라도 나중을 고려하여
게터와 세터를 정의하기도 한다.

내일은 접근 수준 지시자부터 이어서 진행!

github: https://github.com/jeong-jaehyeon/JavaProject/tree/javaExercise

오늘의 코멘트: 이틀쉬었다고 집중력 떨어짐..

profile
"돈받고 일하면 프로다"

0개의 댓글