본문 바로가기
반응형

전체 글145

[아이템15] 클래스와 멤버의 접근 권한을 최소화하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐입니다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리합니다. 정보 은닉 또는 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리입니다. 기본 원칙 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 합니다. 소프트웨어가 올바로 동작하는 한 항상 가장 낮은 접근 수준을 부여해야 한다는 뜻입니다. 가장 바깥이라는 의미의 톱레벨 클래스와 인터페이스에 부여할 수 있는 접근 수준은 package-private와 publi.. 2022. 9. 18.
[아이템14] Comparable을 구현할지 고려하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. Comparable 인터페이스의 유일무이한 메서드인 compareTo 를 알아보도록 하겠습니다. compareTo 는 Object의 메서드가 아닙니다. equals와 거의 비슷하나 2가지가 다릅니다. 첫째는, compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있습니다. 둘째는, 제네릭 합니다. Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음으 뜻합니다. 그래서 Comparable을 구현한 객체들의 배열은 손쉽게 정렬할 수 있습니다. Arrays.sort(a);아래 코드는 중복을 제거하고 알파벳순으로 출력합니다. String이 Comparable을 구.. 2022. 9. 18.
[아이템13] clone 재정의는 주의해서 진행하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. clone 메서드의 목적은 객체의 복제본(원본과 상태가 같은 별개의 객체)을 만드는 것입니다. clone 구현 clone 메서드를 정상적으로 구현하기 위해서는 Cloneable 인터페이스를 구현해야 합니다. @HotSpotIntrinsicCandidate protected native Object clone() throws CloneNotSupportedException;clone 메서드를 구현하지 않아도 되는가? clone은 Object 클래스에 정의되어 있습니다. 객체가 clone 메서드를 상속해도 clone 메서드의 접근제어자는 protected 이므로 메서드를 호출할 수 없습니다. clone .. 2022. 9. 18.
[아이템12] toString을 항상 재정의하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. 객체의 기본 toString 메서드는 적합한 문자열을 반환하는 경우는 거의 없습니다. toString 재정의 필요한 이유 아래 PhoneNumber 객체는 toString 을 재정의하지 않았습니다. 즉 기본 toString을 호출하도록 되어 있습니다. PhoneNumber phoneNumber = PhoneNumber.of(707, 867, 5309); System.out.println("phoneNumber : " + phoneNumber);결과는 다음과 같습니다. phoneNumber : item11.domain.PhoneNumber@b501c phoneNumber의 어떠한 값이 있는지 알아보기가.. 2022. 9. 18.
[아이템11] equals를 재정의하려거든 hashCode도 재정의하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. equals 를 재정의한 클래스 모두에서 hashCode 도 재정의해야 합니다. 그렇지 않게 되면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap 이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으키게 됩니다. Object 명세 equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 합니다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없습니다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode.. 2022. 9. 18.
[아이템10] equals는 일반 규약을 지켜 재정의하라 이 내용은 이펙티브 자바 Effective Java 3/E 를 읽으면서 정리한 내용을 포함하고 있습니다. equals 메소드는 재정의하기 쉬워 보이지만 잘못 수정하게 된다면 자칫하면 끔직한 결과를 초래할 수 있습니다. 재정의 다음에 열거한 상황 중 하나에 해당된다면 재정의하지 않는 것이 최선입니다. 각 인스턴스가 본질적으로 고유하다 인스턴스의 논리적 동치성 을 검사할 일이 없다 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. 클래스가 private이거나 package-private이고 equals 메서드를 호출할 일이 없다 그럼, 재정의해야 할 때는 언제일까요? 객체 식별성이 아니라 논리적 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교하도록 재정의되지.. 2022. 9. 18.
반응형