반응형

캡슐화

 

객체의 무결성을 보장하기 위함입니다. 은닉성이라고도 하죠 직접적으로 접근할 수 없게 하는 건데

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);

	}


}

 

반응형