목록분류 전체보기 (142)
개발자 블로그
문제 설명 더보기 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. "[닉네임]님이 들어왔습니다." 채팅방에서 누군가 나가면 다음 메시지가 출력된다. "[닉네임]님이 나갔습니다." 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 채팅방에서 닉네임을 변경한다. 닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다. 예를 들어,..
EagerLoading이란 즉시 로딩한다는 말로 lazyloading과 반대되는 개념이라 할 수 있다. 따라서 lazyloading의 문제인 N+1과 같은 문제를 해결해 줄 수 있다! 그렇다고 해서 lazyloading이 안좋다는 말이 아니다! 때에 따라 더 효율적인 코드를 짜기 위해 다양한 방법을 알기 위함이다. 그렇다면, 즉시 로딩을 하기 위해 장고는 어떤 메소드를 제공하는가! 바로 select_related()와 prefetch_related()라는 메소드이다. 먼저 N+1 문제를 예제를 살펴보면서 알아보자! users : Qeuryset() = User.objects.all() # lazyloading으로 아직 sql을 호출 안 함. for user in users: user.userinfo # ..
Lazy Loading QuerySet의 특징으로는 Lazy Loading, 지연 로딩이 있다. 지연 로딩은 QuerySet을 evaluation 하기 전까지 QuerySet에서 filter()를 추가하고 exclude() 하는 것은 데이터베이스에서 쿼리를 수행하지 않는다. QuerySet을 evaluation하는 방법은 여러 가지가 있다. len() , list() , bool() , repr() 등을 QuerySet에 사용했을 때 QuerySet은 evaluation 되고 실제로 데이터베이스에서 쿼리를 수행하게 된다. Caching 각 QuerySet은 데이터베이스로 접속을 최소확 하기 위해 cache를 갖고 있다. QuerySet이 Evaluation 되기 전엔 cache가 비어있지만 evaluat..
isinstance 함수 isinstance(object, classinfo) 객체의 클래스 유형을 확인하는 함수! 첫 번째 인자는 객체, 두 번째 인자는 클래스이다! "이 객체가 저 클래스의 객체인가??"할 때 쓰는 함수! * 추가로 해당 객체가 직접 또는 간접적으로 상속 받은 클래스인 경우에도 True를 반환!! Object 클래스 객체 클래스?? 말이 뭔가 이상하다... 이 말은 즉, "파이썬의 모든 클래스는 object 클래스를 직간접적으로 상속한다."라는 사실을 알아야 한다. issubclass(class1, class2) 함수를 통해서도 살펴보자! (->class1은 class2를 상속 받았는가?) 이렇듯 파이썬의 모든 클래스는 object 클래스를 상속하고 있다! >>> dir(object..
부모 클래스와 자식 클래스 부모 클래스, 상위 클래스, 슈퍼 클래스라고도 읽으며, 베이스가 되는 클래스이다. 자식 클래슥, 하위 클래스, 서브 클래스라고도 읽으며, 베이스가 되는 클래스를 상속받아 추가할 메소드를 업데이트한 클래스이다. 따라서, 자식 클래스는 부모클래스의 모든 메소드를 갖고온다. 또한 새로운 별도의 메소드를 추가할 수도 있다. *새로운 메소드를 추가하는 과정에서 같은 메소드(이름이 같은 메소드)가 중첩이 될 때, 오버라이딩(부모로 부터 가져온 메소드가 가려지는)이 일어날 수 있다. 이를 메소드 오버라이딩이라고 한다. 이러한 경우 말그대로 덮어씌어진것이기 때문에 해당하는 부모 메소드가 사라진 것은 아니다. 가려진 것 뿐! 이것은 super()라는 상속 클래스를 호출할 때 쓰는 메소드를 활용..
소프트웨어 공학 관점에서의 클래스와 객체는 이렇게 설명한다고 한다. 클래스 : 객체를 만들기 위한 일종의 설계도 (우리가 흔히 많이 듣는 붕어빵 틀) 객체 : 클래스를 기반으로 만들어진 실제 사물 (붕어빵) 클래스의 기본 정의 "클래스 내에 들어갈 변수(데이터)와 메소드(기능)를 결정하는 것" 객체 안에 변수가 만들어지는 시점 Simple 클래스는 메소드만 있는 클래스이다! 위 클래스 객체를 만들때 언제 변수가 생성이 되는가! 그림을 보면 s1.seti(200) 이라고 변수를 대상으로 대입 연산을 진행하는 순간에 객체의 변수가 만들어진다. 하지만, 먼저 geti라는 메소드를 호출하면 아래와 같은 오류를 만난다. 그러나 클래스를 정의할 때, 객체 생성시 자동으로 호출되는 __init__ 메소드를 다음과 같..
QuerySet을 잘사용하는법 QuerySet은 1개의 Query 와 0~N개의 QuerySet으로 이루어져있다. 수행하고자 하는 SQL을 먼저떠올리지말고 가져오고자하는 데이터 리스트를 먼저 떠올리자 QuerySet이 제공하는 기초적인 SQL구조를 기억하자 이 구조를 벗어난다면 그건 RawQuerySet으로 풀자 (Queryset이 제공하는기본적인 SQL구조 4-2 참고) ORM으로 복잡한 SQL을 구현했다고 ORM을 잘쓰는 것이 아니다. 어떤 로직을 작성하는데 단조로운 SQL작업을 줄여주고 Object와 Relational을 Mapping해준다는 ORM의 장점을 얻을수 없다면 그때는 NativeSQL을 사용하자 NativeSQL(속칭 날쿼리) 사용을 망설이지말아라 특히 SQL성능이 중요한 경우라면 , ..
문제 설명 더보기 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단..
문제 설명 더보기 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. 제한 사항 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 입출력 예 sreturn "try hello world" "TrY HeLlO WoRlD" 입출력 예 설명 "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 ..
문제 설명 더보기 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 sta..