분류 전체보기 88

[SSC24] 01. 스스챌 개발일지 | 디자인을 시작했어요 ✈️ | Swift Student Challenge

아직 취업전이고, 아카데미 수료한지 6개월이 지나지 않아 이번 SSC에 지원할 자격요건이 되기 때문에! 이번 연도에도 스스챌에 지원하려고 한다. 작년에 위너 선정되었던 이야기는 꼭 다음에 정리해서 올리도록 할거다 🥲 자료구조/알고리즘 관련해서 하기로 주제 선정을 했고, 내용 기획하면서 디자인을 같이 하려고 한다..! 50인에 들고 싶어서 좀 더 챌린징한 주제로 할까 아직도 갈등중이긴하지만, 지금 주제로 개발하면서 알고리즘에 대해 정리할 수 있을 것 같아서 일단 해보려고 한다!-!! 오늘 기획/디자인은 이만큼만 했다! 내일은 3분안에 심사위원이 감탄할 수 있는, 좋은 점수를 줄 수 있는 장치에 대해 더욱 고민해볼 것이다 💨

[알고리즘] 03. 순열과 조합, 그리고 재귀 with Swift

알고리즘 스터디하면서 재귀에 대해 잘 이해하고 쓰지 못했던 경험이 있다. 피보나치나 팩토리얼 문제 정도는 괜찮은데, 이해도가 조금 부족했어서 그 이상은 체화되지 않아, 쉽게 재귀를 떠올려 사용하지 못했었다. 이번에 코테를 준비하면서, 여러 문제를 풀기보단 부족했던 기본 개념에 대해 다시 이해하고 넘어가보자!라는 마음으로 순열과 조합을 들여다보았고, 순열과 조합을 알아가면서 재귀에 대해서도 자연스레 체화할 수 있었다-!!! 순열 (permutation) 순열이란 서로 다른 n개의 원소에서 r개를 중복 없이 순서를 고려하여 선택하거나 나열하는 것을 의미합니다.(단, 0 조합 func 조합(_ depth: Int, _ start: Int) { if 뎁스가 M까지 도달했다면 { 결과배열 출력 } else { 인..

[Swift] Firestore에서 Document Id를 변경하고 싶어요..

할 일이 산더미였던...어느 날.. 스프린트 회고를 하는 날이었다.. 팀원이 말했다,,"전체 질문(Data)을 파이어스토어에 업데이트하는데, Document Id가 랜덤값으로 들어가게 됐어요." 기존에는 문서 아이디가 도큐먼트 내부의 값(정수)로 되어있어서 이를 불러온 뒤 Id로 정렬을 해서 화면에 보여주고, 데이터를 불러와 화면을 그리는 로직이 있었다. 나는 생각했다,,, "엥 분명 앱에 동작안하는 부분이 있을텐데,," 하고 바로 앱을 켜서 확인해보니 "추천질문"기능이 동작하지 않고, 빈 화면으로 내비게이션되는 이쓔,,를 확인했다. 회고, 회의가 모두 끝나기 전, 유저가 현재 사용하고 있는 상황이니 로직을 수정해 빠르게 릴리즈 하거나, 파이어스토어 디비를 수정해서 빠르게 해결해야 할 것 같다고 얘기했다..

🍎 Apple/Swift 2024.01.22

[Develop] DTO와 DAO, VO

최근 프로젝트를 진행하면서 API를 연결하는데, 백엔드분께 질문하기 전에 코드를 한 번 까서 확인해보고 질문하곤 했었다. 데이터를 가공하는 데 DTO란 단어가 자꾸 붙어있길래,, 무슨 용어인가해서 간단하게 알아보게 되었다...! 1. DTO(Data Transfer Object) 클라이언트와 서버 간에 데이터를 주고받을 때 사용되는 객체입니다. 목적: 데이터 전송을 위한 객체. 주로 데이터베이스에서 데이터를 가져와 비즈니스 로직 계층으로 전달하는 데 사용됩니다. 특징: 데이터를 담기 위한 구조체 또는 클래스. 주로 데이터의 전송과 저장에 관련된 필드들을 포함합니다. 비즈니스 로직을 가지지 않고, 주로 getter와 setter를 포함합니다. (Swift에서는 기본적으로 속성을 선언할 때 getter와 s..

💻 Develop 2024.01.17

[iOS] 파이어베이스 구글 로그아웃/회원탈퇴 | Swift | Firebase Google Login

파이어베이스로 구글 로그아웃/회원탈퇴 때 유의할 점을 알아보자. 로그인의 경우는 다른 블로그에도 잘 나와있고, 공식 사이트도 잘되어있기 때문에 생략한다-!! 아래와 같이 작성해서 활용하시면 됩니다 ! 해당 코드는 파이어베이스를 활용해서 구글/카카오/애플 로그인을 구현했던 예제인데, 구글에서 쓰이는 코드만 남겨두었다..! import FirebaseAuth import GoogleSignIn final class AuthenticationManager { /// 로컬 Firebase에 저장된 유저 정보를 삭제하고 로그아웃 func signOut() throws { try Auth.auth().signOut() GIDSignIn.sharedInstance.signOut() } /// disconnect 메서..

🍎 Apple/iOS 2024.01.13

[Swift] DEBUG, RELEASE 분기 처리할 거예요 (Swift Compiler, 전처리문, #if DEBUG)

사이드 프로젝트에서 믹스패널 토큰이 들어가있는데, 개발용이랑 배포용 토큰이 달라야하지 않나라는 생각이 들었다. "그럼 디버그랑 릴리즈를 다르게 처리해주면 되겠네" 하는 생각으로 SwiftCompiler의 정확한 사용방법을 드디어 찾아보게 되었다. 스키마를 다르게 적용하는 방법도 아주 간단히 알아보았다-! ✨ 코드에서 DEBUG, RELEASE 분기 처리하기 ✨ 방법 1. RELEASE 플래그 설정하기 1) 프로젝트 파일 > TARGETS-프로젝트명 > Build Settings > All, Combined 설정 2) 하단으로 쭉 내려보면 Swift Compiler - CustomFlags에 초기에는 Debug 만 설정되어 있을 텐데, 하단 Release에 "RELEASE"를 추가해주면 된다! 3) 코..

🍎 Apple/Swift 2024.01.13

[Swift] mutating | 프로퍼티에 변화가 있을 거야!

mutating이란?! 값 타입(구조체와 열거형)의 인스턴스 메서드에서 자신 내부의 값을 변경하고자 할 때 사용하는 키워드. 구조체 메소드에서 구조체 프로퍼티를 수정할때는 mutating 키워드를 사용해 해당 메소드가 호출 되었을때 프로퍼티가 변경 될 수 있음을 명시해야 합니다. struct Person { var name = "홍길동" mutating func changeName(name: String) { self.name = name } } var person = Person() var person2 = person // 참조 var person3 = person // 참조 p2.x = 3 //COW 실제 복사가 일어남 더 알아볼까요?! 보통 값 타입의 프로퍼티는 인스턴스 메서드에서 수정할 수 없습..

🍎 Apple/Swift 2024.01.10

[Swift] DI(Dependency Injection) 의존성 주입 - 프로토콜

Swift에서는 의존성 주입(Dependency Injection)을 위해 다양한 방법을 사용할 수 있습니다. 그 중 대표적인 방법 중 하나인 프로토콜을 사용한 의존성 주입에 대해 예시와 함께 알아봅시다. 계산기를 만드는 애플리케이션을 개발한다고 가정해봅시다. 숫자를 입력받고, 사칙연산을 수행하는 기능이 필요하겠죠? 이때, 숫자를 입력받는 기능과 사칙연산을 수행하는 기능을 각각 별도의 클래스로 분리하고, 이 클래스들이 서로 의존하지 않도록 하는 것이 좋다고 합니다. 코드의 가독성과 유지보수성이 향상되고, 테스트도 더욱 쉬워지기 때문이죠! 이를 위해, 우리는 다음과 같은 프로토콜을 정의할 수 있습니다. protocol NumberInput { func getNumber() -> Int } protocol ..

🍎 Apple/Swift 2023.12.30

[알고리즘] 02. BFS와 DFS 알고리즘의 뼈대 with Swift

BFS(너비우선탐색) 1. removeFirst() 사용 func bfs(graph: [[Int]], startX: Int, startY: Int) -> [Int] { var visited = Array(repeating: Array(repeating: false, count: n), count: n) var queue = [(startX, startY)] var result = [Int]() visited[startX][startY] = true while let node = queue.isEmpty ? nil : queue.removeFirst() { let x = node.0 let y = node.1 result.append(graph[x][y]) let dx = [0, 0, 1, -1] let ..