반응형
객체 지향 프로그램에서는 데이터를 보호하기 위해서 외부에서 직접적으로 접근하는 것을 막는다.
그 이유는 외부에서 마음대로 데이터를 읽고 변경할 경우 객체의 무결성(결점이 없는 상태)이 깨질 수 있기 때문이다.
예를 들어 사람의 나이나, 자동차의 속도, 책의 페이지 수는 음수가 될 수 없다.
만약 외부에서 해당 데이터를 음수로 변경하게 될 경우 객체의 무결성이 깨지게 된다.
이러한 경우 접근제어자 private를 사용해서 필드의 직접적인 접근을 막아두고
메소드를 활용해서 받아온 데이터(매개변수의 값)을 먼저 검사하고
유효할 때만 저장할 수 있게끔 만들 수 있다.
이때 사용하는 메소드가 Getter, Setter 메소드 이다.
Getter, Setter 메소드를 사용하면 객체의 무결성을 해치지 않고 데이터를 안전하게 사용하는 것이 가능하다.
Setter
set메소드는 private으로 선언된 필드의 값을 수정하고자 할 때 필요하다.
private 필드는 직접 접근할 수 없게 되어있으므로 객체는 입력 값을 setter 메소드의 매개값으로 넘겨주고
값을 검사하고 나서 그 값이 필드의 값으로 적절한 경우에만 저장하게 된다.
Getter
get은 데이터를 읽어오는 역할을 주로 수행한다.
외부에서 객체의 데이터를 읽어올 때도 안전하게 값을 유지할 수 있도록 사용하는 것이다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package class02;
// 접근제어자(캡슐화)
class Student{
private String name;
private int score;
//getter, setter
// : private로 직접접근할 수 없는 멤버변수의 값을
// 출력하거나(getter), 변경(값대입)하기위해서(setter) 사용
// 마우스 우클릭->source -> generator getter setter public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
void showInfo() { // 출력하기 위한 함수
System.out.println(this.name+"학생은 "+this.score+"점입니다.");
}
Student(String name,int score){ // 생성자 생성!
// private를 걸어두어도 자기 자신 내부에서는 사용 가능
this.name=name;
this.score=score;
System.out.println(this.name+"학생"+this.score+"점 입력완료!");
}
}
public class Test03 {
public static void main(String[] args) {
Student[] data = new Student[2];
data[0]=new Student("홍길동",30);
data[1]=new Student("아무무",80);
for (int i = 0; i < data.length; i++) {
//data[i].score=100;
악의적인 접근 - 접근제어자 private를 걸어두었기 떄문에 변경 불가 data[i].setScore(100); // set을 사용하여 score을 100으로 설정
System.out.println(data[i].getScore());//get을 사용하여 scroe 출력
data[i].showInfo();
}
}
}
|
cs |
<출력값>
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 추상메소드, 추상클래스 (abstract) (0) | 2022.06.27 |
---|---|
[JAVA] 카드 사용 프로그램 (Equals() 메소드, instanceof 연산자) (0) | 2022.06.26 |
[JAVA] 모래성 쌓기 게임 (Static) (0) | 2022.06.26 |
[JAVA] 변수 명칭 정리 (멤버변수, 매개변수, 지역변수, 클래스변수, 인스턴트변수) (0) | 2022.06.25 |
[JAVA] Map을 활용한 학생부 프로그램 만들기 (0) | 2022.06.24 |