일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 람다식
- 로컬 클래스
- 바운디드 타입
- 자바할래
- 접근지시자
- 제네릭 와일드 카드
- throwable
- 함수형 인터페이스
- System.out
- 상속
- System.err
- 정렬
- Switch Expressions
- 항해99
- github api
- 프리미티브 타입
- yield
- 제네릭 타입
- annotation processor
- 브릿지 메소드
- 익명 클래스
- 자바스터디
- Study Halle
- System.in
- 스파르타코딩클럽
- 합병 정렬
- junit 5
- auto.create.topics.enable
- docker
- raw 타입
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