11월, 2023의 게시물 표시

Android Compose Canvas error

이미지
사용 언어: Kotlin 1.9.0 사용 버전: Android Studio Giraffe 2022.3.1 Patch 4 안드로이드 컴포즈 Canvas error를 알아보겠습니다. 오늘 다룰 Canvas 오류는 java.lang.RuntimeException: Canvas: trying to draw too large(240869376bytes) bitmap. 입니다. 해당 오류는 LazyColumn을 사용하는 도중 발견하였습니다. Image를 그리는 코드였는데, Preview부터 먹통이 되는 것이었습니다. Some issues were found while trying to render this preview. 앱을 실행해 보니 logcat에 다음과 같은 문구가 적혀있었습니다. 즉, Canvas(캔버스)가 그릴 수 있는 용량보다 크게 그려서 그랬던 것입니다. preview의 경우 오류를 제대로 확인하기 어려워 compose는 이러한 단점이 있네요. 이미지 크기를 줄여 용량을 줄여주면 다음과 같이 잘 나옵니다. 프로젝트 https://github.com/Jaehwa-Noh/Project-30-Days-App/tree/Compose-30-Days-App 끝. 카테고리: Android, Compose

세상 2

세상 2 세상을 나로 가득 채우자. -노재화 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 6』, 부크크(2023), 50 쪽. 카테고리: My Book Story

iOS SwiftUI Custom fonts

이미지
사용 언어: Swift 5 사용 버전: Xcode 15.0.1 iOS 스위프트유아이 Custom fonts를 알아보겠습니다. 앱의 목적에 따라서 다양한 Font(글꼴)를 사용해야 할 때가 있습니다. 오늘은 SwiftUI에서 Font를 사용하는 방법을 알아봅니다. 공식 문서입니다. https://developer.apple.com/documentation/swiftui/applying-custom-fonts-to-text/ Xcode에 Group을 하나 만듭니다. 프로젝트 그룹 - 우클릭 - New Group Project Fonts라고 이름을 지어줍니다. 사용할 Font를 방금 만든 그룹으로 옮겨줍니다. '.ttf' 확장자입니다. Add to targets에 Font를 사용할 프로젝트를 선택해 줍니다. 폰트가 추가되었습니다. 프로젝트 - Info로 갑니다. Key에 Fonts provided by application을 입력하고 하위에 우리가 추가한 Font ttf 파일을 적어줍니다. 사용법은 다음과 같습니다. .font(Font.custom(name, size, relativeTo) relativeTo를 적지 않으면 body와 연결되고, 아래처럼 .largeTitle로 지정할 수 있습니다. 짜잔. 실행 결과입니다. https://github.com/Jaehwa-Noh/Practice-Superheroes-app/tree/swiftui-superheroes 끝. 카테고리: iOS, SwiftUI

Android Typography

이미지
안드로이드 Typography를 알아보겠습니다. Typography(타이포그래피)는 글자와 관련된 내용입니다. Material3에 가면 이렇게 적혀있습니다. Typography는 글을 아름답고 읽기 쉽게 만들어준다. 출처: https://m3.material.io/styles/typography/overview Material(머티리얼)에서 기본으로 제공해 주는 Type style에는 5가지가 있습니다. • Display • Headline • Title • Body • Label Typography token(토큰)을 사용합니다. 실제 값의 크기가 아닌 역할로 구분돼 있습니다. • Small • Medium • Large 그래서 Typography를 사용할 때에는 스타일과 토큰을 사용해서 쉽게 접근할 수 있습니다. 예) Display-medium 이제, 각 스타일마다의 역할을 알아봅시다. • Display(디스플레이) 3가지 type scale이 존재합니다. Large, medium 그리고 small. 화면에서 가장 큰 글자이며, 짧고 중요한 글자 또는 숫자에 사용됩니다. 큰 화면에 적합합니다. Display type에는 풍부한 표현이 가능한 폰트가 좋습니다. 예를 들면 손글씨나 필기체가 있습니다. 적절한 크기를 설정하여 사용합니다. • Headline(헤드라인) Headline은 높은 관심이 필요한 짧은 글에 사용됩니다. 작은 화면에 적합합니다. Headline은 첫 구절이나 강조하고 싶은 영역에 사용하면 좋습니다. Headline은 풍부한 표현이 가능한 글꼴을 사용해도 됩니다. 적절한 글 높이와 글자 간격을 설정하여 읽기 쉽게 만들어야 합니다. • Title(타이틀) headline보다 작은 스타일입니다. 중간 정도의 주목이 필요한 중간 정도 길이의 글에 좋습니다. 예를 들어, title 스타일을 사용하여 첫 구절과 두 번째 구절을 구분할 수 있습니다. 표현이 풍부한 폰트(디스플레이, 손글씨, 필기체)를 사용할 시 주의가 필요합니다. • Body(보디)

Android Kotlin Scope functions

이미지
사용 언어: Kotlin 1.9.20 사용 버전: Kotlin Playground 안드로이드 코틀린 Scope functions를 알아보겠습니다. Scope(스코프) 함수들은 코틀린 기본 라이브러리에 들어있는 순전히 블록을 실행하기 위해 만들어진 함수들입니다. 이 scope 안에서는 object(객체) 이름 없이 접근할 수 있습니다. 5개의 scope 함수가 있습니다. let, run, with, apply, also가 있습니다. 출처: https://kotlinlang.org/docs/scope-functions.html 이 다섯 가지 함수들은 기본적으로 블록을 실행하는 공통점이 있지만, 내부에서 어떻게 object를 사용 가능한지와 어떠한 값을 반환하는지 등의 동작이 다릅니다. 간단하게 줄여서 설명하면 이렇습니다. • null이 아닌 값을 실행하려면 let • 로컬 범위에서 변수로 표현식을 소개할 때 let • Object의 세부 설정 apply • Object의 세부 설정 및 결과를 계산할 때 run • 표현식이 필요한 곳에서 문을 실행할 때 non-extension run • 추가적인 효과가 필요할 때 also • 한 Object에서 여러 함수를 부를 때 with 위의 let, apply, run, also, with는 this와 it으로 해당 context object를 참조할 수 있는데요. this는 lambda receiver이고, it은 lambda argument입니다. this는 생략이 가능하고 바로 method나 property를 사용할 수 있습니다. 그래서 외부의 함수인지 변수인지 구분하기 어렵기 때문에 될 수 있으면 Lambda(람다) 안에는 object와 관련된 작업을 하는 게 좋습니다. it은 lambda argument(전달 인자)입니다. 그래서 object가 함수의 인자로 사용되거나 많은 변수를 다룰 때 사용하면 좋습니다. 세부적으로 각 함수들을 들여다봅시다. let입니다. it으로 다루고 lambda result를 반환합니다.

Android Kotlin Data classes

이미지
사용 언어: Kotlin 1.9.20 사용 버전: Kotlin Playground 안드로이드 코틀린 Data classes를 알아보겠습니다. Data class는 이름으로 알 수 있듯이 데이터를 다루기 위해 만들어진 class입니다. 출처: https://kotlinlang.org/docs/data-classes.html Data class를 왜 사용하는 걸까요? 일반 class와 어떤 것이 다르길래 data를 다루기에 최적화된 것일까요? 다음은 data class가 제공해 주는 기능들입니다. data class를 만들면 자주 쓰이는 equals, hashCode, toString, componentN, copy 등의 기능을 제공해 줍니다. 즉, 사용자가 저러한 함수들을 직접 만들 필요가 없어집니다. 편리하죠. componentN() 함수는 Destructuring declaration에 사용됩니다. 아래는 Destructuring declaration 공식 문서입니다. https://kotlinlang.org/docs/destructuring-declarations.html 이렇게 object를 여러 변수에 할당할 때 사용됩니다. data class를 만들기 위해서는 다음과 같은 조건이 필요합니다. 파라미터가 하나라도 존재해야 하고, 파라미터는 val이나 var로 정의되어야 합니다. data class는 abstract, open, sealed, inner로 정의할 수 없습니다. 아래는 method의 상속과 관련된 설명입니다. 대략 어떠한 것들은 새로 정의가 되고, 어떠한 것들은 정의를 새로 할 수 없다는 뜻입니다. 정의는 간단합니다. 그냥 class 앞에 data를 적어주면 됩니다. 끝. 카테고리: Android