250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스터디카페
- 프레임워크
- 내일배움캠프
- 키오스크
- 함바그
- Spring
- jvm
- 캡슐화
- springboot
- 도메인별
- 스파르타코딩클럽 #개발자 #백엔드
- optional
- 스프링부트
- 스파르타코딩클럽
- 스파르타사전캠프
- Til
- 요시
- 깃헙
- 사전캠프
- 자바
- 메모리구조
- static
- til #데이터베이스 #sql
- Framework
- Java
- 깃
- 스파르타코딩클럽 #사전캠프
- 레퍼클래스
- 패키지구조
- 계층형
Archives
- Today
- Total
John's Code Journey
[JAVA] 캡슐화(Encapsulation) 본문
728x90
💊 캡슐화란?
캡슐화는 데이터(필드)와 행동(메서드)를 하나로 묶고,
외부에서 직접 접근하지 못하도록 감추는 것
쉽게 말하면, 중요한 데이터는 "숨기고", 접근은 안전한 통로로만 허용하겠다는 개념.
마치 약(데이터)을 캡슐(클래스)로 감싸서 안전하게 먹는 것처럼
🧠 왜 캡슐화를 사용할까?
이유 | 설명 |
데이터 보호 | 외부에서 마음대로 값을 바꾸는 걸 막음 (잘못된 사용 방지) |
코드 유지보수 ↑ | 내부 구조가 바뀌어도 외부에는 영향 없음 (안정적 설계) |
유효성 검사 | 값을 넣을 때 조건 체크 가능 (setter에서 검증 등) |
✅ 캡슐화의 구현 방법
자바에서 3단계로 구현
- 필드는 private 으로 감추기
- getter/setter 메서드로 간접 접근 허용
- 필요하다면 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에서 막을 수 있음
- 유지보수, 보안, 안정성 측면에서 매우 중요
'IT공부 > JAVA' 카테고리의 다른 글
[JAVA] Optional - Null 다루기 (0) | 2025.04.24 |
---|---|
[JAVA] 다형성(Polymorphism) (2) | 2025.04.23 |
[JAVA] interface - 표준화의 시작 (1) | 2025.04.23 |
[JAVA] final - 변하지 않는 값 (0) | 2025.04.23 |
[JAVA] Static - 클래스가 공유하는 공간 (0) | 2025.04.23 |