백엔드132 Effective Java 맛보기 8탄 일반적인 프로그래밍 원칙 지역변수의 범위를 최소화하라 전통적인 for 문보다는 for-each문을 사용하라 전통적인 for 문과 비교했을 때 for-each문은 명료하고, 유연하고, 버그를 예방해 준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each 문을 사용하자. 라이브러리를 익히고 사용하라 바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면 누군가 이미 라이브러리 형태로 구현해놓았을 가능성이 크다. 그런 라이브러리가 있다면, 쓰면 된다. 있는지 잘 모르겠다면 찾아보라. 일반적으로 라이브러리의 코드는 여러분이 직접 작성한 것 보다 품질이 좋고, 점차 개선될 가능성이 크다. 여러분의 실력을 폄하하는 게 아니다. 코드 품질에도 규모의 경제가 적용된다. 즉, 라이브러리 .. 2019. 9. 21. Effective Java 맛보기 7탄 메서드 매개변수가 유효한지 검사하라 메서드나 생성자를 작성할 때면 그 매개변수들에 어떤 제약이 있을지 생각해야 한다. 그 제약들을 문서화하고 메서드 코드 시작 부분에서 명시적으로 검사해야 한다. 이런 습관을 반드시 기르도록 하자. 그 노력은 유효성 검사가 실제 오류를 처음 걸러낼 때 충분히 보상받을 것이다. 적시에 방어적 복사본을 만들라 클래스가 클라이언트로부터 받는 혹은 클라이언트로 반환하는 구성요소가 가변이라면 그 요소는 반드시 방어적으로 복사해야 한다. 복사 비용이 너무 크거나 클라이언트가 그 요소를 잘못 수정할 일이 없음을 신뢰한다면 방어적 복사를 수행하는 대신 해당 구성요소를 수정했을 때의 책임이 클라이언트에 있음을 문서에 명시하도록 하자0. 메서드 시그너처를 신중히 설계하라 다중정의는 신중히 .. 2019. 9. 20. Effective Java 맛보기 6탄 람다와 스트림 익명 클래스보다는 람다를 사용하라 자바가 8로 판올림되면서 작은 함수 객체를 구현하는 데 적합한 람다가 도입되었다. 익명 클래스는 (함수형 인터페이스가 아닌) 타입의 인스턴스를 만들 때만 사용하라. 람다는 작은 함수 객체를 아주 쉽게 표현할 수 있어 (이전 자바에서는 실용적이지 않던) 함수형 프로그래밍의 지평을 열었다. 람다보다는 메서드 참조를 사용하라 메서드 참조는 람다의 간단명료한 대안이 될 수 있다. 메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰고, 그렇지 않을 때만 람다를 사용하라. 표준 함수형 인터페이스를 사용하라 이제 자바도 람다를 지원한다. 여러분도 지금부터는 API를 설계할 때 람다도 염두에 두어야 한다는 뜻이다. 입력값과 반환값에 함수형 인터페이스 타입을 활용하라. 보.. 2019. 9. 20. Effective Java 맛보기 5탄 열거 타입과 애너테이션 int 상수 대신 열거 타입을 사용하라. 열거 타입은 확실히 정수 상수보다 뛰어나다. 더 읽기 쉽고 안전하고 강력하다. 대다수 열거 타입이 명시적 생성자나 메서드 없이 쓰이지만, 각 상수를 특정 데이터와 연결짓거나 상수마다 다르게 동작하게 할 때는 필요하다. 드물게는 하나의 메서드가 상수별로 다르게 동작해야 할 때도 있다. 이런 열거 타입에서는 switch 문 대신 상수별 메서드 구현을 사용하자. 열거 타입 상수 일부가 같은 큰 동작을 공유한다면 전략 열거 타입 패턴을 사용하자. ordinal 메서드 대신 인스턴스 필드를 사용하라 비트 필드 대신 EnumSet 을 사용하라 열거할 수 있는 타입을 한데 모아 집합 형태로 사용한다고 해도 비트 필드를 사용할 이유는 없다. EnumSet.. 2019. 9. 17. Effective Java 맛보기 4탄 제네릭 로 타은은 사용하지 말라 로 타입(raw type)을 사용하면 런타임에 예외가 일어날 수 있으니 사용하면 안된다. 로 타입은 제네릭이 도입되기 이전 코드와의 호환성을 위해 제공될 뿐이다. 빠르게 훑어보자면, Set 는 어떤 타입의 객체도 저장할 수 있는 매개변수화 타입이고, Set는 모종의 타입 객체만 저장할 수 있는 와일드 카드 타입이다. 그리고 이들의 로 타입인 Set 은 제네릭 타입 시스템에 속하지 않는다. Set 와 Set 안정하지만, 로 타입인 Set은 안전하지 않다. 비검사 경고를 제거하라. 비검사 경고는 중요하니 무시하지 말자. 모든 비검사 경고는 런타임에 ClassCastException 을 일으킬 수 있는 잠재적 기능성을 뜻하니 최선을 다해 제거하라. 경고를 없앨 방법을 찾지 못하.. 2019. 9. 16. 이전 1 ··· 13 14 15 16 17 18 19 ··· 27 다음 728x90