본문 바로가기
JAVA

[JAVA] Getter와 Setter 메소드

by IT 정복가 2023. 12. 18.
728x90

Setter

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

 

위의 코드처럼 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다.

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

무결성: 결점이 없는 성질

 

따라서 객체 지향 프로그래밍에서는 직접적인 외부에서의 필드 접근 대신

메소드를 통해 필드에 접근하는 것을 선호한다.

그 이유는?
메소드는 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다.

이러한 역할을 하는 메소드가 Setter이다.

 

private double speed;

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

 

위의 코드를 보면 speed 필드는 private 접근 제한을 가지므로 외부에서 접근하지 못한다.

speed 필드를 변경하기 위해서는 Setter인 setSpeed() 메소드를 사용해야한다.

위 코드에서는 외부에서 제공된 변경값을 if문으로 검증하는데, 음수일 경우 0을 필드값으로 저장한다.


Getter

외부에서 객체의 필드를 읽을 때에도 메소드가 필요한 경우가 있다.

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

이러한 역할을 하는 메소드가 Getter이다.

private double speed;

public double getSpeed(){
    double km = speed*1.6;
    return km;
}

 

위의 코드를 보자.

speed 필드는 private 접근 제한을 가지므로 외부에서 읽지 못한다.

speed 필드를 읽기 위해서는 Getter인 getSpeed() 메소드를 이용해야 한다.

getSpeed() 메소드는 마일 단위의 필드 값을 km 단위로 변환해서 외부로 리턴한다.


Getter와 Setter의 기본 작성법

private 타입 fieldName;

//Getter
public 타입 getFieldName(){
    return fieldName;
}

//Setter
public void setFieldName(타입 fieldName){
    this.fieldName = fieldName;
}

 

Getter - getFieldName()

  • 접근제한자: public
  • 리턴 타입: 필드의 타입
  • 메소드 이름: get + 필드이름(*첫글자는 대문자로)
  • 리턴값: 필드값

Setter - setFieldName(타입 fieldName)

  • 접근제한자: public 
  • 리턴 타입: void
  • 메소드 이름: set + 필드이름(*첫글자는 대문자로)
  • 매개변수 타입: 필드타입

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

 

 

728x90