2021-10-30-TIL

Today I Learned

Effective Java

오늘 이펙티브 자바 스터디에서는 아이템 31, 32, 33을 서로 발표하였다. 아이템 31에서 제네릭의 한계와 자바에서는 와일드 카드를 사용하여 이를 어떻게 극복하였는지 보여준다. 아이템 32에서는 가변인수와 제네릭을 함께 쓸 때는 잘 설계해서 안전한 메서드를 작성한 뒤, @SafeVarargs를 달아서 신뢰할 수 있도록 하라는 것이다. 마지막으로 아이템 33은 스프링의 DI 컨테이너(또는 IoC 컨테이너)를 구현하는 일종의 디자인 패턴으로, Map<Class<?>, Object>와 같은 형태로 컨테이너를 만들어서 다양한 타입을 지원할 수 있도록 한다. 이 부분은 다른 언어와는 다르게 자바에서는 매우 특별한 기술이다. 좀 더 학습하기 위해서 스프링의 컨테이너 관련 소스코드를 살펴보고, 다른 언어와의 비교도 해 보아야겠다.

네이버 파이낸셜 1차 코딩테스트

네이버 파이낸셜은 데브매칭에서 지원했는데, 또 공채가 뜨길래 추가로 지원해서 1차 코딩테스트에 응시하였다. 내가 느낀 바로는 데브매칭 보다는 난도가 좀 더 높았다. 문제는 총 4개 였으며 모두 알고리즘 문제였다. 어김없이 Map을 활용하여 Map<String, Integer> 카운트로 풀 수 있는 문제가 한 문제, 백엔드 데브매칭과 마찬가지로 그놈의 숫자 달팽이 응용 한 문제, Map을 쓰든 클래스를 별도로 구현하든 중복을 제거하면서 학생들의 정답배열을 각각 비교해서 부정행위자를 식별하는 문제(완전탐색 + 구현), 가중치가 있는 이차원 배열에서 목적지까지 가는 최대점수를 구하는 문제(아마도 그리디 or 구현) 까지 총 4문제가 출제되었다.

Map을 쓰거나 클래스를 구현해서 푸는 구현 문제는 어떻게든 풀었는데, 이차원 배열과 달팽이 같은 문제는 매번 나오는데 매번 시도조차 하지 않는 것 같다. 달팽이 문제는 네이버 관련 계열사나 데브매칭에는 매우 자주 등장하는 것 같은데, 달팽이 뿐만 아니라 이차원 배열 상에서 대각선으로 움직인다던지, 대칭이동 한다던지 하는 시뮬레이션 문제가 무조건 나오는 것 같다. 이런 문제는 삼성에서 많이 본 것 같은데, 이제는 여기저기에서 많이 등장한다.

한편, 순열을 구하는 메서드나 자바에서 자주 나오는 유형이지만 일일이 찾아보아야 하는 문법은 미리 숙지해두어야겠다. 이번에는 다행히 검색이나 IDE 복붙이 허용되어서 편하게 풀었지만, 대부분의 시험에서는 그런 것들이 허용되지 않는다.

Tomorrow I'll Learn

  • 스프링 핵심원리 강의 마무리
  • 우테코 지원서 작성
  • Greenion 프로젝트 페어 프로그래밍 -> 피드 도메인 구현
  • Greenion 프로젝트 일정 계획