자바/객체 지향 프로그래밍

Getter/Setter 패턴과 정보 은닉

끄적인다 2025. 5. 2. 23:48
반응형

자바에서 객체 지향 프로그래밍의 핵심 중 하나는 바로 *정보 은닉(Information Hiding)*입니다. 이 개념을 현실적으로 실현하는 가장 대표적인 방식이 바로 Getter/Setter 패턴이죠.

이번 글에서는 Getter/Setter의 구조와 필요성, 그리고 정보 은닉의 이유와 이점까지 차근차근 설명해드릴게요.


🔐 1. 정보 은닉(Information Hiding)이란?

정보 은닉이란 클래스 내부의 필드(데이터)를 외부에서 직접 접근하지 못하도록 감추고, 오직 공개된 메서드를 통해서만 접근하거나 수정할 수 있도록 하는 것을 의미합니다.

왜 필요한가요?

  • 객체의 무결성 유지
  • 내부 구현 변경 시 외부 영향 최소화
  • 잘못된 데이터 입력 차단
  • 객체의 책임을 명확히 분리

✏️ 잘못된 예시

public class Person {
    public String name;
    public int age;
}

Person p = new Person();
p.age = -10; // 말도 안 되는 나이 설정

외부에서 직접 필드 접근이 가능하므로, 잘못된 값을 입력할 위험이 있습니다.


🛠 2. Getter/Setter 패턴이란?

Getter/Setter는 객체의 필드를 private으로 선언한 뒤, 그 필드에 접근하거나 수정하기 위해 사용하는 공개된(public) 메서드입니다.

✔ 기본 구조

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age >= 0) {
            this.age = age;
        }
    }
}

필드 보호 + 검증 로직 포함 가능 = 안정성 향상

🧪 사용 예

Person p = new Person();
p.setName("철수");
p.setAge(25);

System.out.println(p.getName()); // 철수
System.out.println(p.getAge());  // 25

🔎 3. Getter/Setter 자동 생성 (IDE 활용)

Eclipse, IntelliJ와 같은 IDE에서는 Getter/Setter를 자동으로 생성해주는 기능이 있어 매우 편리합니다.

  • Eclipse: Alt + Shift + SR
  • IntelliJ: Alt + InsertGetter and Setter

🧠 4. Getter/Setter 사용 시 주의점

주의사항설명

과도한 사용 자제 모든 필드에 Getter/Setter를 만들면 정보 은닉 의미 상실
유효성 검사 포함 Setter에는 검증 로직을 포함하여 안정성 강화
꼭 필요한 필드만 공개 외부에서 반드시 필요한 필드에만 Getter/Setter 제공

📌 5. Lombok을 활용한 간편한 Getter/Setter 작성

자바에서는 Lombok 라이브러리를 사용하면 간단한 애너테이션으로 Getter/Setter를 자동 생성할 수 있습니다.

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Member {
    private String id;
    private String password;
}

@Getter, @Setter 애너테이션만 붙이면 끝! 코드가 매우 간결해집니다.


✅ 마무리

정보 은닉은 객체 지향 설계의 핵심 원칙 중 하나로, 프로그램의 안정성과 유지보수성을 높이는 데 기여합니다.

Getter/Setter는 이 원칙을 실현하는 기본 도구이며, 적절한 검증 로직을 함께 포함하면 더욱 견고한 객체를 설계할 수 있습니다.

  • 내부 필드는 private으로 보호
  • 접근은 public Getter/Setter로 제한
  • 필요 없는 필드는 굳이 Getter/Setter 만들지 말기

다음 글에서는 *캡슐화(Encapsulation)*와 함께 불변 객체(Immutable Object) 설계에 대해 더 깊이 알아보면 좋겠습니다!

반응형