5월, 2022의 게시물 표시

누군가

누군가 ​ 누군가는 나를 세상의 전부로 봐주고, 누군가는 나를 세상의 먼지로 본다. 누구를 더 좋아할지는 당연한 결과가 아닌가? ​ -노재화 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 4』, 부크크(2022), 50 쪽. 카테고리: My Book Story

Android Accessibility Decorative elements

이미지
사용 언어: Kotlin 1.6.21 사용 버전: Android Studio Chipmunk 2021.2.1 ​ 안드로이드 Accessibility Decorative elements를 알아보겠습니다. ​ 시각이 안 좋으신 분들은 TalkBack 기능을 사용하십니다. TalkBack은 내용을 말로 설명해 주는 기능입니다. ​ 우리는 여러 기능 중에 장식을 위한 요소를 다뤄볼 예정입니다. 장식으로 사용된 요소를 TalkBack으로 설명을 들을 필요는 없습니다. ​ 아래는 구글에서 설명하는 장식을 위한 요소 설정 방법입니다. https://developer.android.com/guide/topics/ui/accessibility/principles 그냥 장식을 위해서 만들어진 요소들은 TalkBack을 할 필요가 없습니다. 하게 되면 TalkBack을 사용하시는 분들이 불편하실 거 같네요. ​ ​ 아래의 화면을 보면, 저 알약 이미지에는 사실 TalkBack이 필요 없습니다. 제가 그냥 장식용으로 넣은 거거든요. ​ 우리가 할 수 있는 것은 두 가지 방법이 있습니다. 첫 번째는 contentDescription에 null을 넣는 방법입니다. 두 번째는 android 4.1(API 16) 이상에서 작동하는 방법인데, importantForAccessibility에 no를 적는 것입니다. ​ 저는 API 16 이상을 사용하기 때문에 importantForAccessiblity에 no를 적어주기로 했습니다. 이제 해당 항목은 TalkBack이 작동하지 않을 겁니다. ​ 끝. 카테고리: Android

일상

일상 ​ 일상 속에 새로움이 있고, 새로움 속에 일상이 있다. ​ -노재화, 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 4』, 부크크(2022), 44 쪽. 카테고리: My Book Story

내가 가진 물건

내가 가진 물건 ​ 다른 사람이 가진 좋은 물건 보다 내가 가진 물건을 더 아끼고 사랑해야지. ​ -노재화, 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 4』, 부크크(2022), 43 쪽. 카테고리: My Book Story

좋은 글과 좋은 사람

좋은 글과 좋은 사람 ​ 좋은 글은 여러 번 수정을 통해서 만들어진다. 좋은 사람 또한 여러 번 수정을 통해서 만들어진다. ​ -노재화, 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 4』, 부크크(2022), 42 쪽. 카테고리: My Book Story

iOS How to check Optional value is a nil?

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI, Swift ​ iOS How to check Optional value is a nil을 알아보겠습니다. ​ Swift에는 Optional 타입이 존재합니다.  이 Optional은 nil 일 수도 있고 값이 들어있을 수도 있는 타입을 말합니다. 여기서 nil은 다른 언어의 Null이라고 생각하시면 됩니다. ​ Optional을 사용하기 위해서는 Unwrap(벗기기)이라는 과정을 거쳐야 합니다. ​ 우선 Optional을 만들어 봅시다. 3 번째 줄처럼 간단하게 타입 뒤에 '?' 만 붙여주면 됩니다. unwrap 과정은 다음과 같습니다. 아래 7 번째 줄과 같이 '!'를 붙여주면 됩니다. 하지만 이러한 방법은 확실히 값이 있을 때만 사용해야 합니다. 아니면 오류가 발생합니다. ​ ​ 다른 방법으로는 Nil-Coalescing Operator '??'를 사용하는 방법이 있습니다. '??'의 용도는 nil 일 때에 사용할 값을 적어주는 겁니다. 5 번째 줄은 nil이라서 false가 되고, 7 번째 줄은 true이기 때문에 false가 되지 않고 true가 됩니다. ​ ​ ​ 이제 오늘의 주제인 nil을 확인하는 방법을 알아봅시다. if let을 사용합니다. myOptional은 중괄호 안에서만 작동하는 지역 변수가 됩니다. nil 이면 else가 실행되고, nil이 아니면 첫 번째 중괄호가 실행됩니다. ​ ​ ​ 또 다른 방법으로는 gu

iOS Swift Extension

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS Swift Extension을 알아보겠습니다. ​ Extension은 기존에 있는 Protocol, Class, Struct 등을 건들지 않고 기능을 추가하는 것을 말합니다. 우리가 수정할 수 없는 무엇인가 있다면 거기에 우리의 기능을 추가할 수 있으니 좋네요. ​ String은 Swift에 정의되어 있는 struct입니다. 우리가 그 구조를 바꾸거나 건들지는 않습니다. 하지만 뭔가 String에 필요한 기능을 추가하고 싶다 하면 이렇게 하면 됩니다. 한 번 써볼까요? 기존에 있는 것도 덮어쓸 수 있습니다. 8 번째 줄의 count를 덮어 씌워 봤습니다. Struct나 Class의 init 함수도 덮어 씌울 수 있습니다. ​ 프로토콜을 Extension 해서 사용하면 프로토콜을 상속하는 모든 곳에 적용시킬 수 있습니다. 아래의 eat()은 동일합니다. 이것을 Extension으로 변경하면 다음과 같이 나타냅니다. 끝. 카테고리: iOS

iOS Swift Protocol

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS Swift Protocol을 알아보겠습니다. ​ 프로토콜은 다른 언어의 abstract class 또는 Kotlin의 Interface 같은 기능을 합니다. ​ struct 또는 class를 같은 protocol을 상속받으면 struct 또는 class의 이름에 상관없이 protocol로 다룰 수 있습니다. ​ ​ protocol을 만들고 상속받아 봅시다. ​ protocol에는 변수와 함수가 들어갑니다. 그렇지만 특정한 값을 정하는 넣는 것이 아니라 정의만 해줍니다. 각 변수마다 get과 set 속성을 정해줘야 합니다. get은 값을 읽을 수 있는 권한이고, set은 값을 설정할 수 있는 권한입니다. protocol을 상속받은 struct나 class는 protocol에 있는 변수와 함수를 무조건 가지고 있어야 합니다. 30 번째 줄에서와같이 protocol로 다루면, 서로 다른 Struct도 하나의 배열로 다룰 수 있습니다. 우리가 위에서 프로토콜에 weight에는 get을 number에는 get과 set을 부여했습니다. 하지만 struct로 만든 apple에는 protocol 과는 상관없이 struct의 변수를 따릅니다. 프로토콜로 만든 apple2의 경우에는 get만 설정된 weight에 값을 변경하지 못합니다. 끝. 카테고리: iOS

기회

기회 ​ 신은 우리에게 두 번의 기회를 주지 않는다. 다만, 또 다른 기회를 줄 뿐이다. ​ -노재화, 『다이아몬드는 개똥밭에 굴러도 다이아몬드이다 4』, 부크크(2022), 40 쪽. 카테고리: My Book Story

iOS Swift Struct

이미지
운영 체제: macOS Monterey 12.3.1 사용 버전: Xcode 13.3.1, SwiftUI ​ iOS Swift Struct를 알아보겠습니다. ​ Struct는 기본 뼈대를 만든다고 생각하면 됩니다. 구체적으로 명시하는 것보다는 추상적으로 만드는 편입니다. 예를 들어 노트북이라고 하면 MacBook, LG, Samsung, DELL 이렇게 만드는 게 아닌 '화면이 있고 키보드가 있고 접을 수 있는 그런 컴퓨터' 이런 식으로 만듭니다. ​ 노트북으로 만들어 봅시다. ​ struct를 만들기 위해서는 앞에 struct를 붙여주고 대문자로 시작합니다. 불러올 때는 함수처럼 괄호를 사용합니다 다 만들었습니다. ​ 근데 struct 안에 아무것도 없네요. ​ struct 내부의 변수를 property 속성이라고 부릅니다. 속성을 넣어봅시다. 노트북에는 브랜드, 화면 개수, 키보드 개수, 사용자 이름, 비밀번호 것들이 필요할 것 같네요. 속성으로 만듭시다. ​ 브랜드와 화면 개수, 스크린 개수, 키보드 개수는 변경할 일이 없어서 let으로 만들었고, userName과 password는 변경할 일이 생길 것 같아 var로 만들었습니다. '.'을 통해 각 속성에 접근할 수 있습니다. swift struct의 특이한 점은 struct를 let 변수로 만들 시에는 아무리 struct 내부에 var로 선언이 되어 있어도 변경이 안됩니다. 자동으로 변경되는 속성을 만들 수도 있습니다. 10 번째 줄에 있는 totalNumberOfScreenAndKeyboard는 numberOfScreen과 NumberOfKeyboar