캡슐화란?
- 객체의 데이터와 메서드를 하나로 묶고, 외부로부터 객체의 데이터를 보호하는 것을 의미함
- 접근제한자 사용 (private, public, protected)
- 클래스의 세부 구현을 숨림 (구현부 변경되어도 이 클래스를 사용하는 코드는 전혀 영향을 받지 않아서 이점이 큼)
- 대부분의 변수들을 private로 설정해서 외부의 접근을 막기
- 정보 은닉!!!의 중요성
에러 코드
- 엘레베이터 예제 => max를 10층으로 해놨는데, 변경하는 경우
public class Elevator {
public boolean opendoor = false;
public int current_F = 0;
public float current_w = 0;
public int max_F = 10;
public int max_w = 100;
public int min_F = -2;
}
public class ElevatorTest {
public static void main(String[] args){
Elevator elevator = new Elevator();
System.out.println(elevator.current_F);
elevator.current_F = 3;
elevator.current_w += 40;
System.out.println(elevator.current_F);
elevator.max_F = 15;
elevator.current_F = 15;
System.out.println(elevator.current_F);
}
}
변경값
- go, up의 메소드를 정의해주기
- 변수값들은 모두 private로 선언
public class Elevator {
private boolean opendoor = false;
private int current_F = 0;
private float current_w = 0;
private int max_F = 10;
private int max_w = 100;
private int min_F = -2;
public void goup(int F, int W){
if (current_F + F <= max_F){
current_F += F;
System.out.println(current_F + "층으로 올라갑니다");
}
else{
System.out.println("올라갈 수 없는 층입니다.");
}
}
}
public class ElevatorTest {
public static void main(String[] args){
Elevator elevator = new Elevator();
elevator.goup(30, 20);
}
}