본문 바로가기
Programing/JAVA (& 혼공자Java)

자바(Java) - 패키지와 접근 제한자3 (Getter & Setter 메소드)

by a.k.a DUKI 2020. 10. 20.
728x90
반응형

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

그 이유는, 외부에서 마음대로 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨질 수 있기 때문이다.

 

그래서 클래스를 작성할때 조건이 없다면 모든 필드는 private으로 선언한다.

 

 

Setter 메소드

  • 외부의 값을 받아 필드의 값을 변경하는 것이 목적이다.

  • 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있다.

  • 'set필드'는 외부에 값을 받아 필드에 저장
void setSpeed(double speed){
	//검증 코드
    if(speed<0){	//매개값이 음수일 경우 speed필드에 0으로 저장하고, 메소드 실행 종료
    	this.speed = 0;
        return;
     }else{
     	this.speed = speed;
     }
}

Getter 메소드

 

  • 외부로 필드값을 전달하는 것이 목적이다.

  • 필드 값을 가공해서 외부로 전달할 수도 있다.

  • 'get필드'는 값을 외부로 전달
double getSpeed(){
	//필드값인 마일을 km단위로 환산 후 외부로 리턴
	double km = speed*1.6;
    return km;
}

 

클래스를 선언할 때 가능하면 필드를 private로 선언해서 외부로 부터 보호하고, 필드에 대한 Setter와 Getter 메소드를 작성해서 필드값을 안전하게 변경/사용하는 것이 좋다.

 

//필드 접근 제한자: private
private 타입 fieldName;


//접근 제한자: public
//리턴타입: 필드 타입
//메소드 이름: get+필드이름(첫 글자는 대문자)
//리턴값: 필드값
public 리턴 타입 getFieldName(){ //Getter
	return fieldName;
}


//접근 제한자: public
//리턴타입: void
//메소드 이름: set+필드이름(첫 글자는 대문자)
//매개 변수 타입: 필드타입
public void setFieldName(타입 fieldName){ //Setter
	this.fieldName = fieldName;
}

만약 필드 타입이 boolean일 경우 Getter는 get으로 시작하지 않고, is로 시작하는 것이 관례이다.

//필드 접근 제한자: private
private boolean stop;


//접근 제한자: public
//리턴타입: 필드타입
//메소드 이름: is+필드이름(첫 글자는 대문자)
//리턴값: 필드값
public boolean isStop(){ //Getter
	return stop;
}


//접근 제한자: public
//리턴 타입: void
//메소드 이름: set+필드이름(첫 글자는 대문자)
//매개 변수 타입: 필드타입
public void setStop(boolean stop){ //Setter
	this.stop = stop;
}

 

이클립스에는 Getter와 Setter 메소드를 생성시키는 기능이 있다.

아래의 사진처럼 선택하면, 해당 항목을 선택하여 생성할 수 있다.

 

 

 

예시1) Getter, Setter 메소드 선언

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

	// Method
	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) {
			speed = 0;
		}
	}

}
public class CarExample {

	public static void main(String[] args) {

		Car myCar = new Car();
		myCar.setSpeed(60);
		System.out.println("현재 속도: " + myCar.getSpeed());
		
		if(!myCar.isStop()) {
			myCar.setStop(true);
		}
		System.out.println("현재 속도: " + myCar.getSpeed());
	}

}

 

 

 

 


※용어 정리

  • Getter/Setter: 필드는 외부에서 접근할 수 없도로고 막고 메소드는 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도한다.

    • Getter: 필드의 값을 외부로 리턴해주는 메소드
    • Setter: 외부에서 값을 받아 필드를 변경하는 메소드

 

 

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.

 

728x90
반응형

댓글