전체글 61

심기일전 코틀린! 04. Hilt (Dependency Injection)

Hilt는 구글에서 제공하는 Android용 의존성 주입 라이브러리이다. Dagger를 기반으로 제작되었으며 Koin과 함께 가장 많이 쓰이는 DI 라이브러리 중 하나로 자리잡고 있다. 그런데, 의존성이란 대체 뭘까? 의존성이란 OOP(Object Oriented Programming - 객체 지향 프로그래밍)에서의 용어중 하나로써 어떤 객체가 다른 객체의 기능을 필요로 하는 경우, 두 객체 사이에 의존성이 존재한다고 할 수 있다. 예를 들어, Retrofit2 의 경우 Builder를 통해 객체를 생성할 때 client로써 OkHttpClient 객체를 필요로 하는데 이 경우, 두 객체 사이에 의존성이 존재한다고 할 수 있는것이다. 그렇다면 의존성 주입이란 무엇일까? Retrofit을 사용해 통신하는 ..

Android(Kotlin) 2023.07.26

심기일전 코틀린! - 앱을 만들면서 AAC 이해하기 (ViewModel, DataBinding, LiveData)

이미지 검색 앱을 만들어가면서 AAC에 대해 이해하는 시간을 가져보기로 했다. 이번 시간에는 검색어 입력 EditText와 Button을 가진 화면을 작성해보자. 먼저 검색어를 입력 할 EditText와 검색을 실행할 Button을 가지는 xml을 작성하자. 그리고 이 xml을 레이아웃으로 가지는 액티비티를 하나 생성했다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } 이제 검색어를 가져와서 검색을 실행하는 코드를 작성해보자. ... //검색어..

Android(Kotlin) 2023.07.26

심기일전 코틀린! - 03. AAC (Android Architecture Components)

채용공고를 보다보면 요즘은 AAC 를 기본적으로 요구하는것 같다. 근데 AAC 가 정확히 뭘까? 라고 생각하는 여러분과 나를 위해 AAC 에 대해 정리해보고자 한다. AAC 란, Android Architecture Components 의 약자로서 구글에서 사용을 권장하는 라이브러리 모음이며 이를 통해 테스트와 유지관리에 용이한 앱을 작성할 수 있도록 도와준다. https://developer.android.com/topic/libraries/architecture?hl=ko Android 아키텍처 구성요소 | Android 개발자 | Android Developers 앱 작업 developer.android.com 또한 AAC 는 Android Jetpack 의 구성 요소 중 하나로써, Android ..

Android(Kotlin) 2023.07.20

Compose에서 Tap, Gesture 감지하기

@Composable fun App() { //줌(스케일) var scale by remember { mutableStateOf(1f) } //뷰 이동 var offset by remember { mutableStateOf(Offset.Zero) } //루트에서 현재 뷰의 상대 위치 var rootOffset by remember { mutableStateOf(Offset.Zero) } //State로써 변화를 저장 val state = rememberTransformableState { zoomChange, offsetChange, rotationChange -> scale *= zoomChange offset += offsetChange } Box( modifier = Modifier .fillMax..

Android(Kotlin) 2023.06.29

심기일전 코틀린! - 02. Jetpack Compose (2)

이전 시간에 이어서 Compose 를 써야하는 이유에 대해 알아보자. 2) 직관적인 API 말로 들으면 어려운 단어들의 조합이지만 쉽게 말해서 데이터의 변경점이 UI에 즉각적으로 반영된다는 뜻이다. 기존 xml 방식 레이아웃에서도 DataBinding과 LiveData를 사용함으로써 어느정도 구현이 가능했지만 Compose에서는 State라는 개념으로 더욱 쉽게 구현이 가능하다. @Composable fun App() { //State 변수 val text by remember { mutableStateOf("unClicked") } Column() { //처음 화면에 등장하면 unClicked로 표시된다 Text(text=text) //버튼을 클릭하면 text의 value값이 Clicked로 변하면서 ..

Android(Kotlin) 2023.06.23

심기일전 코틀린! - 02. Jetpack Compose (1)

Compose 란 무엇인가 Compose 에 대해 알기위해선 Jetpack 에 대해 먼저 알아야한다. Android Jetpack 문서에서는 Jetpack 에 대해 이렇게 설명하고 있다. "개발자가 중요한 코드에 집중할 수 있도록 권장사항 준수, 상용구 코드 감소, 여러 Android 버전과 기기에서 일관되게 작동하는 코드 작성을 돕는 라이브러리 묶음" 출처 : https://developer.android.com/jetpack?hl=ko Android Jetpack 개발자 리소스 - Android 개발자 | Android Developers Android Jetpack은 코드 라이브러리 모음을 통해 최신 앱 개발자 리소스와 권장사항을 제공합니다. 지금 Jetpack을 사용하여 시작해 보세요. devel..

Android(Kotlin) 2023.06.20

심기일전 코틀린! - 01. ViewBinding

ViewBinding 이란 무엇인가 Android Studio 를 이용해 앱을 개발하는 경우 우리는 어떻게 화면을 구성하는지를 살펴보면 먼저 res -> layout 폴더에 layout xml 파일 만들고 필요한 View 들을 선언하는 것으로 화면의 틀을 잡는다. 그 후, Activity 혹은 Fragment 혹은 ViewHolder 등등 에서 LayoutInflater 를 이용하여 xml 파일을 View Object 로 가져온 후 활용한다. 이 때, 특정 View 에 접근해야하는 경우 findViewById 를 통해 xml 선언 시 설정한 id 를 가진 뷰를 찾아서 접근하게 된다. ... ... //MainActivity.class lateinit var textView: TextView overrid..

Android(Kotlin) 2023.06.12

심기일전 코틀린! - 00. 코틀린

오늘부터 그동안 배운것들을 복습한다는 생각으로 하나씩 정리해나가려한다. 함께 공부하자는 마음으로 읽어나가주면 좋겠다. Java 에서 Kotlin 으로 안드로이드 앱을 만드는 방법은 참 다양하다. React-Native 나 Flutter 를 이용하여 하이브리드 방식으로 개발할 수도 있고 Java 나 Kotlin 을 이용하여 네이티브 방식으로 개발할 수도 있다. 혹은 최근에 핫한 웹앱 방식으로 개발할 수도 있다. 그 중에서도 우리는 Kotlin 에 주목해보려 한다. 사실 Kotlin 이 세상에 처음 모습을 드러낸 것은 꽤 오래된 일이다. 2011년 7월에 JetBrains 가 처음 Kotlin 을 발표하고나서 벌써 10년이라는 세월이 넘게 지났다. 하지만 안드로이드 공식 지원 언어가 된 것은 구글 I/O 2..

Android(Kotlin) 2023.06.02

viewBinding 사용 시 같은 view Id를 사용하는 경우

뷰 작업중 갑자기 TabLayout.addTab이 작동하지 않는 상황이 발생했다. 이것저것 확인해보다가 알아낸게 공통 topView 로 빼둔 레이아웃에도 tabLayout 을 id 로 쓰는 뷰가 존재했고 작업중인 Fragment에도 tabLayout을 id로 쓰는 뷰가 존재하는게 문제였다. 공통 뷰를 위해 을 많이 사용해서 작업할 땐 문제가 없길래 include 내부 뷰와 id가 겹쳐도 큰 문제 없을거라 생각했는데 이런 이슈가 발생하더라 흠.. 네이밍 규칙을 더 철저하게 하는수밖에..

Android(Java) 2023.05.25