객체, object가 어떤 데이터를 포함하는지, 어떤 행동을 할 수 있는 프로그래밍을 하는 것이다
데이터는 바뀔 수 있다
Class
public class Planet {
name, location, distanceFromSun; //data
revolve(), rotate(); //actions/behaviors
};
클래스는 탬플렛, 즉 객체를 만드는 틀이다
클래스 안에, 만들어질 객체에 어떤 데이터를 넣을 수 있는지, 또는 어떤 행동을 할 수 있을지 설정을 한다
Object
public class Planet {
name, location, distanceFromSun; //data
revolve(), rotate(); //actions/behaviors
};
Planet earth = new Planet();
Planet venus = new Planet();
객체, object는 클래스라는 틀로 만들어졌다
earth와 venus는 Planet 이라는 클래스, 즉 틀을 통해 만들어진 변수이다
Encapsulation
'캡슐화'는 변수와 함수를 클래스로 묶고, 외부에서 쉽게 접근 못 하도록 은닉하는 것이다
즉 객체가 제공하는 필드와 메소드를 통해서만 내부 정보를 접근할 수 있다
다른 객체를 통해, 현재 객체의 데이터가 바뀌는 것을 막아 줄 수 있다
객체의 속성을 캡슐화를 하여 메서드를 통해서 변수의 데이터를 바꾸는 로직을 짤 수 있다
예) 음수를 데이터에 넣기 싫으면, 메서드의 if문을 통해 로직을 짠다
유저가 변수를 음수로 잘 못 저장했을 때, 로직 때문에, 데이터가 수정이 안 된다
public class MotorBike {
// --------------- state -------------
private int speed;
// speed의 기본 설정
MotorBike() {
this(10)
}
MotorBike(int speed) {
this.speed = speed;
}
// -------------------- behavior----------------------
// 속도 초기 세팅하기
public void changeSpeed(int speed) {
if (speed >= 0) {
this.speed = speed;
} else {
System.out.println("This Can not be a speed");
}
}
// 속도 추가하기
public void increaseSpeed(int speed) {
if (speed >= 0) {
changeSpeed(this.speed + speed);
} else {
System.out.println("You can only INCREASE speed");
}
}
// 속도 줄이기
public void decreaseSpeed(int speed) {
if (speed >= 0) {
changeSpeed(this.speed - speed);
} else {
System.out.println("Negative value can not be an input");
}
}
// 현제 속도 반환하기
public int getSpeed() {
return this.speed;
}
public void start() {
System.out.println("Start the Bike");
}
public void stop() {
System.out.println("Stop the Bike");
}
}
private int speed
외부에서 speed라는 변수를 직접적으로 접근할 수 없다 (private을 사용)
void changeSpeed(int speed)
이 함수를 통해 speed를 바꾼다
if 문을 사용하며, 음수는 speed가 될 수 없는 것을 설정한다
this.speed = speed;
this.speed 는 클래스 안에 만들어진 speed 속성
int getSpeed()
속도를 반환해준다
메서드를 이용해서 클래스 안에 있는 speed라는 변수를 바꿔주고, 반환을 했다
추상화
자동차를 운전하기 위해서는, 자동차 안에 모든 부품에 대해 알 필요가 없다
이와 같이 프로그래밍도 디테일 적인 부분들은 모두 추상화가 되어 있다
우리는 자바 코드를 작성한다
코드를 작성하면, 코드가 컴파일 되어 ByteCode로 만들어 지고, JVM을 통해 각 운영체제에 맞춰 실행이 된다
우리는 자바 코드를 작성하면 되지, 컴파일부터 JVM까지 할 필요가 없다 (모두 추상화가 되어 있다)
즉 메서드를 이용할 때에, 메서드가 어떤 기능을 하는지만 알면 되고, 자세한 로직까지 알 필요 없이 사용이 가능하다