본문 바로가기

BackEnd/Java

[java] Getter와 Setter

728x90
반응형

1. Setter : 데이터를 검증해서 유효한 값만 필드에 저장하는 메소드

2. Getter : 필드 값이 객체 외부에서 사용하기에 부적절한 경우, 적절한 값으로 변환해서 리턴할 수 있는 메소드

 

 

◎ 객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨질 수 있습니다.

ex) 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨집니다.

Car myCar = new Car();
myCar.speed = -100;

 

 

 객체지향 프로그래밍에서는 직접적인 외부에서의 필드 접근을 막고 대신 메소드를 통해 필드에 접근하는 것을 선호합니다.

 

private double speed;

private : 같은 클래스 내부에서는 접근 가능
setter를 통해 같은 내부에 있는 private 필드에 접근해서 값을 변경합니다.
getter를 통해 같은 내부에 있는 private 필드에 접근해서 값을 가져옵니다.

 

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

public double getSpeed() {  // speed가 마일로 되어 있을 때 km로 환산
	double km = speed*1.6;
    return km;
}

 

◎ getter, setter를 이용해 자동으로 코드 생성하는 방법

1. getter, setter를 이용하기 위해서는 class 내부에 원하는 변수를 작성합니다.
2. 마우스 오른쪽을 눌러서 source를 클릭합니다.
3. Generate getters and setters를 선택합니다.
4. 그러면 원하는 변수들을 체크 표시하고 generate를 클릭합니다.
5. 마지막으로 자동적으로 메소드가 생성됩니다.

public class Car {
	// 작성한 부분
	private int speed;
	private boolean stop;
	
	// 자동으로 생성한 부분
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	public boolean isStop() {
		return stop;
	}
	public void setStop(boolean stop) {
		this.stop = stop;
	}
}​

 

◎ getter, setter를 이용한 예제

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;
			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 CarExample {
	
	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());
		
		if(!myCar.isStop()) {
			myCar.setStop(true);
		}
		System.out.println("현재 속도 : " + myCar.getSpeed());
	}
}

 

getter와 setter는 변수와 관련된 코드들을 자동으로 생성시켜줍니다.

 

아무래도 많은 사람들이 사용하는 것을 바탕으로 만들다 보니 제가 원하던 것과는 다를 수 있지만 조금만 수정하면 될 것 같네요!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형