728x90
반응형
getter 와 setter
개발을 하다보면 많이 들어 봤을 얘기다.
그리고 사용하는게 당연하다고 알고 있다.
getter 와 setter 그럼 왜써야될까?
막상 설명 하려고 하면 까먹는 경우가 있다.
내가 그랬다.
private 접근자
- 우리는 보통 멤버변수를 private 으로 해둔다
- 그이유는 무결성 때문이다.
- 그리고 한정적으로 노출 하여 유지보수 성을 높일수 있다
- DDD 를 생각해보면 항상 최상위 루트에서 접근을 해야 되기 때문에 겟터와 셋터로만 접근 하게 하면 경계가 생겨서 유지보수에 좋다
그렇다면 무결성이 왜 필요한가?
- 다음과 같은 얘가 있다.
- 우리는 멤버변수 가격을 갖는 Item 클래스를 만들었다.
- 초보개발자 같은 경우는 setter 를 굳이 만들기 귀찮아서 그냥 public 으로 했다
- 얼마나 편한가 그냥 다른걸 구현할 필요없이 값을 변경하면된다.
- 다음 예제를 보면 외부에서 -100 을 해주었다.
- 생각해보자.... 가격이 마이너스인 상품이 있을까???
- 현실세계에서는 불가능하다.
코드
public class Item {
public int price;
}
public class Main {
public static void main(String[] args) {
Item item = new Item();
item.price = -100;
System.out.println(item.price);
}
}
결과
-100
private 를 이용해 외부로 부터 숨기기
- 단순히 public 에서 private 으로 바꿔 주었다
- 이유는 외부에서 변경하면 안된다고 깨달 았기 때문이다.
코드
public class Item {
private int price;
}
public class Main {
public static void main(String[] args) {
Item item = new Item();
item.price = -100;
System.out.println(item.price);
}
}
결과
java: price has private access in com.company.Item
setter 를 이용해 데이터 변경하기
- 그렇다면 어떻게 접근을 해야 될까?
- setter 를 만들어 데이터 값을 변경하게 해주면된다.
- 친절하게 마이너스 값이 들어올때 설명도 해주었다.
- getter 를 만들어 값을 가져오도록 했다.
코드
package com.company;
public class Item {
private int price;
public int getPrice() {
return price;
}
public void setPrice(int price) {
if(price < 0) {
System.out.println("가격은 0 보다 작을수 없습니다.");
price = 0;
}
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
Item item = new Item();
item.setPrice(-100);
System.out.println(item.getPrice());
}
}
결과
가격은 0 보다 작을수 없습니다.
0
정리
- private 을 써서 멤버변수를 외부로 노출시키지 않는다.
- setter 를 쓰는 이유는 데이터의 무결성을 위해서 이고
- 또한 값이 들어 왔을때 특정한 처리를 해줄수 있다.
- getter 로 멤버변수를 가져온다
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] Generic Type Erasure (0) | 2021.10.29 |
---|---|
[Java] HashMap, hashCode(), equals() (0) | 2021.09.06 |
[Java] Null 안전하게 다루기 (0) | 2021.08.24 |
[Java] 직렬화, 역직렬화 (0) | 2021.08.23 |
[Java] java8 에 추가된 기능 (0) | 2021.08.23 |
댓글