본문 바로가기

JAVA

[JAVA] 접근제어자 private (Getter, Setter 메소드)

반응형

객체 지향 프로그램에서는 데이터를 보호하기 위해서 외부에서 직접적으로 접근하는 것을 막는다. 

그 이유는 외부에서 마음대로 데이터를 읽고 변경할 경우 객체의 무결성(결점이 없는 상태)이 깨질 수 있기 때문이다. 

 

예를 들어 사람의 나이나, 자동차의 속도, 책의 페이지 수는 음수가 될 수 없다. 

만약 외부에서 해당 데이터를 음수로 변경하게 될 경우 객체의 무결성이 깨지게 된다. 

 

이러한 경우 접근제어자 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

<출력값>

 

 

반응형