Kotlin 에는 Sealed class 라는 것이 있습니다. 이 Selaed 클래스를 Enum과 같이 사용하는 경우가 많은데요. 이 Sealed Class 를 Enum 대체로 작성하는 것이 옳은 것인지 이해 못하고 사용 하는 분들도 많은거 같습니다. 이번 포스트에서는 Sealead Class 에 대한 개념과 Enum 클래스의 개념을 정의하고 어떻게 사용하면 좋을지 이야기 해보겠습니다. Sealed Class 넌 뭐니? Sealed 라는 영단어의 뜻을 알면 Sealed Class 에 대해서 이해하기 도움이 될 것입니다. Sealed 는 봉인된 이라는 의미를 갖고 있는데 이 단어의 뜻과 같이 Sealed Class 클래스는 다른 클래스에서 상속하거나 확장할 수 없습니다. 즉, Sealed Class ..
클린아키텍처에 대해 많은 관심을 갖고 다양한 회사에서 도입 및 시도하고 있습니다. 어떻게 구성해야 클린 아키텍처일까요? 이상적인 아키텍처에 대해서 로버트 C. 마틴에 의해서 소개 되었으며 복잡한 소프트웨어 시스템을 보다 관리 가능하고 유지보수 가능한 형태로 구축하기 위한 지침을 제공하였습니다. 로버트 C.마틴이 말한 클린 아키텍처의 기본적인 개념과 어떻게 Android 환경에서 도입하였는지에 대해서 Medium 에 글이 등재 했는데요. 등재한 글의 일부를 공유하겠습니다. 자세한 내용은 왜 Android 신규 프로젝트는 클린 아키텍처를 도입하였는가? 라는 기술블로그 에서 확인 할 수 있습니다. 클린 아키텍처를 왜 쓰는걸까? 클린 아키텍처는 소프트웨어 시스템의 구조를 체계적으로 설계함으로써 여러 가지 장점을..
개인정보취급방침1. 수집하는 개인정보 항목이 앱은 사용자의 개인정보를 수집하지 않습니다. 다만, 앱의 정상적인 기능을 제공하기 위해 일부 기본적인 데이터(예: 앱 사용 기록, 오류 보고)가 자동으로 수집될 수 있습니다.2. 개인정보 수집 목적수집된 데이터는 앱의 성능 개선 및 오류 수정 목적으로만 사용됩니다. 이 정보는 어떠한 개인 식별 정보를 포함하지 않으며, 광고나 마케팅 목적으로 사용되지 않습니다.3. 개인정보 보유 및 이용 기간이 앱은 개인정보를 저장하지 않으며, 자동 수집된 데이터는 문제 해결 및 성능 개선을 위한 용도로만 사용된 후 즉시 삭제됩니다.4. 개인정보 제3자 제공사용자의 개인정보를 제3자에게 제공하지 않습니다.5. 이용자의 권리이 앱은 개인정보를 수집하지 않기 때문에 별도의 권리 행..
본 개발자가 작성한 앱은 개인정보보호법에 따라 이용자의 개인정보 보호 및 권익을 보호하고 개인정보와 관련한 이용자의 고충을 원할하게 처리할 수 있도록 다음과 같은 처리방침을 두고 있습니다.1. 개인정보의 처리 목적 - 광고ID(AdID) 수집 목적Google은 사용자에게 더 많은 선택권을 제공하기 위해 광고 및 분석 작업에 사용할 수 있는 재설정 가능한 식별자인 앱용 광고ID를 도입했습니다. 이 식별자는 여러 용도가 있지만 대표적으로 게재할 광고를 맞춤설정하고 앱 사용 방식을 파악하는데 유용합니다.예를 들어 광고를 게재한 뒤에 마케팅 측에서 문맥광고, 게재빈도 설정, 전환 추적, 보고 및 보안, 사기 감지 작업을 수행할 수 있습니다.자세히 : https://support.google.com/google..
본 개발자가 작성한 앱은 개인정보보호법에 따라 이용자의 개인정보 보호 및 권익을 보호하고 개인정보와 관련한 이용자의 고충을 원할하게 처리할 수 있도록 다음과 같은 처리방침을 두고 있습니다.1. 개인정보의 처리 목적 - 광고ID(AdID) 수집 목적Google은 사용자에게 더 많은 선택권을 제공하기 위해 광고 및 분석 작업에 사용할 수 있는 재설정 가능한 식별자인 앱용 광고ID를 도입했습니다. 이 식별자는 여러 용도가 있지만 대표적으로 게재할 광고를 맞춤설정하고 앱 사용 방식을 파악하는데 유용합니다.예를 들어 광고를 게재한 뒤에 마케팅 측에서 문맥광고, 게재빈도 설정, 전환 추적, 보고 및 보안, 사기 감지 작업을 수행할 수 있습니다.자세히 : https://support.google.com/google..
코로나 시대에 어딜가든 QR 인증을 하고 출입 해야했는데요. 그럴때마다 카메라 또는 QR 스캔 앱을 켜서 QR 인증을 해야했습니다. QR 인증을 하는 방법은 다양했습니다. 그중 일부 앱들은 디바이스 쉐이크(흔들기)을 QR 인증 페이지로 이동 할 수 있도록 개발되었는데 이때 사용한 쉐이크 기능은 디바이스 센서를 통해서 개발되었습니다. 그렇다면 이 센서는 매번 정확한 값이 올까요? 센서 개발하다보면 간혈적으로 고주파 노이즈가 발생할 케이스가 나오는 것을 발견할 수 있는데요. 이런 고주파 노이즈에 대한 대응을 어떻게 해야할지 알아보겠습니다. 효과적인 노이즈 제거 방법저역 필터(low-pass filter)와 고역 필터(high-pass filter)를 함께 사용하는 것은 가속도계 데이터를 안정화하고 중력의 영..
findViewById를 사용 안하는 방법이 없을까? 안드로이드 개발을 초창기부터 해오신 분들은 이런 고민을 많이 했을 것입니다. 이런 고민을 Android 을 사용하는 개발자 뿐만 아니라 Google 조차 이 부분을 고민하였고 개발자의 편의를 위한 노력을 하였습니다.그렇다면 요즘 대표적 사용하는 패턴은 무엇일까요? 대표적으로는 Data Binding 이 있습니다. 이번 시간은 대부분의 개발자들이 알고 있을 수 있으나, 사용할 때 한번씩 검색할 수도 있는(?) Data Binding 사용법을 알아보겠습니다. Data Binding 설정 방법Data Binding을 사용하려면 APP build.gradle 에 DataBinding 사용 한다는 것을 명시해야합니다.android { ... bui..
최근에는 대부분 API 응답이 JSON 형식으로 다양한 데이터를 전달합니다. Rest API 통신 Data로 다양한 형태를 받을 수 있습니다.하나의 예시를 들어보겠습니다. 만약, API 응답이 다음과 같은 형태로 주어진다면 이를 어떻게 처리할 수 있을까요[ { "type": "TRUCK", "waterCannon": true }, { "type": "PLANE", "wingsSpanInMeters": 20 } ] Response Dto 를 다음과 같이 구성해서 받을 준비는 하고 있지 않은지 묻고 싶습니다.class Veichle { type : String waterCannon : Boolean wingsSpanInMeters : Int} ..
다양한 분야에서 AI를 활용하여 생산성을 향상시키고 있는 시대를 살아가고 있습니다. 역사적으로 4차 산업 혁명이 일어날 때마다 사람들은 긍정적인 의견과 부정적인 의견을 표현해왔습니다. 그러나 이러한 의견들과는 별개로 산업 혁명은 빠르게 진행되어 왔습니다. 이제 우리는 4차 산업 혁명의 핵심으로 거론되는 인공지능(AI)이 실생활에서 자연스럽게 놓여 있음을 목격하고 있습니다.개발자로서, 저 또한 AI와는 관련이 없을 것으로 생각했었습니다. 그러나 현재는 AI가 코딩을 함께하는 동료로까지 성장하였습니다. 이제는 AI가 코딩하는 데 꼭 필요한 도구로 자리 잡고 있는데, 그 중 하나가 GitHub Copilot입니다.이번 포스트에서는 Android 개발을 위해 꼭 필요한 AI 플러그인인 GitHub Copilot..
Kotlin을 사용하다 보면 Inline 함수를 무심코 활용하게 됩니다. 혹시, "내가 언제 Inline 함수를 사용했지?"라는 생각이 드셨나요? 특히 foreach나 each와 같은 문맥에서 inline 함수를 흔히 접할 수 있습니다. text.indices.forEach { c -> } 이렇게 Kotlin을 사용하면서 자연스럽게 Inline 함수를 활용하는 자신을 발견하게 됩니다. 이번 시간에는 Kotlin에서 필수적인 역할을 하는 Inline 함수에 대해 알아보려고 합니다. Inline 함수는 무엇일까? "inline" 을 두 단어로 나누면 in + line 으로생나눌 수 있는데요. 문자를 풀이하면, 라인에 들어간다고 풀이 할 수 있습니다. Inline은 함수지만 컴파일시에 inline 함수로 선언..
Android에서 AttributeSet은 XML 레이아웃 파일에서 정의된 뷰(View)의 속성(Attribute)을 가져오는 데 사용되는 인터페이스입니다. AttributeSet은 안드로이드 시스템에 의해 뷰가 인플레이션(화면에 뷰를 그리는 것)될 때 자동으로 생성되는데요. 그렇다면 자동으로 생성되는 AttributeSet을 정의해서 사용할 수 없을까요? 이번 시간은 AttributSet을 정의해서 사용 하는 방법에 대해서 알아보겠습니다. AttributSet이란? 기본적으로 XML 레이아웃 파일에서 뷰의 속성을 지정할 때 다음과 같이 사용할 것입니다. 그리고 이러한 속성들은 AttributeSet을 통해 자바 코드에서도 접근할 수 있습니다. TextView myTextView = findViewByI..
Android 앱 개발을 시작한 초보자부터 다양한 경험을 가진 시니어 개발자까지, Android Task에 대한 이해는 모두에게 중요한 부분입니다. 이번 시간에는 Android의 Task에 대한 개념을 함께 살펴보도록 하겠습니다. TASK 란? Task는 사용자가 앱 내 무언가를 수행하려고 할 때 상호 작용하는 Activity의 집합 입니다. 이러한 Activity은 백스택(Back Stack)에 열린 순서대로 정렬됩니다. 예를들어 문자 앱은 문자를 보여주는 Activity을 가질 수 있습니다. 사용자가 메시지를 선택하면 해당 메시지를 보기위한 새로운 Activity가 열립니다. 이 때 새로운 Activity는 Back Stack 에 추가됩니다. 사용자가 뒤로가기를 탭하거나 제스처를 수행하면 현재 Act..
클린아키텍처라고 들어보셨나요? 그렇다면 DI 도 들어보셨나요? 이번 포스트는 클린아키텍처에 대한 내용보다 DI을 중심으로 외부 라이브러리를 소개하려고 합니다. DI를 사용하는 목적이 다양하겠지만 객체의 생성 시 의존성을 줄이기 위해서 DI 를 활용을 한다고 생각합니다. 이번 포스트는 DI 라이브러리인 Koin과 Hilt 의 차이를 알아보며 DI에 좀더 가까워지겠습니다. Koin 과 Hilt 사용법에 대한 포스트는 정식 사이트 소개로 대체하겠습니다. DI을 왜 사용할까?Android 공식 사이트에서는 DI을 사용하는 목적에 대해서 1) 클래스 재사용 가능 및 종속 항목 분리 2)리팩터링 편의성 3)테스트 편의성 으로 말합니다. ► 클래스 재사용 가능 및 종속 항목 분리: 종속 항목 구현을 쉽게 교체할 수 ..
Android 은 다양한 Widget 을 제공하고 있습니다. 그 중 대표적인 Widget을 뽑는다면 필자는 RecyclerView, ViewPager 뽑을 것입니다. Android Develop에서도 두 위젯을 좀 더 효율적으로 사용할 수 있도록 업데이트를 지속적으로 하고 있습니다. 이번 포스트는 RecyclerView 을 활용해서 ViewPager와 같은 기능을 만드는 방법에 대해서 공유 드리며, 더 나아가 ViewPager 의 개선버전인 ViewPager2 을 사용하는 방법에 대해서 공유 하겠습니다. 번외로 두 버전에 대한 Indicator 를 어떻게 만드는지를 공유하겠습니다. RecyclerView 을 활용해서 ViewPager 기능 구현하기 RecyclerView 의 Cell에 ViewPager ..
들어가며 Google에서 Kotlin를 Android 공식 언어로 추가함에 따라 많은 개발자들이 Java에서 Kotlin으로 변경했을 것입니다. 단순히 Google에서 Kotlin을 Android 공식언어로 추가했다고 Java 을 Kotlin으로 변경하였을까요? Java의 단점 보완한 Kotlin는 Java와 호환도 잘되어 Java로 구현된 오픈소스 라이브러리를 그대로 사용할 수 있어서 많은 개발자들이 Java에서 Kotlin으로 변경하였을 것입니다. Kotlin 으로 변경하였을 때 가장 큰 장점이 무엇이라고 생각되시나요? 필자는 비동기 처리 방식으로 생각합니다. Java에서 비동기 처리는 대표적으로 RxJava을 활용해서 처리하였을 것입니다. Kotlin을 사용하는 대부분의 개발자들은 Coroutine..
Kotlin Lamda Return 가능한가? Kotlin 에서 Lamda 안에서 return 이 가능할까요? ‘당연히 Return 다 되는거 아니야?’ 라고 생각 할 수 있습니다. 그렇지만 모든 경우 Lamda의 return을 제공하고 있지 않습니다. 그럼 어느경우 가능하고 어느경우 안되는 것인지 알아보겠습니다. Lamda는 무엇인지부터 살펴 봐야겠습니다. Lamda Expression란? Lamda는 Java SDK 1.8부터 추가되어 자바의 큰 변화를 주었습니다. 람다식의 도입으로 인해 자바는 객체지향언어인 동시에 함수형 언어가 되었습니다. 위키에서는 람다를 어떻게 정의하고있을까요? 람다식, 또는 람다 함수라 부른다. 프로그래밍서 사용되는 개념으로, 익명 함수(匿名函數, Anonymous funct..
이번 포스트는 간단한 내용으로 StatelessWidget 와 Stateful 의 Constructor Param을 넣는 방법에 대해서 알아보겠습니다. Stateless Widget Param 설정 방법 StatefulWidget으로 선언한 Class 에서 inner class 로 StatelessWidget을 생성할 수 있습니다. class 생성 시점에 맞춰서 param 을 넣고 싶을 때가 많은데요. 그때 어떻게 해야할까요? 생성자 pram에 required 라는 것을 선언함으로써 Param 으로 데이터를 받을 수 있습니다. 참고로 inner class 뿐만 아니라 모든 class에서는 다음과 같이 costructor 에 param 을 넣을 수 있습니다. class _TopPart extends Sta..
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출! 강의을 참고하여 작성하였습니다. Android, iOS 개발 하기전 LifeCycle 에 대해서 알아야 Memory Leak 방지 및 사용자 액션에 따른 UI 구성을 구현할 수 있습니다. Flutter을 배우는 입장에서 Flutter의 LifeCycle 또한 알아야할 필수 코스라고 생각됩니다. 이번 시간은 Flutter Life Cycle 에 대해서 알아보겠습니다. Widget의 이론 Flutter에서 사용하는 Widget은 불변의 법칙을 갖고있습니다. 따라서 Widget의 변경 필요시 기존 위젯 삭제하고 완전 새로운 위젯으로 대체 합니다. StatelessWidget LifeCycle Constructor 생..
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출! 강의을 참고하여 작성하였습니다. 모바일 앱의 화면은 앱 위젯의 조합과 모바일 웹으로 구성되어 있습니다. 앱에서 모바일 웹을 사용하는 이유는다양합니다. 개발 공수 절약 적인 부분도 있고, 웹과 같이 사용하기 위해서 사용하는 경우도 있습니다. 이번 포스트는 Flutter 에서 모바일 웹을 보여줄 수 있는 위젯인 WebView 사용하는 방법에 대해서 공유하겠습니다. Pub Dev 먼저, Flutter 기본 내장 위젯만으로 앱을 구성하는 것은 힘듭니다. 이런 어려움을 도와주기 위해서 많은 개발자들이 오픈 소스로 유용한 라이브러리를 제공하고 있습니다. Dart (Flutter) 도 오픈소스 사이트가 존재하며 다양한 오픈..
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출! 강의을 참고하여 작성하였습니다. Android Studio 에서 Flutter Source 을 작업하다보면 자동 정렬이 nice 하게 안되는 케이스가 있습니다. 좀 더 편하게 소스 정렬 할 수 있는 방법이 없을까? 고민하다가 좋은 방법을 알게 되어 소개합니다. 추가로 Widget 을 Wrap 로 자동 감싸는 방법 및 감싸져 있는 Wrap 을 제거하는 방법도 공유합니다. 🙂 Keymap 을 활용한 정렬 Reformat Code with ‘dart format’ 을 Android Studio 에서 keymap 으로 제공하고 있습니다. Android Studio > Preference > Keymap 에서 dart ..
- 점수판
- 안드로이드
- 고시문
- 코틀린
- 임용고시
- java
- MCC
- view
- 탁구
- DI
- RXjava
- issue
- 미션차이나센터
- 선교
- swift
- 디자인패턴
- 패턴
- 고시문헬퍼
- Kotlin
- IT
- Android Studio
- 스코어헬퍼
- Android
- missionchina
- 알고리즘
- push
- IOS
- missioon
- flutter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |