일반적으로 객체 지향 프로그래밍에서는 객체의 필드를 객체외부에서 직접적으로 접근하는 것을 막는다.
그 이유는 외부에서 마음대로 변경할 경우 객체의 무결성이 깨질 수 있기 때문이다.
예를 들면 자동차의 속력은 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 |