마틴 파울러 - 리팩터링 (2판) 의 4장 내용 중 기억하고 싶은 것 기록 ✏️✏️ [1] 테스트 코드의 가치 프로그래머들은 대부분의 시간을 디버깅에 쓴다. (실제 코드를 작성하는 시간의 비중은 그리 크지 않다) 컴파일할 때마다 테스트를 돌렸더니 생산성이 급상승했다. 디버깅 시간이 크게 줄어든 것이다. 직전까지 테스트가 성공했다면 마지막 테스트 이후에 작성한 코드에서 버그가 발생했음을 알 수 있다. 테스트를 자주 돌려봤기 때문에 버그가 발생한 지점은 조금 전에 작성한 코드에 있다는 것을 알 수 있고 그로인해 디버깅 시간이 크게 줄어든다. [2] 마틴파울러에게 배우는 좋은 테스트 습관 1. 자주 테스트하기 자주 테스트하라. 작성 중인 코드는 최소한 몇 분 간격으로 테스트하고, 적어도 하루에 한 번은 전체 ..
Developing packages & plugins 문서를 보고 flutter package를 만들고 pub.dev 에 publish 해보겠습니다. [1] 패키지 구성요소 package의 최소 구성요소로는 - pubspec.yaml 파일 (package name, version, author 등이 명시되어있는 파일) - lib 디렉토리 (코드 모음) 가 있습니다. [2] 패키지 타입 패키지 타입에는 두 종류가 있는데요 - Dart Pacakage - Plugin Pacakage Dart Packacage는 단순히 Dart 파일만 제공하는 패키지 입니다. 보통 유틸리티 함수들을 패키지로 제공하거나 플랫폼 별 분기가 필요없는 파일을 제공하고 싶을 때 사용하는 것 같습니다. Plugin Package는 Fl..
Marquee Widget 만들기 (1) - alternate 에서 이어지는 글입니다. 이 글에서는 1번 타입 (계속 한방향으로 흘러가는 Marquee) 을 만들어본 것을 기록합니다. 참고로 Marquee는 flutter package가 이미 몇개있는데, text 하나만 받을 수 있게 구현되어있더라구요,, 저는 이미지 + text로 된 list를 받을 수 있는 위젯으로 만들어보려고 합니다. text만 scroll하기 원하신다면 이미 잘되어있는 package를 쓰시기를 추천드립니다. [1] 코드 이렇게 Marquee 위젯을 만들어주고 앱에서 테스트 해봅니다. [2] 코드 설명 이전 글의 alternate marquee와 다른 점은 build 메소드와 scroll 메소드 밖에 없는 데요 이거 위주로 살펴보겠..
[1] 용어 보통 Marquee 라고 부르는 것은 두가지 타입이 있습니다. 1) 계속 한 방향으로 흘러가는 Marquee 2) 왼쪽 갔다가 오른쪽 갔다가(?) 를 계속 반복하는 Marquee 이 두개를 각각 나눠 말하는 일반적인 용어를 찾고 싶었는데 못찾았습니다,,, 보통은(특히 웹에서) 1번 타입을 Marquee라고 많이 부르고 있기는 합니다,, (marquee는 현수막이라는 뜻이에요) 그러면 2번을 PingpongMarquee 라고 네이밍해서 일단 만들어보겠습니다. (이름이 잘 안떠오르네요,,😳) ===> (추가) 여기 블로그 에서 봤는데 html에서는 1번을 scroll, 2번을 alternate 속성이라고 부른다고 합니다 [2] PingpongMarquee 만들기 # Step 1. 우선 state..
[ 목표 ] RIBs 에서 Template과 template을 xcode에 설치할 수 있는 스크립트를 제공하는 것처럼 두개의 템플릿 (Reactor Template / Reactor Unit Tests Template)과 install 스크립트를 만들어보기! 그리고 Reactor Template에 옵션 (접근제어자를 public으로 할 건지 internal로 할 건지) 을 추가해보기! [1] 초기 setup 우선 reactor-tooling 이라는 폴더를 만들고 Reactor.xctemplate Reactor Unit Tests.xctemplate 이라는 두개의 빈 폴더를 만들어줬습니다. 그 다음 RIBs의 install 스크립트 를 적당히 수정해서 폴더로 가져와줍니다. #!/usr/bin/env sh ..
마틴 파울러 - 리팩터링 (2판) 의 1,2장 내용 중 기억하고 싶은 것 기록 ✏️✏️ [1] 리팩터링하는 이유 리팩터링의 궁극적인 목적인 개발 속도를 높여서 더 적은 노력으로 더 많은 가치를 창출하는 것이다. 아래 그래프처럼 내부 설계가 잘 된 소프트웨어는 새로운 기능을 추가할 지점과 어떻게 고칠지를 쉽게 찾을 수 있다. 사람들이 빠지기 쉬운 가장 위험한 오류는 리팩터링을 '클린코드'나 '바람직한 엔지니어링 습관' 처럼 도덕적인 이유로 정당화하는 것이다. 리팩터링은 오로지 경제적인 이유로 하는 것이다. (개발 기간 단축, 기능 추가 시간 단축, 버그 수정 시간 단축) 스스로 이렇게 인식하고 다른 사람과 대화할 때도 이 점을 명심하라. 리팩터링하도록 이끄는 동력은 어디까지나 경제적인 효과에 있다. 이를 ..
collections - Container datatypes 에서 딕셔너리 서브클래스 3개를 살펴보겠습니다. 일반적인 딕셔너리랑 다르게 조금 특별한 점이 있습니다. [1] defaultdict 딕셔너리에서 존재하지 않는 키를 조회할 경우 KeyError exception이 납니다. 하지만 defaultdict은 존재하지 않는 키를 조회하면 에러가 나는 것이 아니라 설정한 디폴트 값을 기준으로 해당 키에 대한 아이템을 딕셔너리에 추가해줍니다. defaultdict의 first argument로 default_factory 를 제공해주면 됩니다. 디폴트값을 10이라고 해줄게요! '라이언' 이라는 키값이 존재하지 않지만 KeyError도 안나고 디폴트 값을 기준으로 아이템을 딕셔너리에 추가해주는 것을 볼 수 ..
파이썬은 string formatting을 다양한 방식으로 지원해왔습니다. 1) %-formatting name = 'Fred' age = 50 introduce = 'My name is %s, my age next year is %s' % (name, age+1) print(introduce) // 결과 My name is Fred, my age next year is 51 2) str.format name = 'Fred' age = 50 introduce = 'My name is {}, my age next year is {}'.format(name, age+1) print(introduce) // 결과 My name is Fred, my age next year is 51 3) string.Temp..
[1] List Comprehension PEP 202 - List Comprehensions PEP 202 -- List Comprehensions The official home of the Python Programming Language www.python.org List Comprehension은 기존 리스트를 기반으로 새로운 리스트를 만들어내는 구문입니다. 예를들어 leading and trailing whitespaces를 지워주는 strip을 리스트의 모든 아이템에 적용하고 싶다면 이렇게 리스트 컴프리헨션을 이용할 수 있습니다. list = ["죠르디 ", " 라이언 "] new_list = [item.strip() for item in list] print(new_list) // 결과 [..
[ 단축어 만들고 싶은 이유 ] 깃헙 > Setting > Options에 보면 머지될 때 해당 브랜치를 지워주는 기능을 설정할 수 있습니다. 이는 원격 브랜치를 지워주는 기능으로 로컬 브랜치는 알아서 지워줘야합니다. 머지된 로컬 브랜치를 파악해서 스스로 지워주는 일이 귀찮을 때, 머지된 로컬 브랜치를 전부 지워주는 git 명령어를 쓸 수 있습니다. (새로운 로컬브랜치나 아직 머지되지 않은 로컬브랜치는 안지움) develop에 머지된 로컬 브랜치들을 삭제해주는 명령어입니다. (참고: local/remote/merged 브랜치 목록 조회 명령어) git branch -d $(git branch --merge develop | grep -i -v -E "master|develop") 주기적으로 이 명령어를 ..
- Total
- Today
- Yesterday
- flutter deep link
- Sketch 누끼
- Flutter getter setter
- flutter dynamic link
- Watch App for iOS App vs Watch App
- drf custom error
- 장고 Custom Management Command
- SerializerMethodField
- 플러터 얼럿
- flutter build mode
- Flutter Spacer
- ribs
- Python Type Hint
- PencilKit
- 구글 Geocoding API
- 플러터 싱글톤
- 장고 URL querystring
- Django FCM
- Flutter 로딩
- github actions
- Django Heroku Scheduler
- DRF APIException
- Flutter Text Gradient
- flutter 앱 출시
- Django Firebase Cloud Messaging
- METAL
- cocoapod
- Dart Factory
- ipad multitasking
- Flutter Clipboard
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |