본문 바로가기

전체 글

(88)
URL 에 콜론(:), 더하기(+)와 같은 문자가 포함되었을 때 이번 문제는 랜덤리즘 프로젝트를 진행하다가 발생한 문제 .. 문제상황 서버에 문자열 관련한 문제들을 받기 위해서 Request로 solvable:true+tag:strings 의 쿼리를 전송했는데, 계속해서 원하는 값을 받을 수 없었다. 예상한 응답 실제로 받은 응답 2220 개의 문제 개수와 첫 문제가 1013번 이어야함 2220개가 아닌 전체 총 문제의 개수(29031개)와 가장 첫 문제인 1000번부터 전달받음 문제 해결 과정 가장 먼저 의심되었던 부분은 주소에 : , + 와 같은 문자가 포함되어있었는데 무슨 뜻인지 알지못해서 아래와 같이 그냥 하나의 문자열로 전달했다. val requestQuery = "solvable:true+tag:$tagKey" 이 부분이 문제인걸까? 싶었는데 쿼리로 어떻게..
우아한테크코스 6기 안드로이드 프리코스 2주차 회고 이번 2주차에서 지킬려고 노력했던 건 지난 1주차 피드백 + 이번 2주차 추가된 요구사항 1주차 코드리뷰 - 코딩컨벤션 - 상수화 - 네이밍 - if-else indepth - equals() 대신 기본연산자(==) 사용 2주차 추가된 요구사항 - indent depth 3이 넘지 않도록 할 것 (2까지만 허용) - 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들 것 - JUnit 5 dhk AssertJ 를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인할 것 그럼 2주차 회고 가보자고 .. 🎯 2주차 미션 GitHub - woowacourse-precourse/kotlin-racingcar-6: 자동차 경주 미션을 진행하는 저장소 자동차 경주 미션을 진행하는 저장소...
우아한테크코스 6기 안드로이드 프리코스 1주차 회고 벌써 첫 주가 지나가고 새로운 미션이 주어졌다! 이렇게 시간이 빠를수가 1주차 미션은 아래와 같은 부분을 중점으로 두었기에 가벼운 미션이 주어진다고했다. (조금씩 난이도가 높아진다고함ㅠ) 1) 개발 환경 세팅 2) GitHub 에 익숙해지기 일단 지금 1주차 과제 마무리가된 시점에서 PR 수는 219 이제 219명이랑 싸워야하는 상황임 아무튼 과제 회고를 해보자고 [1] 기능 목록 작성 기능을 구현하기 전에 기능 목록을 만든다. 지금까지 프로젝트를 진행해왔지만, 먼저 기능 목록을 작성했던 적은 선인장 프로젝트 외에는 없었다. 혼자 프로젝트를 진행할때는 아예 그러지 않았다는 얘기 .. 그래서 문어발식으로 a 기능을 만들었다가 b 기능이 생각나면 b 기능을 만들었다가 다시 a 로 돌아오고 이런 식이었다. 그..
[About] 1.0.0 에서 1.1.0 으로 업그레이드 기념 회고 호주 워홀을 하는 중에 더 이상 미루면 안될 것 같아 냅다 배포를 한 어플, About 처음으로 배포된 어플을 보완하여 버전을 올려서 시장에 내놓았다! 많관부 About - 생각 기록 서비스 - Google Play 앱 하나의 주제, 다양한 생각을 기록하는 서비스 play.google.com 잘한 점 1) 미리 배포를 해놨기에 부족했던 부분에 대해서 수정할 수 있었던 것 같다. 2) 코멘트를 삭제하는 부분에서 ItemTouchHelper 를 통해 구현하였는데, 검색을 해도 원했던 방법이 없었다ㅠ 유튜브에서 우연찮게 원하는 기능을 구현하는 사람을 찾아서 코드를 일단 그대로 옮겨 작성한 후에야 이해했다. 하지만 유튜버가 구현한 방향과 내가 원했던 스와이프 방향이 달랐기 때문에 이해한 내용을 바탕으로 코드를 ..
[Android] Parameter specified as non-null is null 문제 상황 java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter think 아이템 삭제 버튼을 클릭하면 NullPointerException 발생 해결 과정 첫번째로 했던 일은 Logcat 을 살펴보면 링크로 ThinkPresenter 의 getThink() 메소드를 가리키길래 거기서 문제가 있나 싶었다. 그런데 삭제를 했는데 getThink() 가 다시 호출이 되나? 싶어서 아래의 사진과 같이 삭제를 했을때의 흐름을 살펴보았다. 예상했던 화면 흐름은 삭제를 마치고 popBackStack() 을 하면 바..
[Android] Room Database 버전 올리기 그런데 오류를 곁들인 .. (Migration didn't properly handle) 버전 관련해서 포스팅했는데 버전을 또 올려?!?! [ 버전 업그레이드 하는 이유 ] 처음에 하나의 테이블(주제)을 만들고 기능을 추가하다보니 또 하나의 테이블(생각)을 만들고 .. 그러다보니 테이블간에 외래 키를 설정해주었어야 하는데 그걸 안해줘서 .. 초기화를 하려고하면 주제 삭제 -> 생각 삭제 -> 코멘트 삭제(또 추가된 테이블) 이렇게 플로우가 되는 것임 .. 일단 주제 삭제 -> 생각 삭제를 진행하면서는 외래 키를 생각해내지 못해서 코드로 작성했었다. override fun deleteAllTopic() { CoroutineScope(Dispatchers.IO).launch { var topicListCount = 0 var thinkListCount = 0 topicRepository.getT..
[Android] EditText 의 데이터 Intent 로 받아오기 [ 문제 상황 ] EditText 를 통해 사용자 입력을 받아 Intent 로 데이터를 넘겨 받아오는 과정에서 getStringExtra()를 사용하면 데이터가 null 이 되는 것을 알게되었다. 이유는 무엇일까? [ 해결 과정 ] 디버깅을 통해 일단 (1) 데이터가 잘 전달되는지 (2) 잘 받아와지는지 확인하였다. 1) 데이터가 잘 전달되는지 확인하기 moveTopicList 는 TopicListFragment 로 데이터를 전달해주는 Intent 객체이다. mExtras 를 확인해보면 Bundle 안에 topic=주제입력 으로 잘 들어가있는 것을 확인할 수 있다. 2) 데이터가 잘 받아와지는지 확인하기 데이터를 받는 화면인 TopicListFragment 에서 디버깅해보면 일단 해당 Intent 의 m..
[Android] MVP 디자인 패턴에서 View 와 Presenter 는 왜 꼭 1:1로 대응되어야 할까? 디자인 패턴을 공부할때면 MVP 패턴에는 항상 View 와 Presenter 가 1:1로 대응되어야 한다고 설명이 되어있는 것을 볼 수 있다. 그런데 왜? 왜 1:1로 대응되어야 하는지, 1:1이 아니면 어떻게 되는지에 대해서는 설명을 잘 보지 못했던 것 같다. 실제로 안드로이드 면접을 봤을 때 이와 관련해서 질문을 하셨었다. MVP는 View 와 Presenter 가 1:1로 대응되어야 한다고 하셨는데, 왜 1:1로 대응되어야 하는걸까요? 1:1로 대응되지 않으면 안되는걸까요? 공부했던대로 MVP는 1:1로 대응되어야합니다~ 라고 대답만 드렸었지 1:1이 되면 안되는 부분에 대해서는 생각해보지 않았기 때문에 답변을 못했었다. 그 이유를 About 프로젝트를 하면서 조금은 알 것 같았다. about 프로..