본문 바로가기

반응형

이번 글에서는 private 필드를 외부에서 직접 접근하지 않고,
gettersetter 메서드를 이용해
안전하게 값을 읽고 변경하는 방법을 학습합니다.
이 방식은 캡슐화(Encapsulation) 라고 하며, 객체 지향 프로그래밍의 핵심 원칙 중 하나입니다.


📦 클래스 코드 (Car.java)

package ch06.sec14;

public class Car {
	private int speed;
	private boolean stop;

	public int getSpeed() {
		return speed;
	}

	public void setSpeed(int speed) {
		if (speed < 0)
			this.speed = 0;
		else
			this.speed = speed;
	}

	public boolean isStop() {
		return stop;
	}

	public void setStop(boolean stop) {
		this.stop = stop;
		if (stop)
			this.speed = 0;
	}
}

📌 실행 코드 (CarExample.java)

package ch06.sec14;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();
		
		car.setSpeed(-50);
		System.out.println("현재 속도 : " + car.getSpeed());
		
		car.setSpeed(60);
		System.out.println("현재 속도 : " + car.getSpeed());
		
		if (!car.isStop())
			car.setStop(true);
		System.out.println("현재 속도 : " + car.getSpeed());
	}
}

💬 코드 설명

  • private int speed;, private boolean stop;
    → 외부에서 직접 접근할 수 없는 비공개 필드
  • public int getSpeed()
    speed 값을 외부에서 읽을 수 있게 해주는 메서드
  • public void setSpeed(int speed)
    speed 값을 설정하는 메서드
    → 입력 값이 음수면 0으로 강제 조정 (유효성 검사)
  • public boolean isStop()
    stop 상태를 외부에서 읽을 수 있게 해주는 메서드
  • public void setStop(boolean stop)
    stop 상태를 설정하고, 멈추면 speed를 자동으로 0으로 만듦

💻 실행 결과

현재 속도 : 0
현재 속도 : 60
현재 속도 : 0

📌 간단 정리

메서드 역할
getSpeed() 현재 속도를 읽기
setSpeed(int) 속도를 설정 (0 이상만 허용)
isStop() 현재 멈춤 여부 확인
setStop(boolean) 멈춤 설정 (멈추면 속도 0)

💡 포인트 정리

  • private 필드는 객체 외부에서 직접 접근을 차단
  • getter 메서드로 값을 안전하게 읽을 수 있음
  • setter 메서드로 값을 제어하면서 유효성 검사(Validation) 가능
  • 캡슐화는 객체의 무결성을 유지하고, 버그를 예방하는 데 큰 도움이 됨
  • boolean 타입 getter는 is필드명() 형태로 작성하는 것이 관례
댓글