캡슐화
객체의 무결성을 보장하기 위함입니다. 은닉성이라고도 하죠 직접적으로 접근할 수 없게 하는 건데
public으로 변수를 선언하는 경우는 접근이 가능하지만 private으로 선언하는 경우 직접 접근할 수 없습니다.
여기서 직접접근이란 .을 이용해 접근하는 걸 의미합니다.
이렇게 마음대로 접근해서 값을 바꾸면 price에 -500만원 이런식으로 넣을수 있기 때문에 그걸 막기 위해
데이터를 보존 보호하는 것입니다.
package setter_getter;
public class Car {
public int speed;
private int price;
}
package setter_getter;
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
myCar.speed = 0;
myCar.price = 100; // 에러
}
}
이런식으로 접근이 불가능합니다. 그래서 따로 함수를 통해서 접근해서 값을 변경하거나 추가할 수 있게 하는데
값을 설정하는데 Setter고 값을 출력하는데 Getter라고 일반적으로 불립니다.
이러한 Setter과 Getter로 이루어져있는 클래스를 POJO클래스라고도 불리죠
그러면 Getter는 왜 만들어야할까 private이라서 접근할 수도 없고
다른식으로 하면 데이터를 조작할 수도 있기 때문에 만든 것입니다.
이제 Setter와 Getter를 만들어보자
변수는 private으로 선언해주자
setter와 getter가 뭐냐면 set 즉 설정하는 겁니다. 생성자와 유사해보이지만 단일 변수값을 지정할 때 쓰입니다.
getter는 그 변수 값을 리턴해주는 것이고요
이걸 왜 쓰냐면 가장 기본적인 구조입니다.
하나하나씩 만들수도 있지만 이러한 걸 이클립스에서 간단히 지원해줍니다.
package setter_getter;
public class Car {
private int speed;
private int price;
//
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
그러면 이런식으로 만들기만 하면 되는 것인가? 일단 기본적인 구조이다 하지만 여기에서 좀 조작을 해주는게
더 좋다 예를 들어서 setPrice는 0보다는 무조건 커야하기 때문에 이러한 걸 넣어주면 된다.
package setter_getter;
public class Car {
// punlic int speed;
private int speed;
private int price;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
if(price >= 0) {
this.price = price;
}else {
throw new IllegalArgumentException("가격은 음수가 될 수 없습니다.");
}
}
}
package setter_getter;
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
// myCar.speed = 0;
// myCar.price = 100;
// System.out.println(price);
myCar.setSpeed(-50);
System.out.println("현재속도 : " + myCar.getSpeed());
myCar.setSpeed(60);
System.out.println("현재속도 : " + myCar.getSpeed());
myCar.setPrice(-500);
}
}
'[Java] > [Java]' 카테고리의 다른 글
[Java] 자바 Class(클래스) 상속(extends) (super() , super) (0) | 2021.07.02 |
---|---|
[Java] 자바 Class(클래스) 상속(extends)[추상화] (0) | 2021.07.02 |
[Java] 자바 Class(클래스)에 함수(Function) 만들기 (0) | 2021.07.02 |
[Java] 자바 클래스(Class) 생성자 (0) | 2021.07.02 |
[Java] 자바 클래스(Class) (0) | 2021.07.02 |