본문 바로가기

개발/[스터디] 이펙티브 자바

(13)
[이펙티브자바]아이템26. 로타입은 사용하지 말라 제네릭(Generic)이란? (사전적 의미) - generic은 직역하면 '포괄적인. 일반적인' 의미이다. 제네릭(Generic)이란? (프로그래밍에서의 의미) - 하나의 자료구조에서 여러가지 타입을 지원하기 위해 탄생 - 특정 타입을 미리 지정해주는 것이 아니라, 사용자가 필요한 타입을 지정하도록 하는 것 // 같은 ArrayList인데 타입만 다르다. 하나의 자료 구조로 통일할 수는 없을까? ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); 제네릭타입(Generic Type) 제네릭 클래스, 제네릭 인터페이스를 통틀어 일컫는 말. 제네릭 클래스, 제네릭 인터페이스 - 클래스, 인터페이스 선언에 타입 매개변수가 쓰일 경우. - ..
[책 요약]이펙티브자바 21~25 아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라. 인터페이스 내 디폴트 메서드의 등장 자바 8 이전에는 기존 구현체를 수정하지 않고는 인터페이스에 메서드를 추가할 방법이 없었다. 자바 8 이후, 핵심 컬렉션 인터페이스에 디폴트 메서드가 여러개 추가 되었다. 디폴트 메서드가 기존 구현체에 런타임 오류를 일으킬 수도 있다. 예. apache.commons.collections4.SynchronizedCollection 위 클래스는 객체의 동기화를 제공한다. 그런데 4.4 버전 이전에는 removeIf가 구현체에 없어서, 인터페이스에서 제공하는 디폴트 메서드를 사용하였다. 그 결과 동기화가 없어서, 클라이언트는 예상했던 결과를 받지 못할 수도 있다. 예를 들어, 멀티 스레드 환경에서 Synchroni..
아이템 17. 변경 가능성을 최소화해라 개념 불변 클래스 인스턴스 내부 값을 수정할 수 없는 클래스 어떻게 불변 클래스를 만들까 (규칙 5가지) 1. 객체의 상태를 변경하는 메서드를 제공하지 않는다. public class Car { private final int position; public Car(int position) { this.position = position; } public int getPosition() { return position; } public static void main(String[] args) { // 위치를 1로 초기화한 후 변경 불가. // 위치가 2인 차가 필요할 경우, 객체를 새로 만들어야만 한다. Car car1 = new Car(1); System.out.println("current positi..
아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하여라. 개념 중첩 클래스 특정 목적을 위해 한 클래스에서 별도로 정의한 내부 클래스 참고: https://jobjava00.github.io/language/java/basic/nested-class/ 원칙 1. public클래스(=패키지 바깥에서 접근할 수 있는 클래스)는 접근자를 제공한다. 1.1 왜 접근자를 사용해야할까? - 내부 표현 방식을 언제든지 바꿀 수 있는 유연성이 생긴다. - 필드를 공개할 경우 클라이언트가 이를 직접 사용하므로, 마음대로 바꿀 수 없어 유연성이 떨어진다. 1.2 클래스의 필드를 잘못 노출한 예시 1.2.1 java.awt.package의 Point 클래스 2. package-private 클래스 or private 중첩 클래스는 데이터 필드를 노출해도 문제가 없다. 책에서 이해..
아이템 15. 클래스와 멤버의 접근권한을 최소화하여라 개념 정보은닉 1. 뜻 클래스 내부 데이터, 구현정보를 외부 컴포넌트에서 분리시키는 것 2. 장점 2.1 시스템 개발 속도 높인다. : 여러 모듈 동시에 개발 가능 2.2 다른 컴포넌트로 교체가 쉽다. 2.3 소프트웨어의 재사용성을 높인다. (필요한 모듈만 분리하여 타 프로그램에 붙이면 됨) 접근 제어자 private: 멤버가 선언된 클래스 내 default: 접근 제어자 생략시 자동 부여. 동일 패키지 내 protected: 동일 패키지 내 or 상속했을 경우 public: 어디서든 정보 은닉 원칙 1. 모든 클래스&멤버의 접근성을 가능한 낮춘다. 2. public 클래스의 인스턴스 필드는 가능한 public이 아니어야한다. - 값의 불변성을 보장해야한다. - thread-safe하지 않다. 3. 클래..