꾸준한 스터디
article thumbnail
  • 클라이언트 코드가 필드를 직접 사용하면 캡슐화의 장점을 제공하지 못한다.
  • 필드를 변경하려면 API를 변경해야 한다.
  • 필드에 접근할 때 부수 작업을 할 수 없다.
  • package-private 클래스 또는 private 중첩 클래스라면 데이터 필드를 노출해도 문제가 없다.

 

public 클래스의 경우 권장되는 코드

불변 필드를 노출한 public 클래스

public 클래스는 어느 곳에서나 가져다 쓰는 API용 객체이기 때문에 public 필드를 직접 접근해 값을 변경하게 만들어 놓으면 필드명을 수정해야 할 때 가져다 쓴 곳을 일일이 찾아가며 변경해야하며 외부 클래스 메서드에서 값이 변경되는 코드가 들어간다면 생각치 못한 곳에서 값이 변경될 수 있다.

package-private 클래스라면 필드명이 변경된다고 하더라도 패키지 내부만 살펴보면 되고 private 필드를 사용하면 클래스 내부에서만 확인하면 된다. 외부 클래스에서 필드 값을 변경할 위험도 줄어든다.

public 클래스의 private static final 상수값은 단 하나의 변하지 않는 불변값이기 때문에 클래스 내부에서 안전하게 사용이 가능하다. public final의 불변 값이라면? 외부에서 가져다 쓰더라도 값이 변경될 위험은 없지만 직접 접근하는 것 보다 getter, setter 메서드를 사용하는게 더 유용하다.

 

 

내부를 노출한 Dimension클래스의 심각한 문제는 오늘날까지도 해결되지 못했다. 성능 문제가 발생

필드에 접근하여 값을 변경하게 만들었을 경우 중간에 다른 작업을 하며 값을 변경할 수 있기 때문에

다른곳에서 사용해야 하는 경우 일일이 복사하는 작업이 이루어져야 한다.

그나마 primitive 타입이라면 참조값이 아닌 실제 값이 들어가니 복사가 쉽지만

references 타입이라면 값도 new로 복사하여 지정 한 다음 해당 참조값을 넣어줘야 한다.

 

https://www.inflearn.com/course/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-2/dashboard

profile

꾸준한 스터디

@StudyRecord

포스팅이 유익하셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!