본문 바로가기

전체 글

(92)
[이펙티브 자바] 9장 : 일반적인 프로그래밍 원칙 지역변수, 제어구조, 라이브러리, 데이터 타입, 리플렉션, 네이티브 메서드에 대해 알아보자 아이템 57 : 지역변수의 범위를 최소화하라 범위를 최소하는하는 방법 지역변수의 범위를 줄이는 가장 강력한 방법은 ‘가장 처음 쓰일 때 선언하기'이다. 거의 모든 지역변수는 선언과 동시에 초기화 해야한다. 메서드를 최대한 작게 유지하고 한 가지 기능에 집중해라. (다른 기능에서 접근하지 못하도록) 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성이 낮아진다. 예시 반복 변수의 값을 반복문 종료후에도 써야하는 상황이 아니라면 while문보다는 for문이 낫다. for문은 반복 변수의 범위가 for괄호안으로 제한된다. try-catch 사용 시 변수를 초기화하는 과정에서 검사 예외를 던질 가능성이 ..
[이펙티브 자바] 8장 : 메서드 메서드의 매개변수와 반환값은 어떻게 처리하는지 메서드 시그니처는 어떻게 설계 해야 하는지 아이템 49 : 매개변수가 유효한지 검사하라 메서드와 생성자 대부분은 입력 매개변수 값이 특정 조건을 만족하기를 바란다. 예를 들어 인덱스 값은 음수로 넘어오면 안되고, 객체참조는 null이 아니여야만 한다. 또한 잘못되었을 때 발생하는 예외를 문서화하여 남겨놔야한다. requiredNonNull과 assert를 통해 매개변수 유효성 검사를 할 수 도 있다. 유효성 검사를 통해 후에 생길 수 있는 에러를 조기에 찾을 수 있다. 메서드는 최대한 범용적으로 설계하라. 제약으로 인해 본래의 기능을 못해서는 안된다. 아이템 50 : 적시에 방어적 복사본을 만들라 클라이언트가 불변식을 깨뜨리려한다고 생각하고 ‘방어적으로 프로..
[이펙티브 자바] 7장 : 람다와 스트림 자바 8에서 함수형 인터페이스, 람다, 메서드 참조라는 개념이 추가되었다. (함수 객체 쉽게 사용) 이와 함께 스트림 API 추가로 데이터 원소의 시퀀스 처리를 라이브러리 차원에서 지원하기 시작했다. 아이템 42 : 익명 클래스보다는 람다를 사용하라 예전에 자바에서 함수 타입 표현 ⇒ 추상 메서드를 하나만 담은 인터페이스(or 추상클래스) 사용 JDK 1.1 등장 후 ‘익명 클래스'가 함수 객체를 만드는 주요수단 List words = Arrays.asList(args); Collections.sort(words, new Comparator () { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.lengt..
[이펙티브 자바] 6장 : 열거 타입과 애너테이션 자바의 특수한 목적의 참조 타입 2가지 클래스의 일종인 ‘열거 타입’ 인터페이스의 일종인 ‘애너테이션’ 이 두가지를 올바르게 사용해보자. 아이템 34 : int 상수 대신 열거 타입을 사용하라 열거 타입은 일정 개수의 상수값 정의 후 그외는 지원하지 않는 타입이다. 열거 타입 이전 상수 선언 (정수 열거 패턴) public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_SMITH = 2; ... public static final int ORANGE_NEVLE = 0; public static final int ORANGE_TEMPLE = 1; 단점 → 타입 안전 ..
[이펙티브 자바] 5장 : 제네릭 제네릭 지원하기 전 자바자는 컬렉션에서 객체를 꺼낼 때마다 형변환을 해야했음 (이는 실수로 인한 런타임에러를 발생시킴) 그래서 컴파일러는 알아서 형변환 코드를 추가할 수 있고 엉뚱한 타입의 객체를 넣으려는 시도를 컴파일 과정에서 차단하여 더 안전하고 명확한 프로그램을 만들어준다. 제네릭의 이점을 최대한 살리고 단점을 최소화하여 사용해보자. 아이템 26 : 로(raw) 타입은 사용하지 마라 클래스, 인터페이스 선언에 ‘타입 매개변수'가 쓰이면 제네릭 클래스, 인터페이스라고 부름 → 이를 통틀어 ‘제너릭 타입'이라고 함 → ‘제네릭 타입’은 매개변수화 타입을 정의한다. → ‘제네릭 타입'을 정의하면 ‘raw 타입' 도 정의된다. (타입 매개변수를 사용하지 않는 타입) ex) List → List (제네릭 도..
[이펙티브 자바] 4장 : 클래스와 인터페이스 앞에 정리한게 다 날라가버렸다... 다시 한번 공부하면서 정리해야겠다.. 아이템 24 : 멤버 클래스는 되도록 static으로 만들라 중첩 클래스의 종류 정적 멤버 클래스 비정적 멤버 클래스 익명 클래스 지역 클래스 이 중 첫번째를 제외한 나머지는 내부 클래스(inner class)이다. 정적 멤버 클래스의 특징 바깥 클래스의 private멤버에 접근가능 바같 클래스와 함께 쓰일 때 유용한 public 도우미 클래스로 쓰임 비정적 멤버 클래스 인스턴스화 될 때 비정적 멤버 클래스가 확립됨 클래스의 인스턴스를 감싸 다른 클래스의 인스턴스처럼 보이게함 멤버 클래스에서 바같 인스턴스로 접근할이 없다면 정적 멤버 클래스로 정의 바깥 인스턴스의 외부 참조를 얻을 수 있으므로 차단 가비지 컬렉션이 바깥 클래스의 인..
[이펙티브 자바] 3장 : 모든 객체의 공통 메서드 모든 객체의 공통 메서드 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로 상속해서 사용하도록 설계됨 Object에서 final이 아닌 메서드는 모두 재정의를 염두에 두고 설계되어짐. 따라서, 이 메서드를 올바르게 오버라이딩해야만 클래스가 오동작 하지 않는다. 아이템 10 : equals는 일반 규약을 지켜 재정의하라 equals 메서드는 오버라이딩 하지 않으면 오직! 자기자신만 같다. (객체식별성으로 비교) 오버라이딩이 필요한 경우 객체 식별이 아닌 '논리적 동치성'을 확인 해야할 때 주로 값 클래스 ( new Inteager(2)를 두번하면 물리적으로 다른 객체이나 논리적으로는 같은 값을 가지는 객체가 된다 양질의 equals 메서드 구현방법 1. == 연산자를 사용해 입력이 자기 자신의..
[이펙티브 자바] 2장 : 객체 생성과 파괴 2장 객체 생성과 파괴 객체를 ‘만들어야 하는 시기'를 구분하는 방법 불필요한 생성을 피하는 방법 제때 파괴됨을 보장하고 파괴전에 수행해야할 작업 처리 방법 아이템 1 : 생성자 대신 정적 팩터리 메서드를 고려하라 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. 정적 팩토리 메서드 이름을 가질 수 있다. (반환 객체의 특성 설명 가능) 호출 시마다 새로운 인스턴스를 생성하지 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 반환할 객체의 클래스를 자유롭게 선택할 수 있는 ‘유연성'을 제공 팩토리 메서드 이름에 따라 각기 다른 기능의 구현체 생성 가능 (반환 참조 객체는 같다) → 이는 인터페이스를 정적 팩토리 메서드 반환 타입으로 사용하느 인터페이스 기반 프레임워..

반응형