일반적으로 객체 지향 프로그래밍에서는 객체의 필드를 객체 외부에서 직접적으로 접근하는 것을 막는다.

왜냐하면 예를 들어 속력은 음수가 될 수 없는데, 외부에서 속력을 저장하는 변수에 음수를 저장하면 문제가 생긴다.

이를 무결성이 깨졌다고 한다.

 

이러한 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메소드를 통해서 필드를 변경하는 방법을 선호한다.

필드는 외부에서 접근할 수 없게 하고(private 접근 제한자 사용), 메소드는 접근할 수 없는 필드에 접근할 수 있도록 한다.

이러한 메소드를 Setter라고 한다.

 

외부 객체에서 데이터를 읽을 때도 메소드를 사용하는 것이 좋다.

왜냐하면 필드값을 직접 사용하면 부적절한 경우도 있기 때문이다. 이런 경우에는 메소드로 필드값을 가공한 후 외부로 전달하면 된다.

이러한 메소드를 Getter라고 한다.

 

Car.java

public class Car {
	private int speed; //외부에서 접근할 수 없도록 접근 제한
	
	public int getSpeed() { //Getter
		return speed;
	}
	public void setSpeed(int speed) { //Setter
		if(speed < 0) { 
			this.speed = 0;
			return;
		} else {
			this.speed = speed;
		}
	}
}

 

Test.java

public class Test {
	public static void main(String[] args) {	
		Car myCar = new Car();
		
		myCar.setSpeed(-50); //잘못 된 속도로 변경
		
		System.out.println("현재 속도 : " + myCar.getSpeed());
		
		myCar.setSpeed(60); //올바른 속도로 변경
		
		System.out.println("현재 속도 : " + myCar.getSpeed());
	}
}
/*
현재 속도 : 0
현재 속도 : 60
*/