All
8 posts
Swift Delegate Pattern 이란?

들어가기 앞서 기존 SwiftUI 로 입문을 한 입장에서 Delegate Pattern 이란 단어가 약간 생소하였다. 왜 뷰간에 데이터 전달을 하는데 Delegate Pattern을 사용하는거지? SwiftUI에선 State, Binding으로 전달하면 되는데? 이런 의문을 갖고 공부를 하기 시작했다. ViewController간 데이터를 주고 받는 방식 Swift에선 ViewController간의 데이터를 주고 받는 방법이 여러가지가 있다. 직접 프로퍼티에 접근 함수를 통한 접근 Segue Delegate Closure NotificationCenter 이렇게 다양한 방법들이 있는데 이번엔 Delegate 에 대해서 공부해보았다. 그래서 Delegate가 뭘까? UIKit에서 가장쉽게 접하는 예제는 UITableView를 구현하기 위해서 UITableViewDateSource와 UITableViewDelegate를 채택하여 사용한다. 근데 막상 사용하는 입장에서 이것에 대해 …

SwiftUI KingFisher 와 Async Image 사용 비교

들어가기 앞서 Xcode 프로젝트 Assert에 이미지를 추가하여 이미지를 로드하는 경우도 있지만, 네트워킹을 통해 웹의 이미지를 로드하는 경우는 일일이 이미지를 저장하여 불러오는 것이 불가능하다. 이때 Kingfisher 또는 Async Image 를 사용하면 웹 이미지를 보여줄 수 있다. Async Image는 SwiftUI가 iOS 15부터 제공하는 새로운 기능으로, URL에서 이미지를 비동기적으로 로드하고 캐시하는 역할을 합니다. 이로 인해 이미지 로딩 및 표시가 더욱 원활하고 성능이 향상됩니다. Kingfisher는 Swift 기반의 이미지 다운로딩 및 캐싱 라이브러리로, UIKit 및 SwiftUI에서 사용할 수 있습니다. Kingfisher를 사용하면 더 많은 커스터마이제이션과 기능을 활용할 수 있습니다. AsyncImage 이미지를 비동기적으로 로드하고 표시하는 뷰입니다. Async Image는 SwiftUI에서 도입된 이미지 로딩 및 표시를 위한 내장된 컴포넌트입…

Swift Generic에 대서

들어가기 앞서 해당 제네릭에 대해 작성된 내용은 야곰님의 스위프트 프로그래밍: Swift 5 책의 내용을 제가 이해할 부분과 추가로 알아간 내용에 대해 정리했습니다. Generic에 이란? Swift에서 제공하는 강력한 기능 중 하나로 제네릭을 이용해 코드를 구현하면 어떤 타입에도 유연하게 대응할 수 있습니다. 또한 제네릭으로 구현한 기능과 타입은 재사용하기도 쉽고, 코드의 중복을 줄 일 수 있습니다. 야곰님의 책에 언급된 내용에 따르면 수많은 라이브러리에서 제네릭을 채택하고있다고 합니다! 제네릭은 기본적으로 타입 또는 메서드의 이름 뒤의 홀화살괄호 기호 <> 사이에 제네릭을 위한 타입 매개 변수를 써주어 제네릭을 사용할 것임을 표시합니다. 제네릭을 사용하고자 하는 타입 이름 <타입 매개변수> 제네릭을 사용하고자 하는 함수 이름 <타입 매개변수> (함수 매개변수…) Generic의 중요성 타입 안전성: 제네릭을 사용하면 다양한 타입에 대해 동일한 작업을 수행할 수 있으면서도 …

URLSession 과 Alamofire 비교해서 사용하기

URLSession 이란? Swift의 URLSession은 네트워크 작업을 수행하는 데 사용되는 API 중 하나입니다. URLSession은 URL을 통해 데이터를 가져오거나 전송하는 기능을 제공하며, 네트워크 요청 및 응답을 처리하는 데 유용합니다. URLSession은 비동기적으로 작동하며, 앱의 성능을 향상시키는 데 도움이 됩니다. URLSession은 기본적으로 세 가지 주요 작업을 수행합니다: 데이터 가져오기 (Data Fetching): 웹에서 데이터를 가져오는 데 사용됩니다. 주로 GET 요청과 함께 사용됩니다. 데이터 전송 (Data Task): 서버에 데이터를 전송하는 데 사용됩니다. 주로 POST 또는 PUT 요청과 함께 사용됩니다. 다운로드 작업 (Download Task): 파일이나 큰 데이터를 다운로드할 때 사용됩니다. Alamofire 란? Alamofire는 Swift로 작성된 네트워킹 라이브러리로, URLSession을 기반으로 한 HTTP 요청 및…

SwiftUI로 NaverMap 사용하기

Naver API 발급 네이버 클라우드 사이트에 접속하여 회원가입, 로그인을 합니다. 로그인 후 콘솔에 들어갑니다. 해당 API를 선택합니다. 그 다음 API 등록 버튼을 누르고 현 예제에서는 Mobile Map 만 사용하므로 체크 하고 Bundel ID를 입력해 줍니다. 이렇게 진행하면 Client ID 값을 받을 수 있습니다. 키값 숨기기 보통 로컬환경에서 작업하면 크게 문제가 없지만 깃허브와 같은 환경에 올려 작업하면 키값이 노출되는 문제가 생깁니다. 이것을 방지해주기 위해서는 다음과 같이 config파일을 만들어 줍니다. 그 다음 info.plist에 다음과 같이 $(NMFClientId) 를 넣어준 다음 .gitignore에 Config.xcconfig 을 추가해주면 키값 노출 없이 깃허브에 올릴수 있게 됩니다. Cocoapod으로 NavaerMap 설치 터미널을 통해 프로젝트 폴더로 이동합니다. 다음의 명령어를 차례대로 입력합니다. 저는 추후에 파이어베이스에서 저장된…

Swift 객체지향프로그래밍(OOP) 이란?

객체(Object) 란? CS에서 객체는 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에 자신의 속성을 가지고 있고 다른것과 식별 가능한 것을 말합니다. 즉 컴퓨터로 예를 들면 키보드, 마우스, 스피커 등이 객체가 될 수 있고, 이것들은 각각 입력, 소리출력, 인터페이스 조작 등의 기능이 포함 됩니다. 객체지향 프로그래밍 (OOP, Object Oriented Programming) 객체들의 상호작용으로 서술하는 프로그래밍 기법 현실세계의 객체를 소프트웨어 객체로 설계 하는 것 특징 객체지향 프로그래밍은 소프트웨어를 개발할 때 현실 세계의 객체를 모델링하고, 이러한 객체들 간의 상호 작용을 중심으로 프로그래밍하는 방법론입니다. 재사용성: 상속을 통해 코드의 재사용성을 높일 수 있다. 생산성 향상: 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있다. 자연적인 모델링: 일상생활에서 모습의 구조가 객체에 자연스럽게 녹아들었기 때문에 …

2023년의 나는 어땠을까?

2023년 회고 지난 2023년 막상 전역을 하면 사회에 나와서 무엇이든 다 성공 할 수 있을거 같았던 나였지만, 현실로 다가오니 이루지 못한것들이 많은 한해였습니다. 개인적으로 만족스러운 것도 있었고 아쉬운 부분이 많은 한 해였지만, 2023년 한 해동안의 기억을 되짚어 보고 회고하기위해 글을 쓰려고 합니다. STEP 1. 군인으로써의 나 저는 21년 3월부터 23년 6월 까지 군대에서 생활을 했습니다. 군대에 있으면서 많은 일이 있었고 많은 사람들을 만나 나 스스로 성장할 수 있는 기회가 되었습니다. 누군가 너 ROTC로 군대간것에 대해 후회는 하냐고 묻는다면 일적으로는 후회가 크지만 많은 사람들을 만나고 좋은 경험을 할 수 있었다고 대답할 수 있습니다. 미군과의 첫 만남 23년 3월 FS 훈련으로 미군기지에서 3주동안 훈련을 받은 경험이 있었습니다. 그때 내가 느낀건 미군은 자신의 일에 자부심을 갖고 일한다는 것 이였고 큰 충격으로 다가왔습니다. 하루 12시간 넘게 근무를 …

직업군인에서 iOS 개발자 도전

Why? 직업군인이 되었는가? 저는 항상 남들과 똑같은 평범함을 싫어했습니다. 군인이라는 직업을 선택하면서 평범함이 싫다니? 약간 모순적으로 느낄 수 있습니다. 대한민국 남자로 태어나면 가야하는 군대였지만 저는 남들과 같은 길을 가고싶지 않았습니다. 지금이 아니면 이 나이에 30명 정도를 책임감을 갖고 이끄는 경험을 하기 쉽지 않다고 생각해서 직업군인이 되기로 마음먹었습니다. Why? 개발자가 되고 싶은가? 저는 학창시절부터 컴퓨터관련 주제에 대해 관심이 많았습니다. 그래서 소프트웨어학과를 진학하게 되었습니다. 관심이 많은것과 코딩은 다르다는걸 느끼면서 의미없는 대학교 1학년을 보내게 됩니다. 그러다 2학년 2학기에 알고리즘 수업을 수강 하면서 생각의 변화가 찾아옵니다. 과제로 주어진 문제를 해결하는 과정에서 수많은 시간이 걸리는 경우도 있고 밤을 새는 경우도 많았습니다. 이 과정에서 문제를 해결하기 위해 나 스스로 알고리즘을 생각하고 풀이하는 과정과 문제를 해결했을때 주는 즐거움…