일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 브릿지 메소드
- Study Halle
- 자바스터디
- 스파르타코딩클럽
- annotation processor
- 로컬 클래스
- 함수형 인터페이스
- yield
- github api
- 합병 정렬
- auto.create.topics.enable
- 바운디드 타입
- throwable
- 익명 클래스
- System.in
- 제네릭 타입
- docker
- 제네릭 와일드 카드
- 정렬
- 프리미티브 타입
- 람다식
- Switch Expressions
- 항해99
- junit 5
- 접근지시자
- 상속
- 자바할래
- System.err
- raw 타입
- System.out
Archives
- Today
- Total
코딩하는 털보
이펙티브 자바, 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 본문
이펙티브 자바, 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라
public 클래스의 public 필드는 API를 수정하지 않고는 (API를 사용하는 클라이언트에 피해를 줄 수 있으므로)내부 표현을 바꿀 수 없고, 불변식을 보장할 수 없으며, 외부에서 필드에 접근할 때 부수 작업을 수행할 수도 없다.
필드를 private으로 바꾸고 접근자 및 변경자 메서드를 활용하자.
public class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
접근자를 제공하면 클래스 내부 표현 방식을 언제든 바꿀 수 있고 외부에서 필드에 접근할 때 부수작업을 수행할 수 있다. final 까지 사용하면 불변식까지 보장할 수 있다. 대신 변경자는 사용할 수 없다.
한편 package-private 클래스 또는 private 중첩 클래스는 데이터 필드를 노출한다 해도 아무런 문제가 없다. 그 클래스가 표현하려는 추상 개념만 올바르게 표현해주면 된다.
Comments