728x90 Gayoung162 item 52. 다중 정의는 신중히 사용해라 다중 정의는 모두 아시죠? 다른 말로는 오버로딩이라는 친숙한 이름을 갖고있다. 오버로딩이 뭐였더라? 서로 다른 시그니처를 갖는 여러 메소드들이 같은 이름으로 정의되는 것 이다. 즉, 메서드명은 같지만 매개변수의 개수, 타입, 순서들이 다른 메서드들을 의미한다. 다중 정의된 메소드는 어느 메서드를 호출할 지가 컴파일 타임에 정해진다. public class item52 { public static void main(String[] args) { Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().values() }; for (Collection c : collections) { System.out.println(item52... 2022. 7. 10. item 51. 메서드 시그니처를 신중히 설계하라 API 설계 요령들 메서드 이름을 신중히 짓자. 항상 표준 명명 규칙을 따라야 한다. 편의 메서드를 너무 많이 만들지 말자. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다. 클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메서드로 제공해야 한다. 확신이 서지 않으면 만들지 말아라 매개변수 목록은 짧게 유지하자. 4개 이하가 좋다. 같은 타입의 매개변수 여러개가 연달아 나오는 경우는 해롭다. 과하게 긴 매개변수 목록을 짧게 줄여주는 기술 3가지 여러 메서드로 쪼개기 매개변수 여러 개를 묶어주는 도우미 클래스를 만들기(일반적으로 정적 멤버 클래스) 객체 생성에 사용한 빌더 패턴을 메서드 호출에 응용한다. (매개변수가 많고 그 중 일부를 생략해도 괜찮을 때.. 2022. 7. 10. item 50. 적시에 방어적 복사본을 만들라 자바 : 안전한 언어! 네이티브 메서드를 사용하지 않기 때문이라고 한다. 네이티브 메서드를 사용하지 않기 때문에 버퍼/배열 오버런, 와일드 포인터와 같은 메모리 충돌 오류에서 안전하다고 한다. 자바로 작성한 클래스에서는 시스템의 다른 부분에서 무슨 짓을 하든 그 불변식이 지켜진다. 따라서 메모리 전체를 하나의 거대한 배열로 다루는 언어에서는 누릴 수 없는 강점이다. (자바의 강점이 뭘까? 라고 하면 얘를 대답하면 좋지 않을까 해서 적어봄) 네이티브 메서드가 뭘까?.? 네이티브 메소드란? 네이티브 메소드는 자바가 아닌 다른 언어로 구현된 메소드라고 한다. 네이티브 메소드 앞에는 native 키워드가 붙어있다! 더 찾아보려 했는데 item 66에서 다루더라? 그래서 더 찾아보지는 않았다. 시스템 보안을 뚫으.. 2022. 7. 10. item 49. 매개변수가 유효한지 검사하라 메서드와 생성자 대부분은 매개변수의 값을 정하는 데 제약을 주는데, 이는 가능한 한 오류를 빠르게 잡아야 하기 때문이다. 따라서 메서드 몸체가 실행되기 전에 매개변수를 확인하여 즉각적으로 예외를 던질 수 있게 해야한다. 매개변수 검사를 제때 하지 못하면 몇 가지 문제가 발생할 수 있다. 1. 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 2. 메서드가 잘 수행되지만 잘못된 결과를 반환할 수 있다. 3. 메서드는 문제없이 수행됐지만, 어떤 객체를 '이상한' 객체로 만들어 미래에 알 수 없는 시점에 해당 메서드와 관련 없는 오류를 낼 수 있다. 즉, 매개변수 검사에 실패하면 실패 원자성(failure atomicity)를 어기는 결과를 낳을 수 있다. public, protected 제어자.. 2022. 7. 7. item 48. 스트림 병렬화는 주의해서 적용해라 자바 5부터는 동시성 컬렉션인 java.util.concurrent 라이브러리와 실행자(Executor) 프레임워크를 지원했다. 자바 7부터는 고성능 병렬 분해 프레임워크인 포크-조인 패키지를 추가했다. 포크조인(ForkJoin) 프레임워크는 병렬 처리를 위한 모델이고 분할 정복 알고리즘을 통해서 재귀적으로 처리 자바 8부터는 parallel 메서드만 한 번 호출하면 파이프라인을 병렬 실행할 수 있는 스트림을 지원했다. 병렬 스트림은 요소들을 병렬 처리하기 위해 포크조인(ForkJoin) 프레임워크를 사용 이처럼 자바로 동시성 프로그램을 작성하기가 점점 쉬워지고는 있지만, 이를 올바르고 빠르게 작성하는 일은 여전히 어려운 작업이다. 스트림 병렬화의 문제점. 데이터 소스가 Stream.iterate거나 중.. 2022. 7. 2. item 47. 반환 타입으로는 스트림보다 컬렉션이 낫다 자바는 7까지 원소 시퀀스(일련의 원소)를 반환하는 메서드의 반환 타입으로 Collection, List, Set 등의 컬렉션 인터페이스나 Iterable 배열을 사용했다. 기본은 Collection 인터페이스다. forEach에서만 쓰이거나, contains같은 일부 collection 메소드를 구현할 수 없을 때는 Iterable을 썼고, 기본 타입이거나 성능에 민감할 때는 배열을 사용했다. 그런데? 자바 8에서 스트림이 생기면서, 선택지가 복잡해졌다. item 45에서 봤듯이 stream은 반복을 지원하지 않는다. forEach같은 애들은 List, Set과 같은 Iterable구현체에 대해서만 사용이 가능하다.따라서 스트림과 반복을 적절히 섞어야 좋은 코드가 된다. 여기서 재미없는 사실 하나! 사.. 2022. 7. 2. 이전 1 2 3 4 5 6 7 8 ··· 27 다음 728x90