본문 바로가기

앱 개발/Kotlin_Android

(41)
Data & Business Logic - Data Logic 데이터 로직은 소프트웨어에서 데이터를 처리, 저장, 검색 및 관리하는 데 사용되는 규칙과 절차를 정의한다. 데이터베이스 관련 작업, 데이터의 유효성 검사, CRUD(Create, Read, Update, Delete) 작업 등이 데이터 로직에 해당한다. 데이터베이스와의 상호 작용에 대한 로직을 포함하며 데이터 저장소에서 필요한 정보를 가져오는 등의 작업을 수행한다. - Business Logic 비즈니스 로직은 소프트웨어에서 특정 업무 또는 비즈니스 프로세스를 구현하는 데 사용되는 규칙과 절차를 정의한다. 사용자의 요청에 따라 데이터를 처리하고 다른 시스템과의 상호 작용을 조절하며, 애플리케이션의 핵심 기능을 구현한다. 업무 규칙 및 정책을 포함하며, 소프트웨어가 수행해야 하는 핵..
RecyclerView 1) 리사이클러뷰(RecyclerView)는 데이터 목록을 아이템 단위의 뷰로 구성하여 화면에 표시하기 위해 어댑터(Adapter)를 사용한다. 레이아웃매니저(LayoutManager)가 제공하는 레이아웃 형태로 어댑터를 통해 만들어진 각 아이템 뷰는 뷰홀더(ViewHolder) 객체에 저장되어 화면에 표시되고 필요에 따라 재활용(Recycle)된다. 2) 사용자 데이터 리스트로부터 리사이클러뷰에 표시될 아이템 뷰를 만드는 것이 바로 어댑터의 역할이다. 그리고 수직(Vertical) 방향으로만 아이템을 배치할 수 있는 리스트뷰와 달리 리사이클러뷰는 다양한 형태로 아이템을 배치할 수 있다. 어댑터에서 아이템 뷰를 생성하기 전에 아이템 뷰가 어떤 형태로 배치될 것인지를 결정하는 요소가 레이아웃매니저(Layo..
ViewBinding 뷰 바인딩(View Binding)은 XML 레이아웃 파일에 정의된 뷰들을 지원하기 위한 기술이다. XML 레이아웃에 정의된 각 뷰 요소들을 직접 객체로 참조할 수 있다. findViewById() 메서드를 사용하여 뷰를 찾는 경우에는 뷰가 존재하지 않을 수 있어서 NullPointerException이 발생할 수 있다. 그러나 바인딩을 사용하면 @Nullable 어노테이션이 추가된 객체를 반환하므로 Null Safety가 보장된다. 또한 뷰 바인딩을 사용하면 XML 레이아웃에 정의된 각 뷰 요소들에 대한 객체가 자동으로 생성되므로 타입 안전성도 보장된다. 그리고 findViewById()는 레이아웃 내의 모든 뷰를 순회하면서 뷰를 찾아야 하므로 성능 저하를 일으킬 수 있다. 그러나 뷰 바인딩을 사용하면..
isEmpty(), isBlank() isEmpty()와 isBlank() 모두 문자열()이 비어 있는지 확인하는 메서드이다. 그러나 조금 차이가 있다. 문자열이 비어 있는지를 확인한다. 문자열의 길이가 0인지를 확인하고 공백 문자열인 경우에는 false를 반환한다. val str1 = "" // 빈 문자열 val str2 = " " // 공백 문자열 println(str1.isEmpty()) // true println(str2.isEmpty()) // false 문자열이 비어 있거나 모든 문자가 공백 또는 탭 문자열로 이루어진 경우를 확인한다. 문자열에 실제로 유효한 문자가 없는지를 확인한다. val str1 = "" // 빈 문자열 val str2 = " " // 공백 문자열 val s..
readline()!!.toInt() 문법 강의를 듣고 과제를 수행하다 readline()!!.toInt() 코드에 대하여 알아보았다. 콘솔에서 한 줄을 읽어 정수로 변환해 주는 코드이다. readline() - 사용자가 입력한 값을 읽어온다. !! - 널 아님 단언(Non-null assertion) 연산자로서 해당 표현식이 절대로 null이 아니라고 컴파일러에게 알려준다. readline()이 null을 반환하면 NullPointerException이 발생한다. toInt() - 사용자가 입력한 문자열을 Int로 변환하여 반환한다.
웹뷰, 웹앱 웹뷰는 네이티브 애플리케이션 안에서 웹 콘텐츠를 표시하기 위한 컴포넌트이다. 웹뷰를 사용하면 네이티브 앱과 웹 기술을 조합하여 하이브리드 앱을 만들 수 있다. - 네이티브 앱 안에서 실행되며 네이티브 코드와 상호 작용이 가능하다. - HTML, CSS, JavaScript 등의 웹 기술을 사용하여 동적인 콘텐츠를 표시한다. 웹앱은 모바일 기기 등에서 실행되는 애플리케이션으로서 네이티브 API에 직접 접근하지 않고 웹 기술을 기반으로 동작한다. 사용자는 모바일 브라우저를 통해 해당 웹앱에 접근하여 사용할 수 있다. - 모바일 기기나 데스크톱 브라우저에서 실행되며 플랫폼 독립적이다. - 모바일 기기의 브라우저를 통해 접근하므로 설치나 업데이트가 필..
스코프 함수 스코프 함수 (Scope Function, 영역 함수)는 특정 객체의 컨텍스트 안에서 속성 초기화, 활용 등 특정 동작을 실행하기 위한 목적만을 가진 함수이다. 스코프 함수 호출 시 람다 표현식을 형성하며, 그 안에서 개체 이름 없이 개체에 엑세스 할 수 있다. 스코프 함수에는 let, run, with, apply, also가 있다. it을 사용해 프로퍼티에 접근 최종 실행 결과 반환 fun main() { val info = Info("오소리", "tistory", 1) val scope = info.let { println("${it.name}라는 이름의 ${it.blog} 블로거") // 오소리라는 이름의 tistory 블로거 it.num = 10 it.num } println(scope) // ..
Bundle Bundle은 안드로이드에서 데이터를 전달하고 수신하는 데 사용되는 컨테이너이다. 키-값 형식으로 데이터를 저장하며, 이를 통해 서로 다른 구성 요소 간에 데이터를 전송하거나 상태를 저장하는 데 사용된다. 예를 들어 Intent에 데이터를 첨부하여 액티비티 사이에 데이터를 전달하거나 onSaveInstanceState를 통해 액티비티의 상태를 저장하는 데 활용된다. 일반적으로 사용되는 메서드들은 다음과 같다. putString(String key, String value): 문자열을 Bundle에 추가 putInt(String key, int value): 정수를 Bundle에 추가 putBoolean(String key, boolean value): 불리언 값을 Bundle에 추가 putParcelab..
중첩 리스트, flatten 리스트 안에 또 다른 리스트가 포함될 수 있다. matrix, 2D 배열 등의 구조를 나타내는 데 유용하게 사용된다. fun main() { // 중첩 리스트 생성 val nestedList = listOf( listOf(1, 2, 3), listOf(4, 5, 6), listOf(7, 8, 9) ) // 중첩 리스트의 요소에 접근 val element = nestedList[1][2] println(element) // 6 } 중첩된 리스트 또는 다차원 배열을 평탄하게 만들어주는 함수이다. 중첩된 리스트를 하나의 단일한 리스트로 변환한다. fun main() { val nested = listOf( listOf(1, 2, 3), listOf(4, 5, 6), listOf(7, 8, 9) ) // 중첩 ..
indexOf, filter, indices 컬렉션, 배열에서 특정 요소의 인덱스를 찾는 함수이다. 해당 요소가 컬렉션에 존재하지 않으면 -1을 반환한다. fun main() { val fruits = listOf("apple", "banana", "orange", "grape") val indexOfBanana = fruits.indexOf("banana") println("Index of 'banana': $indexOfBanana") } indexOf 함수는 리스트나 배열이 큰 경우 성능에 영향을 줄 수 있다. 리스트가 정렬되어 있다면 binarySearch 함수를 사용하는 것이 빠를 수 있다. val sortedFruits = listOf("apple", "banana", "grape", "orange") val indexOfBanana =..