본문 바로가기

Effective Java73

[Effective Java] 아이템55 옵셔널 반환은 신중히 하라 ■ 자바 8 이전 자바 8전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 두가지 선택지가 있었다. 1. Exception Throw 예외는 반드시 예외적인 상황에서만 사용해야 한다. 예외는 실행 스택을 추적 캡처하기 때문에 비용이 비싸다. 2. Null Return null을 리턴하는 경우에는 Null Pointer Exception을 항상 조심해야한다. ■ Optional 도입 자바 8에서 Optional가 도입되면서 선택지가 하나 늘었다. Optionl이란 null이 아닌 T타입 참조를 하나 담거나 아무것도 담지 않은 일종의 래퍼 클래스이다. Optional은 원소를 최대 1개 가질 수 있는 불변 Collection이다. 자바 8이전의 코드보다 null-safe한 로직을 처리할 수 있게 해준다.. 2021. 7. 12.
[Effective Java] 아이템54 null이 아닌, 빈 컬렉션이나 배열을 반환하라 ■ null이 아닌, 빈 컬렉션이나 배열을 반환하라 다음은 치즈를 얻어올 때 비어있으면 null을 반환하는 코드이다. public List getCheeses() { return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } 위의 코드처럼 작성하면 클라이언트는 null 상황을 처리하는 코드를 추가로 작성해야한다. Shop shop = new Shop(); List cheeses = shop.getCheeses(); if (cheeses != null && cheeses.contains(Cheese.STILTON)) System.out.println("치즈 획득!"); 컬렉션이나 배열 같은 컨테이너가 비었을 때 null을 반환하는 메.. 2021. 7. 12.
[Effective Java] 아이템53 가변인수는 신중히 사용하라 ■ 가변인수는 신중히 사용하라 가변인수 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다. 인수의 개수와 길이가 같은 배열을 만들고 인수들을 배열에 저장하여 가변인수 메서드에 건네준다. 아래 코드는 최솟값을 찾는 메서드인데 인수를 0개만 받을 수 있도록 설계하는건 좋지 않다. 왜냐하면 인수가 0개일 때 컴파일 타임이아닌 런타임 때 실패하기 때문이다. static int min(int... args) { if (args.length == 0) throw new IllegalArgumentException("인수가 1개 이상 필요합니다."); int min = args[0]; for (int i = 1; i < args.length; i++) if (args[i] < min) min = args[i];.. 2021. 7. 12.
[Effective Java] 아이템52 다중정의는 신중히 사용해라 ■ 다중정의와 호출 예제 다중정의(Overloading)는 어느 메서드가 호출될 지 컴파일 타임에 정해진다. 아래 코드를 실행해보면 직관과 어긋나느 결과를 볼 수 있다. import java.math.BigInteger; import java.util.*; public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List lst) { return "리스트"; } public static String classify(Collection c) { return "그 외"; } public static void main(String[] args) { Col.. 2021. 7. 4.
[Effective Java] 아이템51 메서드 시그니처를 신중히 설계하라 ■ 메서드 이름을 신중히 짓자 항상 표준 명명 규칙을 따라야하고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는게 최우선 목표이다. 그 다음 목표는 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하는 것이다. ■ 편의 메서드를 너무 많이 만들지 말자 모든 메서드는 각각 자신의 소임을 다해야한다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고 유지보수하기 어렵다. 메서드가 너무 많으면 이를 구현하는 사람과 사용하는 사람 모두를 고통스럽게한다. ■ 매개 변수 목록은 짧게 유지하자 4개 이하가 좋다. 특히 같은 타입의 매개변수가 연달아 여러개 나오는 경우가 특히 해롭다. 순서를 바꿔 입력해도 그대로 컴파일되고 실행된다. 첫번째로 여러 메서드로 쪼개서 매개변수를 줄이는 방법이있다. .. 2021. 7. 4.
[Effective Java] 아이템50 적시에 방어적 복사본을 만들라 ■ 자바의 안전성 자바는 C, C++에서 흔히 나타나는 버퍼 오버런, 배열 오버런, 와일드 포인터 같은 메모리 충돌 오류에서 안전하다. 하지만 다른 클래스로부터의 침범을 아무런 노력없이 막을 수 없다. 클라이언트가 여러분의 불변식을 꺠뜨리려 혈안이 되어 있다고 가정하고 방어저긍로 프로그래밍해야 한다. ■ 불변식을 지키지 못하는 클래스 아래 코드는 언뜻보면 불변식을 지킨 코드 처럼 보인다. package ch8.hoon.item50; import java.util.Date; public class Period { private final Date start; private final Date end; public Period(Date start, Date end) { if(start.compareTo(en.. 2021. 7. 4.