티스토리

공학도의 잡다한 시선
검색하기

블로그 홈

공학도의 잡다한 시선

whyprogrammer.tistory.com/m

뷰티 영화 프로그램 IT 도서 책 게임 등 후기 리뷰 / 프로그래밍

구독자
11
방명록 방문하기
공지 블로그 이전 안내 모두보기

주요 글 목록

  • R8 Full Mode 적용 시 유의 사항 (default compat mode 와 차이점) R8 FAQR8 은 ProGuard 와 동일한 문법을 사용즉 ProGuard 와 호환 되도록 최대화하지만 다른 부분도 있음. R8 은 최적화 모드가 다름 (2가지 제공)Compatibility 모드 와 Full 모드를 제공Compatibility 모드가 defaultR8 uses the same configuration specification language as ProGuard, and tries to be compatible with ProGuard. However as R8 has different optimizations it can be necessary to change the configuration when switching to R8. R8 provides two modes, R8 co.. 공감수 0 댓글수 0 2024. 8. 12.
  • ChatGPT 로 Commit Message 생성하기 ChatGPT 로 Commit Message 생성하기 유용한 커밋 메세지 commit 메세지를 개발, 리팩토링 진행 시 작업을 세분화하고 이력을 명확히 남기고 한 작업은 보통 한개의 jira 와 관련이 있지만. QA 이슈 지라가 발행되는 경우 jira 번호 링크하여 추적에 도움 개발, 버그 수정, 새기능 추가, 리팩토링 을 한번에 하는 것이 아닌 나눠 수행하도록 상기 코드 리뷰 시, 팀원들의 이해를 돕고 (불가피하게 많은 량의 코드를 pr로 올리는 경우 commit msg가 도움) 문제 추적을 용이하게 하고(필요시 각 단위작업 rollback 용이성 확보) 하기 위해 작성을 하곤 하는데요. 변수명, 함수명 못지않게 고민이 되는 것이 commit 메세지 입니다. 이번 글 에서는 Commit Message .. 공감수 1 댓글수 3 2024. 1. 15.
  • 키워드 분포(Keyphrase distribution) 분석 구현 (Yoast SEO) 키워드 분포란? "키워드 분포"란 특정 키워드가 웹페이지의 내용 전반에 골고루 퍼져 있는지를 나타내는 용어입니다. 예를들어 워드프레스 플러그인 인 Yoast SEO Premium은 키워드 분포를 최적화하고, 사용자에게 텍스트의 키워드 사용이 균형잡혀 있는지 알려줍니다. 이를 통해 검색 엔진이 웹페이지의 주제와 관련성을 더 정확하게 인식하게 도와주며, 결국 웹사이트의 검색 순위를 높이는데 도움을 줍니다. 파이썬 스크립트로 구현해보기 파이썬을 사용하여 텍스트 파일에서 키워드 분포를 측정하는 코드를 작성해 드리겠습니다. 아래 코드는 텍스트 파일을 읽어 특정 키워드의 분포를 계산하고 결과를 출력해 줍니다. import re def keyword_distribution(filename, keyword): with.. 공감수 0 댓글수 2 2023. 3. 18.
  • [Jetpack Compose] 컴포즈에서 테스트 하기 (Testing in jetpack) Testing in Jetpack Compose 2. What to test? 테스트 해볼 것들 Test that the tabs show the intended icon and text Test that the animation matches the spec Test that the triggered navigation events are correct Test the placement and distances of the UI elements in different states Take a screenshot of the bar and compare it with a previous screenshot 3. Create a simple UI test Create the TopAppBarTest fil.. 공감수 0 댓글수 0 2023. 2. 8.
  • [Jetpack Compose] 컴포즈에서 Navigation 사용하는 방법 정리 RallyDestinations 이번 코드랩에서 배울 내용 Basics of using Jetpack Navigation with Jetpack Compose Navigating between composables Integrating a custom tab bar composable into your navigation hierarchy Navigating with arguments Navigating using deep links Testing navigation 샘플 프로젝트는 네비게이션이 되고 있지만, 사실 컴포즈 네비게이션을 사용한 구현이 아니다. 이를 컴포즈 네비게이션으로 구현해보자. Migrating to Compose Navigation 점진적으로 마이그레이션을 해보자! 의존성 추가 해주기.. 공감수 0 댓글수 2 2022. 12. 19.
  • [Jetpack Compose] 상태 및 사이드이팩트 고급 내용 정리 (State, SideEffects) AdvancedStateAndSideEffectsCodelab 1. 어떤 내용을 배울까? Introduction 젯팩 컴포즈의 State 와 Side Effects 에 대한 고급 개념을 실습해봤다. 로직이 사소하지 않은 stateful 한 컴포저블의 state holder 를 만드는 방법을 다룬다. 컴포즈 코드에서 코루틴과 suspend 함수를 사용하는 방법과 어떻게 다양한 유즈케이스를 위해 side effects 를 트리거하는지 알아 보았다. 미완성된 프로젝트 하나를 통해 점차적으로 개선하면서 완성하여 아래와 같은 앱을 완성하려고한다. 참고로 코드랩에 기본적인 테스트 코드가 작성되어 있기 때문에, 코드랩 중간 중간 테스트를 돌려보면서 잘 돌아가나 보도록 하자. (시간 나면 해보기) Displaying .. 공감수 0 댓글수 0 2022. 12. 18.
  • [Jetpack Compose] 애니메이션 활용 및 기본 내용 정리 1. What you'll learn How to use several basic Animation APIs 2. Getting set up gradle 버전 업 경고가 뜰 시, 업그레이드 해주어도 무방하다. (시간이 부족하면 skip) 3. Animating a simple value change animate*AsState 를 통해 간단한 값 변화가 일어나는 에니메이션을 줄 수 있다. 코드랩의 경우 색상 변경 이므로 animateColorAsState 를 사용할 수 있다. return value 는 State 이므로 by 델리 게이터를 사용할 수 있다. val backgroundColor by animateColorAsState(if (tabPage == TabPage.Home) Purple100 e.. 공감수 0 댓글수 0 2022. 12. 17.
  • [Jetpack Compose] view + xml 기반에서 컴포즈로 마이그레이션 pathway1-2: MigrationCodelab 정리 (스터디) 기존 뷰 기반 레이아웃을 컴포즈 레이아웃으로 마이그레이션 하는 방법을 알아보자. view-based → compose 컴포즈로 대체할 뷰 기반 레이아웃을 모두 주석 처리해주자. (xml 기준이다.) 주석으로 대체한 부분에는 아래와 같이 컴포즈 뷰를 삽입해주자. (xml 에 마이그레이션 하는 것이기 때문에 어쩔 수 없이 얘도 뷰가 되는 듯하다.) 안드로이드 뷰 에서 컴포즈 사용하기 composeView.setContent { // You're in Compose world! MaterialTheme { PlantDetailDescription() } } 기존 방식의 안드로이드 뷰(액티비티 등) 에서 컴포즈 레이아웃을 사용하는 방법이다. 본.. 공감수 0 댓글수 1 2022. 12. 16.
  • [Jetpack Compose] 테마 Theming 기본 정리 커스텀 테마를 사용하는 방법을 알아보자. 커스텀 테마 사용하기 먼저 JetnewsTheme 라는 이름으로 테마를 사용할 것이므로 테마를 아래와 같이 정의 해준다. @Composable fun JetnewsTheme(content: @Composable () -> Unit) { MaterialTheme(content = content) } MaterialTheme 를 단순 감싸고 있으며, 이후에 MaterialTheme 의 생성자 옵셔널한 파라미터를 전달하면서 테마를 커스텀하는 방식으로 사용할 수 있다. @Composable fun Home() { val featured = remember { PostRepo.getFeaturedPost() } val posts = remember { PostRepo.ge.. 공감수 0 댓글수 0 2022. 12. 15.
  • [Jetpack Compose] compose basic state (상태의 기본 내용 정리) 컴포즈에서 상태는 어떻게 정의하고 사용하는지 알아보는 코드랩을 진행하였다. 코드를 보면서 전체적인 이해를 해보도록 하자. Composable 에서의 상태 @Composable fun WaterCounter(modifier: Modifier = Modifier) { val count = 0 Text( text = "You've had $count glasses.", modifier = modifier.padding(16.dp) ) } Composable 함수 (WaterCounter 함수)를 사용하여 새 파일 WaterCounter.kt 를 생성 한다. @Composable fun WellnessScreen(modifier: Modifier = Modifier) { WaterCounter(modifier).. 공감수 0 댓글수 1 2022. 12. 14.
  • 구글 플레이스토어 Android 11(target API 31) 으로 마이그레이션 1. 구글 플레이스토어 target API 수준 요구사항 살펴보기 APK 파일을 구글 플레이에 업로드 할 때, 구글 플레이가 요구하는 target API 레벨 요구사항을 충족해야 합니다. 이 글이 작성되는 시점 기준(2022.10.14)으로 새로운 앱은 반드시 Android 12 (API level 31) 이상을 타겟팅 해야합니다. (Wear OS 의 경우에는 Android 11(API 30) 또는 그 이상을 만족해야 합니다.) 2022년 11월 부터는 target SDK 수준을 31 로 하거나 그 이상으로 맞춰야 합니다. 그에 따라 나타나는 수정 사항도 적합하게 반영해야 합니다. 참고로 2022년 부터, 안드로이드의 새 버전 디바이스를 사용하는 새로운 유저는 일부 오래된 앱을 사용할 수 없을 수도 있습.. 공감수 1 댓글수 1 2022. 10. 15.
  • [Android] This annotation should be used with the compiler argument '-opt-in=kotlin.RequiresOptIn' 해결하기 [Android] This annotation should be used with the compiler argument '-opt-in=kotlin.RequiresOptIn' 해결하기 Jetpack Compose 사용하여 개발을 할 때 실험 적인 기능, 일부 베타 기능을 사용할 때 아래와 같은 어노테이션을 적용하여 사용하게 된다. @OptIn(ExperimentalMaterial3Api::class) 위 어노테이션 적용 후 빌드, 컴파일은 문제 없이 잘 되지만, 경고가 발생하여 좀 거슬렸다. 이를 제거하기 위해 app 수준 build.gradle 에 아래와 같은 옵션을 추가해준다. android { //... tasks.withType(org.jetbrains.kotlin.gradle.tasks.Kot.. 공감수 2 댓글수 0 2022. 10. 9.
  • [Android Groovy] build.gradle plugins apply false? 왜 false 인가 [Android Groovy] build.gradle plugins apply false? 왜 false 인가 안드로이드는 Groovy 를 통해 build.gradle 를 작성하여 빌드 설정을 할 수 있다. 이때 플러그인 적용 시 문법 중에 아래와 같은 문법이 있다. plugins { id 'com.android.application' version '7.3.0' apply false id 'com.android.library' version '7.3.0' apply false id 'org.jetbrains.kotlin.android' version '1.6.10' apply false id 'com.google.dagger.hilt.android' version '2.44' apply false } .. 공감수 3 댓글수 0 2022. 10. 9.
  • [Android] Retrofit HTTP Converter 결과값 파싱이 null 로 올 때 ☠️ [Android] Retrofit HTTP Converter 결과값 파싱이 null 로 올 때 ☠️ 안드로이드 앱 에서 Retrofit 을 통해 HTTP 통신(POST)을 했을 때, 일부 값이 응답에는 제대로 온 것을 확인 하였으나, Converter.Factory() 를 통과하면 null 로 값이 떨어지는 이슈가 있어서 삽질을 좀 하였다..(원인은 정말 어이가 없었다는 결말) debug 상황 재현 interface MyService { /** * # 거래 id 생성 for 등록 */ @POST("/MyService") suspend fun postMyService(@Body body: MyServiceParams): MyServiceModel? } 회사 프로젝트 코드를 그대로 가져올 수는 없으니 해당 .. 공감수 6 댓글수 0 2022. 9. 30.
  • [Android] 해상도별 drawable 이미지 리소스 추가하기 (dpi 별) [Android] 해상도별 drawable 이미지 리소스 추가하기 (hdpi, mdipi, xhdpi, xxdpi, xxxdpi) 안드로이드 개발 시, 이미지 (png 등) 리소스를 추가할 때, 여러 해상도에서 깨지지 않는 화질의 이미지를 표현하고자 할 때 dpi 별 이미지를 추가하는 방법을 알아보겠습니다. hdpi, mdpi, xhdpi, xxdpi 등 4개의 각각 해상도의 png 를 디자이너로 부터 제공받았고 이를 수동으로 추가하는 방법입니다. 먼저 drawable 폴더로 이동합니다. 프로젝트 네비게이션 탭에서 drawable 폴더 우클릭 후, open in finder 를 통해 해당 폴더로 바로 이동할 수 있습니다. 그럼 위와 같이 drawbla 이 존재하는 것을 볼 수 있습니다. 없으면 위와 동일.. 공감수 0 댓글수 0 2022. 8. 23.
  • [Hilt] Hilt Gradle 빌드 설정하기 Gradle Build Setup Hilt를 사용하려면 Android Gradle 모듈의 build.gradle 파일에 다음 빌드 종속성을 추가하세요. dependencies { implementation 'com.google.dagger:hilt-android:2.41' annotationProcessor 'com.google.dagger:hilt-compiler:2.41' // For instrumentation tests androidTestImplementation 'com.google.dagger:hilt-android-testing:2.41' androidTestAnnotationProcessor 'com.google.dagger:hilt-compiler:2.41' // For local un.. 공감수 0 댓글수 0 2022. 4. 24.
  • [Hilt] Hilt 를 사용 하면 좋은 점 (Dagger2 에비해 장점) [Hilt] Hilt 를 사용 하면 좋은 점 (Dagger2 에비해 장점) Benefits of using Hilt 왜 힐트를 사용합니까? 상용구 감소 분리된 빌드 종속성 단순화된 구성 향상된 테스트 표준화된 components Reduced boilerplate Hilt의 목표는 사용자가 Dagger 설정의 나머지 부분에 대해 걱정할 필요 없이 Dagger 바인딩 정의 및 사용법에 집중할 수 있도록 하는 것입니다. 즉, 모듈 및 인터페이스 목록이 있는 component 정의, 수명 주기의 올바른 지점에서 구성 요소를 만들고 유지하는 코드, 상위 구성 요소를 가져오기 위한 인터페이스 및 캐스트 등과 같은 것을 숨깁니다. 일부 단순성은 모놀리식 구성 요소를 사용하는 Hilt에서도 나옵니다(즉, 모든 활동에.. 공감수 0 댓글수 0 2022. 4. 23.
  • [Hilt] Dagger Hilt 개요 Hilt Hilt는 Dagger 종속성 주입을 Android 애플리케이션에 통합하는 표준 방법을 제공합니다. Hilt의 목표는 다음과 같습니다. Android 앱용 Dagger 관련 인프라를 단순화합니다. 앱 간의 설정, 가독성/이해 및 코드 공유를 용이하게 하기 위해 표준 component 및 범위 세트를 생성합니다. 다양한 빌드 유형(예: 테스트, 디버그 또는 릴리스)에 서로 다른 바인딩을 프로비저닝하는 쉬운 방법을 제공합니다. Hilt Design Overview Hilt는 Dagger 설정 코드를 생성하는 코드로 작동합니다. 이것은 Dagger를 사용하는 대부분의 상용구를 없애고 실제로 개체를 생성하는 방법과 개체를 주입할 위치를 정의하는 측면만 남깁니다. Hilt는 Dagger component.. 공감수 0 댓글수 0 2022. 4. 23.
  • [Dagger] Dagger2 사용 방법 Dagger 모든 애플리케이션에서 최고의 클래스는 다음과 같은 작업을 수행하는 클래스입니다: BarcodeDecoder, KoopaPhysicsEngine 및 AudioStreamer. 이러한 클래스에는 종속성이 있습니다. 아마도 BarcodeCameraFinder, DefaultPhysicsEngine 및 HttpStreamer일 것입니다. 대조적으로, 모든 응용 프로그램에서 최악의 클래스는 많은 작업을 수행하지 않고 공간을 차지하는 클래스입니다: BarcodeDecoderFactory, CameraServiceLoader 및 MutableContextWrapper. 이 클래스는 흥미로운 것들을 함께 연결하는 서투른 덕트 테이프입니다. Dagger는 보일러 플레이트를 작성하는 부담 없이 종속성 주입 디.. 공감수 0 댓글수 0 2022. 4. 17.
  • Hello Dagger Hello Dagger Dagger는 Java, Kotlin 및 Android를 위한 완전히 정적 컴파일 타임 종속성 주입 프레임워크입니다. Square에서 만들고 현재 Google에서 유지 관리하는 이전 버전을 개조한 것입니다. The latest Dagger release is: Dagger 2.41 (2022-04-16 기점) Dagger는 리플렉션 기반 솔루션을 괴롭히는 많은 개발 및 성능 문제를 해결하는 것을 목표로 합니다. 자세한 내용은 Gregory Kick의 이 강연(슬라이드)에서 확인할 수 있습니다. 공감수 0 댓글수 0 2022. 4. 17.
  • [Android] RecyclerView + GridLayoutManager 으로 해상도별 item 뿌려주기 1. 안드로이드 리사이클러뷰와 그리드 레이아웃 매니저를 이용한 해상도별 item 그리기 프로젝트를 진행하며 마주친 문제인데, 리사이클러 뷰 에서 여러 종류의 아이템(헤더, 아이템카드, 푸터)을 뿌려주고 있는 상황이며, 가이드로 나온 디자인은 특정 해상도에서 아이템 뷰를 다르게 보여주기를 원하고 있었습니다. 아래는 디자인 가이드 예시 입니다. 리사이클러 내부에 들어가는 아이템이 한 가지 종류가 아니라 위 디자인 가이드를 보시면 알겠지만 최 상단에는 타이틀 헤더(Header)가 최 하단에는 푸터(Footer)가 붙어있는 상황입니다. 기본적으로 사용하고 있었던 LinearLayoutManager 를 걷어내고 GridLayoutManager 를 사용해야 함은 얼추 알고는 있었는데, 아이템 타입이 여러개 일 때는.. 공감수 2 댓글수 1 2022. 1. 12.
  • [코틀린] Android KTX 을 탐구해보자 🧐 First-party tooling 🧐 Exploring Android KTX Android KTX는 Android 프레임워크 및 Jetpack을 위한 다양한 확장 세트입니다. 그는 Android KTX 확장 자체가 Jetpack의 일부이며 간단한 Gradle 종속성으로 프로젝트에 추가할 수 있습니다. Android KTX에서 제공하는 기능은 확장 기능 및 고차 기능과 같은 기능을 활용하여 Android API를 보다 Kotlin 관용적으로 만드는 것을 목표로 합니다. 종속성을 보다 가볍게 만들기 위해 Android KTX는 제공하는 기능에 따라 여러 개의 작은 종속성으로 나뉩니다. 그 중 일부는 다음과 같습니다. Core KTX Fragment KTX SQLite KTX ViewModel KTX Nav.. 공감수 1 댓글수 0 2022. 1. 2.
  • [코틀린] 더 좋은 Companion object 사용 방법 Better companion companion object 는 바깥 클래스(enclsosing class) 에서 메서드나 프로퍼티를 접근할 수 있게하는 효율적인 방법입니다. 약간 Java 의 Static 느낌이라고 할 수도 있습니다. 하지만, companion object 를 자바에서 참조할 떄는 살짝 복잡할 수 있습니다. 그럼 어떻게 효율적으로 사용할 수 있는지 알아봅시다. 어떻게 companion object 가 동작할까 코틀린 클래스에 컴패니언 객체가 선언되면 컴파일러는 컴파일 때 명명된 내부 클래스를 생성하게 됩니다. 아래 코드는 빈 컴패니언 객체를 사용했습니다. class Widget { companion object { } } 앞의 코드에 의해 Java 코드가 컴파일러에 의해 생성되면 아래와.. 공감수 0 댓글수 0 2022. 1. 1.
  • [Android] GDG Jetpack compose 코드랩 수료 후기 (feat. 굿즈) 1. Google Developers Jetpack Compose Codelab 2021 이번에 GDG Korea Android 에서 진행했던 행사인 DevFest 2021 Android Compose 코드랩 행사를 참여한 후기를 기록한다 Jetpack Compose 는 네이티브 UI 를 빌드하기 위한 Android 의 최신 툴킷으로, UI 개발을 간소화하고 가속화할 수 있다. 위에서 처럼 compose 는 즉 UI 를 기존 보다 쉽게 디자인, 개발, 빌드 할 수 있는 최신 라이브러인데, 기존 성능문제를 해결하면서도 쉬운 개발이 가능한.. 그런 멋진 녀석이다. (여기서는 보다 자세한 설명은 생략한다) 최근 이직하게된 회사에서 안드로이드 앱 개발 직무를 맡고 있기도하고 평소에 관심이 많은지라 이번 행사의 .. 공감수 1 댓글수 0 2021. 12. 18.
  • 네이버 피싱 메일 주의 ⚠ 새로운 환경에서 접속이 시도되었습니다 1. 네이버 피싱 메일 주의 ⚠ 새로운 환경에서 접속이 시도되었습니다 얼마전 부터 "네이버 메일로 새로운 환경에서 접속이 시도되었습니다." 라는 메일이 한달에 한번 정도 주기적으로 오는 것을 발견했다. 네이버 메일 앱에서 알림이 떠서 확인을 해보면 아래와 같은 메일을 확인할 수 있는 경우다. 정말 교묘한 것이 보낸사람 이름 자체가 네이버알림이다. 그리고 새로운 환경에서 네이버 로그인을 할 때마다 항상 위와 비슷한 메일을 받았기 때문에 아무 의심없이 진짜 네이버에서 알림을 보냈다고 생각했고, 해외에서 내 아이디가 유출되어 누군가 접속한 것이라고 생각했다. 그래도 나는 2차 인증까지 해두었기 때문에 2차 인증이 오지 않은 것을 봐서는 로그인이 시도에서 그쳤다고 생각했는데 잘 생각 해보니까 사실 피싱 메일이라.. 공감수 1 댓글수 2 2021. 10. 14.
  • [Android Studio] 안드로이드 스튜디오 로딩바 꾸미기 : 슈퍼마리오 1. 안드로이드 스튜디오 로딩바 꾸미기 : 슈퍼마리오 무미 건조한 개발 환경에 재미를 한줌이라도 끼얹기 위해 안드로이드 스튜디오의 프로그레스 바(Progress Bar)를 커스터마이징 해봅시다. 먼저 Preferences 창을 열어주세요. 이후 Plugins 탭을 선택합니다. #안드로이드스튜디오 #로딩창 #로딩바 #프로그레스바 #꾸미기 Plugins 의 Marketplace 에서 mario 로 검색해줍니다. 이후 현재(2021-10-14) 기준 36.9K 의 다운로드 수를 기록한 Mario Progress Bar 를 Install 해줍니다. 플러그인 설명에서 슈퍼 마리오 프로그레스 바 예시를 애니메이션으로 미리 체험해볼 수 있습니다. Third-Party Plugins Privacy Note 알림이 뜨면.. 공감수 0 댓글수 0 2021. 10. 14.
  • [Android] Kotlin Retrofit (X-Auth-Token 과 함께 Post 하기) 1. Android Retrofit (X-Auth-Token 과 함께 Post 하기) (코틀린) REST API 를 사용해서 문제를 해결해야할 경우 X-Auth-Token(토큰) 이 주어졌고 이를 사용해서 관리 키를 POST 메소드로 받아오려고 할때 필요한 코드를 기록해보려고합니다. (삽질 방지용 글) Field, FieldMap, Query 등을 사용해서 요청할 경우 되지 않아서 좀 삽질을 했습니다만 결론적으로는 Body 를 사용해서 얻어와야 했습니다. (정확히 말하면 @Body 어노테이션) 1.1. POST Example curl -X POST {BASE_URL}/start \ -H 'X-Auth-Token: {X_AUTH_TOKEN}' \ -H 'Content-Type: application/jso.. 공감수 0 댓글수 0 2021. 9. 26.
  • 갤럭시 워치4 롤렉스 페이스 적용기 (galaxy watch 4 classic Rolex face) 1. 갤럭시 워치4 클래식 롤렉스 페이스 적용기 원래 워치류 기기가 없었으나 계속 구매해야겠다고 생각은 하고 있었는데 이번에 갤럭시 워치4가 공개 되었을 때 바로 사기로 마음먹었다. 일단 디자인도 너무 세련되게 잘 뽑혔고, 무엇보다 OS가 타이젠에서 구글 wear os 로 변경 됨에 따라 구매사유가 충분하다고 생각했다. 직전 까지 쓰던 시계는 스무살 때 구매한 시계로 생활하는데 전혀 문제가 없지만.. 오래 쓰기도 했고 무엇보다 금방 질려하는 스타일이라 새로 구매를 하게된 이유도 있다. 1.1. Rolex face MR Time, facer, WatchMaker 등 워치 페이스를 제공하는 시계앱들을 둘러보아도 괜찮은 스킨이 많긴 하지만, 롤렉스 스킨은 공식적으로 판매하거나 올려져있는 공개 페이스가 없었다... 공감수 92 댓글수 149 2021. 9. 18.
  • [Kotlin] 코틀린 인터페이스의 Default implementation 과 JAVA 1. 코틀린 인터페이스의 Default implementation 과 JAVA 코틀린의 인터페이스는 추상 메서드 뿐만이 아니라 구현이 있는 메서드 즉, Default 메서드를 정의할 수 있다. (하지만 필드(상태)는 불가능하다.) 클래스는 class 로 정의하듯 인터페이스는 interface 로 정의 한다. interface Clickable { fun click() } 위 인터페이스는 click() 이라는 추상 메서드를 정의하며 이를 구현하는 클래스는 click()을 반드시 재정의할 필요가 있다. class Button : Clickable { override fun click() = println("it was clicked") } 자바와 달리 콜론(:) 뒤에 확장할 클래스나 인터페이스를 붙여준다. .. 공감수 1 댓글수 0 2021. 9. 12.
  • [Android] K-MOOC 강좌정보 서비스 앱 (2021 app dev-matching) 1. 프로그래머스 앱 데브 매칭 2021 : K-MOOC 강좌정보 서비스 앱 과제 프로그래머스에서 금년도 6월 19일에 진행한 앱 데브 매칭에 대한 의도한 해답을 공개했다. 해당 과제를 내가 치룰 당시에는 안드로이드 뷰 모델에 대한 학습이 안되어있어서 당황하며 어찌저찌 거의 구현은 했는데 나 자신이 만족할만한 수준의 앱이 아니어서 상당히 아쉬웠다. 데브 매칭의 경우에는 다른 블로그 글들을 찾아보면 메일로 코드 리뷰 및 피드백을 주는 것을 본 적이 있는데, 이번에는 공개해답을 아예 공식 블로그에 공개를 해주었다. 안드로이드 신입 개발자를 준비하고 있는 나에게는 참 반가운 소식이었다. 물론 코드에는 정답이 없지만 어느 정도 통용되는 또는 안드로이드에서 적극 권장하는 아키텍처가 분명 존재하기 때문에 이러한 예.. 공감수 5 댓글수 0 2021. 8. 18.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.