회고

20220516 TIL #for, stream, 어떤 방식으로 구현할 것인가

paran21 2022. 5. 16. 22:16

<오늘 공부한 것>

  • JPA 강의 듣기
  • 자바의 정석 공부
  • 소프트웨어 장인 읽는 중

요즘에는 항해 하면서 급하게 기능을 구현하느라 제대로 공부하지 못한 개념들(JPA, 자바 등등)을 정리하는 중인데 생각만큼 속도가 나가지 않는 것 같다.

아무래도 일을 시작하고 나니 조급함이 많이 생긴다.

빨리 팀에 도움이 되고 싶고, 일이 주어졌을 때 더 잘 해내고 싶다.

 

그래서 간단하게 라도 TIL을 쓰기 위해 노력해야겠다.

마음이 급해지니 짧게라도 오늘 한 것을 남기면서 리마인드하고, 페이스를 조절해야 겠다.


지난주에 작성한 코드 중에 Enum에서 선언한 String을 Enum으로 변환하는 코드가 있었다.

예를 들면, DEPOSIT("입금")에서 "입금"을 DEPOSIT으로 변환하는 것을 구현했다.

구글링 한 코드를 참고하여 for문으로 해당 Enum.value()를 돌면서 일치하는 값을 찾는 방식으로 구현했는데, 다른 분에게 어떻게 구현할 것 같냐고 물어봤다.

그분이 구현한 방식은 stream의 filter를 사용해서 해당하는 값(조건은 동일하다)을 반환하는 것이었다.

 

여기서 다시 의문이 생겼는데,

동일한 기능을 구현하는 여러가지 방식 중 어떤 것을 선택할 때, 이 선택의 기준은 무엇일까?

이전에 자바로 알고리즘을 구현하면서도 for문과 stream 중 어떤 방식을 택해야 하는지 고민한 적이 있다.

for문이 더 속도가 빠르다는 글도 봤고(내가 푼 알고리즘 문제 중에도 있었다), 또 어떤 경우에는 stream이 더 낫다는 글도 봤다.

 

이런 성능적인 부분이 판단에 중요한 기준이 될까?

 

내가 이번에 내린 결정은 stream을 사용하는 것이었다.

일단 성능적인 부분은 내가 충분히 이해하지 못해서 우선 건너뛰고,

1) 에러 처리 부분과 가독성, 2) 프로젝트의 코드 스타일을 고려했다.

 

먼저, 1) 에러 처리 부분은 일단 stream을 사용하면 메서드의 결과를 stream으로 리턴하면서 조건을 만족하지 못하면 바로 Exception을 던지도록 코드를 구현할 수 있었다. 그리고 에러처리 부분 까지 포함해서 가독성이 좋다고 느꼈다.

for문을 사용해도 try catch 등을 사용해서 에러 처리가 가능하지만, stream이 더 간결하게 코드를 작성할 수 있다고 생각했다.

 

하지만 더 크게 고려한 건 2) 프로젝트의 코드 스타일이다.

현재 우리 프로젝트에서 코드 스타일을 엄밀히 맞춰서 진행하고 있지는 않은데, 나를 제외한 나머지 분들의 코드를 살펴보면 stream 등 전반적으로 함수형 프로그래밍을 많이 사용하는 것을 보았다.

성능에서 크게 문제가 없다면, 어느 정도 코드 스타일을 맞추는 것이 이후 유지보수 측면에서도 도움이 될 거라고 생각했다.