본문 바로가기

전체 글140

Datastore에 대해 알아보자 먼저 이제는 SharedPreferences는 deprecated된다고 한다. 이유는 SharedPreferences는 한계점이 존재한다. SharedPreferences는 비동기 작업을 제대로 해주지 않으면 ANR을 발생시킬수 있으며, 오류가 생길 시 확인이 불가능했으며, 런타임에 예외가 생기면 런타임에러가 발생해 잘못 사용하면 앱이 강제 종료 될 수 도 있다고 한다. 또한 Strong consistency가 보장되는 api가 없어 다중 스레드 환경에서 다른 결과값이 생길 수 있었다. 이러한 한계가 있어 다양한 처리를 해주어야 했다. # Strong consistency : 데이터베이스에서 사용하는 용어인데 관계형 데이터베이스에서 시간이 달라도 같은 정보로 처리하는 느낌으로 보인다. Datastore의.. 2022. 10. 23.
Android의 Context에 대해서 먼저 나는 Context라는 개념에 대해 사용만 했지 뭔가 확실히 누가 물어보면 답을 하기 애매했다. 그래서 한번 작성해보려고 한다. 먼저 문맥이란 뜻의 Context는 "어떤 객체를 핸들링하기 위한 접근 수단" 의미를 가진다고 한다. 좀더 설명하자면 일반적으로 멀티 테스킹을 지원하는 운영체제 에서 Task들은 운영체제가 정한 기준에 따라 작업을 번갈아가며 수행한다. 이떄, 해당 Task들의 수행상태를 기억하기 위해서 Task마다 실행 상태에 대한 정보를 구성하고 있는것들 Context라고 한단다. 음.....뭔가 이해가 조금씩 되고 있다. 자 그럼 Android 에서의 Context의 개념에 대해 알아보자. Android는 여러가지의 실행 형태(4대 컴포넌트 = 액티비티,서비스 등)이 있다. 그래서 클.. 2022. 10. 20.
상속, open 키워드 먼저 회사 2주차쯤 리펙토링하고 싶은 코드를 보았다. 아래와 같은 코드가 AllFilter, ProjectFilter, TemporaryFilter 등등 안에 PREF_NAME 만 다르고 나머지는 똑같은 코드였다. 가독성도 떨어지고 같은 작업을 수행할거기 때문에 바꿀때 다 따로 바꿔야 하는 무지막지함을 느낄거 같다 판단하고 만져보기로 했다. 그러면서 상속과 Object에 대해 이해해 보려 한다. 자바에서 상속 방법은 아래와 같다. class ChildClass extends ParentClass {} 코틀린에서는 상속방법은 open을 붙이는데 다음과 같다. open class parentClass{} 만약 open이라는 키워드를 사용하지 않고 코드를 작성할 경우 에러문구가 나온다. 코틀린은 open 키워.. 2022. 10. 13.
SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file.. 정말 간단한 에러 인데 자주 나오는 에러이니 기억해두자. 바로 SDK location not found 이다. 말 그대로 SDK 경로를 찾을 수 없어서 발생하는 에러이다. 주로 맥 -> 윈도, 윈도 -> 맥으로 프로젝트를 옮길 때 자주 발생하는 에러입니다. 안드로이드 스튜디오에 내 프로젝트 디렉터리로 가서 local.properties 파일을 한번 찾아보면 존재하지 않거나 경로가 잘못되어있을 가능성이 큽니다. 경로가 잘못되어 있다면 내 PC에 맞게 변경해주시면 된다. 보통 윈도의 경우 c:\Users\'사용자 이름'\AppData\Local\android\adk 그리고 맥의 경우 /Users/'사용자 이름'/Library/Android/sdk 현재 우리 회사 예시 sdk.dir=C\:\\Users\\gk.. 2022. 10. 12.
2022-10-10 클라이언트 vs 서버 오늘 집터뷰를 카카오 로그인을 개발하기 위해 준비를 하려 했지만 또 서버와 의견대립이 발생했다. 아래의 사진을 보자 위의 사진은 우리 카카오 로그인 을 하기위해 내가 정리해 놓은 홈터뷰 로그인 방식을 flowLogic을 도식화하였다. 의견 대립 내가 들었던 서버의 요구사항은 아래 사진이다. 서버가 요구한 요구사항은 LoginActivity에서 카카오 로그인을 할때 카카오 token을 넘겨주고 JWT token을 받는 행위와 해당 유저가 가입되어있는 유저인지 아닌지 판별하는 로직을 나누는 형태이다. 나는 이 로직에서 왜 두가지를 나누어서 통신을 두번하는지에 대해 이해가 되지 않는다.(뭐 로직은 한번에 하나의 기능만 하는것이 좋다고 하지만 재사용을 하지만 않는다면 굳이 나눌필요가 있을까?) 다음으로 내가 생.. 2022. 10. 10.
안드로이드 최신버젼 오류 잡는법 나는 요 며칠 돌핀으로 업데이트하고 xml이 뜨진 않는 현상이나 Logcat이 이상하게 뜨는 현상을 직면하고 말았다.... 이래서 진짜.........함부러 업데이트 하면 안되는데.....안드로이드는 자꾸 최신버젼을 업데이트 시키게 한다...!!!^^ 그래서 버젼을 내리고 싶어도 바로 직전이 아닌 작년꺼를 추천해줘서 그것도 그거대로 문제다....진짜 왜그러냐 진짜...!! 나의 안드센세에게 이 사실을 말했고 안드센세는 이러한 문제를 겪고 있는 한 블로그를 알려주어 해결해주었다. 자 이제 하는 방법에 대해서 알려주겠다. 1. 버젼 정보 복사하기 아래 JetBrain 사이트에서 확인하면 모~~~든 Release 리스트가 나온다. 여기에서 다운로드 할 버전 번호를 복사해둔다. https://plugins.je.. 2022. 10. 9.
디버깅 찍는 법 나는 예전 프로젝트를 할때 오류를 잡기 위해 Log.d 와 같은 방법으로 찾아갔다. 그러나 이번에 취업을 하면서 사수가 "디버깅 할 줄 아세요??"이런 식으로 묻자 말문이 막혔다. 역시.....실무자는 달라도 달라.... 어쨌거나 지금 디버깅을 마스터하여 사수에게 이쁨을 받아보자!! 브레이크 포인트(BreakPoint) 찍기 모든 동작을 할 때 일일히 디버깅을 하는 것은 불가능합니다 특정 동작을 할 때 프로그램을 멈춰서 한 단계씩 실행을 시켜야합니다 그러기 위해서는 소스코드에 디버깅 포인트를 찍어야합니다 아래처럼 디버깅 찍을 코드에서 왼쪽 줄 번호의 빈 공간을 클릭하면 브레이크 포인트가 찍힙니다. 이렇게 찍으면 다음으로 넘어가지 않고 기다립니다. 브레이크 포인트가 다이아몬드로 찍힌다면 이 부분은 메소드 .. 2022. 10. 8.
안드로이드 자주 쓰이는 단축키 설명 단축키(Window) 단축키(Mac) 들여쓰기 취소 shift + Tab 뒤로가기 comment + option + 2022. 10. 8.
Stnc Android SDKs 경고창 안드로이드 스튜디오에서 프로젝트를 받을시 다음과 같은 경고창이 발생한다. 이유는 받아올 프로젝트의 지정한 경로가 로컬 컴퓨터에 지정한 경로가 다르다고 하는것이다. 그러기 때문에 해당경로를 로컬 경로로 알아서 재설정하는다는 메세지이다. 2022. 10. 8.
디버깅 방법에 대해서 알아보자 안드로이드 개발을 하면 에러가 났을때 도저히 원인을 못 찾는 경우가 있습니다. 특정 동작을 할 때 프로그램을 멈춰서 한 단계씩 실행을 시켜야 합니다. 그러기 위해서는 소스코드에 디버깅 포인트를 찍어야 합니다. 아래처럼 디버깅 찍을 코드에서 왼쪽 둘 번호의 빈 공간을 클릭하면 브레이키 포인트가 찍힙니다. 브레이크 포인트가 다이아몬드로 찍힌다면 이 부분은 메소드 브레이크 포인트입니다 메소드 브레이크 포인트를 사용하면 속도가 많이 느려진다 하니 왠만하면 그 밑에 코드에 브레이크 포인트를 찍어줍니다 메소드 브레이크 포인트를 찍으면 아래처럼 디버깅모드로 실행할 때 메시지가 나타납니다 디버깅모드로 실행하기 첫 번째 방법은 상단 메뉴 바의 "벌레"아이콘을 선택하여 디버깅모드로 실행할 수 있습니다 마우스를 올리면 단축.. 2022. 10. 6.
다국어 엑셀시트 추출 팁 Android Studio Plugins Marketplace 에서 AndroidStringsTool 을 검색한다 https://plugins.jetbrains.com/plugin/14444-androidstringstool AndroidStringsTool - IntelliJ IDEs Plugin | Marketplace AndroidStringsTool is plugin for Convert android multilingual to excel or convert excel to android multilingual. plugins.jetbrains.com 원하는 버젼의 압축 파일을 받는다. 이때 저장 위치를 기억해 두자. 안드로이드 스튜디오에서 Plugin을 설치하기위해 File - Setting-.. 2022. 10. 6.
10/2 성장하는 안드로이드 개발자가 되는 길 나는 다음주 첫출근을 한다. 이 회사가 나를 성장시킬 수 있는지 걱정이 많다.(SI 기업이라는 말이 있던데.....) 여러 글들을 보며 확신이 들었던건 내가 회사를 선택함에 있어서 지금은 복지가 좋은 회사보다는 나를 성장시킬수있는 회사여야 한다라는 결론을 내렸다. 그래도 서비스만큼은 마음에 든다.(뭔가 잘 될 수 있을 거 같은 서비스) 만약 회사가 나를 성장시킬 수 없다라는 판단이 들면 어떻게 해야할까? 여러 글들을 보며 나만의 규칙을 세우는게 중요하다고 느꼈다. 규칙을 정리하면 다음과 같다. 1. 공식 문서는 무조건 영어로 보기 2. 각종 weekly 구독하기 3. 나만의 멘토 찾기 4. 주기적으로 라이브러리 감시하기 5. 개발자 행사 참여하기 6. 여러 커뮤니티 활동하기 7. 블로그 작성하기 1. 공.. 2022. 10. 2.
Thread VS Coroutine 나는 코틀린을 사용하다보니 코루틴을 사용하는데 이를 가지고 비동기 처리를 했다. 하지만 쓰레드와 비슷한 동작을 하지만 다르다고 한다. 그 차이점을 작성해보고자 한다. 그전에 잠깐 기본 CS에 대해 알아보도록 하자. Process : 보조기억장치의 '프로그램'이 메모리 상으로 적재되어 실행되면 '프로세스'가 된다. Thread : 같은 Process 내에서 실행되는 여러 작업 (흐름)의 단위 동시성 (Concurrency) 동시성 프로그래밍은 말 그대로 동시에 여러 작업을 수행하는 것이다. 하지만 눈으로 보기에 동시에 실행되는 것이지, 사실 시분할(Interleaving) 기법을 활용하여 여러 작업을 조금씩 나누어서 번갈아가며 실행하는 것이다. 위 예제를 살펴보면, Task 1 과 Task 2 를 잘개 쪼.. 2022. 9. 29.
Item4 - inferred 타입으로 리턴하지 말라 코틀린 타입 추론을 사용할 때는 몇 가지 위험한 부분이 있는데, 이러한 위험한 부분을 피하려면 할당 시에 inferred 타입은 정확하게 오른쪽에 있는 피연산에 맞게 설정된다는 것을 기억해야함 절대 수퍼 클래스 또는 인터페이스로는 설정되지 않음 예시 open class Animal class Zebra: Animal() fun main() { var animal = Zebra() animal = Animal() } 명시적으로 지정 open class Animal class Zebra: Animal() fun main() { var animal: Animal = Zebra() animal = Animal() } 그러나 직접 라이브러리를 조작할 수 없는 경우에는 이런 문제를 간단하게 해결할 수 없고 이러한 .. 2022. 9. 24.
item3 - 최대한 플랫폼 타입을 사용하지 마라 코틀린은 null-safety 매커니즘으로 인해 NPE를 거의 찾아보기 힘듬 null-safety 매커니즘이 없는 자바, C 등의 프로그래밍 언어와 코틀린을 연결해서 사용할 때는 NPE 예외가 발생할 수 있음 public class JavaTest{ public String giveName() { ... } } 위 자바 코드로 반환된 타입을 사용할때에 @Nullable 어노테이션이 붙어 있다면 nullable로 추정하고 String?으로 변경하면 되는데 만약 붙어 있지 않다면 자바에서 모든 것이 nullable일 수 있으므로 최대한 안전하게 접근하기 위해 nullable로 가정하고 접근해야 함 제네릭 타입 public class UserRepo { public List getUsers() { ...} }.. 2022. 9. 24.