728x90 반응형 Java97 [EffectiveJava] Item17 변경 가능성을 최소하라 불변클래스란(Immutable Class) ? 해당 객체의 내부적인 값들을 변경할 수 없는 클래스를 의미한다. 불변 클래스는 해당 객체가 파괴되는 순간까지 절대 달라지지 않는다. 불변 클래스는 가변 클래스보다 설계하고 구현하기 쉽고, 사이드 이펙트로부터 안전하다. 클래스를 불변으로 만드는데 필요한 5가지 규칙이 있다. 1. 객체의 상태를 변경하는 메서드를 제공하지 않는데. 2. 클래스를 확장할 수 없도록 한다.(class 에 final 선언, 다른방법도 있음) 3. 모든 필드들을 final 로 선언한다. 4. 모든 필드들을 private 접근제한자로 선언한다. 5. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. public final class Calculator { private fina.. 2021. 1. 6. [EffectiveJava] Item16 public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 예시 코드를 하나 보도록 하겠습니다. class Point { public double x; public double y; } 위와 같은 class는 public이기 때문에 데이터 필드에 직접 접근할 수 있기 때문에 캡슐화의 이점을 제대로 살리지 못한다. 위와 같은 class는 불변성을 보장할 수 없고, 외부에서 접근할 때 부수 작업을 수행할 수도 없습니다. (변경후 데이터 처리를 부수작업이라고 보시는게 편합니다.) 위와 같은 문제를 해결하기 위해 Setter/Getter를 통해 내부 필드에 접근할때 접근자 메서드를 사용하여 접근하도록 하는방법입니다. 위의 코드를 접근자 메서드를 활용하여 작성하면 다음과 같습니다. class Point { private double x; // publid 을 privat.. 2021. 1. 2. [EffectiveJava] Item15 클래스와 멤버의 접근권한을 최소화하라 앞으로 나오는 package-private은 접근제한자 default와 동일하다고 본다. 잘 설계된 컴포넌트와 잘 설계하지 못한 컴포넌트는 내부 데이터를 외부에 얼마나 잘 숨겼는가만 봐도 알 수 있다. 잘설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨 구현과 API를 깔끔하게 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하고 내부 동작의 방식에는 전혀 개의치 않는다. 가장 중요한 내용은 정보은닉 또는 캡슐화라고 우리가 흔히 부르는 내용이다. :) 정보은닉 ( 캡슐화 ) 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 각 컴포넌트를 빠르게 파악하여 디버깅 가능, 다른 컴포넌트로 교체하는데 부담도 적다. 정보 은닉이 성능을 높여주는 않지만, 성능의 최적화에는 도움이 된.. 2020. 12. 27. [EffectiveJava] Item14 Comparable을 구현할지 고려하라 Item14는 Comparable Interface의 메서드인 compareTo()에 대한 내용을 다룬다. compareTo 메서드는 Object의 메서드가 아닌 Comparable 메서드이며 두가지만 빼면 Object 클래스의 equals와 같다. compareTo 메서드는 단순 동치성 비교에 더해 순서까지 비교할 수 있고, 제네릭하다. Comparable를 구현했다는 것은 해당 클래스의 인스턴스들에는 순서가 있음을 뜻한다. 따라서 Comparable 를 구현한 객체들의 배열은 손쉽게 정렬 가능하다 Arrays.sort(arrays) Comparable을 구현하면 다양한 기능을 누릴 수 있다. 자바 라이브러리의 모든 값 클래스, 열거형 타입은 Comparable을 구현했다. 순서가 명확한 값 클래스를 .. 2020. 12. 27. 이전 1 2 3 4 ··· 25 다음 728x90 반응형