John's Code Journey

[JAVA] 캡슐화(Encapsulation) 본문

IT공부/JAVA

[JAVA] 캡슐화(Encapsulation)

Johnnnn 2025. 4. 23. 16:56
728x90

💊 캡슐화란?

캡슐화는 데이터(필드)와 행동(메서드)를 하나로 묶고,

외부에서 직접 접근하지 못하도록 감추는 것

쉽게 말하면, 중요한 데이터는 "숨기고", 접근은 안전한 통로로만 허용하겠다는 개념.
마치 약(데이터)을 캡슐(클래스)로 감싸서 안전하게 먹는 것처럼

 

🧠 왜 캡슐화를 사용할까?

이유 설명
데이터 보호 외부에서 마음대로 값을 바꾸는 걸 막음 (잘못된 사용 방지)
코드 유지보수 ↑ 내부 구조가 바뀌어도 외부에는 영향 없음 (안정적 설계)
유효성 검사 값을 넣을 때 조건 체크 가능 (setter에서 검증 등)

✅ 캡슐화의 구현 방법

자바에서 3단계로 구현

  1. 필드는 private 으로 감추기
  2. getter/setter 메서드로 간접 접근 허용
  3. 필요하다면 setter에 유효성 검사 추가

📄 예제

public class Student {
    // 1. 필드 감추기
    private String name;
    private int score;

    // 2. getter (값 읽기)
    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    // 3. setter (값 쓰기) - 유효성 검사도 가능
    public void setName(String name) {
        this.name = name;
    }

    public void setScore(int score) {
        if (score >= 0 && score <= 100) {
            this.score = score;
        } else {
            System.out.println("점수는 0~100 사이만 가능합니다.");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("지은");
        s.setScore(95);     // 유효한 값
        s.setScore(200);    // ❌ 잘못된 값

        System.out.println(s.getName());  // 지은
        System.out.println(s.getScore()); // 95
    }
}

📦 캡슐화 없을 때의 문제점

public class BadStudent {
    public String name;
    public int score;
}

// 외부에서 마음대로 조작 가능:
BadStudent s = new BadStudent();
s.score = -1000;  // ❌ 문제 발생

 

💡 캡슐화 vs 정보 은닉

  • 캡슐화: 데이터와 기능을 하나로 묶고 외부로부터 보호함
  • 정보 은닉: 캡슐화를 구현하면서 필드를 감추는 구체적인 기술
  • 쉽게 말해, 정보 은닉은 캡슐화를 실현하는 도구

🔐 캡슐화와 접근 제어자

접근 제어자 외부 클래스 접근 가능 여부
public O, 누구나 접근 가능
private ❌, 해당 클래스 내부에서만 사용 가능
protected 같은 패키지 또는 상속받은 클래스에서만
default 같은 패키지 내에서만

🎯 핵심 요약

  • 캡슐화 = 데이터 보호 + 안전한 접근 제공
  • 필드는 private, 접근은 getter/setter
  • 잘못된 데이터 입력은 setter에서 막을 수 있음
  • 유지보수, 보안, 안정성 측면에서 매우 중요