iOS : 아이폰을 움직이게 해주는 뇌그냥 우리가 폰을 켜고, 앱을 누르고, 화면을 터치하는 걸 가능하게 해주는 기본 시스템아이패드 - iPadOS컴퓨터(Mac) - macOS 앱을 만들기 위해선 도구가 필요함= 프로그래밍 언어 필요 (Swift) UIKit예전부
앱을 만들다 보면 데이터를 저장하고,필요할 때 꺼내서 바꾸거나 유지해야 할 때가 많아.ex)점수는 계속 바뀌니까 → 변수(var)생일은 안 바뀌니까 → 상수(let)변수(var)와 상수(let)의 차이키워드 뜻 값 변경 가능? 예시var 변수 가능 var na
앱 화면에 여러 개의 상자를 가지런히 보여주는 도구이 상자 안에는 사진, 글자, 버튼 등 네가 원하는 걸 넣을 수 있음ex)사진 앨범처럼 여러 장의 사진을 줄 맞춰서 보여줄 때카드 뉴스처럼 옆으로 넘기는 카드들을 만들고 싶을 때요약 )테이블 뷰는 줄 세우기만 잘함컬렉션
과제 하던 중에 이상한 일이 벌어졌다..! 왼쪽 위에 파란색 뒤로가기 버튼이 안 사라진다..! 그럼 그냥
여러 개의 값을 하나로 묶는 박스예를들어 ) 이름이랑 나이를 같이 저장하고 싶음이럴 때 각각 따로 변수 만들 필요 없이, 하나로 묶어서 저장할 수 있는데 이걸 튜플이라고 함값마다 서로 다른 타입(문자, 숫자 등)을 넣을 수 있음숫자를 쭉 이어주는 도구예를들어 ) 1부터
정해진 값들 중에서 하나를 고를 수 있게 그룹으로 묶어놓은 것예를들어 ) 봄, 여름, 가을, 겨울👉🏻 정해진 선택지들끼리 하나의 상자에 묶어놓은 것ex) 어떤 앱을 만들고 있는데 사용자의 계절을 선택해야 한다고 가정했을 때그냥 문자열로 spring, summer 이
덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산이 가능하게저렇게 print로 값을 테스트 하려니 가독성도 안 좋은 거 같고 똑같은 구조의 문장을 반복하는 게 싫어서다른 방식으로 풀어보고자 함 !이렇게 하면이전에는 연산 하나하나마다 print(try calculator.cal
구현하는 데에 딱히 어려운 점을 느끼지 못했는데2가지 정도의 문제 때문에 많은 시간을 할애 했던 것이 기억에 남아 한 번 정리를 해보려 함원래 하나였던 코드를 분리하니까 이상한 에러가 뜨기 시작해서 구글링 해본 결과public 프로토콜을 채택하면 요구사항을 충족하는 프
클로저 >이름 없는 함수 함수처럼 어떤 일을 하는 코드 묶음?인데 이름이 없음 주로 변수에 저장해서 쓰거나 다른 함수에 넘겨줘서 사용함 생김새 ex) 클로저를 변수처럼 쓰기 👉 add는 클로저를 저장한 변수. 👉 (Int, Int) -> Int는 입력 두 개
필수 과제 3번을 하는데a와 b는 각각 Int와 String형으로 짝수번째 요소 제거 후 반환하는 코드를 짰는데c를 통해 하나의 함수로 대체할 수 있는 방법을 구현해야 하는 것에서 난관을 겪게 됨같은 로직이지만 타입만 달라서 코드가 중복될 수밖에 없는데이 때 제네릭 함
우리는 여러 타입에 “자기소개” 기능을 부여하고자 합니다. Introducible 프로토콜을 정의하세요.name: String 프로퍼티를 요구사항으로 포함합니다.introduce() -> String 메서드를 요구사항으로 포함합니다.동작 예시: print("안녕하세요,
도전 문제를 다 풀어보자..!‘자동차’ 라는 개념을 가지고 객체 지향 설계를 해봅니다. Base Class Car 를 설계해주세요.4가지의 상태를 정의해주세요.브랜드, 모델, 연식모두 String 타입입니다.엔진Engine 이라는 커스텀 타입으로 정의해주세요.1개의 동
객체지향 프로그래밍의 특징, 실제로 구현하거나 경험한 적 있는 것을 예시와 함께 설명캡슐화 / 상속 / 다형성 / 추상화속성, 메서드를 하나의 객체 안에 묶어서 직접 접근을 제한하고인터페이스를 통해서 조작할 수 있게 함기존 클래스로 새로운 클래스를 만들고 부모 클래스
아이폰마다 생김새가 조금씩 다름어떤 기기는 노치가 있고 어떤 기기는 없고홈바나 상태 표시줄도 크기가 다를 수 있음그래서 화면에서 안전하게 보여야 할 영역을 정해둔 것.한 마디로앱이 안전하게 내용을 보여줄 수 있는 구역이걸 지켜서 UI를 만들면 어떤 기기에서 보더라도 잘
뷰에 오토레이아웃을 적용하려면 translatesAutoresizingMaskIntoConstraints = false 꼭 해줘야 함frame 방식은 Auto Layout이랑 혼용 시 충돌날 수 있으니 주의 !!!!뷰 선언 (UILabel, UIButton)속성 설정
– StackView, ScrollView, TableView, CollectionViewUIKit으로 UI 설계하는 게 처음이라 뭐부터 시작하면 좋을 지 모르겠어서튜터 님께 조언을 구해보니 위의 네 개 뷰를 알면 좋을 거 같다고 말씀해주셔서 톺아봄 !!iOS 앱을 만
애플리케이션의 구조를 세 가지 역할로 분리해서 유지 보수성, 확장성을 올리는 디자인 패턴MVC를 잘못 구현하면 Massive ViewController 문제에 직면할 수 있음 !!데이터, 비즈니스 로직 담당앱의 상태를 표현UI와는 완전히 독립적일반적으로 구조체 || 클
Swift && Objective-C에서 사용하는 메모리 관리 기법객체에 대한 참조 카운트를 추적해서 사용되지 않는 메모리를 해제하는 메커니즘직접 메모리 해제를 관리하지 않아도 돼서 메모리 관리 부담 감소객체가 생성될 때 참조 카운트가 1로 시작되고 다른 객체나 변수에
디자인 패턴을 쓰는 건 유지보수성, 확장성을 확보하려는 목적이 있음MVVM 패턴 구조로 짜보았고 코드 기반 레이아웃, SnapKit을 활용해서 직관적인 뷰 계층을 구축하려 노력함MVVM을 도입하면서 먼저 고민한 부분은 데이터 흐름을 어떻게 구성할 것인가. 였음..특히

Tuist 사용했던 옛날 프로젝트를 돌려보고 싶어서 git clone 후에 명령어를 입력했는데 에러가 뜨지 모얌..Xcode 프로젝트 생성을 자동화해주는 도구쉽게 말해, 복잡한 .xcodeproj나 .xcworkspace 파일을 직접 만지지 않아도코드로 정의한 설정 파
이 구조로 설계를 한 상황일 때UIStackView에 UIButton을 넣었는데버튼이 가운데에 정렬돼서 오른쪽으로 이동시키기 어려웠음alignment, distribution 같은 기본 속성 때문에 위치 제어가 잘 안 됨UIStackView는 축(axis) 방향으로 뷰
UI 상태의 변화를 시간의 흐름에 따라서 시각적으로 표현하는 것.자연스러운 애니메이션은 앱의 완성도, 직관성, 사용성을 높여줌솔직히 잘 쓰면 있어보이는 효과를 얻을 수 있음.....ㅎ사용자에게 피드백을 제공함으로써 동작을 이해시키고앱의 전환과 흐름을 부드럽게 만듦탄성이
NSCache
장바구니 화면 전체 구현상품 수량 조절 컴포넌트(QuantityControl) 만들고 셀에 적용상품 정보 + 이미지 + 총액 계산 UI 구성NotificationCenter로 실시간 장바구니 상태 업데이트비동기 이미지 로딩 + NSCache로 이미지 캐싱수량 조절 기능
메모리는 무한하지 않아서 쓰지 않는 데이터는 꼭 치워야 함자동 청소 시스템(GC, ARC)이 있어도 신경 써야 할 부분이 있음Java는 GC를 사용하는데개발자가 직접 메모리를 해제하지 않아도 되지만 대신 Garbage Collector라는 시스템이 백그라운드에서 동작하
그냥 쉽게 생각해서 핸드폰으로 인터넷에 접속해서 뭘 검색하거나 친구한테 메시지를 보내는 것 같은 게 네트워크 통신아이폰이나 컴퓨터는 그냥 기계이 기계들이 서로 연결되고 대화하는 것 = 네트워크이런 연결이 세계로 퍼진 게 바로 인터넷이고연결하려면 와이파이나 데이터가 켜져
binary라는 변수(= 이진수 문자열)를 사용해서 비밀지도를 푸는 방식binary는 비트 OR 연산 결과를 이진수 문자열로 변환한 값arr1i = 9, arr2i = 30이면9 | 30 = 31String(31, radix: 2) → 11111 → 이게 binarya
처음에 API 응답을 받을 때 rates가 String: Double 형태의 딕셔너리여서기존에 사용하던 배열 기반 모델(struct Currency { let name: String; let rate: Double })로는 직접 파싱할 수 없었음Codable은 보통 C
RxSwift를 활용해서 UISearchBar 입력을 reactive하게 처리하고 ViewModel이랑 연동해봄ExchangeRateViewController에서 UISearchBar의 텍스트 입력 이벤트를 RxSwift 스트림으로 변환하고 뷰모델의 search(que
iOS 13부터 도입된 UICollectionView의 새로운 레이아웃복잡하고 다양한 레이아웃을 계층 구조로 깔끔하게 설계할 수 있도록 도와주는 API
iOS 앱에서 Kingfisher를 활용해 TMDB 포스터 이미지 최적화 로드하기Swift 기반 오픈소스 이미지 다운로드/캐싱 라이브러리비동기 네트워크 로드, 메모리·디스크 자동 캐싱, 옵션 커스터마이징 지원UIImageView, UIButton, MKAnnotatio
아키텍처 : MVVM ViewController는 UI/이벤트 처리, ViewModel은 API 호출/데이터 가공/검색 로직 담당 영화 리스트 & 검색 화면 UICollectionViewCompositionalLayout으로 리스트 : 한 줄에 포스터 3개씩 연속 스크
RxSwift >비동기 이벤트 처리 라이브러리 시간에 따라 바뀌는 값을 깔끔하게 처리할 수 있도록 도와주는 도구 앱을 만들다 보면 버튼을 눌렀을 때 숫자가 오르는 걸 만들어야 하거나 서버에서 데이터를 받아서 화면에 보여줘야 할 때가 생기거나 유저가 텍스트필드에
순수한 Swift 구조체/클래스, 비즈니스 규칙과 핵심 로직을 담음외부 프레임워크나 Cocoa Touch에 대한 의존이 전혀 없음Entity를 활용해 구체적인 비즈니스 동작을 수행입력(요청) → 비즈니스 로직 → 출력(응답) 형태로 구성인터페이스(프로토콜)를 통해 외부
Kakao API에서 sale_price가 UI에 0이거나 -1원으로 뜨는 버그가 있었음..원인 분석Document.sale_price가 0 이하일 때도 그대로 반영돼서 포맷터가 0원이나 -1원으로 뜨고BookCell.configure에서 priceText만 보고 바로
Alarm 모델을 정의하여 알람에 필요한 정보를 담는다CoreData로 저장알람 리스트 화면 (UITableView or UICollectionView)각 셀에는 알람 시간, 설명, 스위치알람 추가 화면UIDatePicker로 시간 설정요일 선택 (반복 설정)알람 라벨
배열의 끝에 새 값을 넣을 때 사용함👉 1, 2, 3 뒤에 4를 붙인 것배열 안에서 내가 정한 자리에 값을 넣을 수 있음👉 2번째 자리에 3을 끼워 넣은 것 (자리는 0부터 시작)배열에 여러 값을 한 번에 더하고 싶을 때 사용함👉 4와 5를 한 번에 추가👉 2번
하나의 테이블 뷰를 만들고, 5개의 항목을 추가하세요. 각 항목을 클릭했을 때 그 항목의 이름이 화면에 표시되도록 하세요.네비게이션 바를 추가하고, "다음 화면으로" 버튼을 눌렀을 때 새로운 화면으로 이동하게 구현하세요. 이동한 화면에서 "뒤로" 버튼으로 원래 화면으로
1. 데이터 모델 설계 Alarm 구조체 struct Alarm: Codable, Equatable, Identifiable { let id: UUID var time: String // "오전 7:00" 형태 var subtitle: String // "주중",
소규모/짧은 일정 : 1–3명, MVP·해커톤·프로토타입. 빨리 찍고 학습이 목적인 경우.도메인 단순 : CRUD 위주, 복잡한 비즈니스 규칙/정책이 거의 없음.변화 범위가 UI 중심 : 뷰/상호작용이 자주 바뀌지만, 핵심 규칙은 얕음.테스트 범위가 제한적 : 핵심 1
사용자가 선택한 외부 계정을 통해 인증로그인 후 발급되는 토큰을 이용해 서버/DB랑 연동보통 백엔드 서버 필요iOS/애플 생태계에 한정되지 않고 안드로이드, 웹, 크로스 플랫폼까지 확장 가능하나의 앱 계정을 여러 기기/OS에서 동일하게 사용 가능사용자 식별이 명확 →
색상, 폰트 스타일을 디자인 시스템으로 분리해서 구조화함기존에는 Asset에 Color만 등록해서 사용했는데 이번에는 Color와 Font 관련 파일들을 만들어 코드로 일관성 있게 관리할 수 있도록 개선해봄색상은 Assets에만 등록해 사용 :폰트도 별도 스타일 없이
UILabel이랑 뒤에 배경 뷰를 정렬할 때 이모지가 중앙 정렬이 안 되고 좀 치우쳐 있는 일이 있었음이모지가 폰트마다 baseline/ascender 차이가 큰 편이라 center 정렬만 하니까 시각적으로 좀 안 맞는 듯 보였음특히 iOS에서 이모지가 텍스트 글리프
기본 높이 113pt에서 값만 보이다가 탭하면 312pt로 확장돼서 UIPickerView로 시간을 고르는 UX 필요.분은 고정 라벨, 숫자만 스크롤. 기본 선택은 50분, 항목은 5분 단위.중앙 흰색 밴드(Selection Band) 제거 → 시스템 피커의 중앙 5행
한 거TimerRepository 프로토콜 정의→ fetchAll, insert, update, delete 추상화로 CRUD 규격 확립SwiftDataManager 구현→ TimerRepository 채택, @Dependency(.modelContext)를 이용해 M
UIKit 기반으로 앱 전반에서 재사용 가능한 커스텀 알럿 컨트롤러를 설계/구현시스템 UIAlertController 대신 디자인 가이드를 반영하고 전환 효과/햅틱/접근성까지 고려한 컴포넌트를 만듦modalPresentationStyle = .overFullScreen
타이머 생성/편집 화면에서 사용자가 이모지를 선택할 수 있는 기능 구현textInputMode를 오버라이드해서 이모지 키보드를 우선적으로 표시activeInputModes에서 primaryLanguage == emoji인 모드를 찾아 반환이모지 키보드가 없으면 기본 키
타이머 생성/수정 화면에서 이름이 비었을 때 저장을 막고 시각적으로 에러를 보여줘야 함.타이머 이름은 15자로 제한하고 한글 조합 시 오동작이 없어야 함단순히 text.isEmpty만 체크하면 한글 조합 중에도 에러가 깜빡거릴 수 있음shouldChangeCharact
목표 시간의 최소값이 5분인데 실제 동작을 빠르게 검증하려면 5분은 너무 김 → QA/개발 속도가 느려짐TimerEditViewController테스트 모드일 때 피커 옵션을 초 단위로 구성(timeOptions = 30~600초)UI 단위 레이블“분/초)도 토글.T
TimerModel에 createdAt: Date 필드를 추가하고, SwiftDataManager가 직접 ModelContainer를 생성하도록 리팩터링하면서 발생. 증상 (Symptoms) • 앱 실행 즉시 크래시 또는 fatalError("Failed to cr
git commit --amend로 메시지만 수정하려 했는데 staging 되어 있던 작업 중 코드까지 같이 들어가 버림.amend는 메시지만 바꾸는 게 아니라 현재 스테이징된 변경까지 커밋에 포함된다는 걸 배움..해결 과정 1\. git reset HEAD^으로 잘못
모의면접 회고:Q: View와 ViewModel 간 데이터 흐름을 어떻게 설계했나요?View와 ViewModel 간의 데이터 흐름은 크게 단방향으로 설계되어 있습니다사용자가 View에서 어떤 행동을 하면, 그 이벤트가 ViewModel로 전달됩니다 타이머를 추가하거나
Git에서 새 브랜치를 만들 때 어느 브랜치에서 갈라내느냐에 따라 이후 PR에 포함되는 커밋이 달라진다. 1\. develop에서 바로 feature/one 브랜치를 만들면 → PR에는 오직 feature/one에서 만든 커밋만 포함된다. 2\. feature/one에
빨간색 배경: 삭제 액션을 나타내는 배경 뷰삭제 아이콘: 휴지통 아이콘으로 삭제 의도를 명확히 표시버튼 영역: 실제 삭제 동작을 처리하는 투명 버튼