마틴 파울러 - 리팩터링 (2판) 의 12장 - 상속 다루기 중 좋았던 것들 기록 ✏️✏️ 12.6 타입 코드를 서브클래스로 바꾸기 (Replace Type Code with Subclasses) 보통 열거형, 문자열, 숫자 등의 타입 코드를 쓴다. 타입코드만으로도 특별히 불편한 상황은 별로 없지만 그 이상의 무언가가 필요할 때가 있다. 여기서 '그 이상' 이라 하면 바로 서브클래스를 가리킨다. 서브클래스는 두 가지 면에서 특히 매력적이다. 1. 조건에 따라 다르게 동작하도록 해주는 다형성을 제공 (타입 코드에 따라 동작이 달라져야하는 함수가 여러 개일 때 특히 유용) 2. 특정 타입에서만 의미가 있는 값을 사용하는 필드나 메서드가 있을 때 (필요한 서브클래스만 필요한 필드를 가지도록 하여 더 명확) 이..
[1] ModelAdmin 장고의 Admin 문서를 보면 ModelAdmin 에 대한 설명이 나옵니다. ModelAdmin은 admin interface에서 모델을 표현하는 클래스라고 합니다. admin.py에 이런 식으로 추가해서 쓰면 됩니다. 위 예제처럼 Admin 클래스에 custom values를 define 하지 않는 경우, 보통 이렇게만 씁니다! [2] ModelAdmin > search_fields Admin 클래스에 search_fields를 define하면 admin list page에서 search box를 사용할 수 있습니다. 예를들어 이런 Family 모델이 있을 때, class Family(models.Model): join_date = models.DateTimeField() c..
enum Type { case A case B } struct AView: View { var body: some View { EmptyView() } } struct BView: View { var body: some View { EmptyView() } } # single return type 이렇게 각 타입에 맞게 다른 뷰를 리턴해주면 컴파일 에러가 난다. Swift는 function에 대해 single return type을 요구하기 때문이다. # AnyView , Group 그래서 AnyView로 감싸서 쓴다. 참고로 AnyView는 return을 생략하고 쓸 수는 없다. 또는 Group을 이용하는 방법도 있다. # @ViewBuilder WWDC 2021 - Demystify SwiftUI 에..
Customizing Your App’s Navigation Bar 를 문서를 보면 BackButton Image를 커스터마이징할 때, backIndicatorImage 뿐만아니라 backIndicatorTransitionMaskImage 도 같이 설정해주는 것을 볼 수 있다. backIndicatorTransitionMaskImage 는 push and pop transition 중에 content의 mask로 쓰이는 이미지라고 한다. What is backIndicatorTransitionMaskImage 글에 자세하게 나와있다! backIndicator 이미지 아래로 흐르는 content에 대한 마스킹(?)으로 쓰이는 이 부분을 말하는 것이며 스냅샷으로 뜨면 이 부분이라고 한다
# 이슈 collectionview 안에 cell이 두개 이상이면 왼쪽 정렬이 된다. 하지만 cell이 하나 일 때만 센터 정렬이 된다. # 해결 collectionView의 estimate size를 automatic -> none 으로 바꾸면 single cell 일 때도 왼쪽 정렬이 잘된다. # Reference https://stackoverflow.com/questions/60000398/align-single-uicollectionviewcell-to-the-left-of-the-collectionview align single UICollectionViewCell to the left of the collectionView I've got a collectionView that is insi..
[ 배경 지식 ] AVAudioSession AVAudioSession 은 앱과 시스템의 중개자로서 오디오를 사용하는 방법을 시스템에게 전달하는 객체입니다. Default Audio Session은 기본 동작은 제공하지만 media app에서 필요한 오디오 동작들까지는 제공하지 않습니다. 앱의 audio session category 를 설정해줌으로서 기본 동작을 바꿀 수 있습니다. category 종류로는 7가지가 있습니다. (참고: Audio Session Categories and Modes) 재생 앱이 가장 많이 사용하는 category는 playback 입니다. (녹음된 음악 또는 기타 사운드를 재생하는 카테고리 / 기본 nonmixable 옵션) 이 카테고리는 오디오 재생이 앱의 중앙 기능임을..
XCode > Build Setting에서는 Swift major 버전만 확인가능합니다. (swift 4.2만 왜 나오는 지 모르겠네요) Swift5로 되어있을 때 구체적 버전을 알고 싶으니 통상적인 명령어(?)를 실행시켜봅니다. 하지만 이 명령어는 응용프로그램에 있는 xcode 버전만 나오는 것 같아요 (추측) swift --version swift 5.5를 쓰는 xcode를 끌어다놓고(바탕화면에 위치함) 아래 명령어를 입력해주면 여전히 swift 5.4로 나오기 때문...!!! 그러면 xcode별 구체적인 버전을 확인하고 싶다면 어떻게 해야할까요?! 터미널에 xcode를 끌어다놓고 (자동으로 path가 입력됨) path 뒤에 이것을 입력해주면 됩니다! /Contents/Developer/Toolcha..
[ 이슈 ] 장고의 로컬에서 기본적으로 SQLite3 를 씁니다. 헤로쿠(기본이 PostgreSQL)에 배포한 후, 리얼에서도 로컬의 sqlite 파일을 그대로 쓰고 싶었는데 (로컬 데이터를 그대로 쓸 것이고 더이상 추가/수정할 것이 없는 간단 프로젝트여서!) 헤로쿠는 SQLite3 같이 file-based database 와 fit이 안맞다고 하고 쓸 수 있는 방법도 없는 것 같습니다. (참고) 로컬에 있는 데이터를 리얼로 옮기는 게 목적이니까 How to migrate Django from SQLite to PostgreSQL 를 보고 따라해줍니다. [1] 로컬 > dump data 로컬에서 이 명령어를 돌려서 dump.json을 만들어줍니다. 로컬에 존재하고 있는 데이터를 dump.json 파일에 ..
성경 API, 성경 데이터 이것저것 찾아보다가 SQL 스크립트가 공유되고 있는 것을 발견! - 개역한글 SQL 공유해주신 블로그 (저작권 이슈 없음!!) - 개역개정 SQL 공유해주신 사이트 (저작권 이슈 확인 안됨) 확장자는 sql이고 열어보면 TABLE 만들고 레코드 insert 하는 SQL문들이 잔뜩 있다. ✔️ 이 스크립트로 나의 장고 DB에 데이터를 추가하고 ✔️ 이 형식에 맞춰서 장고 모델을 만들고 ORM 방식으로 get 요청을 처리하는 것을 해볼 것이다. [1] SQL 스크립트를 돌려서 DB에 데이터 추가하기 1️⃣ executescript (파이썬 공식 문서) / How to execute an external SQL file using sqlite3 in Python (블로그) 2️⃣ P..
마틴 파울러 - 리팩터링 (2판) 의 11장 내용 중 좋았던 것들 기록 ✏️✏️ 11.4 객체 통째로 넘기기 객체를 통째로 넘기면 - 변화에 대응하기 쉽다. - 매개변수 목록이 짧아져서 일반적으로 함수 사용법을 이해하기 쉬워진다. 하지만 함수가 객체 자체에 의존하기를 원치 않을 때는 이 리팩토링을 수행하지 않는다. 특히 객체와 함수가 서로 다른 모듈에 속한 상황이면 특히 더 그렇다. 어떤 객체로부터 값 몇 개를 얻은 후 그 값들로만 무언가를 하는 로직이 있다면 그 로직을 객체 안으로 집어넣어야함을 알려주는 악취로 봐야한다. ==> '객체 통째로 넘기기 vs 객체에서 값 몇개를 꺼내 파라미터로 넘기기'는 개발하며 자주 고민되는 이슈이다. 나도 객체와 함수가 서로 다른 모듈에 속해있는 경우 통째로 넘기기를 ..
- Total
- Today
- Yesterday
- PencilKit
- cocoapod
- github actions
- 장고 Custom Management Command
- Flutter Spacer
- flutter dynamic link
- ipad multitasking
- flutter build mode
- Flutter Text Gradient
- Django FCM
- METAL
- Dart Factory
- flutter 앱 출시
- flutter deep link
- Flutter 로딩
- 플러터 얼럿
- Django Heroku Scheduler
- Watch App for iOS App vs Watch App
- drf custom error
- SerializerMethodField
- Sketch 누끼
- DRF APIException
- Flutter getter setter
- Flutter Clipboard
- ribs
- Django Firebase Cloud Messaging
- 구글 Geocoding API
- 장고 URL querystring
- Python Type Hint
- 플러터 싱글톤
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |