자바(46)
-
[모던 자바 인 액션] chap19. 함수형 프로그래밍 기법
내용 일급 시민, 고차원 함수, 커링, 부분 적용 영속 자료구조 자바 스트림을 일반화하는 게으른 평가와 게으른 리스트 패턴 매칭, 자바에서 패턴 매칭을 흉내 내는 방법 참조 투명성과 캐싱 1. 함수는 모든 곳에 존재한다 함수형 언어 프로그래밍이란 함수를 마치 일반값처럼 사용해서 인수로 전달하거나, 결과로 반환받거나, 자료 구조에 저장할 수 있음을 의미한다. 일반값처럼 취급할 수 있는 함수를 일급 함수라고 한다. 자바 8에서는 :: 연산자로 메서드 참조를 만들거나 (int x) -> x + 1 같은 람다 표현식으로 직접 함숫값을 표현해서 메서드를 함숫값으로 사용할 수 있다. Function shortToInt = Integer::parseInt; // 자바 8에서는 이렇게 메서드 참조로 Integer.pa..
2023.04.06 -
[모던 자바 인 액션] chap18. 함수형 관점으로 생각하기
내용 왜 함수형 프로그래밍을 사용하는가? 함수형 프로그래밍은 어떻게 정의하는가? 선언형 프로그래밍과 참조 투명성 함수형 스타일의 자바 구현 가이드 라인 반복과 재귀 1. 시스템 구현과 유지보수 함수형 프로그래밍이 제공하는 부작용 없음과 불변성이라는 개념이 유지보수의 문제를 해결하는데 도움을 준다. 1. 공유된 가변 데이터 변수가 예상하지 못한 값을 갖는 이유는 결국 우리가 유지보수하는 시스템의 여러 메서드에서 공유된 가변 데이터 구조를 읽고 갱신하기 때문이다. 어떤 자료구조도 바꾸지 않는 시스템이 있다고 가정하자. 예상하지 못하게 자료구조의 값이 바뀔 일이 없으니 얼마나 유지보수하기 쉽겠는가! 자신을 포함하는 클래스의 상태 그리고 다른 객체의 상태를 바꾸지 않으며 return 문을 통해서만 자신의 결과를..
2023.04.05 -
[모던 자바 인 액션] chap13. 디폴트 메서드
내용 디폴트 메서드란 무엇인가? 진화하는 API가 호환성을 유지하는 방법 디폴트 메서드의 활용 패턴 해결 규칙 전통적인 자바에서 인터페이스와 관련 메서드는 한 몸처럼 구성된다. 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드 구현을 제공하거나 아니면 슈퍼 클래스의 구현을 상속받아야 한다. 기존의 List 인터페이스를 구현했던 모든 프로그래머가 sort 메서드를 구현하도록 List 인터페이스를 상속ㄴ한 모든 클래스를 고쳐야 한다고 발표한다면 당황스러울 것이다. 하지만 걱정 할 필요 없다! 자바 8 에서는 이 문제를 해결하는 새로운 기능을 제공한다. 1. 변화하는 API 이미 릴리즈된 인터페이스를 고치면 어떤 문제가 발생하는지 살펴보자. 1. API 버전 1 public interface ..
2023.03.30 -
[모던 자바 인 액션] chap12. 새로운 날짜와 시간 API
내용 자바 8에서 새로운 날짜와 시간 라이브러리를 제공하는 이유 사람이나 기계까 이해할 수 있는 날짜와 시간 표현 방법 시간의 양 정의하기 날짜 조작, 포매팅, 파싱 시간대와 캘린더 다루기 자바 8에서는 지금까지의 날짜와 시간 문제를 개선하는 새로운 날짜와 시간 API를 제공한다. 자바 1.0에서는 java.util.Date 클래스 하나로 날짜와 시간 관련 기능을 제공했다. 날짜를 의미하는 Date라는 클래스의 이름과 달리 Date 클래스는 특정 시점을 날짜가 아닌 밀리초 단위로 표현한다. 게다가 1900년을 기준으로 하는 오프셋, 0에서 시작하는 달 인덱스 등 모호한 설계로 유용성이 떨어졌다. Date date = new Date(117, 8, 21); // 출력 결과 : Thu SEp 21 00:00..
2023.03.27 -
[모던 자바 인 액션] chap09. 리팩터링, 테스팅, 디버깅
내용 람다 표현식으로 코드 리팩터링하기 람다 표현식이 객체지향 설계 패턴에 미치는 영향 람다 표현식 테스팅 람다 표현식과 스트림 API 사용 코드 디버깅 1. 가독성과 유연성을 개선하는 리팩터링 9.1절에서는 지금까지 배운 람다, 메서드 참조, 스트림 등의 기능을 이용해서 더 가독성이 좋고 유연한 코드로 리팩터링하는 방법을 설명한다. 1. 코드 가독성 개선 9장에서는 람다, 메서드 참조, 스트림을 활용해서 코드 가독성을 개선할 수 있는 간단한 세 가지 리팩터링 예제를 소개한다. 익명 클래스를 람다 표현식으로 리팩터링하기 람다 표현식을 메서드 참조로 리팩터링하기 명령형 데이터 처리를 스트림으로 리팩터링하기 2. 익명 클래스를 람다 표현식으로 리팩터링하기 모든 익명 클래스를 람다 표현식으로 변환할 수 있는 ..
2023.03.21 -
[모던 자바 인 액션] chap06. 스트림으로 데이터 수집
내용 Collectors 클래스로 컬렉션을 만들고 사용하기 하나의 값으로 데이터 스트림 리듀스하기 특별한 리듀싱 요약 연산 데이터 그룹화와 분할 자신만의 커스텀 컬렉터 개발 Map transactionsByCurrencies = new HashMap(); for (Transaction transaction : transactions) { Currency currency = transaction.getCurrency(); List transactionsForCurrency = transactionsByCurrencies.get(currency); if (transactionsForCurrency == null) { transactionsForCurrency = new ArrayList(); transact..
2023.03.07