함수형 프로그래밍 : 메서드를 수학 함수처럼 취급하는 컴퓨터 프로그래밍 형식이다. 함수형 프로그래밍에서는 가변 상태와 데이터 변경을 피한다.
함수형 프로그래밍 in 자바 : 람다 표현식, 스트림 API, 컬렉터 API, Optional 클래스 등이 함수형 프로그래밍 구현에 도움을 준다.
자바8 이전에는 큰 데이터 컬렉션에서는 효과적으로 병렬 연산을 수행할 수 없었지만, 자바8부터는 복잡한 컬렉션 처리 알고리즘을 구현할 수 있으며, 메소드 호출 방식을 살짝 바꿔 멀티코어 CPU를 효율적으로 활용할 수 있다. 이를 위해선 람다 표현식이 필요하다.
객체지향 프로그래밍 vs 함수형 프로그래밍 : 추상화에 대한 대상이 다른데, 객체지향 프로그래밍에서는 데이터를 추상화하는 것을 얘기하지만, 함수형 프로그래밍에서는 동작을 추상화하는데 초점을 맞춘다.
람다 표현식에 대한 정의는 3장 주요 내용 정리 (tistory.com)에 있다.
public interface ExamInterface{
bool test(int n);
}
ExamInterface testLamda = (n) -> {return true;};
위와 같이 람다 표현식을 사용한다면 인터페이스를 구현한 객체를 반환할 수 있다.
람다 표현식에서 다른 함수를 호출할 때 같은 인자를 건네줘야하는 상황이 발생할 수 있다. 이 때 중복되는 코드가 있으므로 이를 방지하기 위한 메소드 참조라는 방법이 있다.
☕ 람다식을 더 짧게 - 메소드::참조 문법 (tistory.com)
☕ 람다식을 더 짧게 - 메소드::참조 문법
람다식 메소드::참조 자바의 람다표현식을 통해 코드 정의를 혁신적으로 줄여주었지만 이보다 더 간략하게 줄이는 문법이 있다. 메소드 참조(Method Reference)는 말 그대로 실행하려는 메소드를 참
inpa.tistory.com
자세한 설명은 위 블로그를 참고하길 바란다.
다음으로는 스트림에 대해 설명하겠다.
자바의 가장 중요한 함수형 프로그래밍 기능은 컬렉션 API와 스트림에 중점을 둔다. 스트림 덕분에 루프를 사용하지 않고 높은 수준으로 컬렉션 처리 코드를 추상화할 수 있다.
- map() : 어떤 형식의 값을 포함하는 스트림을 다른 형식의 값의 스트림으로 변환할 때 활용한다.
- foreach() : 스트림의 각 요소를 돌면서 특정 작업을 수행할 때 활용한다.
- filter() : 스트림의 각 요소를 돌면서 if문을 적용하는 상황에 활용한다.
3가지 모두 인수가 하나씩 필요하다.
[Java] 스트림(Stream) 정리 (velog.io)
[Java] 스트림(Stream) 정리
자바로 배열 또는 컬렉션 객체를 다룰 때 IDE의 추천 메소드에는 stream()이 항상 있었다. 하지만 for문이나 향상된 for문으로도 충분히 원하는 결과를 이끌어낼 수 있어서 매번 지나쳤던 기억이 있
velog.io
자세한 설명은 위 블로그를 참고하기 바란다.
의존관계 역전(DIP) : SOLID의 D를 맡고있는 원칙으로, 객체에서 어떤 Class를 참조해서 사용해야하는 상황이 생긴다면, 그 Class를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상 클래스 or 인터페이스)로 참조하라는 것을 말한다.
예를 들어 헥사고날 아키텍처에서 accessAdapter와 service가 객체를 뜻하며, 포트가 상위 요소, accessAdapter에 대해 service가 Class, service에 대해 repositoryAdapter가 Class이다.
'실전 자바 소프트웨어 개발' 카테고리의 다른 글
Hexagonal Architecture (1) | 2024.07.01 |
---|---|
6장 주요 내용 정리 (0) | 2024.06.29 |
5장 주요 내용 정리 (0) | 2024.06.27 |
4장 주요 내용 정리 (0) | 2024.05.28 |
3장 주요 내용 정리 (0) | 2024.05.26 |