[ 목표 ] 보통 앱의 설정 탭에 문의하기(또는 피드백 보내기) 기능을 넣어서 사용자가 회사 또는 개발자에게 의견을 보낼 수 있도록 합니다. 아이폰 기준, 기본 메일 앱이 깔려있고 메일 앱에 이메일을 등록해놨다면 email을 보낼 수 있는 폼이 나오고 아니라면 얼럿을 띄워줍니다. (MFMailComposeViewController 로 이 기능을 구현합니다.) '포토위젯' 앱의 경우 '프립' 앱의 경우 검색해보니, 안드로이드는 기본 메일 앱이 gmail이라서 gmail 앱 으로 랜딩시킨다고 하네요. 플러터 문서를 검색해보니 email 관련해서 제공해주는 Widget이나 유틸 같은 것은 따로 없는 것 같고 써드파티 패키지를 검색해보니 나옵니다..! (flutter email send라고 검색하면 됨) 저는 ..
[ 인트로 ] 오늘 오후 3시쯤 애플 쪽으로 개발자님 메일주소를 공유받았다면서 비밀번호 초기화를 하고 싶다는 메일을 받았다. (비밀번호를 잊으셔서 다시 로그인을 못하는 상황이셨다) 개인 앱이지만 앱에 문의할 수 있는 이메일도 안남겨놓고 계정이 있는 앱이라면 필수인 아이디 찾기, 비밀번호 재설정, 탈퇴하기도 안붙인 내 자신이 너무 부끄럽고 죄송스러웠다,,, 양파가족을 너무너무 잘쓰고 있고 얼른 다시 재개하고 싶다는 메일을 보고 저녁약속 전 무조건 대응해드리고 간다 🔥🔥 라고 생각하고 가장 빠른 방법으로 대응해드렸고 기록을 남긴다. (이렇게 주절주절 쓰는 이유는 Django의 기본 기능이 너무 잘되어있고 간편해서 이런 급한 상황에서도 빨리 적용할 수 있다는 것을 강조하고 싶어서이다,,,) (사실 처음부터 이..
좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! 제가 조금 재구성한 부분이 있기때문에 꼭 책을 읽어보시는 것을 추천드립니다. [ 요약 ] 상속 주의사항 1. 상속은 코드 재사용이 아니라 타입 계층을 구현하기 위해 쓴다. (서브클래싱이 아니라 서브타이핑을 한다.) 2. is-a 관계가 언어적으로 맞다고 상속관계를 막 쓰면 안된다. 행동호환성을 고려해야한다. [1] 상속의 목적 상속을 사용하는 일차적인 목표는 코드 재사용이 아니라 타입 계층을 구현하는 것이여야한다. 상속은 코드를 쉽게 재사용할 수 있는 방법을 제공하지만 부모 클래스와 자식 클래스를 강하게 결합시키기 때문에 설계의 변경과 진화를 방해한다. 반면 타입 계층을 목표로 상속을 사용하면 다형적으로 동작하는 객체들의 ..
좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! 제가 조금 재구성한 부분이 있기때문에 꼭 책을 읽어보시는 것을 추천드립니다. [1] 캡슐화 [ 캡슐화에 대한 오해 ] 많은 사람들이 객체의 캡슐화에 관한 이야기를 들으면 데이터 은닉(data hiding)을 떠올린다. 데이터 은닉이란 클래스의 모든 인스턴스 변수는 private으로 선언해야하고 오직 해당 클래스의 메서드 만이 인스턴스 변수에 접근 할 수있어야하다는 것이다. 그러나 캡슐화는 데이터 은닉 이상이다. 캡슐화란 단순히 데이터를 감추는 것이 아니다. 소프트웨어에서 변할 수 있는 모든 개념을 감추는 것이다. 코드 수정으로 인한 파급효과를 제어할 수 있는 모든 기법이 캡슐화의 일종이다. [ 캡슐화의 여러 종류 ] - 데..
좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! 제가 조금 재구성한 부분이 있기때문에 꼭 책을 읽어보시는 것을 추천드립니다. [1] 클래스의 응집도를 판단하는 세가지 방법 1. 변경의 이유 서로 연관성이 없는 기능이나 데이터가 하나의 클래스안에 뭉쳐 있으면 응집도가 낮은 것이다. 클래스가 하나 이상의 이유로 변경돼야한다면 응집도가 낮은 것이다. 변경의 이유에 따라 클래스를 분리하라 2. 인스턴스 변수가 초기화되는 시점 클래스의 속성이 서로 다른 시점에 초기화되거나 일부만 초기화된다는 것은 응집도가 낮다는 증거다. 응집도가 높은 클래스는 인스턴스를 생성할 때 모든 속성을 함께 초기화한다. 반면 응집도가 낮은 클래스는 객체의 속성 중 일부만 초기화되고 일부는 초기화되지 않은..
정말 정말 정말 좋은 책이다,, 좋은 예제와 쉽고 재밌는 글로 객체지향을 제대로 이해시켜주신다. (🥺💜) 저의 개발도서 TOP1 🏆🏅입니다. 기억하고 싶은 것을 기록합니다 ✏️ 좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! (예제도 함께 있는 책을 꼭 읽어보시는 것을 추천드립니다!) [1] 좋은 설계란? 좋은 설계란 오늘의 기능을 수행하면서 내일의 변경을 수용할 수 있는 설계다. 좋은 설계란 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다. [2] 좋은 객체지향 설계란? 좋은 객체지향 설계는 협력하는 객체들 사이의 의존성을 적절하게 조절함으로써 변경에 용이한 설계를 만드는 것이다. 구체적으로 말하면.. 객체지향의 본질은 협력하는 객..
Understanding Xcode Build System 이라는 포스팅을 읽었는데 대학생때 배웠던 Compile Process (전처리기 -> 컴파일러 -> 어셈블러 -> 링커) 에 여기저기서 주워들은(?) llbuild, SIL, clang 등 Xcode Build 관련 용어들이 단계별로 들어가있었습니다. 신기해서 기록합니다 ✏️ 저의 번역말고 원글을 읽어보시는 것을 추천드립니다. 이렇게 다섯단계인데 한 단계씩 살펴보겠습니다. [1] 전처리기 Preprocessor 전처리 단계의 목적은 컴파일러에 제공할 수 있는 방식으로 프로그램을 변환하는 것입니다. 매크로(macro)를 정의로 대체하고 dependencies를 발견하며 전처리기 지시문(preprocessor directives)를 해결합니다. Sw..
[ 문제 ] 유니티에서는 게임 실행 중일 때 값을 변경하면서 실시간으로 동작을 확인 할 수 있습니다. 하지만!! 게임 실행 중 바꾼 값은 저장되지 않습니다. 게임 실행을 끝내면 실행 전으로 되돌아갑니다. 근데 게임을 실행 -> 종료할때 모두 플레이버튼을 눌러야하고 토글 상태에 따라 플레이 버튼의 UI나 아이콘이 변하지 않습니다. 그래서 게임 실행 -> 플레이 버튼 안눌렀으면서 "플레이 버튼을 눌러서 게임을 종료시켰구나~" 라고 착각하고 위치 등 값을 바꿈 -> 헉,,, 게임실행 중 바꿔버린 값이여서 소용없음 -> 게임종료하고 다시 처음부터 바꿔줌,, 이런 일이 많았습니다,, 하지만 초보자를 위한 유니티 입문 책을 읽다가 '게임 실행 중에 실수로 값을 변경하지 않기 위한 팁' 을 알게 되었어요 (감동,, ..
[ 목표 ] 간단한 공굴리기 게임을 만들면서 오브젝트의 컴포넌트 중 Collider, RigidBody를 살펴봅니다. 그리고 Physics Material, Material도 함께 살펴보겠습니다. [1] 프로젝트 만들기 HelloBall 이라는 이름의 프로젝트를 만들어줍니다. SampleScene을 Main으로 이름바꾸고 저장해줍니다. [2] 공이 굴러갈 경사면 + 공 추가 3D Object > Cube 를 이용해서 경사면을 만들어줍니다. 3D Object > Sphere를 이용해서 공을 만들어줍니다. Main Camera를 선택하면 아래 Game Preview가 보이는데 (실제 게임에서 보이는 화면) 이걸 참고해서 오브젝트들을 위치시켜줍니다. [3] 공의 Sphere Collider 컴포넌트 살펴보기 ..
1탄에서 이어지는 글입니다 ✏️ [1] 뷰포리아 데이터베이스 생성 + 타겟 추가하기 애플리케이션이 이미지를 인식하고, 인식한 이미지를 사용하여 게임플레이를 실행하고 그래픽스 또는 정보를 표시하도록 허용하려면 Target database 를 생성해야 합니다. 타겟 관리자 페이지에서 타겟 데이터베이스를 생성할 수 있습니다. Add Database 눌러줍니다. Database이름은 플젝이름으로 해줬습니다,, (연습용이니까..! 나중에 이름바꿀수 있다고 합니다!) 생성이 완료되면 Add Target을 해줍니다. Single Image를 선택하고 이미지를 업로드 시켜줍니다. 이미지는 집에 있는 멍멍쓰 포스트잇을 찍어서 올렸습니다 🐶 width는 스케일 값인데 일단 1로 해줬어요 (참고) 이렇게 추가하면 Ratin..
- Total
- Today
- Yesterday
- ipad multitasking
- Python Type Hint
- PencilKit
- Sketch 누끼
- METAL
- Django Heroku Scheduler
- 구글 Geocoding API
- flutter dynamic link
- 플러터 싱글톤
- DRF APIException
- 장고 Custom Management Command
- Flutter getter setter
- SerializerMethodField
- drf custom error
- github actions
- Dart Factory
- 장고 URL querystring
- flutter 앱 출시
- Flutter Clipboard
- ribs
- cocoapod
- flutter deep link
- 플러터 얼럿
- Flutter 로딩
- flutter build mode
- Django FCM
- Watch App for iOS App vs Watch App
- Django Firebase Cloud Messaging
- Flutter Text Gradient
- Flutter Spacer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |