Java/Effective Java
-
[Effective Java] Item 51. 메서드 시그니처를 신중히 설계하라Java/Effective Java 2020. 10. 13. 23:39
좋은 메서드 시그니처를 설계하는 방법 메서드 이름을 신중히 짓자 항상 표준 명명 규칙을 따르는 것이 좋습니다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표입니다. 그다음 목표는 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하는 것입니다. 긴 이름은 하는 것이 좋습니다. 편의 메서드를 너무 많이 만들지 말자 모든 메서드는 각각 자신의 소임을 다해야 합니다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵습니다. 인터페이스도 마찬가지입니다. 클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메서드로 제공해야 합니다. 아주 자주 쓰일 경우에만 별도의 약칭 메서드를 두되, 확신이 서지 않으면 만들지 않는 것이 좋습니다. 매..
-
[Effective Java] Item 50. 적시에 방어적 복사본을 만들라Java/Effective Java 2020. 10. 9. 14:13
자바는 JVM이 메모리를 관리해주는 안전한 언어입니다. 덕분에 특별한 노력없이 메모리를 관리하고, 시스템의 다른 부분에서 불변식을 지킬 수 있습니다. 하지만 아무런 노력없이 다른 클래스로부터의 침범을 막을 수 있는건 아닙니다. 이를 예방하기 위해서 클라이언트가 불변식을 깨뜨리는 것을 막을 수 있도록 방어적으로 프로그래밍해야 합니다. import java.util.Date; public final class Period { private final Date start; private final Date end; public Period(Date start, Date end) { if (start.compareTo(end) > 0) throw new IllegalArgumentException( start ..
-
[Effective Java] Item 49. 매개변수가 유효한지 검사하라Java/Effective Java 2020. 10. 7. 01:06
메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 기대합니다. 예를 들어 인덱스 값은 음수이면 안 되며, 객체 참조는 null이 아니어야 한다는 식입니다. 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 합니다. "오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다"는 일반 원칙의 한 사례이기도 합니다. 오류를 발생한 즉시 잡지 못하면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생 지점을 찾기 어려워 집니다. 매개변수 검사를 제대로 하지 못하면 생기는 문제점 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있습니다. 더 나쁜 상황은 메서드는 문제없이 수행됐지만, 어떤 객체를 이상한 상태로 만들어놓아서 미래의 알 수 없는 시점에 이 메서드..
-
[Effective Java] Item 48. 스트림 병렬화는 주의해서 적용하라Java/Effective Java 2020. 9. 30. 17:25
동시성 프로그래밍 자바 8부터 parallel() 메서드만 한 번 호출하면 파이프라인을 병렬 실행할 수 있는 스트림을 지원하기 시작했습니다. 동시성 프로그래밍을 할 때는 안전성(safety)과 응답 가능(liveness) 상태를 유지해야 하는데, 병렬 스트림 파이프라인 프로그래밍에서도 다르지 않습니다. import java.math.BigInteger; import java.util.stream.Stream; import static java.math.BigInteger.ONE; import static java.math.BigInteger.TWO; public class MersenneMain { public static void main(String[] args) { primes().map(p -> ..