클린 코드를 스터디 하면서 제가 이전에 짠 코드들을 리팩토링 하고 있는데요. 제가 출제한 문제인 22232번은 코딩 테스트에 꽤 나오는 유형입니다만, 제가 코드를 깔끔하게 짜지 않은 탓에 스터디 재료가 되고 말았습니다. 스터디를 하다가 스트림과 람다에 대해서 오갔는데요. 다른 분의 코드를 보다가, 입력 부분을 Intstream과 range 등을 이용해서 깔끔하게 처리할 수 있다는 것을 보고 놀랐습니다. 사실 이전에도, 한 분이 기여를 해 주셔서 스트림과 람다의 존재는 알고 있었지만, 신세계였습니다. 심지어, String을 Integer로 변환하는 작업도 Stream을 잘 이용하면 잡스러운 로직들을 간결하게 짤 수 있다는 걸 보고 너무 놀랐습니다. 아무튼, 코드를 분석해 보면서 배운 점이 많았는데요. 그 ..
전체 글 검색 결과
이 글에서는 prefetch_related랑 select_related의 차이를 다루지 않습니다. n+1 problem을 silk 분석 툴로 분석해 보는 것이 목표입니다. 먼저, 이런 상황을 생각해 봅시다. Post가 있습니다. 포스트 전체를 긁어오려고 합니다. 그런데, 잘 생각해 보면, 포스트 정보를 긁어오기 위해서, 작성자의 닉네임 등을 긁어올 겁니다. 그러면, Post에는 User 테이블을 참조하는 FK가 들어갈 겁니다. 대략 이런 구조입니다. post는 22k개가 있고, 유저는 3명이 있습니다. index 요청을 날려서, 이 구문들을 수행해 봅시다. 어떻게 될까요? 22k번 만큼의 쿼리가 날라가게 됩니다. N+1 problem이라고 많이 이야기를 하는데요. silk로 해당 request가 수행되었..
입력을 받아야 하는 문제는 꽤 많이 보입니다. shell에서는 read를 쓸 수 있는데요. 어떻게 해야 하는지 간단하게 알아봅시다. 먼저, read a는 1줄을 읽어서, 변수 a에 저장합니다. echo $a는, a에 저장된 값을 출력하는 것인데요. 이 쉘 프로그램은, 한 줄을 입력받아서 a에 저장한 뒤에, a의 값을 출력하는 것입니다. 실행해 보겠습니다. 저는 2 4 6 8을 입력했습니다. 입력한 값이 2 4 6 8이였으므로, 출력은 2 4 6 8이 됩니다. 그런데, 공백을 기준으로 받아야 할 경우도 있습니다. 이 때에는 문서에 나온 IFS를 이용하면 됩니다. 한 마디로 spliter의 역할을 한다고 보시면 됩니다. result를 split 하는데, IFS를 " "로 주면, 공백 문자를 기준으로 spli..
안녕하세요. 이번 시간에는 startswith, istartswith, endswith, iendswith에 대해서 간단하게 알아보겠습니다. 먼저 Post에 있는 데이터는 이러합니다. 문자열이 무엇으로 시작하는지는 startswith 조건을 걸어서 구현할 수 있어요. 예를 들어서, post가 "hi"로 시작하는 것은 어떻게 뽑아내야 할까요? post__startswith="hi"라고 쓴 것을 주목하시면 됩니다. 이것은 "hi"로 시작하는 post를 뽑는 구문입니다. 결과를 보겠습니다. 정확하게, "hi"로 시작하는 포스트가 나왔습니다. 앞에 i를 붙여서 istartswith 조건을 달면, 대소문자 구분 없이 검사해 주는데요. 예를 들어, istartswith="Hi"는 "hi"도 "hI"도 매치가 됩니다..
python re 모듈에는 finditer와 findall 메소드가 있습니다. 이 둘에 대해 간단하게 알아봅시다. 먼저, 이 둘을 이해하기 위해, capturing group에 대해서 간단하게 설명을 드리겠습니다. ([0-9]+)([^0-9]*)가 있는데요. () 안에 있는 것은 캡쳐가 되는 패턴을 의미합니다. 하나씩 차례대로 해석해 보면, 숫자 문자로만 이루어진 패턴과, 숫자 문자가 아닌 문자로만 이루어진 패턴이거나 빈 문자열이거나, 이렇게 두 개의 패턴으로 캡쳐가 된다는 의미입니다. 예제를 보겠습니다. 먼저, "2345abcde"는 어떻게 캡쳐될까요? 숫자로만 이루어진 패턴이 "2345"이고, 숫자로 이루어지지 않거나 빈 문자열인 패턴이 뒤에 "abcde"라는 패턴으로 들어옵니다. 따라서 요렇게 캡쳐..
최근댓글