부트캠프 일지

부트캠프 27일차 후기

여름하인 2024. 1. 4. 20:39

오늘 CodeKata는 2문제를 풀었다. 첫 번째 문제가 큐를 활용한 구현 문제라서 시간을 들여서 푸는 수 밖에 없어서 결국 이렇게 되어버렸다. 그래도 두번째 문제에서 Kotlin에서의 Sort에서 대해 좀 더 자세히 알 게 되었다.

 

Kotlin에서는 정렬 함수로 sort를 사용하는데, immutable에서는 정렬된 컬렉션을 반환하는 sorted를 사용하고, mutable에서 서는 자기 자신을 정렬하는 sort를 사용한다. 이와 관련된 함수도 마찬가지로, 역순으로 정렬하는 reverse, reversed, 정렬 기준 객체를 정하는 sortBy, sortedBy, 정렬 기준 함수를 결정하는 sortWith, sortedWith이 있다.

 

여기서 sortWith는 Comparator라는 정렬 규칙을 정할 수 있다. 이 comparator를 생성하기 위해선 3가지 방법이 있다.

첫 번째는 naturalOrder로 오름차순을 기본으로 한 간단한 생성 메소드이다.

두 번째는 compareBy로, 정렬 속성을 여러개를 사용할 수 있다는 특징이 있다. 즉, 첫 번째 요소에서 우열이 가려지지 안았다면, 두 번째 요소를 비교하고, 여기서도 안되면 세번째, 요소를 비교하고... 등등의 규칙을 거쳐서 정렬한다.

세 번째는 Comparator를 직접 만들어 사용할 수 있다. 여기서는 compareTo 함수를 사용해 비교하는 것이 추천된다.

 

// naturalOrder
val cmp1 = naturalOrder<Long>()
// compareBy
val cmp2 = compareBy<Pair<Int, String>>({it.first}, {it.second})
// comparator
val cmp3 = Comparator<Int>{a, b -> (a + b).compareTo(b + a) }

 

오늘 Security 유무 관계 없이 소셜 로그인을 구현하는 데 성공하였다. 가장 고생한 부분은 유저 정보를 받는 부분이였다. 각 소셜 미디어마다 유저 정보를 주는 JSON이 달라서 이것을 눈치채는 데 시간을 많이 소모해버렸다. 이것을 고치기 위해서 SpringBoot로 개발을 하면서 처음으로 Intellij 디버깅 모드를 사용해봤고, 이것을 통해 각 소셜미디어가 주는 유저정보의 구조체가 다르다는 사실을 알게 되었다. 그래서 이것을 각 소셜미디어에 맞게 수정을 하고, 되도록 확장성이 좋도록 구현을 하려하다보니 고생을 하게 되었다.

 

과제를 제출하고 피드백을 받았는데, 여기서 가장 눈에 띈 것은 Spring에서 자동으로 DI 할 때, List나 Map으로 받을 수도 있다는 것이다. 즉, 만약 여러 타입의 빈이 있다면, 이것을 하나의 List나 Map으로 자동으로 주입할 수 있다는 것이다. 기존에 나는 이 문제를 해결하기 위해서 Helper 클래스를 작성해서 주입 받을 Bean을 리턴 받았는데, 이 방식보다는 위의 방식이 더 유용할 것 같다는 생각이 들었다.

 

오늘은 일단 여기까지, 내일 할 일은 내일 생각해보자.