본문 바로가기

전체 글187

아이템 15. 클래스와 멤버의 접근 권한을 최소화하라. 1. 구현과 API를 분리하는 "정보 은닉"의 장점 시스템 개발 속도를 높인다. (여러 컴포넌트를 병렬로 개발할 수 있기 떄문에) 시스템 관리 비용을 낮춘다. (컴포넌트를 더 빨리 파악할 수 있기 때문에) 성능 최적화에 도움을 준다. (프로파일링을 통해 최적화할 컴포넌트를 찾고 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 개선할 수 있기 때문에) 소프트웨어 재사용성을 높인다. (독자적인 컴포넌트라면) 시스템 개발 난이도를 낮춘다. (전체를 만들기 전에 개별 컴포넌트를 검증할 수 있기 때문에) 2. 클래스와 인터페이스의 접근 제한자 사용 원칙 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야한다. 톱레벨 클래스와 인터페이스에 package-private 또는 public을 쓸 수 있다 public으로 .. 2023. 2. 5.
아이템 14. Comparable을 구현할지 고민하라 Comparable은 자연적인 순서를 정해줄때 필요한 인터페이스입니다. Comparable을 사용하면 비교를 통해 순서를 정하고 싶을때 순서를 정하는 방법을 구현할 수 있습니다. 또한 Comparable은 제네릭타입을 가지고있기 때문에 컴파일시점에 타입체킹이 가능하다는 장점이 있습니다. Object에서 제공하는 equals와 굉장히 비슷한데 다른점은 순서를 비교할 수 있고 제네릭타입을 지원한다는 차이점이 있습니다. Comparable인터페이스의 compareTo메서드를 재정의할 때 규약이 있는데 어떻게 구현해야할지 살펴보겠습니다. Comparable인터페이스를 상속받아 compareTo를 재정의하는 BigDecimal클래스 public class BigDecimal extends Number implem.. 2023. 2. 5.
아이템 12. toString을 항상 재정의하라 toString을 재정의 하지 않은 PhoneNumber클래스 package me.whiteship.chapter02.item12; import lombok.ToString; // PhoneNumber에 toString 메서드 추가 (75쪽) public final class PhoneNumber { private final short areaCode, prefix, lineNum; public PhoneNumber(int areaCode, int prefix, int lineNum) { this.areaCode = rangeCheck(areaCode, 999, "지역코드"); this.prefix = rangeCheck(prefix, 999, "프리픽스"); this.lineNum = rangeChec.. 2023. 2. 5.
아이템 11. equals를 재정의 하려거든 hashCode도 재정의하라 equals를 재정의할때는 hashCode도 같이 재정의 해야합니다. IDE에서 equals를 재정의 할 때 hashCode를 같이 구현하도록 되어있습니다. lombok 또한 같은 어노테이션으로 equals와 hashCode가 묶여있습니다. 혹시나 equals가 재정의 되어있는데 hashCode가 재정이 되어 있지 않다면 잘못된 코드이므로 반드시 hashCode를 재정의 해야 합니다. 왜 equals를 재정의할 때 hasCode도 같이 재정의 해야하는지 살펴봅시다. Object 명세에서 다음과 같은 규약이 있습니다 equals 비교에 사용하는 정보가 변경되지 않았다면 hashCode는 매번 같은 값을 리턴해야 한다. (변경되거나, 애플리케이션을 다시 실행했다면 달라질 수 있다.) 두 객체에 대한 equa.. 2023. 2. 5.