원하는 결과를 못 만들어내는경우가 있다.예를들어- 서버로 부터 데이터를 읽어올려고 햇는데 인터넷 연결 문제로 실패한경우- 조건에 맞는 첫번째 요소를 찾으려 했는데 조건에 맞는 요소가 없는 경우- 텍스트를 파싱해서 객체를 만들려고 했는데 텍스트의 형식이 맞지 않는 경우 예외 상황을 처리하는 방법은 다음과 같이 두개가 있다.1. null 또는 실패를 나타내는 sealed 클래스 사용 (현재 내가 쓰고있는 방법이다)-> 아래 2번 방법보다 알아보기 쉽고 효율적2. 예외 throw-> 놓칠 가능성이 있고 전체 애플리케이션을 중지시킬수 있다. 여기서 예외는 어떤 정보를 전달하는 역할을 하면 안된다. 오직 잘못된 상황을 나타내고 처리하는 용도로만 사용해야 한다.이유1. 예외가 전파되는 과정을 추적하기 어려움2. 코..
이 아이템은 큰 내용이 없어서 간단히 요약- exception을 던질 일이 있다면 내가 오류를 정의하기 보단 표준 라이브러리 오류를 사용하자 아래와 같은 표준 오류들이 있다.- IllegalArgumentException- IllegalStateException- IndexOutOfBoundxException- ConcurrentModificationException- UnsupportedOperationException- NoSuchElementException등

특정한 동작을 해야하는 코드가 있다면 예외를 활용해 제한을 거는것이 좋다 제한을 걸었을때 장점1. 문서를 읽지 않은 개발자도 문제를 확인할 수 있다.- 코드의 최상단 부분에 제한을 걸어두면 문서를 읽지 않은 개발자도 코드의 윗줄만 보고 간단히 어떤 값이 오면 문제가 될수있나 확인 가능 2. 문제가 있는 경우 함수가 예상하지 못한 동작을 하지 않음. - 문제가 있는 값이 올때 처리를 해주기때문에 예상치못한 동작을 막는다 3. 코드가 어느정도 자체적으로 검사된다(?) 단위 테스트를 줄일 수 있다.- 아마 assert 얘기인듯.. 함수 중간중간 assert를 통해 확인을 해주면 테스트 코드를 하나하나 만들지 않아도 어느정도 테스팅이 된다는 말인듯 4. 스마트 캐스트를 활용할 수 있게되어 타입 변환을 적게할 수..

지난 1편에서 개념적인부분에 대해 정리했다.2편에서는 실제 어떻게 구현하는지 알아보겠다. 구글 로그인 구현1. 구글 클라우드 콘솔에 들어가서 프로젝트를 만듭니다. 2. 안드로이드 프로젝트를 하나 만들고 디펜던시 설정을 해주세요 //Google Play services implementation("com.google.gms:google-services:4.3.15") implementation("com.google.firebase:firebase-auth:22.0.0") implementation("com.google.firebase:firebase-bom:32.0.0") implementation("com.google.android.gms:play-services-auth:20..

배경구글 로그인을 하면서 사용자의 전화번호, 성별 등 정보를 함께 얻을 수 있는지 알아보게되었다.본격적으로 구현에 들어가기 전에 관련 개념을 알아야 할 필요가 있다. 이번 1편에서는 개념에 대한 설명을 먼저 하도록 하고, 2편에서 실제 구현을 어떻게 하는지 설명하도록 하겠다! OAuth 2.0 ?사용자가 자원(ex. 구글 계정 정보) 에 대한 접근 권한을 부여하고 다른 서비스에서 그 자원에 접근할 수 있도록 해주는 권한 부여 프로토콜카카오, 구글, 네이버 등 어떤 서비스에서 그 서비스의 자원에 내가 만든 서비스가 접근할수있도록 권한을 부여하는 프로토콜OAuth 2 를 이해하는데 알아야 할 용어를 아래에 정리한다.용어설명Resource Owner서비스를 이용하는 유저를 뜻한다. (ex. 김도연)Servic..

요약값을 리턴하는 함수를 만들때는 반드시 타입을 명시해야 한다 타입 추론- 코틀린에서는 타입을 명시하지 않아도 변수가 선언될때 어떤 타입의 변수인지 추론해서 변수 선언이 가능하다덕분에 코드량을 줄일 수 있다 추론된 타입 특징(inferred타입 = 추론된 타입 이라는뜻이다)1. 추론된 타입은 정확히 오른쪽에 있는 피연산자에 맞게 설정된다open class Animalclass Zebra: Animal()fun main() { var animal = Zebra() animal = Animal() // 오류 발생 타입 안맞음}위 코드를 보면 animal에 타입을 명시하지 않았다. 하지만 초기화할때 Zebra() 로 Zebra 타입을 넣어서 추론때문에 animal 의 타입은 Zebra 클래스이다Zebra는 A..