본문 바로가기
Java_language

캡슐화 (private)

by 헬로제이콥 2025. 12. 1.

 

캡슐화란 무엇일까요? 

  • 캡슐화는 물건을 상자에 잘 넣어두는 것과 비슷해요.
  • 상자(클래스) 안에는 값(속성)이 있고, 상자 밖에서는 마음대로 꺼내거나 바꿀 수 없어요. 대신 상자에 구멍(메서드)을 만들어서 안전하게 넣고 빼요.
  • 이렇게 하면 상자 안의 소중한 값이 망가지지 않도록 지킬 수 있어요.

예시 비유:

  • 친구의 일기(데이터)를 아무나 볼 수 없게 자물쇠(비공개)가 붙어 있고, 일기 주인이 허락할 때만 읽게 해주는 것과 같아요.

 

캡슐화 의 의미는 "민감한" 데이터를 사용자에게서 숨기는 것입니다. 이를 위해서는 다음이 필요합니다.

  • 클래스 변수/속성을 다음과 같이 선언합니다.private
  • 변수 값에 접근하고 업데이트하기 위한 공개 get  set 메서드를 제공합니다.private

캡슐화가 필요한 이유는?

  • 클래스 속성 및 메서드에 대한 더 나은 제어
  • 클래스 속성은 읽기 전용 (메서드만 사용하는 경우 get) 또는 쓰기 전용 (메서드만 사용하는 경우 set) 으로 만들 수 있습니다.
  • 유연성: 프로그래머는 다른 부분에 영향을 주지 않고 코드의 한 부분을 변경할 수 있습니다.
  • 데이터 보안 강화

 

핵심 요약

  • 중요한 데이터는 숨기고(private) 안전하게 꺼내고 바꾸는 방법(getter, setter)만 공개합니다.
  • 아래 예제에서는 자동차 이름(carName)을 private으로 숨기고, getCarName()과 setCarName()으로 접근합니다.

Car.java (자동차 클래스 — 데이터는 숨김)

java

public class Car {
    // 자동차 이름은 외부에서 바로 바꾸지 못하게 숨김
    private String carName;

    // 생성자: 자동차를 만들 때 이름을 정함
    public Car(String name) {
        if (name == null || name.trim().isEmpty()) {
            this.carName = "무명차"; // 기본값
        } else {
            this.carName = name;
        }
    }

    // getter: 자동차 이름을 안전하게 알려줌
    public String getCarName() {
        return carName;
    }

    // setter: 자동차 이름을 바꿀 때 검사를 거쳐 바꿈
    public void setCarName(String newName) {
        if (newName != null && !newName.trim().isEmpty()) {
            this.carName = newName;
        }
        // 잘못된 입력이면 무시(혹은 예외를 던질 수도 있음)
    }
}

Main.java (사용 예 — 겟터/세터로 자동차 이름을 읽고 바꿈)

java

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car("빠른이"); // 초기 이름 설정
        System.out.println("현재 자동차 이름: " + myCar.getCarName()); // 빠른이

        // 이름 바꾸기 (정상 입력)
        myCar.setCarName("번개호");
        System.out.println("이름 변경 후: " + myCar.getCarName()); // 번개호

        // 잘못된 입력(빈 문자열)은 무시됨
        myCar.setCarName("   ");
        System.out.println("잘못된 입력 시: " + myCar.getCarName()); // 여전히 번개호

        // null 입력도 무시되어 안전함
        myCar.setCarName(null);
        System.out.println("null 입력 시: " + myCar.getCarName()); // 여전히 번개호
    }
}

추가 설명

  • 자동차 이름을 바로 바꾸지 못하게 숨겨놓으면 안전해요. 마치 장난감 박스에 자물쇠를 채워두고 주인만 열 수 있게 하는 것과 같아요.
  • 이름을 바꿀 때는 꼭 제대로 된 이름인지 검사한 다음 바꿔요(빈문자나 null이면 바꾸지 않음). 이게 캡슐화의 장점이에요.

실행 결과 (콘솔 출력 예시)

 
현재 자동차 이름: 빠른이
이름 변경 후: 번개호
빈 문자열 입력 시: 번개호
null 입력 시: 번개호
너무 긴 이름 입력 시: 번개호
최종 자동차 이름: 번개소년

설명(간단히)

  • carName은 외부에서 직접 접근하지 못하도록 private으로 숨겼습니다.
  • getCarName()으로 안전하게 읽고, setCarName(...)으로만 바꿀 수 있게 했습니다.
  • set 메서드에서 빈값, null, 너무 긴 이름 같은 잘못된 입력을 걸러 내부 데이터가 엉키지 않도록 했습니다.

'Java_language' 카테고리의 다른 글

자바의 import  (0) 2025.12.01
클래스 변수 vs 인스턴스  (0) 2025.12.01
자바의 static과 this에 대해서  (0) 2025.12.01
자바 접근제어자(Access Modifier)  (0) 2025.12.01
BankAccount 클래스  (0) 2025.11.27