백엔드 수업 #06 클래스 - 14 Getter와 Setter 메소드

sookyoung.k·2022년 11월 22일
0

객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다.

이유- 객체 데이터를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨어질 수 있기 때문! 바뀌니까 ㅠ

그래서 객체 지향 프로그래밍에서는 메소드를 통해서 데이터를 변경하는 방법을 선호한다!

→ 데이터는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도함 : Setter 메소드

  • 이유: 메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있음

외부에서 객체의 데이터를 읽을 때도 메소드를 사용하는 것이 좋은데, 이 때 객체 외부에서 객체의 필드값을 사용하기에 부적절한 경우가 있다... 이 경우 메소드로 필드값을 가공한 후 외부로 전달: Getter 메소드


클래스를 선언할 때 가능하다면 필드를 private로 선언해서 외부로부터 보호하고, 필드에 대한 **Setter, Getter 메소드**를 작성해서 필드값을 안전하게 **변경/사용**하는 것이 좋다.
  • 필드타입이 boolean일 경우에는 Getter는 get으로 시작하지 않고 is로 시작하는 것이 관례이다.

-외부에서 필드값을 읽을 수만 있고 변경하지 못하도록 하려면(읽기 전용) Getter 메소드만 선언하거나, Setter 메소드를 private 접근 제한을 갖도록 선언하기

public class GetSet {
	// 필드 생성 	
	private int speed;
	private boolean stop; // 자동차가 멈췄을 때 true 0, 자동차가 달릴 때 false 1 
	
	// 우클릭 > Source > Generate Getters and Setters
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		if (speed < 0) {
			this.speed = 0; // 음수일 경우 0을 주기 
			return; // 함수 끝냄
		} else {
			this.speed = speed; // 양수가 들어오면 그대로 값을 세팅하면 됨 
		}
	}
    
	public boolean isStop() { 
		return stop; 
	}
	public void setStop(boolean stop) {
		this.stop = stop;
		if (stop == true) this.speed = 0; // 한 줄이라 중괄호 생략 
	}
}

public class GetSetEX {

	public static void main(String[] args) {
		// 클래스에 대한 인스턴스 생성 
		GetSet getset = new GetSet();
		
		// setSpeed메소드에 접근 -> private 필드에 간접 접근 가능하게 됨 
		getset.setSpeed(30); // 속도변경 
		System.out.println(getset.getSpeed()); // 30 (수정하고 값을 가져올 수 있다) 
		
		if(!getset.isStop()) { // 달리고 있을 때가 조건 
			getset.setStop(true); // 멈춤 (GetSet 클래스에서 stop을 줬고 true 값이니까 0이 나옴 
			System.out.println(getset.getSpeed()); // 0 
		}
	}

}

[출력 결과]
30
0

코드 읽기는 너무나 어렵고요... 이렇게 대충 클래스 정리 마무리... 이론 공부할 시간도 코드 공부할 시간도 넘나리 부족하구먼 ㅠㅠ 슬프다

profile
영차영차 😎

0개의 댓글