Computer Science는 학교 때나 지금이나 참 어렵다. 진짜 너무 어렵다. 그나마 지금은 들은 것도 많고 최근에 정보처리기사 준비하는 동안 봤던 내용이 다시 나오는 경우가 많아 도움은 됐는데 분량도 많고 고유 명사도 많아서 라디오처럼 옆에 틀어놓고 문서로 어찌저찌 이해해보려는 것도 힘들다.
실제로 면접 보러 다닐 때나 시니어 분들과 대화할 때 면접으로 CS 지식이 나온 적은 없었는데 그 땐 앱 개발자였고 백엔드는 아무래도 상대적으로 연관 있으니 나올 수도 있을 것 같은데 지금 나오면 멸망하지 않을까?
웹 용어 레벨 4라고 했지만 사실 그냥 조금 심화된 웹 관련 용어 조사라고 봐도 될 것 같다.
이번에 맡은 파트는 Sync, Async, AJAX 였는데 실무에서 쓰면서도 워낙 이해없이 쓰던 부분들이라 조사도 다른 용어 조사할 때보다 2배 넘게 걸린 것 같다.
기존에 아는 거야 동기, 비동기 나눠 쓰는 이유라던가 AJAX 쓰는 이유같은 거였는데 구체적으로 성능이 어떻고 구현 방식이 어떻고 하는건 이번에 다 처음 조사하느라 골치가 아팠다. 특히 앱에서 쓰던 거랑 웹이랑은 또 방식이 달라서 예시를 적을 때 이해한게 맞는지 끊임없이 의심해서 작성한 것 같은데 결과적으로는 발표가 잘 된 것 같아 만족스러웠다.
(그리고 발표 실력은 지난 세 번의 발표랑 크게 다를 바 없었다. 어버버버버 참 떨린다.)
이번에도 조사한 자료를 Notion에 게시했다.
동기와 비동기, 그리고 AJAX
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
fun solution(s: String): String = s.toList().sortedDescending().joinToString("")
이전에 이미 해봤던 방식같은데 다시 문제로 나왔다.
마음 같아서는 String에 sorted
를 확장으로 넣고 싶지만 실제로는 String을 Char 단위로 쪼개서 변형할 일이 그렇게 많진 않을테니 최고로 짧은 방법으로 구현했다.
다른 풀이에선 toCharArray
로 변환한 경우가 많아 ChatGPT에 물어봤는데 성능적으로는 문자열에서 문자를 추출해 새로운 문자 배열로 생성하는 toCharArray
보다 문자열을 반복해서 리스트에 추가하는 toList
가 문자열을 새로 생성하지 않아 메모리 복사가 줄어들어 성능으로 유리할 수 있다는 답변을 했는데 실제로는 성능 차이는 매우 적거나 무시할 수 있을 정도라는 말도 있으니 알아만 둬야겠다.