-
[JAVA] 자바, 정보 은닉JAVA 2020. 6. 20. 14:29
정보 은닉
안녕하세요? 장장스입니다.
오늘은 정보 은닉에 대해서 포스팅 하겠습니다. 객체지향의 특징이라고 할 수 있는 정보 은닉에 대해 알아보기 전에 캡슐화와 접근제어자에 대해 간단하게 알아 보겠습니다.
캡슐화란?
캡슐화(encapsulation)는 객체 지향 프로그래밍에서 다음 2가지 측면이 있습니다.
-
객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶는다.
-
실제 구현 내용 일부를 외부에 감추어 은닉한다.
접근 제어자란?
객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있습니다. 이러한 예약어를 '접근 제어자(access modifier)'라고 합니다.
- public
외부 클래스 어디에서나 접근이 가능합니다.
- protected
같은 패키지 내부와 상속 관계의 클래스에서만 접근 할 수 있습니다. 그 외 클래스에서는 접근이 불가능합니다.
- private
같은 클래스 내부에서만 접근할 수 있습니다.
- 아무 것도 없음
디폴트값이며 같은 패키지 내부에서 접근할 수 있습니다.
정보 은닉이란?
결론부터 말하자면 클래스 내부에서 사용할 변수나 메서드를 private로 선언해서 외부에서 접근하지 못하도록 하는 것을 객체지향에서 '정보은닉(information hiding)'이라고 합니다.
clock 이라는 class가 있습니다. 일반적으로 시계는 시간은 0~23시, 분은 0~59분까지 나타낼 수 있습니다.
public class clock{ public int time; public int min; }
그런데 누군가가 시계에 접근해서 존재하지않는 30시간 17분 이라고 입력하게 되면 문제가 생길 겁니다. 때문에 외부에서 누군가가 접근하지 못하게 정보 은닉이 필요합니다.
다음과 같이 코드를 고쳤습니다.
public class clock{ private int time; private int min; public setTime(int time){ if(time<0 || time>23){ system.out.println("시간 오류입니다."); }else{ this.time = time; } } public setMin(int min){ if(min<0 || min>59){ system.out.println("분 오류입니다."); }else{ this.min = min; } } }
접근 제어자를 public -> private로 바꿨습니다.
private으로 설정하게 되면서 외부클래스에서는 변수에 접근할 방법이 없습니다. 그래서 getter, setter 메서드를 생성하여 해당 변수에 값을 설정 할 수 있도록 구현 할 수 있습니다.
References
- Do it! 자바 프로그래밍 입문
- 위키피디아-캡슐화
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'JAVA' 카테고리의 다른 글
[JAVA] 상속에서 클래스 생성과 super (0) 2020.06.23 [JAVA] 자바, ArrayList (0) 2020.06.22 [JAVA] 자바, 배열 복사 (0) 2020.06.22 [JAVA] 자바, 메모리 구조 스택(stack), 힙(heap), 데이터(data) (0) 2020.06.21 [자바] 문자열(String)비교 == 와 equals 차이점 (0) 2020.03.22 -