본문 바로가기

전체 글

[iOS] MVC (Model-View-Controller) 2024년 4월 5일 금요일 이번 주 팀 프로젝트를 진행하기 앞서 Xcode IDE에서 M,V,C 폴더를 각각 만들어 파일을 분리하는 작업을 했는데 MVC 패턴이라 불리는 이 구조화 된(설계) 패턴이 무엇인지 정리해 봅니다. MVC 패턴은 Model-View-Controller 패턴의 줄임말으로, 세 가지 계층에서 각 코드의 책임과 역할을 나눈다. Model 데이터와 관련된 내용을 담고 있으며, 데이터를 관리하는 로직도 포함하고 있다. 네트워크를 통해 받아온 DTO 구조체와 네트워크에 접근하는 로직, 파일로 따로 저장해야하는 Persistance한 데이터를 로드한다든가, 아니면 필요한 구조체를 만드는 경우 해당 내용들은 모두 Model에 포함된다. Model은 UI와 직접적으로 연결되지 않는다. 불가능한.. 더보기
[Swift] Closure 매개변수에 사용된 와일드카드 패턴 2024년 4월 3일 수요일 (영원한 아기판다가 떠난 푸중절.. 늘 건강해야해 푸곰쥬..) 평소 의식하지 못한 채 사용하는 많은 패턴들 중 와일드카드 패턴을 closure 사례를 통해 복습하며 익혀 봅니다. ※ 와일드카드 패턴은 유닉스 시스템의 초기(1971년)부터 사용되어 온 오래된 개념으로, 다양한 프로그래밍 및 검색 작업에서 유용하게 사용되고 있다. 패턴의 종류 값을 해체(추출)하거나 무시하는 패턴 - 와일드카드 패턴, 식별자 패턴, 바인딩 패턴, 튜플 패턴 ... 패턴 매칭을 위한 패턴 - 열거형 케이스 패턴, 옵셔널 패턴, 표현 패턴, 타입캐스팅 패턴 ... Swift 언어에서의 와일드카드 패턴 "와일드카드 식별자가 위치한 곳의 값은 무시한다. " 밑줄( _ )로 표현되며, 코드 내에서 특정 값.. 더보기
[iOS] ViewController - Lifecycle Method 2024년 4월 2일 화요일 ViewController의 생명주기(Lifecycle)는 앱의 UI와 상호작용을 관리하는 데 중요한 역할을 합니다. ViewController가 생성되고 화면에 나타나는 순간부터 사라질 때까지의 일련의 이벤트로 구성되는 Lifecycle 과정에서 여러 메서드가 호출되며, 개발자는 이 메서드들을 오버라이드하여 특정 작업을 수행할 수 있습니다. 3월 22일 내용과 일부 중복되는 부분이지만, ViewController를 제대로 이해하기 위한 핵심 내용이기에 쉽게 풀어 다시 한 번 정리해 봅니다. init: ViewController의 인스턴스가 생성될 때 호출 loadView: ViewController가 관리하는 뷰가 로드될 때 호출. 뷰의 로딩을 시작하는 단계 viewDidL.. 더보기
[iOS] Closure를 활용한 VC 통신 (feat. prepare method) 수업에서 배운 아래의 기능 구현을 복습하며 prepare 메소드와 closure 사용에 익숙해져 봅니다. A, B 2개의 화면이 있고, A → B 로 이동하는 플로우를 가지고 있음 B 화면에는 +/- 스테퍼 기능 있음 B 화면에서 증가시키면 A 화면의 숫자가 반영됨 새로운 파일로 firstViewController 와 secondViewController 를 추가해 각각 커스텀 클래스 명칭을 지정하고, 초기화면은 firstViewController로 설정한다. 아래 이미지와 같이 firstViewController에는 Label과 Button으로 0과 다음화면을 만들고, Label 0은 IBOutlet을 사용해 numberLabel로 선언하여 firstViewController와 연결해 주었다. seco.. 더보기
[Swift] Closure, Higher Order Function (2) 2024년 4월 2일 화요일 3월에 공부했던 클로저와 고차함수를 제대로 이해하기 위해 연습하기 [Swift] Closure, Higher Order Function 1 복. 씁. 하. 기. Closure (클로저) 동작을 저장할 수 있다. 변수/상수에 저장할 수 있다. 파라미터로 전달할 수 있다. 함수에서 반환할 수 있다. 타입을 가진다 = Function Type 함수는 Closure의 한 종류(Named Closure) 이다. + Quiz / SayHello 함수의 Function Type은? func sayHello(name: String) { } (String) -> () (String) -> Void Higher Order Function (고차함수) "함수를 파라미터로 받는 함수" + 아래 a.. 더보기
[iOS] 메모 앱 만들기 Day-8 (WTF Auto Layout) Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don’t want. Try this: (1) look at each constraint and try to figure out which you don’t expect; (2) find the code that added the unwanted constraint or constraints and fix it. 여러 view 사이의 constraint끼리 충돌해서 생긴 오류가 났다. 절대적인 좌표계를 사용하는 건 화면의 정해진 사이즈를 알고 있다고 가정하는 것인데 내가 그린 화면이 여러 사이.. 더보기
[iOS] 메모 앱 만들기 D-7 (storyboard를 활용한 UI 화면 그리기) 2024년 3월 30일 토요일 오늘은 튜터님의 예제풀이를 순서대로 하나씩 따라가며, 과제를 통해 배워야 할 내용들에 대해 기록합니다. 홧팅이닷! ! #1. new file 생성 TodoListViewController로 네이밍을 바꾸고, main.storyboard의 inspector 영역의 custom class 의 class 이름을 TodoListViewController로 바꿔준다. TodoListViewController는 UIViewController 를 상속받고 있다. #2. object library에서 1) button과 2) table view 추가 1) button의 constraints는 위와 좌측의 margins만 0과 16으로 걸어주고, "추가하기"로 contents를 바꿔준다. .. 더보기
[Algorithm] 신고 결과 받기 (w/ Swift) 신고 결과 받기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] { var users = [String: Set]() // 누가 누구를 신고했는지 var reported = [String: Int]() // 누가 얼마나 신고를 당했는지 // 기본값 세팅 for id in id_list { users[id] = [] reported[id] = 0 } for rpt in Set(report) { let reportIDs = rpt.sp.. 더보기