목록Backend/Effective Java (11)
elevne's Study Note
아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트들은 모두 내부 구현을 완벽히 숨겨 구현과 API 를 깔끔히 분리하며, 오직 API 를 통해서만 다른 컴포넌트와 소통한다. 정보은닉, 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 된다. 자바는 정보은닉을 위한 다양한 장치를 제공하는데, 접근 제한자가 대표적이며 이를 제대로 활용하는 것이 캡슐화의 핵심인 것이다. 기본 원칙은, 모든 클래스와 멤버의 접근성을 가능한 한 좁히는 것이다. 탑 레벨의 클래스와 인터페이스에는 public 혹은 package-private (package-private 는 아무런 접근제어자를 붙여주지 않으면 자동으로 설정됨) 를 부여해줄 수 있다. public 으로 선언하면 공개 API 가 되고, pack..

Object 는 객체를 만들 수 있는 구체 클래스이지만, 기본적으로는 상속해서 사용하도록 설계되어있다. Object 에서 final 이 아닌 메소드 (: equals, hashCode, toString, clone, finalize) 는 모두 오버라이드를 염두에 두고 설계된 것으로, 정의 시 지켜야하는 일반 규약이 명백히 정의되어 있다. 메소드를 잘못 구현하면 대상 클래스가 이 규약을 준수한다고 가정하는 HashMap, HashSet 과 같은 클래스를 오작동하게 만들 수 있다. 아이템 10. equals 는 일반 규약을 지켜 재정의하라 equals 메소드는 재정의할 때 주의해야할 점들이 많다고 한다. 아래에 해당하는 상황 중 하나라면, 재정의하지 않는 편이 최선이라고 한다. 각 인스턴스가 본질적으로 고유..

아이템 1. 생성자 대신 정적 팩토리 메소드를 고려해라 클래스의 인스턴스를 얻을 때 public 생성자를 사용할 수도 있지만, 생성자와 별도로 정적 팩토리 메소드를 사용해볼 수도 있다. 해당 클래스의 인스턴스를 반환하는 단순한 정적메소드이다. 정적 팩토리 메소드를 사용하는 장단점이 존재한다. 장점 이름을 가질 수 있다: 정적 팩토리 메소드의 이름을 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. BigInteger.probablePrime 과 같이, 값이 소수인 BigInteger 을 반환한다는 것이 명확하게 보이게끔 작성할 수 있는 것이다. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다: 불변클래스(immutable class)는 인스턴스를 미리 만들어두거나 새로 생성한 인스턴스를 캐싱하..