본문 바로가기

전체 글71

[Android] 안드로이드에서 Rect 클래스 활용하기 Rect 클래스는 안드로이드에서 사각형 영역을 정의할 때 사용되는 클래스입니다. 좌표 시스템에 기반하여, 사각형의 왼쪽 위 모서리와 오른쪽 아래 모서리의 위치를 정의함으로써 사각형의 위치와 크기를 나타냅니다. Rect 객체는 주로 뷰(View)의 크기나 위치를 계산하고, 그래픽을 그릴 때 영역을 지정하는 등의 목적으로 사용됩니다.Rect 클래스는 다음과 같은 네 가지 주요 필드를 가지고 있습니다.left: 사각형의 왼쪽 변의 x 좌표입니다.top: 사각형의 상단 변의 y 좌표입니다.right: 사각형의 오른쪽 변의 x 좌표입니다.bottom: 사각형의 하단 변의 y 좌표입니다.이 네 가지 좌표는 사각형의 위치와 크기를 완벽하게 정의합니다. 예를 들어, left가 10, top이 20, right가 30,.. 2024. 5. 3.
[Android/Java] ActivityResultLauncher 및 ActivityResultContracts 활용 방법 ActivityResultLauncher는 안드로이드 앱 개발에서 다른 액티비티로부터 결과를 받아오기 위해 사용되는 클래스입니다. AndroidX 라이브러리의 일부로, Android 11(R API 레벨 30)이 출시됨과 동시에 소개되었습니다. 기존의 startActivityForResult() 메서드와 onActivityResult() 콜백 방식을 대체하기 위해 도입되었으며, 사용하기 쉽고, 코드가 더 읽기 쉬워지고, 타입 안전성을 높여줍니다. 기본 사용 방법ActivityResultContracts 정의: ActivityResultLauncher를 사용할 때는, 어떤 타입의 액티비티 결과를 기대하는지 정의해야 합니다. 이는 ActivityResultContracts에 있는 다양한 계약 중 하나를 사용.. 2024. 5. 2.
[Kotlin] Kotlin에서의 지연 초기화: lateinit 키워드 이해하기 lateinit는 Kotlin에서 나중에 초기화될 프로퍼티를 선언하기 위해 사용되는 키워드입니다. 코틀린은 널 안정성(null safety)을 중요시하는 언어이기 때문에, 프로퍼티를 선언할 때 반드시 초기화를 해주거나 null 가능 타입으로 선언해야 합니다. 그러나, 어떤 경우에는 클래스의 초기화 과정 중에 바로 프로퍼티 값을 결정하기 어렵거나, 의존성 주입 등으로 인해 객체 생성 이후에 초기화가 이루어져야 할 경우가 있습니다. 이런 경우에 lateinit 키워드를 사용하면 초기화를 지연시킬 수 있습니다. lateinit의 주요 특징:초기화 지연: lateinit 키워드를 사용하면 선언 시점에서 바로 초기화하지 않고, 나중에 초기화할 수 있습니다.널이 아닌 타입 사용 가능: lateinit으로 선언된 프.. 2024. 4. 30.
[Kotlin] Kotlin의 companion object 이해하기 Kotlin에서 companion object는 클래스 내부에 정의될 수 있는 객체 선언으로, 이를 통해 그 클래스의 static 멤버와 유사한 기능을 구현할 수 있습니다. Java와는 달리 Kotlin에는 static 키워드가 없으며, 대신 companion object를 사용하여 클래스 레벨의 변수나 메소드를 만들 수 있습니다. 이러한 특성은 Kotlin에서 클래스 인스턴스 없이도 클래스 이름을 통해 직접 접근할 수 있도록 해 줍니다. Companion Object의 특징:클래스 내부 객체: companion object는 클래스 내부에 위치하며, 해당 클래스의 모든 인스턴스가 공유하는 객체입니다.정적 멤버 접근: companion object 내부에 정의된 속성이나 함수는 클래스 이름을 통해 접근할.. 2024. 4. 30.
맥북에서 서버에 연결하는 방법: Cmd + K 단축키 활용 가이드 맥북(Mac) 사용자는 Finder를 통해 네트워크 상의 서버나 다른 컴퓨터에 쉽게 연결할 수 있는 유용한 단축키인 Cmd + K를 사용할 수 있습니다. 이 기능을 활용하는 방법은 다음과 같습니다. 1. Finder 열기Dock에 위치한 Finder 아이콘을 클릭하거나 Cmd + Tab을 이용하여 Finder로 전환합니다.2. 서버 연결 단축키 사용Finder가 활성화된 상태에서 Cmd + K를 누릅니다. 이는 "서버에 연결(Connect to Serve)" 대화 상자를 열어줍니다.3. 서버 주소 입력"서버에 연결(Connect to Serve)" 대화 상자에서 연결하고자 하는 서버의 주소를 입력합니다.예를 들어, SMB(Samba)를 통해 Windows 공유 폴더에 접근하려면 smb://서버_주소/공유.. 2024. 4. 25.
아이폰 사진을 티스토리 프로필로 설정하기: HEIC에서 JPEG 변환 및 파일 용량 줄이기 가이드 아이폰으로 찍은 사진을 PC로 옮겼을 때 받아진 파일의 확장자명이 'HEIC'인 것을 발견 했습니다.이 글에서는 HEIC 파일을 티스토리 프로필로 설정하고자 할때, 거처야 했던 과정들을 토대로  HEIC 파일 형식에 대한 간략한 소개와 HEIC 파일을 JPEG로 변환하는 방법, 그리고 파일 용량을 줄이는 방법에 대해 정리 해 두고자 합니다.HEIC 이란?정의: HEIC는 '고효율 이미지 컨테이너(High Efficiency Image Container)'의 약자로, Apple이 iOS 11 및 macOS High Sierra부터 사용하기 시작한 이미지 파일 형식입니다.기반: HEIC는 HEIF(High Efficiency Image File Format)라는 개방형 표준을 기반으로 합니다... 2024. 4. 24.
[Kotlin,Java] 코틀린과 자바에서 MutableList 선언 및 조작의 차이점 탐구 코틀린과 자바에서 MutableList를 선언하는 방법은 언어의 특성에 따라 다소 차이가 있다. 아래에서는 각 언어에 따른 MutableList 선언 방법을 코드를 통해 설명하겠다. 코틀린에서의 MutableList 선언 코틀린에서는 mutableListOf 함수를 사용하여 간결하게 MutableList를 선언할 수 있다. 코틀린의 표준 라이브러리는 다양한 컬렉션 타입을 쉽게 생성할 수 있는 함수들을 제공한다. val mutableList: MutableList = mutableListOf(1, 2, 3) mutableList.add(4) // MutableList에 아이템 추가 println(mutableList) // 출력 결과: [1, 2, 3, 4] 코틀린에서는 타입을 명시적으로 지정해주거나, 타.. 2024. 4. 23.
[Android] RecyclerView의 notifyItemChanged 사용 시 발생하는 깜빡임 문제 해결 방안 RecyclerView에서 notifyDataSetChanged를 사용해 어댑터 아이템들을 업데이트할 때 발생하는 성능 문제를, 특정 아이템만을 업데이트하는 notifyItemChanged를 통해 해결할 수 있었다. 그러나 이 방식을 적용하더라도, 엘레베이터의 층수가 1초마다 변하면서 UI를 업데이트할 때 깜빡임과 버벅거림 문제가 계속 발생했다. 이 문제의 원인을 조사해보니, Android의 RecyclerView를 위한 SimpleItemAnimator의 기본 애니메이션 효과가 원인임을 알아냈다. SimpleItemAnimator는 RecyclerView 아이템 애니메이션을 구현하기 위한 추상 기본 클래스로, RecyclerView.ItemAnimator를 확장한다. 공식 문서의 RecyclerView.. 2024. 4. 22.
[Kotlin,Java] 자바와 코틀린에서의 프로퍼티 선언 방식의 차이점 설명 자바와 코틀린 모두에서 프로퍼티는 클래스의 상태를 나타내는 중요한 구성 요소이다. 그러나 코틀린은 프로퍼티를 선언하고 사용하는 방법에서 자바에 비해 더 단순하고 강력한 기능을 제공한다. 자바에서의 프로퍼티 생성 자바에서는 프로퍼티를 만들기 위해 필드(변수)와 그 필드를 접근하기 위한 getter 및 setter 메소드를 명시적으로 선언해야 한다. java public class Person { private String name; // 필드 // Getter public String getName() { return name; } // Setter public void setName(String name) { this.name = name; } } 코틀린에서의 프로퍼티 생성 코틀린에서는 필드, gette.. 2024. 4. 21.
[Android] RecyclerView 데이터 변경 시 UI 업데이트 최적화를 위한 알림 메서드 활용법 제어 즐겨찾기 영역에서 특정 기기를 호출할 때마다, 전체 기기 목록이 업데이트되는 문제가 발생했었다. 이런 상황은 반복적으로 성능 문제를 일으켰다. 문제의 원인을 분석해본 결과, RecyclerView의 어댑터가 UI에 데이터 변경 사항을 알릴 때 notifyDataSetChanged 메소드를 사용하고 있었기 때문에, 다음과 같이 전체 기기 목록이 갱신되는 것을 확인했다. 이 문제는 어댑터의 아이템 위치값(position)을 활용하여 notifyItemChanged 메소드를 호출함으로써 해결할 수 있었다. notifyItemChanged는 지정된 위치의 아이템만을 업데이트하므로, 전체 목록을 갱신하는 것보다 훨씬 효율적이다. 이 방법으로 성능 문제를 개선하고 사용자 경험을 향상시킬 수 있었다. 이 경험을.. 2024. 4. 21.
[Android] LiveData의 이해: Android 앱에서 데이터와 UI의 효율적 동기화 LiveData는 Android 아키텍처 컴포넌트의 일부로, 데이터 관찰 및 UI 업데이트를 위한 데이터 홀더 클래스이다.LiveData는 관찰 가능한 데이터 클래스로서, UI 컴포넌트가 데이터의 변경 사항을 관찰하고, 데이터가 변경될 때마다 UI를 자동으로 업데이트할 수 있도록 해준다.LiveData의 주요 특징과 작동 방식은 다음과 같다. 1. 생명주기 인식LiveData는 생명주기를 인식하는 컴포넌트로서, Android 생명주기에 따라 관찰자(Observer)에게 데이터 변경을 통지한다. 즉, 액티비티나 프래그먼트의 생명주기 상태를 고려하여, 이 컴포넌트들이 활성 상태(STARTED 또는 RESUMED 상태)일 때만 데이터 업데이트를 수신한다.이로 인해 메모리 누수, 액티비티가 종.. 2024. 4. 21.
[Android] RecyclerView에서 notifyDataSetChanged() 호출 후 콜백 메소드 활용하기: setInitCallback() 호출 과정 분석 제어 즐겨찾기 영역에서 기기 호출 후, observe 메소드가 활성화되면서 발생하는 notifyDataSetChanged()의 실행 과정 및 이후 setInitCallback() 호출 메커니즘에 대해 분석한 내용을 정리 해 두고자 한다. notifyDataSetChanged() 실행의 의미 notifyDataSetChanged()를 호출하면, 이는 RecyclerView에 데이터셋이 변경되었음을 알리고 UI를 갱신하라는 신호를 보내는 역할을 한다. 데이터셋의 변경 사항을 RecyclerView가 감지하고, 이에 따라 UI를 업데이트하는 과정이 시작된다. setInitCallback() 호출 과정 ControlAdapter 내부 코드 분석 결과, onBindViewHolder 메소드에서 아이템에 대한 bi.. 2024. 4. 21.