항해99

항해 99 - 2023.03.09 TIL

나도관 2023. 3. 9. 23:00

오늘로 클론 코딩 프로젝트를 마무리 짓게 되었다.

 

백엔드 기능구현이 일찍 끝나게 되어서 비교적 여유있게 보낸 한 주였다.

 

남는 시간에 그동안 미루어두었던 람다와 스트림에 대한 학습을 진행했다.

 

 

람다식

람다식은 자바의 클래스 종속적인 함수를 간편화해서 나타내는 방법으로 이해했다.

int max(int a, int b){
	return a > b ? a : b;
}

>>>> 이름이 없는 익명 함수
(a,b) -> a > b ? a : b

 

 

함수를 사용하기 위해 객체를 담고있는 참조변수가 필요한데, 람다식을 다루기 위해 사용되는 공통적인 함수형 인터페이스가 존재한다.

 

자바에는 이러한 함수형 인터페이스를 모아둔  java.util.function 패키지가 존재한다.

 

람다식에 사용할 매개변수와 리턴값에 따라 function 패키지 내 인터페이스를 사용하여 참조해주면 람다식을 사용할 수 있다.

 

//선언
Function<String, Integer> f = (String s) -> Integer.ParseInt(s);

호출은 각 인터페이스에 들어있는 메서드를 사용하면 된다.

 

이 때, 람다식에서 사용될 매개변수와, 인자를 알고있다면 메서드 참조로 전환이 가능하다.

 

//선언
Function<String, Integer> f = (String s) -> Integer.ParseInt(s);

// 메서드 참조
Function<Strirng, Integer> f = Integer::parseInt;

 

 

스트림

스트림은 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것이다.

 

스트림의 연산 과정은 다음과 같다.

 

1. 스트림 만들기

2. 중간 연산

3. 최종 연산 > 결과

 

어떠한 데이터 소스로부터 스트림을 생성하면, 일회성으로 사용이 가능하다.

소스로 부터 중간연산 코드를 수행하고, 최종적으로 스트림의 요소를 소모하여 결과값을 뱉어낸다.

 

결과값을 뱉어낸 후에는 스트림이 닫히므로, 재사용하려면 다시 스트림을 생성해주어야 한다.

 

중간 연산과 최종 연산에 사용하는 함수들은 여러 개가 있으므로 필요에 따라 골라서 사용하면 될 것 같다.

 

어떻게 설계하느냐에 따라서 사용 범위가 무궁무진 할 것 같다는 생각이 들었다.

 

 

느낀 점

다른 조에서 진행한 프로젝트를 보니, 더 공부해야할 주제들이 여럿 보였다.

JPA의 N+1 문제라던지, 지난 번에 실패한 CI / CD 등 부족한 부분이 어딘지 체크할 수 있었다.

 

이번에도 서버를 담당하고 싶다는 팀원이 있어 서버를 담당하지 못했었는데, 다음 프로젝트 때는 꼭 서버를 담당해서 CI/CD 까지 구현해낼 수 있도록 해야겠다.

 

항해를 시작하고 실전 프로젝트만을 바라보고 달려왔는데, 시간이 참 빠르게 흘러간 것 같다. 지금까지 공부해 온 것들이 헛되지 않도록 욕심내서 좋은 결과물을 만들어낼 수 있도록 정진해야겠다.