Java
[Java] Encapsulation
wwxs
2024. 9. 9. 17:22
Encapsulation (캡슐화)
- 객체 지향 프로그래밍에서 데이터와 해당 데이터를 처리하는 함수를 하나로 묶는 것을 의미
- 객체 내부의 구현을 숨기고 외부에서는 제공된 메서드를 통해서만 접근할 수 있게 설정
- 데이터 보호, 유지보수성 향상, 사용자 편의성 증대
getter & setter 메서드
- getter : 객체의 특정 필드 값을 읽는 메서드
- setter : 객체의 특정 필드 값을 설정하는 메서드
(예제 코드)
더보기
// === 학생 정보를 관리하는 클래스 ===
class Student {
private String name;
private int age;
private int score; // 점수 필드
// getter & setter 메서드 - 캡슐화 되어 있는 데이터에 접근
// : 메서드 형식을 get변수명, set변수명으로 지정하는 것을 권장
public String getName() {
// private 설정되어 있는 name 변수는 반드시
// , getName() 메서드를 통해서만 외부에서 접근이 가능
return name; // this 키워드가 생략
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 0) {
System.out.println("유효하지 않은 나이입니다.");
} else {
this.age = age;
}
}
public int getScore() {
return score;
}
public void setScore(int score) {
if (score > 0 && score < 100) {
this.score = score;
} else {
System.out.println("유효하지 않은 점수입니다.");
}
}
}
public class C_Encapsulation {
public static void main(String[] args) {
// 인스턴스 생성
Student student1 = new Student();
// student1.name = "홍동현"; - Error
student1.setName("홍동현");
student1.setAge(25);
System.out.println(student1.getName()); // 홍동현
System.out.println(student1.getAge()); // 25
student1.setAge(-10); // 유효하지 않은 나이입니다.
// score 필드를 getter & setter 통해 설정
// >> 점수값에 대한 유효성 검사 코드를 추가
// : 0 이상 100 이하
// 85점 설정 > 출력
student1.setScore(85);
System.out.println(student1.getScore()); // 85
}
}
(추가 예제 코드)
더보기
package chapter07;
// 접근 범위: 제한 X
public class Example {
// 클래스의 속성
// 어디서든 접근 가능
public int publicVar = 1;
// 같은 패키지 O, 다른 패키지 - 해당 클래스를 상속받은 자식 클래스만 접근 가능
protected int protectedVar = 2;
// 같은 패키지 O, 다른 패키지 X (default)
int defaultVar = 3;
// 같은 클래스 내에서만 접근 가능
private int privateVar = 4;
// 클래스의 메서드
public void ex1() {
System.out.println(publicVar);
System.out.println(protectedVar);
System.out.println(defaultVar);
System.out.println(privateVar);
}
protected void ex2() {
System.out.println(protectedVar);
}
void ex3() {
System.out.println(defaultVar);
}
private void ex4() {
System.out.println(privateVar);
}
}
package otherPackage;
// import 패키지명.클래스명;
import chapter07.Example;
public class OtherClass {
public static void main(String[] args) {
// 외부 패키지 클래스를 사용한 객체 인스턴스화
Example ex = new Example();
System.out.println(ex.publicVar); // 1
// System.out.println(ex.protectedVar);
// System.out.println(ex.defaultVar);
// System.out.println(ex.privateVar);
ex.ex1();
// ex.ex2();
// ex.ex3();
// ex.ex4();
}
}