본문 바로가기
반응형

전체 글407

Swift enum 총정리 오늘은 swift의 enum의 기본적인 정의 방법부터,switch와 함께 다루는 방법들까지,다양한 예제와 함께 정리하겠습니다.1. enum 의 정의와 기본 사용방법enum은 관련된 값들의 그룹을 정의하게 해주는데요.아래와 같이 정의해서 사용합니다. enum Direction { case north case south case east case west} 이는 좀 더 간략하게 한줄로 정의할 수도 있습니다. enum Direction { case north, south, east, west } 이 값에 접근할 때는,아래와 같이 해 줍니다. let currentDirection = Direction.north swift의 다른 속성들에 접근할 때처럼,타입이 명확할 때는 아래와 같이 축약도.. 2025. 3. 31.
SwiftUI body에 사용할 수 없는 것과 대안들 : 변수선언, 조건문, 반복문 오늘은 SwiftUI body에 사용할 수 없는 것들에 대해 정리하겠습니다. 1. SwiftUI body에 사용할 수 없는 것들SwiftUI는 명령형이 아닌,선언형 프로그래밍 방식을 따르는데요.SwiftUI View의 body에서는,UI의 상태와 구조만을 '선언'하도록 하고 있습니다. 그래서, body안에 사용할 수 없는 것들이 있는데요.이에 대해 명확히 알아 둘 필요가 있습니다. SwiftUI body에 사용할 수 없는 것들은 다음과 같습니다.변수 선언 (var 키워드)명령형 조건문 (if, switch 등을 값 할당에 사용할 때)명령형 반복문 (for, while 등)예를 들어,아래와 같이 코드를 작성하면,컴파일 에러가 발생합니다.  struct ContentView: View { var bod.. 2025. 3. 22.
iOS Image Slicing 해서 resizableImage 만들기 앱을 만들다 보면,말풍선처럼 특정부분을 늘려서 사용해야하는 경우가 있는데요.안드로이드에서는 9patch라는 것을 이용했는데요.ios에서는 Slicing한 후, Stretch(늘어나도록) 설정을 해서 이와 같은 효과를 얻을 수 있습니다.오히려 이미지에 여기저기 칠하지 않아도 되어서 좋기도 합니다.오늘은 이 방법에 대해 정리하겠습니다. 1. Asset Catalog에서 Slicing 설정 찾기AssetCatalog에서 직접 이미지를 슬라이싱 할 수 있는데요.먼저 아래와 같이 Slicing 섹션을 찾아서, Slices와 Center를 설정해 줍니다.Xcode의 Asset Catalog에서 이미지 선택Attributes Inspector에서 'Slicing' 섹션 찾기(하단)Slices: 'Horizontal .. 2025. 3. 22.
iOS 앱 최소버전 결정 기준 정리 iOS앱을 개발을 시작하면,최소버전을 몇으로 해야할지 결정해야 하는 순간이 옵니다.오늘은 이럴 때,어떤 기준들을 가지고 결정할 수 있는지,정리해 보겠습니다. 1. 애플이 제시하는 사용 현황가장 먼저 살펴볼 것은 iOS버전별로,사용현황을 보는 것인데요.구체적인 정보를 알고 있는 애플은,이 정보를 웹사이트에 게시하고 있습니다.2025년 1월 기준으로는 아래와 같은데요.   이 정보는 구글에서 "ios appstore 지원"이라고 검색하면,처음으로 나오는 애플의 사이트에서 얻을 수 있는데요.이것만 보면, ios16이하는 5%밖에 안되는 군요. 그런데 사실 우리가 고민하는 지점은,iOS15인가 16인가하는 경우가 많습니다.SwiftUI를 사용하면서,async 등 이런저런 기능을 사용하면서,최소한의 버전을 코딩하.. 2025. 3. 21.
자주 사용하는 XCode 단축키 총정리 오늘은 XCode에서 자주 사용하는 단축키에 대해 총정리하겠습니다. 1. 코드 자동완성자동완성 단축키는,에디터를 사용할 때,가장 먼저 알아두어야 할 단축키이지요.아래와 같이 해주면 됩니다.Ctrl + Space또는 아래 명령어를 사용해도 가능합니다.Ctrl + . 2. Menu 검색하기(Quick Actions)아래 단축키로 메뉴를 검색해서 실행할 수도 있습니다.Cmd + Shift + Axcode에서 단축키 하나만 알아야 한다면,이것만 외울것 같습니다.   같이 알아두면 좋을 단축키가 아래인데요.마우스 우측클릭과 유사하게,선택할 수 있는 컨텍스트 메뉴들이 나옵니다.Ctrl + Click참고로 rename의 경우,미리 지정된 단축키가 없어서,컨텍스트 메뉴에서 접근하기도 하는데요. 아래와 같이 Refact.. 2025. 3. 20.
SwiftUI 빈 공간에 사용하는 Color.clear 와 EmptyView 오늘은 SwiftUI에서 빈공간에 사용하는,Color.clear와 EmptyView에 대해 정리하겠습니다. 1. Color.clear와 EmptyViewColor.clear와 EmptyView()는,둘다 시각적으로 보이지 않는 요소를 만들 때 사용되는데요. 하지만 실제 사용할 때 둘은 큰 차이가 있습니다.  Color.clearEmptyView주요 용도투명 오버레이, 공간 예약, 이벤트 캡처아무것도 표시 안 함을 명시적으로 나타낼 때 사용공간 차지지정된 크기의 공간을 차지함지정하지 않으면,부모 뷰가 제공하는 공간을 채움공간을 전혀 차지하지 않음사용자 상호작용가능 (.contentShape 등으로 설정 가능)공간이 없어 불가능Modifer적용가능대부분 불가능onAppear/onDisappear트리거 됨트리.. 2025. 3. 19.
SwiftUI 커스텀 폰트(Font) 사용하기 오늘은 swiftui에서 커스텀 폰트를 지정해서 사용하는 방법에 대해 정리하겠습니다. 1. Font 등록하기폰트를 등록하기 전에,먼저 폰트를 프로젝트에 복사해 줍니다.이 때 어느 그룹에 넣어서 관리하건 문제되지 않습니다.그룹은 단순히 논리적인 구조로 실제하는 물리적 구분이 아니기 때문입니다. 그럼 이제 프로젝트 설정에서 아래와 같은 순서로,Font를 등록해 줍니다.좌측의 네비게이터에서 최상단의 프로젝트 선택'Info' 탭 클릭여러 섹션 중, 맨 위의 'Custom iOS Target Properties' 섹션 열기"+" 버튼을 클릭하여 새 항목을 추가키 이름으로 'Fonts provided by application' 검색해 선택 후 아이템 추가(배열 타입임)배열 항목 옆의 "+" 버튼을 클릭하여 첫 .. 2025. 3. 19.
Swift Parameter Label(매개변수 라벨) as 사용방법 정리 오늘은 Swift Parameter Label(매개변수 라벨)의 사용방법에 대해 정리해 보겠습니다. 1. Swift Parameter Label(매개변수 라벨) asSwift에서 Parameter Label(매개변수 라벨) as는,함수를 호출할 때,각 인자가 어떤 목적으로 사용되는지 알려주어,코드의 가독성을 높여줍니다. as는 "~로써", "~로"라는 의미를 가지고 있는데요.타입자체를 인자로 받는 함수에서,해당 타입이 어떻게 사용될 것인지를 표현할 때 유용합니다.  코드를 보면서 이해해 볼까요? 아래 함수는 T타입을 받아, U타입으로 변환해주는 함수입니다.여기서 as는 특별한 기능을 하는 것은 아니고,하나의 라벨로써,convert함수호출시 어떤 타입으로(또는 타입으로써) 함수에서 사용될지,문장처럼 편하게.. 2025. 3. 15.
Swift Closure의 강한 캡처와 [weak self]의 필요성 오늘은 Swift Closure의 강한 캡처와 [weak self]의 필요성에 대해 알아보겠습니다. 1. Closure의 강한 캡처클로저는 외부 변수를 "캡처"하여 내부에서 사용할 수 있는데요.참조하는 객체를 강하게(strong) 캡처합니다.이로 인해 다음과 같은 문제가 발생할 수 있는데요.강한 참조 순환(메모리 누수): 만약 클래스의 프로퍼티가 클로저를 가지고 있고, 그 클로저가 self를 캡처한다면, 클래스 인스턴스와 클로저가 서로를 강하게 참조하게 되어 메모리에서 해제되지 않아,메모리 누수 발생가능의도치 않은 동작: 객체가 이미 소멸되었어야 하는데 클로저에 의해 계속 살아있으면, 예상치 못한 동작이 발생할 수 있습니다. 2. [weak self]의 필요성이럴 때 필요한 것이, [weak self]인.. 2025. 3. 14.
파라미터, 매개변수 그리고 인자에 대한 용어정리 오늘은 파라미터, 매개변수 그리고 인자에 대한 용어를 정리해 보겠습니다. 1. 파라미터와 매개변수파라미터와 매개변수는 사실 같은 것을 가리킵니다.영어에서는 Parameter라고 하는데요.함수 정의에 사용되는 변수, 즉 함수의 입력값입니다. Parameter 단어를,음으로 읽은 것이 파라미터이고,한국어로 번역한 것이 매개변수입니다. '파라미터'와 '매개변수',두 용어는 완전히 같은 개념을 가리키는 것이었습니다. 일상 대화나 실무에서는 '파라미터'라는 용어도 많이 사용하고요.교육 자료나 공식 문서에서 '매개변수'라는 말도 많이 사용됩니다. 코드를 보면서 이해해 볼까요? 아래에서 name과 age가,바로 파라미터 또는 매개변수입니다. func greet(name: String, age: Int) { pr.. 2025. 3. 13.
Swift inout parameter(파라미터) 함수 마스터하기 오늘은 Swift의 inout parameter(파라미터)를 사용하는 함수에 대해 정리하고 마스터해 보겠습니다. 1. inout 파라미터1-1. inout 파라미터원래 Swift에서 함수나 메서드에 전달되는 파라미터는,상수(constants)로 취급되어 함수 내에서 수정할 수 없습니다.하지만 파라미터를 아래와 같이 inout 키워드와 함께 표시하면,원래 상수라면 안 되는 다음의 일들이 가능해집니다.함수 내에서 파라미터를 수정 가능함수가 호출될 때 값을 전달받아 함수 내부에서 수정한 후, 수정된 값을 다시 원래 변수에 반영func makeDouble(number: inout Int) { number *= 2}  위 함수는 아래와 같이 사용해 주어야 합니다.주의할 점은, inout 파라미터를 전달할 때.. 2025. 3. 13.
Swift guard let 이용한 Optional unwrapping 방법 오늘은 swift에서 guard let 이용한 Optional unwrapping 방법을 알아보겠습니다. 1. guard let1-1. guard letguard let은 옵셔널 값이 nil이 아닌지 확인하고, nil이 아니라면 옵셔널을 언래핑하는 방법입니다. if let과 달리, guard let은 언래핑된 값을 함수나 블록의 나머지 부분에서 사용할 수 있게 해줍니다. guard let 사용시,nil일 경우에 대한 else 블록을 반드시 구현해야 하고요.이 블록안에서,return, break, continue, throw 등으로,현재 스코프를 벗어나는 코드도 같이 작성해 주어야 합니다. guard let unwrappedValue = optionalValue else { // optionalVa.. 2025. 3. 12.
Swift 불투명 타입 some은 왜 필요할까? SwiftUI를 접하다 보면,Opaque Type(불투명 타입)인 some과 만나게 됩니다.대체 이건 뭐고 왜 필요한 것일까요?실마리를 찾기 위해,Opaque Type(불투명 타입)과 SwiftUI에 대해 알아보겠습니다. 1. Opaque Type(불투명 타입) 과 SwiftUI불투명 타입이 어떤 건지 비유를 통해 알아보겠습니다. 만약 친구에게 "나 과일 하나 가져올게" 라고 말했다고 가정해 보겠습니다.어떤 과일을 가져올지 정확히 말하지 않았지만,분명한 것은 과일의 일종을 가져온다는 점입니다. "뭐가 될지는 모르겠지만,마트에 들려서,과일종류를 사올것이다" 이런 거죠.  SwiftUI에서도 마찬가지입니다.some을 사용하면 다음의 의미를 가지게 됩니다."이것은 View의 일종인데,Text일 수도, But.. 2025. 3. 8.
Kotlin BuildList 사용방법 정리 buildList는 Kotlin의 표준 라이브러리에서 제공하는 함수인데요.오늘은 이것에 대해 정리하겠습니다. 1. BuildListbuildList 함수를 사용하면,MutableList에 아이템을 추가하거나 제거하는 등의 변화를 준 후,변경 불가능한(immutable) List로 리턴해 줍니다.  예제를 보면서 이해해 보겠습니다.buildList블록안에서,x라는 리스트의 앞과 뒤에,아이템을 추가하였습니다. val x = listOf('김', '이')val y = buildList() { add('박') addAll(x) add('마')}println(y) // ['박', '김', '이', '마']  2. 실제 코드 실제로 사용하는 코드를 볼까요?예전코드와,buildList를 사용하는 코드.. 2025. 2. 20.
Paging 라이브러리와 RecyclerView 그리고 Room 구현하기 오늘은 Paging 라이브러리와 RecyclerView,그리고 Room을 이용해 대량의 데이터를 구현하는 방법에 대해 알아보겠습니다. 1. Paging1-1. Paging라이브러리Android Paging Library는,앱에서 대량의 데이터를 표시하는 데 도움을 주는 라이브러리입니다.책을 페이지별로 나누어 보는 것처럼,데이터를 작은 덩어리(페이지)로 나누어서,필요한 부분만 불러와 보여주는 방식입니다. Paging이 필요한 시기는 언제일까요?처음 로드해야하는 데이터가, 50개 정도를 넘어선다면,Paging을 고려해 보아야 합니다. 1-2. Paging 라이브러리를 사용해야 하는 이유Paging라이브러리가, 데이터를 덩어리로 나누어주는 것만 하는 것이 아니고요.아래와 같은 역할에 대한 코딩을 줄여주기도 합.. 2025. 2. 19.
SourceTree에서 방금 커밋한 메시지 수정하기(Amend) 커밋메시지를 작성하여 커밋한 직후,오타를 발견하면 당황스러운데요. 이럴 때 직전 커밋을 수정하는 방법이 있습니다.오늘은 이것에 대해 알아보겠습니다. 1. Amend 직전 커밋을 수정할 때 기억해야 할 키워드는,'amend'입니다.Source tree에는 아래와 같은 메뉴명을 찾으면 되는데요.Amend Last Commit 먼저, SourceTree에서 좌측상단의 Commit버튼을 눌러줍니다.아무것도 커밋할 것이 없어도,하단 커밋창을 클릭하고 나서,아래와 같이 2가지 방법으로 메뉴에 접근할 수 있습니다.   amend commit을 클릭하거나 체크하면,직전 커밋메시지가 나타나는데요.이것을 수정한 다음, commit버튼을 클릭해 주기만 하면 됩니다. 2. 주의할 점Amend명령어는 기존 커밋의 메시지를 바.. 2025. 2. 18.
Kotlin Lateinit var와 By Lazy 차이 이해하기 오늘은 Kotlin의 lateinit var에 대해서 이해해 보겠습니다. 1. lateinit var vs by lazy먼저, lateinit var와 by lazy를 표로 비교해 보겠습니다.가변적이면서도 초기화 시점을 컨트롤 하는 lateinit var와,불변적이면서 사용시에 자동으로 초기화 되는 by lazy의 차이점이 보이시나요?  lateinit varby lazy선언 방식가변적, 초기화 후 변경 가능불변적(val), 초기화 후 변경 불가초기화 시점원하는 시점에 대입해서 명시적으로 초기화(초기화 시점에 null이면 Exception)첫 사용 시 자동 초기화기본타입 사용기본 타입 사용 불가모든 타입 사용 가능스레드 안전성보장하지 않음보장초기화 여부 확인::propertyName.isInitializ.. 2025. 2. 17.
Android 카메라 동적 권한 얻는 방법 정리 오늘은 Android에서는 카메라기능을 사용할 경우,단순히 권한을 선언하는 것으로는 부족하고요.동적으로 유저에게 승인을 얻어야 하는데요.오늘은 동적으로 권한을 얻는 방법에 대해 알아보겠습니다. 1. ManifestManifest에 Camera권한을 설정하지 않으면,아무리 동적권한을 구현해도 카메라기능은 동작하지 않습니다.manifest에 아래와 같이 권한을 요청해 둡니다.   2. 동적 권한 요청 구현그럼 실제로 동적 권한을 요청하는 코드를 볼까요? 2-1. permissionLauncher작성하기가장 먼저 할 일은,Activity(혹은 Fragment) 내에 아래와 같이,아래와 같이 permissionLauncher를 작성하는 일입니다.권한이 거부되면,사용자에게 권한이 필요하다고 알리는 다이얼로그.. 2025. 2. 17.