#ifndef XPP_MYSTRING_H
#define XPP_MYSTRING_H
#include <cstring>
#include <cstdlib>
일반적으로 시간을 다루는 연산은 그 종류가 많고, 다소 복잡합니다. 예를 들어, 시간대, 시간 타입 (DATE 인지 DATETIME 인지 Timestamp 인지, 혹은.. String인지 등), 단위 연산( [초, 분, 시, 날, 월, 년] * [덧셈, 뺄셈] ) 등 처리할 것이 많습니다. 기본적으로 sql 은 dsl 이므로 완전 선언적 인 언어입니다. 선언적인 언어의 약점은 아주 잘 정의하지 않으면 이런 복잡한 여러 case 들을 처리하기 번거로울 수 있다는 것이죠. 때문에 어플리케이션 영역에서 시간 객체를 조건에 알맞게 수정해서 sql 에서는 간단한 비교만 가능하게 하는 것이 좋습니다. jpql 도 sql 과 맥락이 같기 때문에, jpql 내부에서 기본타입이 아니거나 시간처럼 복잡한 연산을 하는 것은 피하는 것이 필요합니다.
Spring Data JPA
를 사용하고, Foo
Entity와 timelog
(시작시간) 속성을 가정했습니다.
어플리케이션 level 에서 시간을 조절하기 위해, 시간 대소를 비하는 메서드를 선언하고, facade pattern 으로 현재시간으로부터 10분 전까지 select 하는 method 를 추가선언했습니다.
import functools | |
import copy | |
class Maze: | |
''' | |
2차원 리스트를 wrapping 한다. | |
''' | |
def __init__(self, maze, *, end, start=(0, 0), function=copy.deepcopy): | |
self.maze = function(maze) |
-
NEW REQUIREMENT
란, 프리모아 초기 조건(가장 맨 아래에 주석 에 명시하였습니다.) 또는 강남역서 가진 미팅 에서 합의되지 않은 신규 요구사항이면서, 기존 요구사항과 자연스럽게 개발이 연결되지 않고, 거의 독립적으로 기능의 로직 또는 디자인을 개발해야 하는 사항을 가리킵니다. 이 경우, 부분적인 추가 비용이 필요할 가능성이 높습니다. -
PARTIALLY NEW REQUIREMENT
란, 부분적으로 새로운 요구사항으로서, 어느정도는 독립적인 기능의 로직 또는 디자인을 개발해야 하는 사항을 가리킵니다. 이 경우, 여러개의PARTIALLY NEW REQUIREMENT
가 같이 요구될 시, 추가 비용이 필요하고, 또는, 하나의PARTIALLY NEW REQUIREMENT
만 요구되더라도, 작업량에 따라 소정의 추가비용이 필요한 가능성이 있습니다. -
ACCEPTABLE
이란, 기존 요구사항이거나, 추가비용 없이 전격적으로 수용가능한 사항을 가리킵니다.
- 변수명:
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):