본문 바로가기

개발

(11)
[STUDY] 깨끗한 코드란 무엇일까? 로버트 C.마틴의 클린 코드 보통 개발자 커리어를 시작하게 되면 여러 종류의 코드를 경험하게 되는데, 저마다 가진 '더럽다, 지저분하다' 느끼는 코드들을 머릿속에 가지고 있을 것이다. 그렇다면 '더러운 코드'란 소위 어떤 코드일까? 반대로 깨끗한 코드, '클린코드'란 무엇일까. 그리고 클린 코드가 가져다줄 수 있는 이점들은 무엇이 있을까? 로버트 C.마틴의 클린 코드를 완독하고 핵심 내용들에 대해 되새겨보고자 포스트를 쓰기로 했다. 책 전반에 있어 좋은 내용들이 참 많지만, 핵심적으로 간추려보고자 직관적인 개념인 '더러움' 과 '깨끗함'으로 나누어 정리해본다. Dirty code - 함수의 역할을 곧바로 읽을 수 없어 추측과 내비게이션을 반복해야 한다. - 유사한 내용이 군데군데 반복되고 있다. - 과한 주석이 코드를 읽기도 전에 ..
[안드로이드 | JSON] Json 파일 Parsing해 List로 만들기 프로젝트 리소스에 포함된 Json 파일을 불러와 List로 만들 일이 생겼다. 이 과정을 위해 해준 일들을 우선 나열해보면 4단계 정도가 있다. 1. 프로젝트에 Assets 폴더를 만들고 불러오고자 하는 json 파일을 집어넣는다. 2. GSON 라이브러리 및 Room Database import 3. Json 파일로부터 만들고자 하는 Data class를 정의 (3-1) 필요한 경우에 따라 TypeConverter 추가 정의 4. Json 파일을 String 객체로 Parsing > Gson 사용해 List 뽑아내기 Json Parsing을 위해 Gson과 AAC의 Room을 사용했다. 그러면 1번부터 쭉 밟아보자. 1. 프로젝트에 Assets 폴더를 만들고 불러오고자 하는 json 파일을 집어넣는다...
[안드로이드 | Flutter] 안드로이드 스튜디오가 dart 파일을 읽지 못할 때 Flutter 개발을 진행하면서 간헐적으로 .dart 파일이 말대로 하얗게 질려서 실행 불가능한 파일이 되는 문제가 있었다. 뭐라고 검색해야될지 갈피가 잘 안잡힐 때 우연히 우클릭으로 이를 해결하는 방법을 찾을 수 있었다. 문제는 dart 파일이 안드로이드 스튜디오에서 Plain Text로 마킹되어 있었고, 이는 해당 파일을 우클릭해 Mark as Dart를 해주면 본래대로 실행이 가능해지는 것이었다. 물론 반대로 Plain Text로 마킹도 가능하다. (어떤 필요에 있어서 있는 옵션인지는 잘 모르겠다.)
[안드로이드 | Flutter] 빌드 오류 : Could not build the application for the simulator. Error launching application on iPhone 11 Pro Max. 플러터 테스트를 열심히 하던 도중에 Toast 메시지를 보여주는 Widget을 추가한 뒤로 아이폰 시뮬레이터에서 빌드가 실패하면서 설치가 되지 않는 이슈가 있었다. 이를 해결하기 위해 처음에는 안드로이드 스튜디오 > Tools >Flutter > Flutter clean 을 써봤으나 소용이 없었고, 보다 상단에 나왔던 오류메시지에 명시된 대로 맥 터미널에 sudo gem install cocoapods 를 입력해 넣었다. 그러면 Ruby를 이용해 빌드에 필요로 하는 CocoaPods 설치를 진행하며, 설치가 끝난 이후로는 오류없이 빌드가 잘 되는 것을 확인할 수 있었다. (매우 간단한 이슈였음)
[안드로이드 | Flutter] Android Studio에서 첫 Flutter 프로젝트 시작하기 마음만 먹고 차일피일 못잡던 Flutter를 일단 시작을 해보기로 했다. 별도로 플러그인을 받는등의 시도를 하다가 후에 Android Studio에서 대부분의 절차를 마칠 수 있음을 알았다. 이번 설치는 안드로이드 스튜디오 3.5.1 버전에서 진행하였다. 1. Android Studio의 Configure > Plugins로 이동한다. 2. Marketplace에 Flutter를 검색해 설치한다. 3. Flutter 설치를 마치면 안내메시지에 따라 Android Studio를 재시작한다. 4. 다시 켜진 Android Studio 첫화면에 못보던 메뉴가 새로 생긴 것을 확인할 수 있다. 5. Start a new Flutter project를 클릭해 신규 Flutter 프로젝트 생성을 시작한다. 6. 프..
[안드로이드] CountDownTimer의 시간 Sync 문제 해결하기 프로젝트에서 MediaPlayer와 CountDownTimer를 사용하면서 몇가지의 애로사항이 있었는데, 이를테면 영상을 중지하고 다시 재개할 때의 기존의 타이머를 어떻게 다시 설정하냐는 것이었다. 왜냐하면 CountDownTimer에는 별도의 pause 기능이 없고, stop만이 가능했기 때문이다. 우선 기존의 요구사항은 아래와 같다. MediaPlayer는 10개의 영상을 연달아 재생한다. 각 영상은 각기 다른 재생시간을 가진다. 영상은 10초의 대기시간을 가진 뒤 재생을 시작한다. 사용자는 대기시간 및 재생중에도 상관없이 일시정지 및 다시시작(resume)이 가능하다. 일시정지 및 다시시작, 재생을 진행하는데 모든 타임라인이 일치하여야 한다. (남은 시간, 경과 시간 등) 여기서 포인트는 일시정지 ..
[안드로이드 | 코틀린] 데이터바인딩을 사용할 때 Fragment 내의 View 좌표 가져오기 이번에 신규로 구현하는 페이지에서 유저의 터치에 따라 화면 내의 커서를 특정 위치로 보내야 하는 요구사항이 있었다. 터치를 받는 곳은 별도의 뷰에서 들어오는 것이었기에, 터치는 터치대로 Listen해 마찬가지로 별도의 뷰로 되어있는 인디케이터를 움직여야 했다. 이를 해결하기 위해 커서가 가장 좌측으로, 그리고 우측으로 최대한 움직였을 때의 위치를 더미 View를 사용해 지정하였고, 둘간의 좌표 차이를 활용해 커서를 수평이동 시키기로 했다. 서론은 이정도로 마치고 데이터바인딩된 Fragmet 레이아웃으로부터 특정 뷰의 좌표를 가져오기 위한 방법은 아래와 같다. ... val binding = DataBindingUtil.inflate(inflater, R,layout.fragment_layout, cont..
[안드로이드] 사용자 기기의 글꼴 사이즈에 앱 대응하기 어떤 UI/UX 가이드라인에 맞추어 설계한 앱의 경우에도 사용자가 임의로 기기의 폰트 사이즈를 변경하거나, 혹은 크거나 작게 사용하고 있는 경우에는 기존의 의도와 다르게 앱의 몇몇 뷰들이 겹치거나 텍스트가 잘려보인다는 등의 현상이 발생하기 마련이다. 이와 같은 경우, constraintLayout으로 구성되어 있는 레이아웃들을 전부 손봐서 기본 폰트 사이즈의 경우 기존 UI/UX 가이드라인에 알맞게 보여지도록 하고, 큰 폰트 사이즈를 사용할 경우 잘려나가는 부분이 없도록 최소한의 조정을 하는 방안이 있었는데, 몇몇 뷰 요소에 엄격하게 들어가있는 width 값들이 있어 손대기가 조금 난해한 부분이 있었다. 그래서 다르게 생각하기로, 기존 가이드라인이 노령 연령대를 고려해 맞추어진 UI/UX라면 (큰 폰트사..