안드로이드 개발자의 창고
[6일차 Java] 캡슐화 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 캡슐화란?
- 변수에 대한 직접 접근을 막음으로써 데이터의 무결성을 보장할 수 있도록 개발하는 방식을 의미한다.
- 변수의 직접 접근을 막기 위해 private 접근 제한자를 붙여준다.
- 변수에 값을 저장하는 것을 객체 생성시 한 번만 허용하겠다면 생성자를 통해 할 수 있도록 제공한다.
- 변수에 값을 저장하는 것을 원하는 만큼 할 수 있도록 하게 해주겠다면 setter를 만들어 제공한다.
- 변수의 값을 가져다 사용할 수 있는 것을 할 수 있도록 하게 해주겠다면 getter를 만들어 제공한다.
- setter의 이름짓는 규칙 : set변수명
- getter의 이름짓는 규칙 : get변수명, is변수명(boolean)
- 이클립스 자동 생성 : 상단 메뉴 > Source > Generate Getters and Setters
이클립스 getter, setter 자동 생성 메뉴
📖 예제 코드
public class MainClass {
public static void main(String[] args) {
TestClass1 t1 = new TestClass1(200);
t1.printValue(); // 100, 200
t1.setMemberC(300);
System.out.printf("t1 memberC : %d\n", t1.getMemberC()); // 300
t1.setMemberC(-300);
System.out.printf("t1 memberC : %d\n", t1.getMemberC()); // 300
}
}
class TestClass1 {
// 변수들은 모두 private로 정의한다.
private int memberA = 100;
private int memberB;
private int memberC;
// 만약 변수의 값을 객체 생성시 딱 한번만 저장할 수 있도록 하겠다면 생성자를 통해 처리한다.
public TestClass1(int memberB) {
this.memberB = memberB;
}
public void printValue() {
System.out.printf("memberA : %d\n", memberA);
System.out.printf("memberB : %d\n", memberB);
}
// memberC에 대한 setter
public void setMemberC(int memberC) {
// 값 저장에 대한 제한이 있다면 if문으로 구현해준다.
if (memberC > 0) {
this.memberC = memberC;
}
}
// memberC에 대한 getter
public int getMemberC() {
return this.memberC;
}
}
📖 코드 해석
- TestClass1 t1 = new TestClass1(200);
- TestClass1의 객체를 생성한다.
- 이 때 생성자를 통해 memberB에 200이 저장된다.
- 출력하면 memberA : 100(초기 값), memberB : 200이 나온다.
- t1.setMemberC(300);
- setter를 통해 memberC에 300을 저장한다.
- 출력하면 memberC : 300 이 나온다.
- t1.setMemberC(-300);
- 주어진 값을 저장하기 위해 setter로 이동한다.
- setter의 조건에서 0을 초과한 수만 저장하도록 조건이 있기 때문에 -300은 저장되지 않는다.
- 따라서 이전에 저장되어 있던 memberC : 300이 출력된다.
'Computer > Java' 카테고리의 다른 글
[7일차 Java] final (0) | 2023.05.06 |
---|---|
[7일차 Java] Static (0) | 2023.05.06 |
[6일차 Java] 접근 제한자 (2) | 2023.05.05 |
[6일차 Java] 오버라이딩(Overriding) (0) | 2023.05.05 |
[5일차 Java] 배열을 이용한 객체의 생성/오버로딩(Overloading)/가변형 매개변수/상속/다형성 (0) | 2023.05.05 |