접근제어자를 사용하는 주된 이유는... 외부로 부터 데이터를 보호하기 위해서입니다.
그리고, 외부에는 불필요한 내부적으로만 사용되는 부분을 감춰서 복잡성을 줄이기 위한 것입니다.
그래서 Java API문서를 보면... 접근제어자가 public이나 protected인 것들만 나와 있는 것을 알 수 있습니다.
여기 Time클래스를 보면.... 멤버변수들은 모두 접근제어자를 private으로 해서 클래스 외부에서 접근하지 못하도록 하고...
접근제어자가 public인 한 쌍의 메서드를 통해서만 읽거나 변경할 수 있도록 되어 있습니다.
getHour메서드는 멤버변수 hour의 값을 반환하고...
setHour메서드는 넘겨받은 값을 체크해서 유효한 값일 경우에만 hour의 값을 변경하도록 코드가 작성되어 있습니다.
이처럼... 멤버변수의 값을 읽어오는 메서드는 멤버변수 이름앞에 get을 붙이고... 변경하는 메서드는 set을 붙이는 것이 일
반적이기는 하지만
꼭 지켜야 하는 규칙은 아닙니다.
Time인스턴스 t를 생성하고... 화면에 출력하면...12:35:30라는 시간이 출력됩니다.
참조변수를 출력하면... 참조변수가 가리키는 인스턴스의 toString()메서드를 호출하기 때문에...
참조변수 t를 출력하는 것은... 참조변수 t가 가리키는 인스턴스의 toString메서드를 호출하는 것과 같습니다.
그래서... Time클래스의 toString메서드가 호출되어... 시분초가 화면에 출력된 것입니다.
이처럼 참조변수를 이용해서 멤버변수에 직접 접근하려고 하면... 에러가 발생합니다.
이와 같이... 메서드를 이용해서... 멤버변수에 접근해야합니다.
t.getHour메서드를 통해 인스턴스 t의 멤버변수 hour의 값 12를 얻어서 1을 더한 값을
setHour메서드에 넘겨주면... 멤버변수 hour의 값이 13이 됩니다.
인스턴스 t를 화면에 다시 출력하면...
멤버변수 hour의 값이 12에서 1증가된 13이 되어 있는 것을 알 수 있습니다.
객체지향개념 책들을 보다보면... 이와 같은 그림을 볼 수 있는데요.
이게 바로 객체입니다. 안에 있는 원들이... 멤버변수고요... 멤버변수들을 둘러싸고 있는 것이 메서드입니다.
접근제어자를 이용해서 멤버변수들은 private으로 해서 내부에 감추고... 메서드들은 public으로 해서 외부에 노출시킴으로써...
같은 클래스에 정의된 멤버들끼리는 서로 자유롭게 접근하고...
외부에서는 메서드를 통해서만 멤버변수에 접근할 수 있는 구조로 만드는 것입니다.
외부에서는... 객체의 노출된 public 메서드만을 호출할 수만 있을 뿐...
실제 내부가 어떻게 되어 있는지 알 수 없습니다. 이 것이 바로 캡슐화죠.
private은 가장 높은 접근제한이기 때문에...
상속을 통해 확장될 목적으로 작성되는 클래스에서는 멤버변수의 접근제어자를 private대신 protected를 사용해야
자손클래스에서 조상클래스의 멤버를 쉽게 접근할 수 있습니다.
'Backend > java' 카테고리의 다른 글
제어자의 조합 (0) | 2018.08.12 |
---|---|
생성자의 접근 제어자 (0) | 2018.08.12 |
접근 제어자란 무엇인가 (0) | 2018.08.12 |
abstract란 무엇인가 (0) | 2018.08.12 |
생성자를 이용한 Final 멤버변수 초기화 (0) | 2018.08.12 |
#IT #먹방 #전자기기 #일상
#개발 #일상