Free Lines Arrow
본문 바로가기
Language/Java

[Java] getter 와 setter

by skahn1215 2021. 9. 5.
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

댓글