[Java] - Getter, Setter 메소드

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

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

 

예를 들면 자동차의 속력은 0이 될 수 없는데 외부에서 음수로 변경하면 객체의 무결성을 상실하게 된다.

이러한 문제점을 해결하기 위해서 객체 지향 프로그래밍에서는 메소드를 통해서 필드를 변경하는 방법을 선호하는데 필드는 외부에서 접근 할 수 없도록 막고 메소드를 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도한다.

 

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

 

예시 코드

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
package chapter07;
 
public class car {
    private int speed;
    private boolean stop;
    
    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;
        this.speed = 0;
    }
    
}
 
cs

위와 같이 외부에서 직접적으로 접근 하는 것을 막기위해 car 클래스의 필드들인 speed와 stop 변수들을

private으로 선언해준다.

 

다음 getter() 메소드와 setter() 메소드를 통해 검증 코드를 작성해주어 객체의 무결성을 유지 시킬 수 있다.

 

이때 Getter()와 Setter() 메소드를 자동으로 생성해주는 기능이 있는데 이클립스 메뉴에서 [Source] - [Generate Getter and Setter] 를 선택하면 현재 선언된 필드에 대해서 자동으로 Getter와 Setter 메소드를 생성해준다.

(또는 Alt+Shift+S를 누른후 R을 누르면 된다)

 

다음은 Setter와 Getter 메소드를 통한 필드값 변경이다.

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
package chapter07;
 
public class car_example {
 
    public static void main(String[] args) {
        
        car my_car = new car();
        
        //객체 무결성을 위반하는 값입력
        my_car.setSpeed(-50);
        System.out.println("현재 속도 : " + my_car.getSpeed());
        
        //올바른 값입력
        my_car.setSpeed(60);
        System.out.println("현재 속도 : " + my_car.getSpeed());
        
        //멈춤
        if(!my_car.isStop()) {
            my_car.setStop(true);
        }
        System.out.println("현재 속도 : " + my_car.getSpeed());
        
    }
 
}
 
cs

 

 

'Java' 카테고리의 다른 글

[Java] - 추상 메소드와 오버라이딩 ( 메소드 다형성)  (0) 2020.09.24
[Java] - 추상 클래스  (0) 2020.09.24
[Java] - 접근제한자  (0) 2020.09.21
[Java] - 싱글톤  (0) 2020.09.21
[프로그래머스] - 약수의 합 (java)  (0) 2020.09.18