728x90
반응형

Effective Java 67

[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

[Effective Java] 아이템 46. 스트림에서는 부작용 없는 함수를 사용하라.

🎯 아이템 46. 스트림에서는 부작용 없는 함수를 사용하라. 스트림 파이프라인 프로그래밍의 핵심은 부작용 없는 함수 객체에 있다. 스트림뿐 아니라 스트림 관련 객체에 건네지는 모든 함수 객체가 부작용이 없어야 한다. 종단 연산 중 forEach는 스트림이 수행한 계산 결과를 보고할 때만 이용해야 한다. 계신 자체에는 이용하지 말자. 스트림을 올바로 사용하려면 수집기를 잘 알아둬야 한다. 가장 중요한 수집기 팩터리는 toList, toSet, toMap, groupingBy, joining이다. Collectors /** * Collectors */ List integerList = Stream.of(3, 5, -3, 3, 4, 5).collect(java.util.stream.Collectors.toLi..

Java 2023.03.22

[Effective Java] 아이템 45. 스트림은 주의해서 사용하라.

🎯 아이템 45. 스트림은 주의해서 사용하라. 스트림 API는 다재다능하여 사실상 어떠한 계산이라도 해낼 수 있다. 하지만 할 수 있다는 뜻이지, 해야 한다는 뜻은 아니다!! 스트림을 제대로 사용하면 프로그램이 짧고 깔금해지지만, 잘못 사용하면 읽기 어렵고 유지보수도 힘들어진다. 사전 하나를 훑어 원소 수가 많은 아나그램 그룹들을 출력한다. public class IterativeAnagrams { public static void main(String[] args) throws IOException { String[] sArr = new String[]{"abc","euq","test","zzfq","que","acb"}; int minGroupSize = Integer.parseInt("1"); Ma..

Java 2023.03.22
728x90
반응형