728x90
반응형

Java 80

[Effective Java] 아이템 53. 가변인수는 신중히 사용하라.

🎯 아이템 53. 가변인수는 신중히 사용하라. 인수 개수가 일정하지 않은 메서드를 정의해야 한다면 가변인수가 반드시 필요하다. 메서드를 정의할 때 필수 매개변수는 가변인수 앞에 두고, 가변인수를 사용할 때는 성능 문제까지 고려하자. 인수가 1개 이상이어야 하는 가변인수 메서드 - 잘못 구현한 예! 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]; return min; } 이 방식에는 문제가 몇 개 있다...

Java 2023.03.24

[Effective Java] 아이템 52. 다중정의는 신중히 사용하라.

🎯 아이템 52. 다중정의는 신중히 사용하라. 컬렉션 분류기 - 오류! 이 프로그램은 무엇을 출력할까? 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) { Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().values() }; fo..

Java 2023.03.24

[Effective Java] 아이템 51. 메서드 시그니처를 신중히 설계하라.

🎯 아이템 51. 메서드 시그니처를 신중히 설계하라. 1. 메서드 이름을 신중이 짓자. 항상 표준 명명 규칙을 따라야 한다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표다. 2. 편의 메서드를 너무 많이 만들지 말자. 모든 메서드는 각각 자신의 소임을 다해야 한다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다. 따라서 확신이 서지 않으면 만들지 말자. 3. 매개변수 목록은 짧게 유지하자. 4개 이하가 좋다. 일단 4개가 넘어가면 매개변수를 전부 기억하기가 쉽지않다. 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 해롭다. 과하게 긴 매개변수 목록을 짧게 줄여주는 기술 세 가지를 소개하겠다. 1) 여러 메서드로..

Java 2023.03.24

[Effective Java] 아이템 50. 적시에 방어적 복사본을 만들라.

🎯 아이템 50. 적시에 방어적 복사본을 만들라. 클라이언트가 여러분의 불변식을 깨뜨리려 혈안이 되어 있다고 가정하고 방어적으로 프로그래밍해야 한다. * 기간을 표현하는 클래스 - 불변식을 지키지 못했다. public final class Period { private final Date start; private final Date end; /** * @param start 시작 시각 * @param end 종료 시각. 시작 시각보다 뒤여야 한다. * @throws IllegalArgumentException 시작 시각이 종료 시각보다 늦을 때 발생한다. * @throws NullPointerException start나 end가 null이면 발생한다. */ public Period(Date start..

Java 2023.03.24

[Effective Java] 아이템 49. 매개변수가 유효한지 검사하라.

🎯 아이템 49. 매개변수가 유효한지 검사하라. "오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다" 오류를 발생한 즉시 잡지 못하면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생 지점을 찾기 어려워 진다. 만약, 매개변수 검사를 제대로 하지 못하면 몇 가지 문제가 생길 수 있다. 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 매개변수 검사에 실패하면 실패 원자성을 어기는 결과를 낳을 수 있다. 실패 원자성 : 메서드에서 예외가 발생한 후에도 그 객체는 여전히 유효한 상태 public과 protected 메서드는 매개변수 값이 잘못됐을 때 던지는 예외를 문서화해야 한다. (@throws 자바독 태그를 사용하면 된다.) /** * (현재 값 mod m) 값을 반환한다. 이..

Java 2023.03.23

[Effective Java] 아이템 47. 반환 타입으로는 스트림보다 컬렉션이 낫다, 아이템 48. 스트림 병렬화는 주의해서 적용하라.

🎯 아이템 47. 반환 타입으로는 스트림보다 컬렉션이 낫다. 원소 시퀀스를 반호나하는 메서드를 작성할 때는, 이를 스트림으로 처리하기를 원하는 사용자와 반복으로 처리하길 원하는 사용자가 모두 있을 수 있음을 떠올리고, 양쪽을 다 만족시키려 노력하자. 컬렉션을 반환할 수 있다면 그렇게 하라. 하지만 단지 컬렉션을 반환한다는 이유로 덩치 큰 시퀀스를 메모리에 올려서는 안된다. 🎯 아이템 48. 스트림 병렬화는 주의해서 적용하라. 계산도 올바로 수행하고 성능도 빨라질 거라는 확신 없이는 스트림 파이프라인 병렬화는 시도조차 하지 말라. 주의점 데이터 소스가 Stream.iterate거나 중간 여산으로 limit를 쓰면 파이프라인 병렬화로는 성능 개선을 기대할 수 없다. 스트림의 소스가 ArrayList, Has..

Java 2023.03.23
728x90
반응형