▶Getter, Setter란?
객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다.
외부에서의 데이터 접근을 막기 위해 개발자는 멤버변수를 private등 접근한정자를 사용하여 은닉화 시킬 수 있다.
그런데 거기서 문제가 발생한다.
개발자 역시 프로그램의 가장 근본적인 목적인 데이터에 접근하는 방법이 사라지기때문!
이때, 메서드를 통하여 은닉된 멤버변수(데이터)에 간접적으로 접근하는 방법이 마련되었고 Getter와 Setter는 은닉된 멤버변수에 간접적으로 접근하기 위해 정의된 메서드들을 의미하는 용어이다.
즉, Getter/Setter가 붙은 메서드들은 은닉화된 멤버변수의 값을 변경, 호출할 수 있다.
▶Getter(획득자)
1
2
3
4
5
6
7
8
|
class Tv{
private int number = 30;
public int getNumber() {
return number;
}
}
|
cs |
Tv라는 클래스의 number라는 메게변수에 30이라는 값이 담겨있다.
만약 private가 아닌 public이 접근 한정자로 지정되어있었다면
1
2
3
4
|
public static void main(String[] args) {
Tv a = new Tv;
a.Number = 900;
}
|
cs |
이렇게 Main 함수에서 타인이 마음대로 접근하여 객체를 생성하고 Number라는 데이터(지역변수)를 900이라는 수로 변경할 수 있기에 private로 30이라는 데이터값을 숨겨버렸다. 그런데 우리가 프로그램을 사용하다보면 TV라는 값이 외부로 노출되어야하는 상황이 분명 생긴다. 그 때 사용을 하는 것이 Getter!
Main함수에서 a.getNumber(); 라는 값을 부르면 getter는 pirvate로 숨겨져있던 값을 return을 시켜서 데이터를 밖으로 출력시킬 수 있다.
즉, Getter를 통해서 수정은 막고 값만 가져올 수 있게 한 것이다.
▶Setter(설정자)
1
2
3
4
|
public static void main(String[] args) {
Tv a = new Tv;
a.setnumber(800);
}
|
cs |
갑자기 회사의 업무개편으로 Tv의 시리얼번호가 30이 아닌 800으로 수정을 해야할 경우가 생겼다. 그래서 Main함수에서 800이라는 숫자를 set함수에 보냈다.
1
2
3
4
5
6
7
|
public void setNumber(int number){
if(number < 0){
this.number = 0;
}else {
this.number = number;
}
}
|
cs |
그럼 set함수는 그 값을 받아서 전역변수에 넣어줄 수 있으며 if를 설정함으로 정확한 데이터값만 받아서 변수에 설정해 줄 수있다.
즉, private로 은닉화되어있는 멤버변수에 값을 변경할 때 사용되며 set메서드를 코딩하지 않아 값을 변경하지 못하도록 막아버릴 수도 있다.
▶Getter Setter 작성규칙
멤버변수 이름 | getter | setter |
String userName; | String getUserName(); | void setUserName(String userName); |
int age; | int getUserAge(); | void setUserAge(int userAge); |
-. get, set 접두사 뒤에 변수이름을 첫 글자가 대문자인 형태로 명시
-. getter는 연결된 멤버변수의 데이터 타입을 리턴형으로 명시한다.
-. setter는 연결된 멤버변수의 데이터 타입을 파라미터 형으로 명시한다.
▶getter, setter 예시
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
|
class StudentJava2{
//은닉된 멤버변수
private String name;
private int age;
//getter 메서드 2개
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
// setter 메서드 2개
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
}
//Main메서드
public class Main06 {
public static void main(String[] args) {
//객체생성
StudentJava2 sj = new StudentJava2();
//setter 데이터 넣기
sj.setName("박효신");
sj.setAge(25);
//getter를 통한 출력
System.out.println(sj.getName());
System.out.println(sj.getAge());
}
}
|
cs |
▶생성자와 Setter를 이용한 초기화
1
2
3
4
|
public static void main(String[] args) {
Tv a = new Tv(800); // 생성자를 이용한 데이터 대입
a.setNumber(800); // set메서드를 이용한 데이터 대입
}
|
cs |
private로 은닉화된 변수에 값을 넣어주는 방법은 생성자를 통한 방법, Setter 메서드를 통한 방법 총 2가지이다. 이 둘은 값을 설정한다는 점에서 같은 역할을 담당하고 할 수 있다. 다만, 생성자는 "인스턴스 생성 시"라는 시점에 초점이 더 맞춰져 있다고 볼 수 있고, Setter는 시점과 상관 없이 값을 set하는 메소드라고 볼 수 있다. 큰 차이는 없음으로 그때의 상황에 맞게 사용하면 되며 생성자의 파라미터로 초기값을 설정하고 후에 setter를 통해서 값을 변경하는 경우도 있다.
'국비필기노트 > Java' 카테고리의 다른 글
자바(java)_접근한정자 (0) | 2022.03.24 |
---|---|
자바(java)_this와 this() (0) | 2022.03.22 |
자바(java)_객체형변환, 객체 배열, instanceof (0) | 2022.03.21 |
자바(java)_오버로드(Overload)&오버라이드(Override) (0) | 2022.03.21 |
객체지향 프로그래밍(인스턴스, 자바빈즈, 클래스의 분리, 상속) (0) | 2022.03.17 |