이번 포스팅에서는 자바(Java)에서 정보 은닉(Information Hiding)에 대하여 공부를 해보고자 한다.
정보 은닉
정보 은닉이란 객체지향에서 사용되는 용어로 클래스 내부에서 사용할 변수나 메서드를 private으로 선언해서 외부에서 접근하지 못하는 것을 말한다.
자바에서는 접근 제어자를 사용하여 정보 은닉을 구현한다.
모든 변수를 private으로 선언해야 하는 것은 아니지만, 필요한 경우에는 private으로 선언하여 오류를 막을 수 있다.
자바에서 사용하는 접근 제어자
접근 제어자 | 설명 |
public | 외부 클래스 어디에서나 접근할 수 있다. |
protected | 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 잇고 그 외 클래스에서는 접근할 수 없다. |
아무것도 없는 경우 | default이며 같은 패키지 내부에서만 접근할 수 있다. |
private | 같은 클래스 내부에서만 접근할 수 있다. |
접근 제어자
객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있다.
이러한 예약어를 '접근 제어자(access modifier)'라고 한다.
public이라고 선언한 변수나 메서드는 외부 클래스에서 접근이 가능하며 외부 클래스가 사용할 수 있다는 뜻이다.
반대로 접근 제어자를 private으로 선언한 변수나 메서드는 외부 클래스에서 사용할 수 없다.
private 사용하기
다음은 변수를 private으로 선언하면 결과 값이 어떻게 바뀌는지 나타내는 코드다.
public class Student {
int studentID;
private String studentName;
int grade;
String address;
}
private 변수 테스트하기
public class StudentTest{
public static void main(String[] args){
Student studentLee = new Student();
studentLee.studentName = '이순신'; //오류 발생
System.out.println(studentLee.getStudentName());
}
}
오류가 발생하는 이유는 studentName 변수의 접근 제어자가 private을 사용해서 외부 클래스의 접근이 허용되지 않기 때문이다.
get( ), set( ) 메서드
private으로 선언한 studentName 변수를 외부 코드에서 사용하려면 변수를 사용할 수 있도록 public 메서드를 제공해야 한다.
public 메서드가 제공되지 않는다면 studentName 변수에 접근할 수 있는 방법은 없다.
이때 사용할 수 있는 것이 get( ), set( ) 메서드이다.
public class Student {
int studentID;
private String studentName;
int grade;
String address;
//private 변수인 StudentName에 접근해 값을 가져오는 public get() 메서드
public String getStudentName(){
return studentName;
}
//private 변수인 StudentName에 접근해 값을 지정하는 public set() 메서드
public void setStudentName(String studentName){
this.studentName = studentName;
}
}
private 변수에 접근하기
public class StudentTest{
public static void main(String[] args){
Student studentLee = new Student();
//studentLee.studentName = '이순신';
studentLee.setStudentName("이순신");
System.out.println(studentLee.getStudentName());
}
}
외부 클래스에서 private 변수에 직접 접근할 수는 없지만, public 메서드를 통하면 private 변수에 접근할 수 있다.
'Back-End > Java' 카테고리의 다른 글
[Java] 객체 간 협력 (0) | 2023.02.02 |
---|---|
[Java] this 예약어 (0) | 2023.02.02 |
[Java] 참조 자료형 (0) | 2023.02.01 |
[Java] 생성자(Constructor) (0) | 2023.02.01 |
[Java] 클래스와 인스턴스 (0) | 2023.01.31 |