구글 로그인을 구현 도중 잘 돌아가던 코드가 갑자기 돌아가지 않게 되었는데 멘붕... 현상 구글 로그인이 진행되는 도중 10초(?) 가량 멈춰있다가 아무 것도 진행되지 않고 구글 로그인 창이 내려간다 이후 구글 로그인 버튼을 눌러도 (1)로 반복 해결법 우선 에러의 원인을 파악하기 위해 OnActivityResult로 날라오는 data(Intent 타입)을 GoogleSignInResult 타입으로 바꿔주는 코드를 작성한다. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // Intent 타입으로 받은 data..
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!! 코틀린 코드를 접할 때 생소한 코드가 정말 많았지만 그 중에서도 가장 눈에 띄던 것은 run( )이나 apply( ), let( )과 같은 익숙한 영어 단어로 되어 있는 함수들이 독특한 형태로 사용되고 있는게 신기해보였다. (지금와서야 알게 된건 이런 함수들이 고차함수였다는 사실...) 지금은 어떻게 사용되는지 알게 되었지만 아직 익숙하다고 말할수는 없으니 한 번 정리해보도록 하자. 1. run( ) run( ) 함수는 두 가지 형태로 사용된다. 단순히 람다 함수를 실행하고 그 결괏값을 얻는 목적으로 사용 객체의..
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!! 함수형 프로그래밍은 요새 가장 핫한 프로그래밍 패러다임이다. 누군가가 말했다. 함수형 프로그래밍을 이해하기는 매우 힘들지만 마침내 이해하고 나면 함수형 프로그래밍을 어떻게 말로 표현해야할지 모르게 된다고.. ㅋㅋㅋㅋㅋ저 말 자체가 왠지 모르게 재밌기도 했고 지금 당장 사용하지는 않더라도 이 패러다임이 어떤 배경에서 나왔고 대략적인 느낌은 알아두는게 낫지 않을까 싶은 마음에서 이렇게 정리해보려고 한다. 1. 함수형 프로그래밍 정의 1-1. 프로그래밍 패러다임으로서의 함수형 프로그래밍 소프트웨어 개발 패러다임은 대략..
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!! Object 클래스 0. 왜 굳이 익명 클래스를 정의할 필요가 있을까? 익명 클래스는 말 그대로 이름이 없는 클래스를 말한다. 근데 어떤 클래스를 선언하기는 해야 하는데 이 클래스의 객체를 여러 개 생성하지 않고 딱 한 번만 생성한다면 이름을 짓기가 귀찮기도 하고 코드를 지저분하게 만들 수 있기 때문이다. 이럴 때 이름 없는 클래스를 선언하고 바로 생성해서 이용한다. 1. obejct를 이용한 익명 내부 클래스 정의 object 예약어는 익명 클래스를 정의할 때 사용한다. 클래스 선언 때 class 예약어를 작성..

안드로이드 개발을 할 때, Activity나 Fragment에서 레이아웃 xml에서 textView나 Button을 가져오기 위해 findViewById 코드를 지겹게 작성해보았을 것입니다. 이런 코드를 줄여보고자 kotlin에서는 kotlin-android-extenstions를 사용하기도 하지만 요즘은 view binding을 사용하는 추세로 가는 듯 합니다. 그래서 필자도 view binding을 활용하고자 아래 공식 문서의 참조 코드를 보면서 코드를 작성하고 있는데 문득 이런 생각이 들었습니다. Fragment에서는 왜 OnDestroyView에서 binding을 다시 null로 바꿔주는 코드를 추가해줄까? Activity에서와 Fragment에서 선언하는 binding 변수 개수가 왜 다를까? ..

문제 BlankActivity를 생성하면서 의도치 않게 wearable 화면을 추가하게 되었는데 앱을 실행하려고 하니 다음과 같은 상태가 되어 있었다. 해결 참고한 해결 방법은 역시나 스택오버플로우!! stackoverflow.com/questions/42596885/android-studio-error-missing-feature-watch android studio error : missing feature: WATCH I have tried to run one simple application with android studio on my smartwatch and I've got the following message: my smartwatch runs android 4.4.2 which has ..

웹, 앱을 개발하다보면 자연스럽게 만나게 되는 개념이 아키텍처이고 MVC 패턴이라는 단어를 쉽게 만나볼 수 있습니다. 이런 아키텍처 패턴이 중요한 이유는 수없이 있겠지만 제가 체감한 경험은 다음과 같습니다. 내가 쓴 코드를 다시 보거나 다른 사람이 내 코드를 볼 때 어떤 코드가 어디에 있을지 예상하기 쉽다. 코드의 기능이나 로직이 잘 분류되어 있어 테스트를 할 때 간편하다. 코드의 기능이나 로직이 잘 분류되어 있어 하나의 파일에 과도한 코드가 몰리는 것을 방지할 수 있다. MVP, MVVM 패턴은 MVC 패턴의 파생 패턴이므로 MVC > MVP > MVVM 순으로 정리를 해보겠습니다. 0. Model과 View 본격적으로 아키텍처 패턴을 알아보기 전에 Model과 View를 제대로 알아보고 가야합니다. ..
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!! 1. 추상 클래스 1.1. 추상 클래스 선언(abstract) 추상 함수는 미완성 함수 혹은 실행 영역이 없는 함수를 의미한다. 추상 클래스는 추상 함수를 포함하는 클래스를 의미한다. 추상 프로퍼티란 선언부만 있는 프로퍼티를 말한다. abstract 예약어를 활용하여 추상 함수, 추상 프로퍼티와 추상 클래스를 명시할 수 있다. 1.2. 추상 클래스 이용 추상 클래스는 그 자체로는 객체를 생성할 수 없고 하위 클래스에서 추상 멤버들을 구현하여 생성해야 한다. 추상 클래스는 공통 코드(라이브러리, 프레임워크)를 작성..