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
반응형
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 상속2 (부모 생성자 호출) (0) | 2020.10.28 |
---|---|
자바(Java) - 상속1 (클래스 상속) (0) | 2020.10.26 |
자바(Java) - 패키지와 접근 제한자2 (접근 제한자) (0) | 2020.10.20 |
자바(Java) - 패키지와 접근 제한자1 (패키지선언 & import문) (0) | 2020.10.19 |
자바(Java) - 인스턴스 멤버와 정적 멤버3 (싱글톤 & final필드, 상수) (0) | 2020.10.16 |