Compose 레이아웃 관련 에러 LazyHorizontalGrid를 사용하면서 java.lang.IllegalArgumentException: LazyHorizontalGrid's height should be bound by parent. 에러를 발견하였다. 에러내용은 해당 컴포즈 UI가 부모 레이아웃에 높이에 맞지 않다는 내용이였다. 이 에러가 발생하게 된 계기가 Column(modifier.verticalScroll(rememberScrollState()) // 이 부분) { // Spacer를 통해 공백 생성 Spacer(Modifier.height(16.dp)) // 검색 창 SearchBar(Modifier.padding(horizontal = 16.dp)) // 첫번째 섹션 HomeSect..
Compose Basic 1. Compose Jetpack Compose는 UI 개발을 간소화하기 위해 설계된 최신 툴킷입니다. 반응형 프로그래밍 모델을 Kotlin 프로그래밍 언어의 간결함 및 사용 편의성과 결합합니다. 이는 완전히 선언적인 접근 방식으로, 데이터를 UI 계층 구조로 변환하는 일련의 함수를 호출하여 UI를 설명합니다. 기본 데이터가 변경되면 프레임워크가 이러한 함수를 자동으로 다시 실행하여 UI 계층 구조를 업데이트합니다. compose ui를 사용하려면 Composable 어노테이션을 선언해야함 @Composable은 클래스단위에는 붙일 수 없고, 함수 단위에 붙일 수 있음 @Composable을 붙어야 Text 같이 선언형 UI를 구현할 수 있음 2. Recomposition Rec..
package com.codelab.codelab_prac_1 import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.u..
context 직역을 해보자면 맥락 의미한다. 안드로이드에서의 Context 도 얼추 비슷한 느낌이다. 어플리케이션에 대해서 현재 상태를 나타내는 역할을 하는데, 앱이 흘러가는 맥락 정도로 해석해 볼 수 있다. 현재 애플리케이션의 상태를 갖고 있으며, 안드로이드 시스템 서비스에서 제공하는 API(리소스, sharedPreference 등)에 접근하기 위해 사용한다. 크게 2가지로 분류 된다. Application Context 어플리케이션 전체 라이프사이클에 묶여 있는 context이다. 현재 context가 종료되고 나서도 context가 필요한 작업이나, 액티비티 범위를 벗어난 곳에 context가 필요한 작업에 적합니다. Activity Context액티비티 스코프 내에서 사용될 때 넘겨주거나, 액..

문제 설명 자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다. 예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다. 입출력 예 입력 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소..
Architecture 아키텍쳐를 사용하는 이유 일관적인 코드작성 (유지보수, 협업 능률 상승) 생산성 향상 테스트의 용이성 어플리케이션의 개발 방향성을 잡아줌 (동일한 목표) 아키텍쳐의 종류 MVC: model + view + controlller MVP: model + view(viewController) + presenter MVVM: model + view(viewController) + viewmodel MVVM + DataBinding MVI: model + view + intent MvRx(framework-airbnb), Flux(framework-facebook), Ribs, etc.... MVP architecture mvp 아키텍쳐 view - presenter - model 로 분리..

문제 설명 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000) 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다. 3: 스택에 들어있는 정수의 개수를 출력한다. 4: 스택이 비어있으면 1, 아니면 0을 출력한다. 5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다. 입출력 예 입력 첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 출력을 요구하는 명령은 하나 이상 주어진다. 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력 출력을 요구하는 명령이 주어질 때마다 명령의 결과를 ..
in 키워드 (GENERIC) in 키워드에 대해 알려면 먼저 제네릭에 대해 알아야한다. 제네릭이란? 제네릭은 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정한다. 제네릭이 나오게 된 배경은 자료형의 객체들을 다루는 메소드나 클래스에서 컴파일 시간에 자료형을 검사해 적당한 자료형을 선택할 수 있도록 하기 위해서 등장하였다. 제네릭을 사용하면 객체의 자료형을 컴파일 시에 체크하기 때문에 객체 자료형의 안정성을 높이고 형 변환의 번거로움이 줄어든다. 제네릭을 사용하기 위해 앵글 브래킷() 사이에 형식 매개변수를 사용해 선언하고 매개변수는 하나 이상 지정할 수 있다. 제네릭에는 가변성이란 것이 있는데 가변성이란 매개변수가 클래스 계층에 영향을 주는 것을 뜻한다. 가변성에는 공변성, 반공변성,..
constraint layout란?, 다른 레이아웃과 비교해서 장점은? ConstraintLayout은 각 요소를 부모나 다른 요소에 상대적으로 배치하는데 사용되는 제약 조건을 활용한다. 이는 정확한 위치 지정을 통해 UI를 세밀하게 제어할 수 있게 해준다. 이로써 발생하는 장점에는 다음과 같은 것들을 생각해볼 수 있다. 유연성 및 성능 개선- 다양한 화면 크기와 해상도에 대해 유연하게 대응할 수 있다. 이는 앱이 다양한 디바이스에서 일관된 모양을 유지하면서도, 더 나은 성능을 제공할 수 있도록 도와준다. 간결한 계층 구조 - 기존의 다른 레이아웃과 비교해서 계층 구조가 더 간결합니다. 계층 구조가 단순해지면서 레이아웃의 계산이 빨라지고 메모리 사용이 효율적으로 개선된다. 레이아웃 중첩 최소화 - 중첩된..
형 변환 코틀린은 정적 타입 언어이기 때문에 컴파일 시에 변수의 타입이 결정되며, 이를 명시적으로 변경하려면 형 변환을 사용해야 한다. 안전한 캐스팅 ‘as?;’ - as? 연산자를 사용하여 형 변환을 한다. 형 변환이 불가능하다면 null을 리턴한다. 안전하지 않은 캐스팅 ‘as’ - as 연산자를 사요한다. 강제 형 변환을 시도하며, 형 변환이 불가능하다면 ‘ClassCastException’ 예외를 발생시킨다. 형 변환은 보통 서로 다른 자료형 간에 데이터를 교환하거나 연산을 수행하기 위해 사용된디. 하지만 형 변환이 언제나 가능한 것은 아니며, 호환되지 않는 자료형 간에 형 변환을 시도하면 예외가 발생할 수 있다. 따라서 형 변환을 필요할 때에는 안전한 형 변환을 시도하고, 예외가 발생하지 않을 ..