본문 바로가기

Reading

(65)
[Effective-Java] Item 53. 가변인수는 신중히 사용하라 가변인수 가변인수(varargs) 메소드는 명시한 타입의 인수를 0개 이상 받을 수 있는 기능이다. 가변인수 메소드를 호출하면 인수의 개수와 길이가 같은 배열을 만들고 인수들을 이 배열에 저장해 가변인수 메소드에 건넨다. static int sum(int... args) { int sum = 0; for (int arg : args) sum += arg; return sum; } public static void main(String[] args) { System.out.println(sum()); // 0 System.out.println(sum(1)); // 1 System.out.println(sum(1,2)); // 3 System.out.println(sum(1,2,3)); // 6 System..
[Effective-Java] Item 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(..
[Effective-Java] Item 51. 메소드 시그니처를 신중히 설계하라 메소드 이름을 신중히 짓자 항상 표준 명명 규칙을 따르자. 그리고 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는 것을 최우선으로 두자 그 다음 목표로 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하자. 긴 이름은 피하고, 애매하면 자바 라이브러리 API 가이드를 참조하자. 편의 메소드를 너무 많이 만들지 말자 메소드가 너무 많은 클래스와 인터페이스는 익히기, 문서화, 사용, 테스트, 유지보수를 어렵게한다. 클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메소드로 제공하자 자주 쓰일 경우에만 약칭 메소드를 두고, 확신이 서지 않으면 만들지 말자. 매개변수 목록은 짧게 유지하자 4개가 넘어가면 매개변수 기억이 힘들어져 IDE에 의존할 확률이 높으니, 가능한 4개 이하로 두자. ..
[Effective-Java] Item 50. 적시에 방어적 복사본을 만들라 자바라 해도 다른 클래스로부터 침범을 다 막을 수 있는 것은 아니다. 악의적 의도로 시스템 보안을 뚫으려할 수도 있지만, 프로그래머의 실수로 클래스를 오작동하게 만드는 경우가 흔하다. 따라서, 클라이언트가 불변식을 깨뜨리려 한다는 것을 가정하고 방어적으로 프로그래밍해야한다. 불변식을 지키지 못한 기간 표현 클래스 객체의 허락 없인 외부에서 내부를 수정하는 일은 불가능하다. 하지만 가능한 경우의 예를 살펴보자. 아래 예는 java.time 패키지의 Period 클래스가 아니라 커스텀하게 만든 클래스다! public final class Period { private final Date start; private final Date end; /** * @param start 시작 시각 * @param end..