정보은닉(information Hiding)과 캡슐화
사진출처:slidesplayer.org
private를 대학교에서 공부할 때는 왜 이것을 굳이 써야하는지 의문이었는데..
회사에 입사하고.. 보안쪽을 공부하다보니까 private 선언을 해야 하는 이유를 알겠다.
위 그림 속 선생님이 말씀하시듯이 보통은 몇개의 메소드만 외부로 공개되고 그 메소드 호출을 통하여 데이터들의 값이 변경되거나 수정 등등의 작업이 이루어지게 캡슐화 되어있다.
인스턴스 변수를 private로 설정하지 않을 경우 우리는 해당 변수에 대해서 다음과 같이 직접 접근이 가능하다.
class Abc{ int a; int b; public Abc(a,b){ this.a = a; this.b = b; } }
위와 같이 abc라는 클래스가 있다고 치자 그리고 인스턴스를 아래와 같이 생성할 경우
Abc abc = new Abc(1,2);
우리는 abc.a=error; abc.b=1; 과 같이 해당 변수에 직접 접근하여 그 값을 수정할 수 있다.
위 예제에서는 크게 문제가 되지않는다. 하지만 이런 접근은 위험하다.
개발자의 실수로 이어질 수도 있으며 안정성 또한 떨어진다.
가급적이면 무조건 인스턴스 변수는 private로 설정해주어야 한다.
class Abc{ private int a; private int b; public Abc(a,b){ this.a = a; this.b = b; } }
이렇게 설정해 줄 경우 메소드를 사용하지 않고 직접 해당 변수에 접근하는 일을 막을 수 있기 때문에 안정성을 높일 수 있다.
* private로 선언되는 인스턴스 변수와 메소드는 선언된 클래스 내부에서만 접근이 가능하다.
참고 서적: 난 정말 JAVA를 공부한 적이 없다구요!
반응형
'Dev > JAVA' 카테고리의 다른 글
[퍼옴/메모] 이클립스 자동완성 (0) | 2018.06.19 |
---|---|
데이터베이스 자료형과 맵핑되는 JAVA의 자료형 (0) | 2018.01.30 |
JAVA 메소드 오버로딩(Overloading) (0) | 2018.01.28 |
JAVA super() 개념 정리하기 (0) | 2018.01.20 |
JAVA 생성자(Constructor) 개념 정리하기! (0) | 2018.01.20 |
함수, 변수, 속성, 메서드(메소드) 쉽게 구분하는 예시 (0) | 2017.10.26 |
자바스크립트 주석 처리방법 2가지 (2) | 2017.10.26 |
JAVA는 객체지향 프로그래밍 언어 (0) | 2017.06.08 |