본문 바로가기

분류 전체보기48

[모던 자바 인 액션] 8장. 개선된 컬렉션 API 🍎 팩토리 메서드 of 메서드로 List, Set, Map을 생성할 수 있다. List.of("A","B","C"); Set.of("A","B","C"); Map.of("key1", "val1", "key2", "val2"); List.of()는 파라미터 10개까지는 오버로딩한 메서드를 사용하고, 10개 이상은 가변 인수를 사용한다. 이는 가변 인수는 배열을 생성 후 리스트로 감싸는데, 이 때 할당된 배열은 가비지 컬렉션의 비용이 들기 때문이다. 🍎 List removeIf : true면 제거하기 // 숫자로 시작하면 삭제하기 transactions.removeIf(tx -> Character.isDigit(tx.getReferenceCode().charAt(0))); replaceAll : 리스트의 요.. 2023. 7. 28.
[오브젝트] 3장. 역할, 책임, 협력 객체지향 설계를 할 때는 역할, 책임, 협력 이 세 요소가 조화롭게 이뤄져야 한다. 각 요소가 어떤 개념을 가지는지 알아보고, 이 세 가지를 이용하여 객체지향 설계를 어떻게 해야하는지 알아보자. 협력 객체지향은 협력하는 객체들의 공동체라고 했다. 객체를 설계할 때 처음으로 해야 할 것은 어떤 협력이 이루어지는가를 파악하는 것이다. 따라서 협력이 설계의 문맥을 결정한다. '어떤 협력을 할 것인가'가 행동을 결정하고, 행동이 상태를 결정한다. ex) 영화 예매하기 기능을 구현하려고 한다. 여기선 영화 예매라는 협력이 이루어이고, '예매하라'라는 행동이 필요하다. 그리고 이 행동을 하기 위해선 '상영 시간, 기본 요금'이라는 상태가 필요하다. 책임 어떤 협력을 할 것인가를 결정했으면, 이제 책임을 파악하고, .. 2023. 7. 27.
[모던 자바 인 액션]6장. Collector 인터페이스 활용 예제 1. reverse 구현 public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5); List result = numbers.stream() .collect(new ReverseCollector()); System.out.println(result); // [5, 4, 3, 2, 1] } package modernjavainaction.chap06; import java.util.*; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.u.. 2023. 7. 21.
[모던 자바 인 액션] 7장. 병렬 데이터 처리와 성능 병렬 스트림으로 병렬 처리하기 병렬 스트림의 성능 분석 포크/조인 프레임워크 Spliterator로 스트림 데이터 쪼개기 🍎병렬 스트림 parallelStream을 호출하면 병렬 스트림이 생성된다. 반대로 sequential을 호출하면 순차 스트림으로 바꾼다. 마지막에 호출한 메서드를 기준으로 병렬인지, 순차인지 판단할 수 있다. 병렬 스트림은 내부적으로 ForkJoinPool을 사용한다. 병렬화를 이용하려면 스트림을 재귀적으로 분할해야 하고, 각 서브 스트림은 다른 스레드에 할당하여 연산하고, 이들의 결과를 하나로 합쳐야한다. 즉 많은 비용이 발생한다. 스트림 성능 측정 성능을 최적화할 때 세 가지 황금 규칙이 있다. 첫째도 측정, 둘째도 측정, 셋째도 측정!! jmh 라이브러리를 추가하고, 벤치마크를.. 2023. 7. 21.
[모던 자바 인 액션] Collectors 클래스 6장에서 배운 것 Collectors 클래스로 컬렉션 만들고 사용하기 스트림 리듀스 특별한 리듀싱 요약 연산 데이터 그룹화와 분할 커스텀 컬렉터 🍎Collector 스트림 전체는 reduce(), 그룹별로 나눠 사용할 때는 collect() 메서드를 사용한다. collect메서드의 파라미터는 Collector 인터페이스이다. Collector 인터페이스의 구현 클래스 Collectors 클래스가 있다. 🍎 Collectors의 메서드 정리 요약 연산 - summingInt, averagingInt, summarizingInt summingInt, summingDouble 등 : 값을 누적하여 더한다. averagingInt, averagingDoublre 등 : 평균값 계산 summarizingInt, .. 2023. 7. 14.
[객체지향의 사실과 오해] 6장 객체지도, 7장 함께 모으기 6장 객체 지도 기능 설계 vs 구조 설계 설계 시 두 가지 측면의 설계가 필요하다. 기능 설계는 유스케이스 모델링을 사용하며, 유스케이스란 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 텍스트로 표현한 것이다. 기능은 책임을 수행하는 시스템의 행위로 표현한다. 구조 설계는 도메인 모델링을 사용하며, 도메인이란 프로그램을 사용하는 대상 분야를 의미한다. 구조는 도메인에 관해 생각하는 개념들과 개념들간의 관계로 표현한다. 기능과 구조의 통합 책임-주도 설계 방법은 시스템의 기능을 역할과 책임을 수행하는 객체들의 협력 관계로 바라보고, 유스케이스와 도메인 모델을 통합한다. 우선 사용자의 관점에서 시스템의 기능을 명시하고(유스케이스), 사용자와 설계자가 공유하는 안정적인 구조(도메인 모델)를 만들어야 한다... 2023. 7. 7.