Java

[Java] Getter와 Setter 메소드

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

 

* 외부에서 필드값을 읽을 수만 있고 변경하지 못하도록 하려면 (읽기전용)

  • Getter 메소드만 선언
  • Setter 메소드를 private 접근 제한을 갖도록 선언

 

Getter

  • 객체 외부에서 객체의 필드값을 사용하기에 부적절한 경우도 있음
  • 외부에서 객체의 데이터를 읽을 때 메소드를 사용하는 것이 좋음
  • 메소드로 필드값을 (가공한 후) 외부로 전달

 

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

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

 

private boolean fieldName;

//Getter
public boolean isFieldName() {	
    return fieldName;
}
  • 필드 타입이 boolean일 경우 Getter는 get으로 시작하지 않고 is로 시작하는 것이 관례
  • 접근 제한자 : public
  • 리턴 타입 : 필드타입
  • 메소드 이름 : is + 필드이름 (첫문자 대문자)
  • 리턴값 : 필드값

 

getter EX)

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

 

 

 

Setter

  • 일반적으로 객체 지향 프로그래밍에서 객체의 데이터객체 외부에서 직접적으로 접근하는 것을 막음
  • 객체의 데이터를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성 (결점이 없는 성질)이 깨질 수 있음
    EX) 자동차의 속도 → 음수가 될 수 없는데 외부에서 음수로 변경하면 객체의 무결성이 깨짐
          myCar.speed = -100;
  • 이러한 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호
  • 데이터 외부에서 접근할 수 없도록 막고 메소드공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도
    메소드 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문

 

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

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

 

setter EX)

void setSpeed(double speed) {
    if(speed < 0) {   
        this.speed = 0;
        return;
    } else { 	
        this.speed = speed;
    }
}
  • 속도를 setSpeed() 메소드로 변경할 경우 검증 코드를 작성할 수 있음
  • 매개 값이 음수일 경우 speed 필드에 0으로 저장하고 메소드를 실행 종료 함