본문 바로가기

프로그래밍 언어/JAVA

JAVA 입문 - 정보 은닉

지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 참조 자료형

 

접근 제어자

더보기

지금까지 클래스를 만들고 멤버 변수, 메서드, 생성자 등을 만들 때 사용한 public 예약어의

의미를 살펴보자.

객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을

지정할 수 있다. 이런 예약어를 '접근 제어자(access modifier)'라고 한다.

지난 글에서 만든 Student.java 코드의 모든 변수에는 public 예약어가 있다.

public이라고 선언한 변수나 메서드는 외부 클래스에서 접근이 가능하며 외부 클래스가 사용할 수 있다는

뜻이다. 반대로 접근 제어자를 private으로 선언한 변수나 메서드는 외부 클래스에서 사용할 수 없다.

 

변수를 private으로 선언하면 결과 값이 어떻게 바뀌는지 알아보자.

이처럼 studentName 변수를 private으로 바꾸고 파일을 저장하면 다음과 같은 오류가 난다.

오류가 난 까닭은 studentName 변수의 접근 제어가자 public일 때는 외부 클래스인 StudentTest 클래스에서

이 변수에 접근할 수 있었지만, 접근 제어자가 private으로 바뀌면서 외부 클래스의 접근이 허용되지 않기 때문이다.

 

get( ), set( ) 메서드

더보기

private으로 선언한 studentName 변수를 외부 코드에서 사용하려면 studentName 변수를 사용할 수 있도록

public 메서드를 제공해야한다. 그렇지 않으면 studentName 변수에 접근할 수 있는 방법은 없다.

바로 이 때, get( ), set( ) 메서드를 사용해야 한다.

 

사진처럼 get( ), set( ) 메서드를 사용해 코드를 수정하자.

학생 이름을 받아오거나 지정할 수 있도록 getStudentName( ) 메서드와 setStudentName( ) 메서드를

추가했다.

 

이제 StudentTest파일을 수정해보자.

출력 결과

studentName 멤버 변수에 이름 값을 직접 대입하는 것이 아닌 setStudentName( ) 메서드를 활용하여 

값을 대입할 수 있다. 즉 외부 클래스에서 private 변수에 직접 접근할 수는 없지만, public 메서드를

통하면 private 변수에 접근할 수 있는 것이다.

 

정보 은닉

더보기

변수를 public으로 선언하는 것과 변수를 private으로 선언하고 나서 그 변수를 사용할 수 있도록

public 메서드를 재공하는 것의 차이는 무엇일까. 

밑의 사진을 보며 생각해보자.

위 사진처럼 변수를 모두 public으로 선언하면 외부 클래스에서 MyDate를 사용할 때 값을 마음대로 넣을 수 있다.

그러면 아래와 같이 2월에 있지 않은 31일이 입력될 수도 있다.

즉 클래스의 멤버 변수를 public으로 선언하면 접근이 제한되지 않으므로 정보의 오류가 발생할 수 있다.

이런 경우에는 오류가 나더라도 그 값이 해당 변수에 대입되지 못하도록 아래와 같이 변수를 private로 

바꾸고 별도로 public 메서드를 제공해야 한다.

이처럼 클래스 내부에서 사용할 변수나 메서드는 private으로 선언해서 외부에서 접근하지 못하도록 하는 것을 

객체 지향에서는 '정보 은닉(information hiding)'이라고 한다. 

정보 은닉은 객체 지향 프로그래밍의 특징 중 하나이며 JAVA에서는 접근 제어자를 사용하여 정보 은닉을 구현한다.

필요에 따라서 이와 같이 private로 변수를 선언하여 오류를 막을 수 있다.

 

JAVA에서 사용하는 접근 제어자

 

참고 서적: 자바 프로그래밍 입문 - 박은종

'프로그래밍 언어 > JAVA' 카테고리의 다른 글