정보은닉(Information Hiding)이란?
객체의 내부 데이터를 외부에서 직접 접근하지 못하게 숨기고 데이터의 변경이나 조회를 클래스 내부에서만 제어하도록 하는 객체지향 원칙이다.
즉, 객체의 상태정보는 외부에서 직접 조작이 불가능하고 정해진 메서드를 통해서만 간접적으로 접근하게 하는 방식이다.
왜 숨겨야 할까?
1. 잘못된 값이 들어오는 것을 막기 위해 [상태정보에 나이를 표현하는 age가 있을 때 직접접근을 허용하게 되면 -100살도 될 수 있음 오작동]2. 나중에 내부 구조를 바꿔도 외부에 영향을 주지 않기 위해 [변수명을 변경해도 메서드만 유지하면 위부 코드는 그대로 유지 가능]3. 객체 스스로 자신의 상태를 통제하도록 하기 위해 [객체가 주도적으로 데이터관리 = 캡슐화]
getter와 setter란?
getter : 객체의 private 멤버 변수(상태정보) 값을 읽어오는 메서드
setter : 객체의 private 멤버 변수 값을 변경하는 메서드
getter와 setter의 역할은?
외부에서 객체의 내부 데이터에 직접 접근하지않고 메서드를 ㅌ오해 안전하게 값을 읽거나 변경할 수 있도록 해주고 필요에 따라 내부에서 값의 유효성 검사 및 로깅등의 로직을 추가할 수 있다.
💡 접근 제어자 + getter/setter를 사용하여 정보은닉을 진행해 보자
public class Person {
// 접근제어자 (외부 접근 불가)
private String name;
// getter
public String getName() {
return name;
}
// setter
public void setName(String name) {
if (name != null && !name.isEmpty()) {
this.name = name;
}
}
}
// 실제 사용 클래스
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
// setter를 통해 name 값 설정
person.setName("홍길동");
// getter를 통해 name 값 읽기
String name = person.getName();
System.out.println("이름: " + name);
// 잘못된 값은 무시됨
person.setName(""); // 빈 문자열, name 값 변경 안 됨
System.out.println("이름(변경 시도 후): " + person.getName());
}
}
'JAVA' 카테고리의 다른 글
상속, 재정의, 객체 형 변환, 다형성에 대해서 알고 넘어가자 (0) | 2025.06.29 |
---|---|
[JAVA] JVM에대해서 알아보고 메모리 구조 파헤쳐 보기 (3) | 2025.06.29 |
[JAVA] 접근 제어자와 패키지, 클래스 접근법 개념정리 (1) | 2025.06.27 |
메서드의 오버로딩과 정적바인딩 개념정리 (1) | 2025.06.24 |
생성자와 this 개념정리 (2) | 2025.06.24 |