캡슐화는 객체지향의 4가지 개념 중 하나이다. 자바의 Encapsulation(캡슐화)는 데이터(변수) ↔ 데이터에 작용하는 코드(메소드)를 하나의 단위로 묶는 메커니즘이다.
캡슐화에서 클래스의 변수는 다른 클래스로부터 숨겨진다. 그래서, 이를 데이터 은닉이라고도 한다.
To achieve encapsulation in Java
1. Declare the variables of a class as private.
2. Provide public setter and getter methods to modify and view the variables values.
Object-oriented Programming (객체지향프로그래밍)
1. Encapsulation
2. Inheritance
3. Polymorphism
4. Abstraction
public class Main {
public static void main(String[] args) {
Car car = new Car("쉐보레", "Camero",2010);
car.getYear();
car.setYear(2030);
System.out.println(car.getYear());
}
}
public class Car {
private String make;
private String model;
private int year;
//Constuctor
Car(String make, String model, int year){
this.make = make;
this.model = model;
this.year = year;
}
public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
Getter와 Setter를 통과해야 한다.public class Main {
public static void main(String[] args) {
Car car1 = new Car("Chevrolet", "Camero",2010);
Car car2 = new Car("Ford", "Mustang", 2022);
System.out.println(car2.getMake());
car2.copy(car1);
System.out.println(car2.getMake());
}
}
public class Car {
// --..code..--
public void copy(Car x) {
this.setMake(x.getMake());
this.setModel(x.getModel());
this.setYear(x.getYear());
}
}
인터페이스는 자바의 참조타입이다. 클래스와 비슷하게, 추상 메소드의 모음(?)임. 클래스가 인터페이스를 implements함으로써, 인터페이스의 추상 메소드를 상속한다.
인터페이스는
implements된다.public class Main {
public static void main(String[] args) {
Rabbit rabbit = new Rabbit();
rabbit.flee();
Hawk hawk = new Hawk();
hawk.hunt();
Fish fish = new Fish();
fish.flee(); fish.hunt();
}
}
public class Fish implements Predator, Prey {
@Override
public void flee() {
System.out.println("This fish is fleeing from a larger fish.");
}
@Override
public void hunt() {
System.out.println("This fish is hunting smaller fish.");
}
}
public interface Predator {
//Do not need to body
void hunt();
}
public interface Prey {
//Do not need to body
void flee();
}