// 스트링 배열을 필드로 등록
String[] sArr;
// 생성자를 통해 스트링 배열을 초기화
StringList() {
sArr = new String[0]; // 빈 배열
}
// StringList 객체를 생성해서 사용가능
StringList foods = new StringList();
StringList userNames = new StringList();
...
클래스, 필드, 메서드, 생성자에 대한 접근 권한을 제한하는 키워드
public
과 같이 모든 클래스에서 접근 가능.default
와 접근 제한 범위가 비슷하지만, 상속 여부에 따라 다름.코드의 안정성을 높일 수 있다.
사용자가 알 필요 없는 또는 알아서는 안되는 정보들은 숨겨줘야 한다.
정보 은닉이란 객체의 상태를 숨기고 외부에서 접근할 수 없도록 보호하는 것
접근 제한자
를 적절하게 이용하여 직접적인 접근을 막고 메서드를 통해 접근하게 하는 것이 은닉package encap;
public class Car {
String model; // 모델명
int speed; // 현재 속도
char mode; // 변속 모드 (D, N, R, P)
boolean start; // 시동 온오프 상태
public Car(String model) {
this.model = model;
this.mode = 'P';
}
}
Car tesla = new Car("테슬라 모델 3");
tesla.speed = 1000000000;
tesla.speed = -124398523;
public class Car {
private String model; // 모델명
private int speed; // 현재 속도
private char mode; // 변속 모드 (D, N, R, P)
private boolean start; // 시동 온오프 상태
public Car(String model) {
this.model = model;
this.mode = 'P';
}
// setter: 필드값 변경을 대리하는 메서드
public void setSpeed(int speed) {
if(!start) {
System.out.println("시동이 꺼져 있습니다.");
return;
}
if(mode != 'D' || mode != 'R') {
System.out.println("변속기 모드가 올바르지 않습니다.");
return;
}
if (speed < 0 || speed > 200) {
System.out.println("속도가 올바르지 않습니다.");
return;
}
this.speed = speed;
}
// getter: 은닉된 필드값을 참조하는 메서드
public int getSpeed() {
return this.speed;
}
}
객체의 상태와 동작을 하나의 단위로 묶어서 구현하는 것
// 시동 거는 기능
public void engineStart() {
System.out.println("시동 버튼을 눌렀습니다.");
System.out.println("시동이 걸렸습니다.");
}
// 엔진에 연료가 주입되는 기능
private void injectGasoline() {
System.out.println("연료가 엔진에 주입됩니다.");
}
// 엔진오일이 주입되는 기능
private void injectOil() {
System.out.println("엔진 오일이 순환합니다.");
}
// 실린더가 움직이는 기능
private void moveCylinder() {
if (start) {
System.out.println("실린더가 움직입니다.");
} else {
System.out.println("차가 고장났습니다.");
}
}
// 시동 거는 기능
public void engineStart() {
System.out.println("시동버튼을 눌렀습니다.");
injectOil();
injectGasoline();
this.start = true;
moveCylinder();
System.out.println("시동이 걸렸습니다.");
}