Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자 도전기

[JAVA] Getter와 Setter 본문

개발공부/JAVA

[JAVA] Getter와 Setter

jnnjnn 2024. 3. 6. 15:54

1. Getter, Setter를 사용하는 이유

 

객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 상태)이 깨질 수 있다. 예를 들어 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다.

 

이러한 문제점 때문에 객체 지향 프로그래밍에서는 외부의 필드 접근을 막고 대신 메소드를 통해 필드에 접근하는 것을 선호한다. 그 이유는 메소드를 통해 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Setter이다.

 

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

 

2. 작성 방법

 

필드값을 직접적으로 변경하지 못하게 private 접근 제한자를 사용해 차단하고 public으로 Getter, Setter를 선언해 필드값에 우회적으로 접근할 수 있게 한다.

 

private 타입 fieldName;

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

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

// boolean의 경우
public 타입 isFieldName(){
	return fieldName;
}

 

인텔리제이를 사용할 때 alt + Insert 키를 사용하면 Generate에서 getter/ setter를 편리하게 생성할 수 있다.

 

3. 예시

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

    public int getSpeed() {
        return speed;
    }

    public boolean isStop() {
        return stop;
    }

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

    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()); // 0

        myCar.setSpeed(60);
        System.out.println("현재 속도" + myCar.getSpeed()); // 60

        if (!myCar.isStop()) {
            myCar.setStop(true);
        }
        System.out.println("현재 속도" + myCar.getSpeed()); // 0
    }
}

'개발공부 > JAVA' 카테고리의 다른 글

[JAVA] 상속 - 추상 클래스  (0) 2024.03.08
[JAVA] 상속  (0) 2024.03.07
[JAVA] 접근 제한자(Access Modifier)  (0) 2024.03.06
[JAVA] static final(상수)  (0) 2024.03.06
[JAVA] 클래스 - 정적 멤버(static)  (0) 2024.03.05