본문 바로가기

공부방/Effective Java

(4)
[Effective Java] 09.일반적인 프로그래밍 원칙 ITEM 57. 지역변수의 범위를 최소화하라지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다.가장 처음 쓰일 때 선언하기선언과 동시에 초기화하기while 문 보다는 for 문 사용하기메서드를 작게 유지하고 한 가지 기능에 집중하기ITEM 58. 전통적인 for 문보다는 for-each 문을 사용하라반복자와 인덱스를 변수로 사용하지 않으니 코드가 깔끔해지고 오류가 날 일이 없다. 하나의 관용구로 컬렉션과 배열을 모두 처리할 수 있어서 어떤 컨테이너를 다루는지 신경 쓰지 않아도 된다.ITEM 59. 라이브러리를 익히고 사용하라라이브러리를 사용하면 코드 품질을 높이고 애플리케이션 기능 개발에 집중할 수 있다. 메이저 릴리스마다 주목할 만한 기능이 라이브러리에 추가..
[Effective Java] 04.클래스와 인터페이스 ITEM 20. 추상 클래스보다는 인터페이스를 우선하라.둘의 가장 큰 차이는 추상 클래스가 정의한 타입(자료형)을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다. 반면 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급한다. 추상클래스를 구현했다는 것은 추상클래스가 조상클래스라는 것인데, 이러한 구조는 클래스 계층구조에 큰 혼란을 줄 수 있다. 반대로 인터페이스는 믹스인 타입으로 주된 타입 외에도 특정한 선택적 행위를 제공한다고 선언하는 효과를 주며 유연성을 얻을 수 있다.믹스인(mixin)이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에 원래의 '주된 타입' 외에도 특정 선택적 행위를 제공한다..
[Effective Java] 03.모든 객체의 공통 메서드 ITEM 10. equals는 일반 규약을 지켜 재정의하라꼭 필요한 경우가 아니면 equals() 함수를 재정의 하지 않는게 좋다. 재정의해야 할 때는 다음 세 가지 규약을 지켜야 한다. 규약을 지키지 못하면 대상 클래스가 이 규약을 준수한다고 가정하는 클래스(HashMap, HashSet)를 오작동하게 만든다.대칭성: null 이 아닌 모든 참조 값 x,y에 대해, x.equals(y)가 true 이면 y.equals(x) 도 true 이다.추이성: null 이 아닌 모든 참조 값 x,y,z에 대해, x.equals(y)가 true 이면 y.equals(z), x.equals(z) 도 true 이다.일관성: null 이 아닌 모든 참조 값 x,y에 대해, x.equals(y)를 반복해서 호출하면 항상 ..
[Effective Java] 02. 객체 생성과 파괴 ITEM 01. 생성자 대신 정적 팩터리 메서드를 고려하라장점이름을 가질 수 있다.이름으로 반환 될 객체의 특성을 나타낼 수 있다.호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.같은 객체 요청 상황에 생성 비용이 큰 경우 성능을 높인다.하위 클래스 타입을 반환할 수 있는 유연성이 있다.입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.가령 EnumSet 클래스에서는 매개변수의 원소 수에 따라 두 가지 하위 클래스 중 하나의 인스턴스를 반환한다.정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.정적 팩토리 메서드를 활용하면, 반환할 객체의 클래스가 컴파일 타임에 존재하지 않아도 된다. 특정한 하위 타입이 필요한 런타임 시점 때, 정적 팩토리 메서드 내에..