JAVA

정보은닉과 setter, getter 개념정리

solytory 2025. 6. 27. 22:47

 

정보은닉(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());
    }
}