최근에 코딩 테스트를 보는 일이 자주 있었다. 코딩 테스트를 자바로 봤을 때 느낀 점 하나를 적어보려 한다.
기업 입사 코딩테스트, 부트캠프 선발 코딩 테스트 등 코딩 테스트를 보는 목적에 따라서 난이도가 다를 것이라고 생각한다.
그러나 어떤 코테를 보든지 간에 코딩 테스트를 잘 준비하는 방법 중 하나는 내가 사용하려고 하는 언어에 대한 이해도가 있어야 한다는 것이다.

예를들어, 자바의 Stream API는 자바8부터 추가된 새로운 API로 함수형 언어의 특징과, 스트림 연산을 사용가능하게 했다.
자바의 버전이 점점 업그레이드 되면 될수록 Stream API도 업그레이드가 됨을 느꼈다.
(실제로 자바8로 보는 코테와 자바17로 보는 코테는 사용할 수 있는 Stream 관련 메소드 등이 달랐다.)
이에 따라서 내가 응시하는 코딩 테스트의 자바 버전에 대해서도 숙지할 필요가 있으며, 해당 버전의 자바가 어떤 특징들이 있었는지, 어떤 표준 API들을 사용할 수 있는지 등에 대해 공부를 해놓아야 한다.
- JAVA 8
Stream -> List로 변환하기 위해서는stream().collect(Collectors.toList());이렇게 작성할 수 있다.- JAVA 16
Stream -> List로 변환하기 위해서는 default 메소드인 toList()를 사용하여 보다 간단하게stream().toList();이렇게 작성할 수 있다. (하지만 불변 리스트를 반환한다.)
또 하나 느낀점은, 내가 사용하려고 하는 클래스가 어떤 패키지에 존재하는지 알아야 한다는 것이다.
예를 들어 입/출력 속도를 향상 시키기 위해서 BufferedReader를 사용해야 한다면 java.io 패키지를 import 해야 한다.
프로그래머스나 자체 코딩 테스트 플랫폼을 운영하는 기업의 경우에 패키지에 대한 자동 import 를 해주지 않는 것을 경험했다.
인텔리제이에서 코딩할 때는, 별도로 import를 해주지 않아도 자동으로 import를 해주므로 어떤 패키지에 어떤 클래스가 존재하는지 신경쓰지 않았는데
코딩 테스트를 잠깐 준비하면서 어떤 패키지에 어떤 클래스가 존재하는지도 공부하는 계기가 되었다.
패키지 이름을 공부하다보면, 패키지 이름의 의미에 대해서 곰곰히 생각해보기도 한다.
java.util 패키지의 경우에는 자바에서 사용하는 유틸 클래스 및 자료구조들 Arrays, Collections 등이 존재하고
입출력 관련 클래스들은 java.io 패키지에 존재한다. 또한 JAVA 8에 추가된 Stream API는 java.util.stream 패키지에 존재한다.
패키지 이름과 구조에 대해서도 고민을 해보면 왜 이렇게 이름을 지었는지에 대한 설계자의 생각을 잠깐이나마 엿볼 수 있는 것 같다.
import java.util.*의 경우 java.util 패키지에 있는 하위 클래스들을 모두 import 해주는데, 대신java.util.stream.*패키지에 있는 클래스까지는 import 해주지 않는다. 그래서 별도로import java.util.stream.*이라고 추가해주어야 한다.