Skip to content

Instantly share code, notes, and snippets.

파이썬을 처음 배울때 경험했던 방법들

요약

일단 간략하게 정리하면 책으로는 파이썬 기본을 배웠고, 파이썬 공식 문서를 통해서 좀 더 고급, 또는 활용성이 높은 프로그래밍 방법들을 배웠어요. 그리고 순간 순간 미묘하게 궁금한 부분들은 구글링으로 해결했어요.

버전 주의사항

파이썬 2와 3은 코드가 호환이 안 되고 문법도 약간 달라요. 그래서 책들도 버전 2, 버전 3 기준 책들이 따로 있어요.(표지에 안 적혀 있으면 저자의 서문 등에 보면 대체로 나옴.) 버전 2를 공부하고 싶으면, 대부분 2.7 버전이 기준일 거고, 버전 3을 공부하고 싶으면 최근 안정화 버전인 3.6 을 추천할게요. 그렇지만 굳이 버전 2가 꼭 필요한 상황 (유지보수 일을 하는데 이전에 개발된 코드가 2로 개발되었다던지)이 아니면 버전 3를 추천할게요 (또 2로 개발된 코드도 2to3 같은 트렌스파일러로 생각보다 쉽게 변환이 가능해요.).

@jjangga0214
jjangga0214 / 오프라인 매장 선결제 서비스.md
Last active February 18, 2018 12:46
오프라인 매장 선결제 서비스 사전 간략 정리

오프라인 매장 선결제 서비스

기반

  • 안드로이드 Native

  • IOS Native

  • 벡엔드

    • Rest Controller for App client
  • 관리자 로직, 데이터

@jjangga0214
jjangga0214 / update('1장 기본개념').md
Last active March 5, 2018 01:02
Pull Request to '1장 기본개념' of Data Structure class

1장 기본개념 오류 정리

6 페이지

기존

procedure is_prime(m)
for i=2 to m-1 do  // to debug : 1
    if m MOD i=0 then return false
    else return(true) // to debug : 2
end is_prime. 

개선 가능할 수도 있는 사항

  • 변수명: max, min은 이미 python에서 존재하는 함수명이라, 같은 이름으로 변수 선언시 namespace 를 덮어써서 함수를 못쓰게 되니, 변수명을 바꾼다.(max_, max_val 등 적절히 알아서)
  • 네이밍 스타일(필수 아닌 권장) : python naming sytle (PEP 정의)인 헝가리안 표기법으로 바꾼다. 예를 들어, findMax (camel case style => java 관례) 대신 find_max (hungarian notation => python 관례). 
  • 중복 제거 : find_min find_max의 유일한 차이점은 if문 안의 조건 하나뿐이다. 해당 부분을 parameter로 받아 중복을 없애자.
  • global 제거 : 전역변수 global 사용은 피하자. (차라리 아래 예시처럼 튜플로 여러 값을 반환하는 것이 더 권장된다. )
  • enumerate 사용 : for문에서 인덱스으로 iterable에 접근하지 말자(linked 한 경우 느려짐). 만일 인덱스와 요소가 모두 필요하면 enumerate 쓰자.

예시 코드

def find(data, predicate):
@jjangga0214
jjangga0214 / swedenhouse_review.md
Last active September 18, 2018 08:18
swedenhouse 계약 전 신규 요구사항 정리

요구사항 REVIEW

분류

  • NEW REQUIREMENT 란, 프리모아 초기 조건(가장 맨 아래에 주석 에 명시하였습니다.) 또는 강남역서 가진 미팅 에서 합의되지 않은 신규 요구사항이면서, 기존 요구사항과 자연스럽게 개발이 연결되지 않고, 거의 독립적으로 기능의 로직 또는 디자인을 개발해야 하는 사항을 가리킵니다. 이 경우, 부분적인 추가 비용이 필요할 가능성이 높습니다.

  • PARTIALLY NEW REQUIREMENT 란, 부분적으로 새로운 요구사항으로서, 어느정도는 독립적인 기능의 로직 또는 디자인을 개발해야 하는 사항을 가리킵니다. 이 경우, 여러개의 PARTIALLY NEW REQUIREMENT가 같이 요구될 시, 추가 비용이 필요하고, 또는, 하나의 PARTIALLY NEW REQUIREMENT 만 요구되더라도, 작업량에 따라 소정의 추가비용이 필요한 가능성이 있습니다.

  • ACCEPTABLE 이란, 기존 요구사항이거나, 추가비용 없이 전격적으로 수용가능한 사항을 가리킵니다.

import functools
import copy
class Maze:
'''
2차원 리스트를 wrapping 한다.
'''
def __init__(self, maze, *, end, start=(0, 0), function=copy.deepcopy):
self.maze = function(maze)

Comparision between artificial and natural pk

Pk 를 artificial key 로 택할때의 단점

  • 이론적으로는 불필요한 공간, 인덱싱 요구.
  • Natural Key 에 unique constraint 를 설정하는 것을 잊을 위험.
  • Existence Dependency가 깊을 때, Dependency를 한번에 여럿 거슬러 올라가기 위해 서브쿼리 또는, 인라인 뷰가 복수겹 필요한 경우가 있음.

Pk 를 natural key 로 택할때의 단점

실습

mock.h
//
// Created by user on 18. 4. 12.
//

#ifndef XPP_MOCK_H
#define XPP_MOCK_H
@jjangga0214
jjangga0214 / JPA_METAMODEL_GEN.md
Last active August 5, 2023 06:01
JPA Criteria API 사용에 Metamodel을 사용하기 위해, Entity 에서 자동으로 metamodel을 생성하는 generator를 설정한다. gradle 기준으로 설명한다. 

JPA MetaModel Generator 사용하기 : with gradle

JPA Criteria API 사용에 Metamodel을 사용하기 위해, Entity 에서 자동으로 Metamodel을 생성하는 generator를 설정한다. gradle 기준으로 설명한다. 

build.gradle

// 생략... gradle 문법에 의해 buildscript 바로 다음에 위치
plugins {
 id "at.comm_unity.gradle.plugins.jpamodelgen" version "1.1.4"
@jjangga0214
jjangga0214 / JPQL_로_시간_조건걸기.md
Last active October 6, 2022 12:11
JPQL 로 시간 조건걸기

JPQL 로 시간 조건걸기

일반적으로 시간을 다루는 연산은 그 종류가 많고, 다소 복잡합니다. 예를 들어, 시간대, 시간 타입 (DATE 인지 DATETIME 인지 Timestamp 인지, 혹은.. String인지 등), 단위 연산( [초, 분, 시, 날, 월, 년] * [덧셈, 뺄셈] ) 등 처리할 것이 많습니다. 기본적으로 sql 은 dsl 이므로 완전 선언적 인 언어입니다. 선언적인 언어의 약점은 아주 잘 정의하지 않으면 이런 복잡한 여러 case 들을 처리하기 번거로울 수 있다는 것이죠. 때문에 어플리케이션 영역에서 시간 객체를 조건에 알맞게 수정해서 sql 에서는 간단한 비교만 가능하게 하는 것이 좋습니다. jpql 도 sql 과 맥락이 같기 때문에, jpql 내부에서 기본타입이 아니거나 시간처럼 복잡한 연산을 하는 것은 피하는 것이 필요합니다.

setup

Spring Data JPA를 사용하고, Foo Entity와 timelog(시작시간) 속성을 가정했습니다.

Repository

어플리케이션 level 에서 시간을 조절하기 위해, 시간 대소를 비하는 메서드를 선언하고, facade pattern 으로 현재시간으로부터 10분 전까지 select 하는 method 를 추가선언했습니다.