JAVA

getter와 setter

signal시노 2024. 7. 10. 14:14

학생들의 이름, 학년 그리고 국영수 점수를 멤버변수로 갖는 클래스가 있다.

public class Student {
    //이름
    String name;
    //학년
    int grade;
    //국영수
    int [] score = new int[3];
   
}

 

외부 클래스에서 Student 객체를 생성하고 호출해 보자

public class App extends Student {

    public static void main(String[] args) throws Exception {
        Student st1 = new Student();

    }
}

 

st1.name = "김똥개";

라고 name 변수에 값을 넣을 수 있다.

액세스 모디파이어가 디폴드이기 때문에 가능하다.

public class Student {
    //이름
    private String name;
    //학년
    private int grade;
    //국영수
    private int [] score = new int[3];

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

name 변수의 getter와 setter를 만들었다.

다시 App 클래스로 돌아와서

st1.name = "김똥개"; 라고 해도 되지만

 

st1.setName("김똥개");

st1.getName();

 

이라고도 할 수 있다.

 

그런데 위에 st1.name = "김똥개"; 가

 

st1.setName("김똥개");

st1.getName();

 

보다 훨씬 간단하고 리더빌리티가 높으며 결과는 똑같다.

그렇다면 왜 getter와 setter를 사용할까?

구글링을 해보면 객체지향 프로그래밍에서는 이렇게 해야 한다

어쩌고~ 저쩌고~

솔직히 알아듣기 힘들다.

 

그런 다양한 의미들도 있지만 결국 getter, setter도 메소드이고 메소드는 하나의 기능을 수행할 뿐이다.

 

 public void setName(String name) {
        for (int i = 0; i < name.length(); i++) {
            if(i > 10) {
                System.out.println("error");
                return;
            }
        }
        this.name = name;
    }

 

이름이 10글자 이상이라면 콘솔창에 error를 찍고 메소드를 종료할 것이다.

setter의 구현부를 통해 가드 코드를 작성할 수 있다.

get은 어떠한 값을 리턴 받는 것, set은 어떠한 값을 조작하는 것

이것이 약속이다.

결국 리더빌리티의 향상성으로 이어질 것이다.