단단히

빈(Bean) 클래스_ Getter와 Setter 본문

Java/개념 정리

빈(Bean) 클래스_ Getter와 Setter

이게아닌데 2022. 7. 10. 13:21

빈(bean) 클래스는 getter와 setter이 있는 클래스를 말한다.

컴포넌트 형태로 구성된 클래스이다.

 

객체지향 프로그래밍의 원칙에는 캡슐화, 추상화, 다형성, 정보 은닉, 상속성이 있다.

Getter와 Setter 메서드는 정보 은닉, 캡슐화의 원칙을 잘 보여준다.

 

객체지향 프로그래밍은 데이터 무결성이 깨지는 것을 방지하기 위해 객체 데이터에 직접 접근을 막는다.

이때 데이터 무결성이란 데이터의 정확성과 일관성을 유지하고 보증하는 것을 말한다.

객체 데이터를 외부에서 직접 접근을 한다면 데이터를 마음대로 읽고 변경할 수 있기에 예상치 못한 문제가 발생할 수 있다.

이런 문제를 방지하기 위해 데이터 값의 직접 접근을 제한(private)하고 메서드를 공개하여 외부에서 메서드를 통해 데이터에 접근하도록 한다.

 

[빈 클래스 작성 방법]

빈 클래스는 필드, setter, getter로 이루어져 있다.

  • 필드 변수 ; private로 선언이 돼야 한다.
  • Setter ; 필드에 데이터 입력용 메서드를 말하는데, 필드 초기화 전용 메서드이다.
  • Getter ; 필드에 저장된 데이터를 사용하기 위한 메서드이다.
                 필드에 저장된 데이터 반환용 메서드를 말한다.
                 그저 반환 값을 원하는 곳으로 전달해주기 위해 사용한다.

일반 클래스와 만드는 방식은 같다. 그런데 빈 클래스는 인터페이스를 만들 수 없다.

    [참고] 필드 1개당 Setter, Getter 각 한 개씩 매칭, 생성한다.

 

예를 들어, 캐릭터의 체력은 100부터 시작해 0까지 있어야 한다. 즉, 음수인 -의 값은 들어갈 수 없다. 그런데 만약 외부에서 체력을 음수(-)로 만들어버리는 문제가 발생할 수도 있다.

이때 Setter의 역할이 나온다. Setter는 매개 값(받아온 데이터)을 검증해서 유효한 값만 데이터로 저장할 수 있다. 

위와 같이 setter의 값은 음수의 값(유효하지 않는 값)이 들어오면 0으로 만들어버린다. 

이때 Argument는 수정할 멤버 변수와 같은 타입이 여야 한다.


객체의 데이터를 읽을 때도 메서드를 사용하는 것이 좋다. 객체 외부에서 객체의 필드 값을 사용하기에 부적절한 경우가 있다. 이런 경우에 getter의 역할이 나온다. 메서드로 필드 값을 가공한 후 외부로 전달한다.

 

체력이 100으로 고정되어있다고 가정해보자.

이때 getter를 사용해 해당 고정된 필드값을 반환해준다.

그런데 외부에서 power의 값을 변환시키려고 한다면 어떻게 될까?

 " The field Practice.power is not visible "이라는 에러 메시지가 나온다.

Practice.power 필드가 표시되지 않습니다.

라는 문구가 나온다. 우선 power는 필드에 private로 선언을 했기 때문이다. 당연히 해당 값은 지정 값으로 변하지 않는 값이기 때문에 데이터를 수정할 수도 없다. 


게임에서 getter, setter를 이용해 자동차 속도를 마일에서 km로 환산해서 리턴하면 어떻게 될까?

우선 원하는 속도를 입력받아서 원하는 속도를 km로 변환시켜 보내주도록 하자.

 

아까와 같이 setter에서 if문으로 mile <0인 조건을 걸었는데 실행되지 않아, getter로 옮겼다.

(결과를 한 번에 캡처하고 싶어서 while문으로 반복해서 값을 받도록 했다.)

 


단점은 있을까? 

모든 멤버 변수에 getter를 생성하고 그 값으로 객체 외부에서 로직을 수행한다면 객체가 값을 가지고 있는 상태도 아니면서 동시에 메시지를 전달하는 역할도 못하게 된다.

getter를 무분별하게 사용하면 가독성이 떨어지고 **디미터의 법칙**을 위반할 가능성이 생긴다. 

 

디미터 법칙이란_

더보기

디미터의 법칙 혹은 데메테르의 법칙으로 불리고 있다. 이 가이드라인은 최소한의 지식 원칙(The Principle of Least Knowledge)을 강조하며모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.

Comments