본문 바로가기

effective java17

Effective Java 아이템 17. 변경 가능성을 최소화하라 Effective Java 3판을 학습하며 요약한 내용입니다. 자세한 내용은 책을 참고해주시기 바랍니다. 불변 클래스 인스터스의 내부 값을 수정할 수 없는 클래스를 불변 클래스라고 말한다. 불변 인스턴스는 처음 생성될 때 주어진 정보를 간직하고 객체가 파괴되는 순간까지 유지한다. 불변 클래스는 가변 클래스보다 구현 및 사용하기가 쉬우며, 오류가 발생할 여지도 적고 안전하다. 가변 클래스의 경우에는 인스턴스를 생성하고 나서 중간에 값이 변경될 수 있고, 이를 알아채지 못하면 오류를 발생하는 코드를 작성하기 쉽다. 클래스를 불변으로 만드는 규칙 5가지 객체의 상태를 변경하는 메서드를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 모든 필드를 final로 선언한다. 모든 필드를 private으로 선언한다.. 2019. 4. 14.
Effective Java 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 Effective Java 3판을 학습하며 요약한 내용입니다. 자세한 내용은 책을 참고해주시기 바랍니다. class Point { public double x; public double y; } Point 클래스는 데이터 필드에 직접 접근할 수 있다. 이러한 클래스를 만들면, 객체 지향에서 캡슐화 장점을 사용할 수 없다. 또한, 불변 클래스를 만들 수 없다. Point 클래스의 접근 제한자는 package-private이기 때문에 패키지 내부에서만 사용할 수 있다. 이러한 클래스를 보면 필드를 모두 private을 변경하고, setter 또는 getter 접근자를 추가하고 싶어할 것이다. Point 클래스에 접근자를 추가하고 필드는 각 접근자 메서드를 통해 접근할 수 있도록 변경한 코드이다. class .. 2019. 4. 14.
Effective Java 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 Effective Java 3판을 학습하며 요약한 내용입니다. 자세한 내용은 책을 참고해주시기 바랍니다. 컴포넌트 설계 시 중요한 점은 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 잘 숨겼는지(은닉화)가 중요하다. 잘 설계된 컴포넌트는 내부에 사용되는 것과 API로 공개하는 것을 깔끔하게 분리한다. API를 통해서만 다른 컴포넌트와 소통하며, 서로의 내부 동작 방식에는 관심이 없다. 정보 은닉 장점 시스템 개발 속도를 높인다. 시스템 관리 비용을 낮춘다. 성능 최적화에 도움을 준다. 소프트웨어 재사용을 높인다. 큰 시스템을 제작하는 난이도를 낮춘다. 접근 제어 매커니즘은 클래스, 인터페이스, 멤버의 접근성(접근 허용 범위)를 명시한다. 각 요소의 접근성은 요소가 선언된 위치, 접근 제한자로.. 2019. 4. 11.
Effective Java 아이템 14. Comparable을 구현할지 고려하라 Effective Java 3판을 학습하며 요약한 내용입니다. 자세한 내용은 책을 참고해주시기 바랍니다. Comparable 인터페이스 Comparable은 동치성 비교와 더불어 순서까지 비교하는 인터페이스이다. 인터페이스에는 compareTo 메서드가 정의되어 있다. Object 클래스의 equals와 성격이 비슷하지만 차이점으로는 순서를 비교할 수 있고, 제네릭이다. public interface Comparable { public int compareTo(T o); } Comparable 인터페이스를 구현한 클래스는 인스턴스들간에 자연적인 순서가 있음을 뜻한다. String 클래스는 Comparable 인터페이스를 구현하고 있기 때문에 다음과 같이 쉽게 정렬할 수 있다. String[] names .. 2019. 4. 8.
Effective Java 아이템 13. clone 재정의는 주의해서 진행하라 Effective Java 3판을 학습하며 요약한 내용입니다. 자세한 내용은 책을 참고해주시기 바랍니다. Clonable 인터페이스 Cloneable은 어떤 객체가 복제(clone)을 허용한다는 사실을 알리기 위해서 만들어진 믹스인 인터페이스이다. 인터페이스 내부를 살펴보면 clone 메서드가 선언되어 있지 않고, Object 클래스에 clone 메서드가 protected로 선언되어 있다. Cloneable 인터페이스는 Object 클래스의 clone 메서드가 어떻게 동작할 것인지에 대해 결정한다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면, 해당 객체를 필드 단위로 복사한 객체를 반환한다. 반대로 Cloneable을 구현하지 않으면, CloneNotSupportedExcept.. 2019. 4. 8.
Effective Java 아이템 12. toString을 항상 재정의하라 Effective Java 3판을 학습하며 요약한 내용입니다. 자세한 내용은 책을 참고해주시기 바랍니다. toString 메서드 java.lang.Object 클래스가 toString 메서드가 제공하지만, 해당 메서드를 호출하면 반환되는 문자열은 사용자가 보고 싶어하는 문자열 값 형태가 아니다. 값은 클래스의 이름과 @ 문자 기호와 16진수로 표현된 해시 코드가 붙은 문자열이 반환된다. 다음 코드는 toString 구현하지 않은 클래스의 toString 메서드를 호출하는 예제이다. public class Main { public static void main(String[] args) { Product product = new Product(1, "Toy"); // ch10.Product@70dea4e .. 2019. 4. 8.