들어가기 전 자바에서 Enum을 이용해서 효율적인 코딩을 할 수 있는 것처럼 파이썬에서도 Enum 클래스가 지원되기 시작했다. 사용법이 자바와는 조금 다른데, Enum 클래스를 사용하는 방법의 기초를 터득해보고자 한다. 요약하면 다음과 같다. Enum을 이용해서 타입을 표현할 수 있음. Enum을 이용해 인스턴스들을 표현할 수 있으며, 람다 함수와 함께 이용하면 응집력 있게 다형성을 구현할 수 있음. Enum을 이용해 타입을 표현할 수 있기 때문에 typing 라이브러리와 함께 사용했을 때, 파이썬을 좀 더 단단하게 만들 수 있음. (타입 힌트를 줄 수 있기 때문임) https://github.com/chickenchickenlove/solid-python/tree/main/chapter8 Enum을 사..
아이템 48. 스트림 병렬화는 주의해서 적용하라. 스트림 병렬화는 paralle() 메서드를 호출해서 할 수 있음. 스트림 병렬화를 할 때는 Spliterator 객체의 trySplit() 메서드를 호출해서 각 쓰레드별로 진행할 작업을 나눔. 객체별로 고유한 Spliterator가 구현되어 있지 않으면, Stream 클래스의 Spliterator를 사용함. 병렬 스트림이 효율적이지 않은 경우 작업을 효율적으로 나누지 못하는 경우. (Spliterator가 없는 경우, 자료구조가 적합하지 않은 경우) 데이터 소스로 Stream.iterate를 사용하는 경우. 스트림 중간에 limit()을 사용하는 경우 병렬 스트림이 효율적인 경우 작업 나누기 쉬운 자료구조 + 참조 지역성이 좋은 경우. 예를 들면 배열, ..
Collectors 요약 stream의 collect() 메서드에는 Collectors 패키지와 관련된 것들을 요구한다. 이 때, Collectors로 할 수 있는 일들을 간략히 요약하면 다음과 같다. counting maxBy, minBy summingInt, summingLong, summingDouble averagingInt, averagingLong, averagingDouble summarizingInt, summarizingLong, summarizingDouble joining toList, toSet, toCollection 다수준 그룹화 groupingBy, collectingAndThen 분할 partitioningBy Collector를 이용한 count() 연산 final User..
아이템 46. 스트림에는 부작용 없는 함수를 사용하라. 스트림은 함수형 프로그래밍의 패러다임을 의미한다. 이 패러다임을 받아들여야 Stream의 이점을 가져갈 수 있음. 스트림은 일련의 계산을 변환(Transforming)하며 순차적으로 처리한다. 일련의 계산들은 순수함수들에 의해서 처리되어야 함. forEach()를 이용해 외부 객체의 상태를 업데이트 하는 작업을 하지 마라. (순수함수가 아니게 됨) 대신, Stream Collectors가 제공하는 함수 객체들을 이용해 업데이트 대신 새로운 Collection을 만들어라. Stream을 사용할 때는, Collectors가 제공하는 함수 객체를 잘 사용하자. toMap() toSet() toCollection() groupingBy() groupingB..
메서드 이름을 신중히 짓자 메서드 이름을 지을 때는 항상 표준 명명 규칙을 따라야 함. of(), newInstance() 같은 것들. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는게 중요함. 클래스 / 인터페이스에 편의 메서드를 너무 많이 만들지 말자 메서드가 너무 많은 클래스는 사용/공부/문서화/테스트/유지보수하기 어려움. 인터페이스에 너무 많은 메서드가 존재하면, 구현하기 어려움. 매개변수 목록은 짧게 유지하자 매개변수는 4개 이하로 만들자. 그 이상이 되면, 메서드 호출에 어떤 매개변수가 필요했는지 기억하기 어려움. 만약 같은 타입의 매개변수가 연속되었을 때, 위치가 살짝 바뀌어도 컴파일되어 오류가 발생할 수 있음. 매개변수 목록을 짧게 줄여주는 방법 여러 메서드로 쪼개기 쪼개..