스파트타 내일배움캠프 iOS 앱 개발 과정 5기에 참여하면서 TIL을 작성해보기로 하여 일기도 강제로 쓰라하지 않으면 쓰지 않는 내가 교육에 참여하면서 TIL을 작성해보도록 한다.1주차는 참여하지 못하여 듣지 못하였던 1주차 강의를 언능 듣고 2주차 수업에 대한 내용을
UI Kit에서 무언가를 할 때에는 스토리보드와 코드가 잘 연결되어 있는지 확인해야한다. 강의에서는 프로젝트에 새로온 파일을 만들 때에 파일 옵션을 설정하는 창이 떴었는데 내 Xcode 환경에서는 그냥 empty file 추가만 있길래 추가하고 코드와 설정등을 똑같이
새로운 언어를 공부한다고 입문부터 이렇게 배워보는 것은 학부때(벌써 6년전..) CSwift에서는 null(값 없음)을 nil이라고 한다.Swift에서는 기본적으로 nil을 허용하지 않는다고 한다.컴파일러는 nil을 사용하려는 시도를 감지하면 에러를 발생 시킵니다.ni
데이터 타입은 대문자로 시작합니다. String Int Float Any ...강의를 보다가 위 자료형들의 차이점을 정리하고 싶어서 찾아서 정리한 내용이다 NOT 연산자! 키워드를 사용합니다.!true 처럼 느낌표가 앞에 옵니다.Bool 값을 반대로 반환하는 연산자tr
함수는 재사용이 가능한 코드의 집합으로, 특정 작업을 수행하는 코드 블록입니다.함수는 function이라고 불리며, 코드를 구조적이고 효율적으로 작성하는데 도웁을 줍니다.동일한 작업을 반복해서 작성할 필요 없게 도와줍니다.함수는 선언과 사용으로 나눌 수 있습니다.함수의
Array배열 값 추가하기에 append() 부터 나오길래 제거하기에도 pop() 부터 나오지 않을까 생각하였는데 pop() 을 다뤄주지 않길래 한 번 찾아보았다.pop & dropSwift 문자열 또는 배열은 popFist() , dropFisrt(\_:) 메소드와
익명 함수 라고 불리는 클로저는 함수와 유사하게 특정 작업을 수행하는 코드블록 입니다.함수의 4가지요소(이름 ,파라미터 , 반환타입 , 구현부)에서 이름 을 제외한 파라미터 , 반환타입 , 구현부 로 구성되어 있습니다.데이터타입 으로 클로저를 사용할 수 있습니다.변수에
첫 과제인 '계산기 만들기'가 생겼다.강의에서 들은 내용을 활용하여 만들어보도록 하자.과제는 Lv1~Lv4까지 있다.Lv1Lv2Lv3 LV1결과가 잘 나온것을 확인할 수 있다.위 처럼 0으로 나누어봤더니 inf라는 결과가 나왔다.swift에서 inf는 infinity,
Swift는 기본적으로 nil(값없음) 을 허용하지 않지만 개발을 하다보면 값이 없는 경우가 생기게 됩니다!Swift는 기본적으로 nil 을 허용하지 않지만, Optional 을 사용하면 값이 없을 수 있는 상태를 안전하게 처리할 수 있습니다.nil 키워드는 값이 없음
첫 과제인 '나만의 계산기 만들기' 를 수행하던 와중 위의 평가 기준을 충족(?)하기 위해서 mac os에서 git을 설치하고 xcode playground에서 작업한 결과물을 github에 올려 형상관리를 해보자... Mac os에서 git 설치하기 Homebre
swift로 야구게임 만들기 >숫자 야구 게임은 두 명이 즐길 수 있는 추리 게임으로, 상대방이 설정한 3자리의 숫자를 맞히는 것이 목표입니다. 각 자리의 숫자와 위치가 모두 맞으면 '스트라이크', 숫자만 맞고 위치가 다르면 '볼'로 판정됩니다. 예를 들어, 상대방의
class , struct , enum 에서 공통으로 구현해야 하는 메소드 와 프로퍼티 의 청사진을 정의하는 기능입니다.프로토콜 자체는 기능을 구현하지 않으며, 오직 설계만 제공합니다.class , struct , enum 에서 프로토콜을 채택 할 수있으며, 프로토콜에
야구게임만들기 과제를 하는 도중에 게임 기록을 누적하여 저장할 수 있게 하는 방법을 찾던중 UserDefaults 를 사용하는 방법을 알게 되었다.앱을 실행하는 동안 지속적으로 키-값 쌍을 저장하는 사용자의 기본 데이터베이스에 대한 인터페이스입니다.UserDefault
Reference Type 의 인스턴스 메모리 관리를 자동으로 해주는 기능입니다.Value Type 의 인스턴스는 ARC 가 관리하지 않습니다.메모리 관리를 직접 하지 않아도 ARC 가 자동으로 메모리 관리를 처리합니다.Reference Type 의 인스턴스를 참조할
swift를 공부하면서 ARC라는 것을 배우게 되었다.옛날에 JAVA를 공부할 때 GC와 비슷한 개념인 것 같아서 두 개를 비교해서 정리해보려고 한다.ARC(Automatic Reference Counting)보통 JAVA로 개발하면 GC가 알아서 메모리 관리를 해주기
코드베이스란 스토리보드 같은 인터페이스 빌더를 사용하지 않고, 코드 작성으로만 UI 구성을 하는 것.스토리보드에서 하던 뷰의 size, constraint 및 모든 속성들을 코드로 작성한다.팀끼리 협업할 때, github에 코드를 올리고 서로 코드 리뷰를 하게 되는데
SnapKit 라이브러리로 오토레이아웃 설정값을 주다가 찾아보았다.SnapKit에서 offset의 10과 -10은 레이아웃 제약 조건에서 뷰 간의 간격을 설정하는 데 사용되며, 양수와 음수의 값이 다르게 동작합니다.offset(10): 뷰 간의 간격을 10포인트 띄웁니
디자인 패턴은 코드 구조를 효율적으로 설계하고 유지 관리하기 위해 자주 사용하는 코드 구조애플리케이션에서 하나의 인스턴스만 존재하도록 보장하는 패턴입니다. 공통된 자원이나 설정을 여러 클래스에서 사용할 때 유용합니다.ex) 네트워크 매니저, 데이터베이스 연결, 앱 설정
3번째 과제인 계산기 앱 만들기를 UIKit에서 진행하다가 생긴 에러와 UIKit이 왜 명령적 프로그래밍인지 생각해보았다.위와 같이 계산기 UI의 뼈대가 되는 세로 스택뷰를 생성하는 메서드를 구현하다가 단순히 스택 뷰 인스턴스를 생성하고 스택 뷰의 제약 조건을 맞춰주고
Intro: 로직에 UI를 더하다.첫번째 과제였던 계산기 만들기 과제에서 실제 UI를 더해, 실제 앱으로 완성해보자.계산기 앱 만들기 과제를 코드베이스UI로 진행하면서 배운 내용들을 정리하려고 한다.UIView는 UIKit에서 제공하는 다른 모든 UI 요소(UILabe
이번에 UIKit을 처음 다뤄보면서 코드베이스UI로 먼저 과제를 진행하면서 잘 몰라서 찾아봤던 UIKit 메서드들 정리addArrangedSubview는 UIStackView에서 사용되는 메서드로, 스택 뷰에 새로운 서브뷰를 “배치”할 때 사용됩니다. 이 메서드는 스택
기존의 클래스, 구조체, 열거형, 또는 프로토콜에 새로운 기능을 추가할 수 있도록 해주는 강력한 기능입니다. extension은 기존 코드를 수정하지 않고도 새 기능을 추가할 수 있으므로 코드 재사용성과 모듈화를 높이는 데 유용합니다.새로운 메서드 추가기존 타입에 새로
RxSwift에 대한 강의를 4주차 주말인 오늘에서야 보면서 정리해본다...RxSwift라는 단어가 계속 보여서 강의 내용 맨 마지막에 있던 게 기억나서 찾아봤다....RxSwift는 Reactive Programming 패러다임을 기반으로 한 Swift용 라이브러리로
swift에서 as는 타입 변환(type casting)과 관련된 키워드로, 다음 세 가지 주요 상황에서 사용됩니다.업스캐팅(Upcasting)as는 어떤 타입을 부모 클래스 또는 프로토콜 타입으로 변환할 때 사용됩니다. 업캐스팅은 항상 안전하므로 옵셔널을 반환하지 않
프로젝트 이름을 중간에 변경해주고 commit -> push -> pull을 진행하였더니 위와 같이 옜날 프로젝트 이름을 찾는 에러가 발생했다.
트러블 슈팅 문제해결: 레이아웃이 깨졌을 때 콘솔창 버그 [문제해결: 중간에 Xcode 프로젝트 이름 변경하기](https://velog.io/@tjrqja07/iOS-4%EC%A3%BC%EC%B0%A8-%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%
사용 대상: 주로 UIKit의 UIControl 객체(UIButton, UISwitch, UITextField 등)에 사용됩니다.사용법: 특정 이벤트(TouchUpInside, ValueChanged 등)에 대한 동작을 설정합니다.구문매개변수target: 이벤트가 발생
계산기 과제 코드를 피드백을 받은 내용을 적용하기 위해 여러 방법으로 리팩토링하는 과정에서 이미 있는 코드를 최대한 활용하려다 보니 다음과 같은 에러가 발생했다....Swift에서는 모든 프로퍼티가 초기화되기 전에 self를 사용할 수 없다. 이 규칙 때문에 creat
처음 코드 > C
TIL: UIButton의 이미지 크기 조정 및 레이아웃 제어 오늘 학습한 내용: equalToSuperview().multipliedBy, UIImage.SymbolConfiguration을 활용한 버튼 이미지 크기 조정, 그리고 self.clipsToBounds의
userInterfaceStyle은 다크모드 및 라이트모드와 같은 사용자 인터페이스 스타일을 확인하거나 설정하는 데 사용됩니다. 이 속성은 UITraitCollection 클래스에 포함되어 있습니다.타입: UIUserInterfaceStyle(열거형)값: .unseci
와이어 프레임으로 정한 카드뷰 UI
서브스트링 추출t.dropFirst(i):문자열 t에서 처음 i개의 문자를 삭제합니다. 결과는 t의 뒤쪽 서브스트링이 됩니다..prefix(p.count):위에서 얻은 서브스트링의 앞쪽에서 p.count 길이만큼의 문자를 가져옵니다.이 과정은 t에서 i번째 위치부터 시
🐝 CardView의 layer.borderColor만 다크모드 변환 시 실시간으로 변하지 않는 문제 > 위 코드에서 backgroundColor 값은 Assets 파일에 분리한대로 동적으로 잘 바뀌었는데 layer.borderColor 값은 동적으로 바뀌지 않았다
README 첫 팀 프로젝트 KPT 회고 KEEP Problem Try Feel
\-UIKit의 UIView 클래스는 iOS, tvOS, 및 watchOS에서 화면에 표시되는 모든 UI 요소의 기본 클래스입니다. 앱의 사용자 인터페이스를 구성하는 기본 단위를 제공하며, 다른 UI 구성 요소(예: UILabel, UIButton, UIImageVie
UIView는 UIKit의 기본적인 뷰 클래스로, iOS 애플리케이션에서 화면에 표시되는 모든 UI 요소의 기본이 됩니다. UIView는 다양한 속성을 제공하여 개발자가 뷰의 위치, 크기, 모양 및 동작을 쉽게 정의하고 조정할 수 있도록 합니다.
사진 출처: https://babbab2.tistory.com/53?category=831129CALayer는 iOS와 macOS의 Core Animation 프레임워크에서 제공하는 레이어(Layer) 객체입니다. UI 요소의 렌더링, 애니메이션, 그리고 시각
강의를 들으면서 실습을 열심히 따라해보다가 에러가 발생했다.JSON 디코딩에 실패했단다.서버에서 받은 JSON을 뜯어봐도 모르겠다.디버깅해봐도 error가 nil이 찍힌다. 코드를 수정해보자.catch문에서 error를 찍으면 에러가 이쁘게 나온다. temp_Max 값
참고: https://velog.io/@lhj26/iOS-Scene-Delegate-vs-App-Delegate 참고: https://velog.io/@maddie/iOS-AppDelegate-vs-SceneDelegate-%EC%B0%A8%EC%9D%B4 > App
3333
Core Data에 이미지를 저장하는 방법은 두 가지가 있다.Core Data의 Binary Data 속성을 사용하여 이미지를 직접 저장할 수 있습니다. 이 방식은 간단하지만, 데이터베이스 크기가 커질 수 있으므로 관리에 주의해야 합니다.\-이미지 데이터를 파일로 저장
싱글톤 패턴(Singleton Pattern)은 소프트웨어 디자인 패턴 중 하나로, 특정 클래스가 애플리케이션 내에서 단 하나의 인스턴스만 존재하도록 보장하는 패턴입니다. 이 인스턴스는 여러 곳에서 공통으로 사용되며, 인스턴스화가 한 번만 이루어지고 이후에는 그 인스턴
Swift의 addChild(\_:) 메서드는 뷰 컨트롤러(UIViewController) 간의 계층 구조를 관리하기 위해 사용됩니다. 이를 통해 한 뷰 컨트롤러를 다른 뷰 컨트롤러의 자식으로 추가할 수 있습니다.addChild(\_:)는 컨테이너 뷰 컨트롤러(Cont
영화 예매 앱 만들기 팀프로젝트 2일차다, APIManger와 Model을 구현했다. APIManger를 싱글톤 객체로 생성func fetchNowPlayingMovies()파라미터: page: Int모델: struct MovieResponse: Decodable {
영화 예매 앱 프로젝트 요즘 많은 분들이 영화 예매를 스마트폰으로 간편하게 하고 계신데요! 이번 프로젝트에서는 여러분이 직접 영화 예매 앱의 UI와 기능을 설계하고 구현하며, 개발자로서 사용자 경험(UX)을 기술적으로 풀어내는 과정을 경험을 하게 됩니다! 사용자
Alamofire는 iOS 개발에서 널리 사용되는 HTTP 네트워킹 라이브러리입니다. Session, Interceptor, 그리고 Request Flow는 Alamofire의 주요 구성 요소입니다. 이들을 활용하면 네트워킹 작업을 더욱 효율적이고 유연하게 처리할 수
https://github.com/NBC-T3/TicketSquare오전, 오후로 두 번씩 팀 스크럼을 진행하고 마일스톤, 칸반 보드를 활용하여 팀원 간 서로의 진척도와 오늘 목표를 공유하면서 기한 내에 프로젝트를 완료할 수 있었음아직도 익숙하지 않은 git
https://developer.apple.com/documentation/DISPATCH DispatchQueue > DispatchQueue는 GCD (Grand Central Dispatch)의 핵심 요소로, 작업을 비동기적으로 실행하거나, 특정 작업을 동기적으
UICollectionView는 다양한 레이아웃을 지원하며, 이를 통해 강력하고 유연한 UI 구성을 할 수 있습니다. 주로 사용하는 레이아웃은 UICollectionViewFlowLayout과 UICollectionViewCompositionalLayout입니다. 이
속성 감시자(Property Observers)는 Swift에서 특정 속성의 값이 변경되기 직전 또는 변경된 직후에 실행할 코드를 정의할 수 있는 기능입니다. 이를 통해 속성의 상태 변화를 감지하고, 추가 작업을 수행하거나, 부수효과(side effects)를 관리할
https://velog.io/@tjrqja07/posts?tag=rxswift 이전에 강의 보면서 정리해논 내용에 이번에 새로 강의를 들으면서 추가적인 정리를 해보자...Observable: 데이터를 방출하는 스트림.데이터가 변하거나 이벤트가 발생하면 구독자
업로드중..무한 스크롤을 구현 중 스크롤 할 때마다 버벅거리고 내렸다가 다시 올리면 데이터가 바껴 있는 문제 발생fetchPokemonData()가 매번 호출되어서 데이터가 중복되거나 비효율적으로 로드되는 문제일 수 있음새로운 데이터를 로드할 때, 이미 로드된 데이터와
UICollectionView에서 사용하는 indexPath는 섹션(section)과 행(row)을 나타내는 정보를 포함하는 구조체(IndexPath)입니다. 이를 section, row 형식의 배열처럼 사용하는 것은 Swift에서 IndexPath가 배열처럼 동작하도
스크롤을 빠르게 내렸다가 올리면 cell 위치에 잘못된 이미지가 들어가는 문제self.viewModel.pokemonImageSubject.onNext(nil)을 호출하여 셀을 재사용할 때, 이전 셀에서 로드되었던 이미지 데이터를 초기화하여 새롭게 요청할 수 있게 하는
메인콜렉션뷰컨트롤러에서 뷰모델에게 포켓몬 리스트를 요청해 가져와 리스트의 id 값을 셀에게 넘겨주어 셀에서 해당 id를 가지고 셀 뷰모델에게 이미지를 요청 MainViewControllerModel과 MainViewCellModel이 독립적으로 fetchPokemonD
DetailViewModel과 MainViewControllerModel가 네트워크 요청을 직접 처리하고 있음, 뷰모델이 네트워크 요청, 데이터 가공, 뷰와의 바인딩을 모두 담당NetworkManger와 ViewModel사이에 UseCase을 계층 추가비즈니스 로직(데
MainViewController가 DetailViewModel과 DetailViewController의 초기화를 담당하고 있는 방식이 마음에 들지 않는다..MainViewController가 하위 계층의 세부 구현에 너무 의존적이게 만들어, 계층 간의 의존성이 강하게
와이어프레임팀 S.A피그마이번 팀 프로젝트는 날씨 앱, 단어장 앱, 알람 앱 중에 하나를 선택하는 것이다.우리 조는 날씨 앱 2표, 알람 앱 2표에서 마지막 1표가 알람 앱으로 알람 앱이 선정되었다.프로젝트 기간 : 2025.01.07 ~ 2025.01.15앱스토어내
헤더의 표현 방식과 커스터마이징이 가능한 viewForHeaderInSection에 대해 알아보자.섹션의 헤더 텍스트(기본 스타일)를 설정합니다.간단한 문자열만 표시할 때 사용합니다.기본 디자인 제공텍스트만 표시 가능 (폰트, 색상, 배경 등 커스터마이징 불가).간단한
아래와 같은 에러를 만났다대충 번역해보면 TableView 경고는 한 번만: UITableView가 뷰 계층 구조에 없이 표시되는 셀과 기타 내용을 레이아웃하라는 지시를 받았습니다(테이블 뷰 또는 해당 슈퍼뷰 중 하나가 창에 추가되지 않음). 이로 인해 테이블 뷰
위와 같은 형태로 cell의 버튼에 tag를 달아 cell에 있는 버튼이 눌릴 때 마다 버튼이 눌릴 때의 로직을 만들었는데 테이블 뷰가 리로드 될때 마다 액션이 중첩되어서 두 번 리로드 했으면 버튼이 두 번 눌리는 버그가 발생했다..addAction 메서드는 특정 이벤
최종 프로젝트에서 각 코인 거래소 API 데이터를 받아와야하기 때문에 우선 국내 대표 거래소 업비트, 빗썸, 코인원 거래소 API 레퍼런스를 찾아보고 비교해보았다.업비트와 빗썸의 API 레퍼런스는 비교적 유사한 구조를 가진다.RESTful API를 기본으로 사용하며,
수정하고 싶은 부분 PokemonUseCase MainViewModel DetailViewModel > MainViewModel과 DetailViewModel이 같은 UseCase를 주입 받고 있다. MainViewModel과 DetailViewModel이 같은
현재 뷰컨트롤러가 뷰모델에 직접 데이터를 요청하는 구조 -> viewDidLoad나 viewWillApear 이벤트를 뷰모델에 전달하고 뷰모델이 상태를 변경하면서 데이터를 emit하도록 구조를 변경MainViewControllerPublishSubject 또는 Beha
RxSwift를 사용한 여러 코드를 구경하면서 본 연산자들을 구경해보고 비교해보자...강한 참조로 인한 메모리 누수를 방지하면서 이벤트를 수신할 때 self를 안전하게 사용하기 위해스트림의 이벤트를 처리하거나 디버깅 용도로 사용. 스트림의 결과를 변경하지 않음데이터 흐
옵셔널은 간단히 정리해보고 다른 언어들과 비교 해보자Swift에서 옵셔널은 값이 있을 수도 있고 없을 수도 있는 상태를 나타내며, 타입의 일종?를 사용하여 옵셔널 타입을 선언하고, nil로 초기화하거나 값이 없음을 나타냄Swift는 옵셔널을 안전하게 처리하기 위해 옵셔
Swift \`Closure'를 간단하게 정리해보고 다른 언어들과 비교해보자캡처의 자동성Swift의 클로저는 변수 캡처를 기본으로 지원하며, 외부 변수나 상수의 참조를 자동으로 저장@escaping과 non-escaping클로저가 함수 실행 범위를 벗어나는지에 따라 명
현재 진행 중인 프로젝트에서 각 거래소 openAPI에서 현재 시세 정보, 차트를 그리기 위한 캔들 데이터와 같은 데이터들을 받아온다. 하지만 코인의 심볼 이미지 아래와 같은 이미지는 각 거래소 API에서 제공하지 않아 외부 API를 통해 이미지 URL을 가져오려고 했
Swift의 Extension은 기존 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하는 기능을 제공, 그래서 기존 소스 코드를 수정하지 않고도 기능을 확장 가능기존 타입을 변경하지 않고도 기능 확장 가능 (원본 소스 수정 불필요)클래스, 구조체, 열거형, 프
인기 화폐 페이지로 이동할 때 왼쪽 상단에서 확장되는 애니메이션이 보인다이런 구조로 FavoritesContainerViewController에서 contentView 영역에 각 탭에 맞는 뷰컨트롤러를 띄우고 그 뷰컨트롤러가 상황에 맞는 뷰를 띄우는 형식이다.viewC
웹소켓은 서버와 클라이언트가 지속적으로 양방향 통신을 수행할 수 있는 프로토콜로 Swift에서는 URLSessionWebSocketTask를 사용하여 기본적인 웹소켓 연결을 구현할 수 있다. 유명한 라이브러리로는 StarStream이라는 웹소켓 라이브러리가 있다.con
의존성 주입(DI)는 객체 간의 의존 관계를 외부에서 주입하는 설계 패턴이다. 객체 간의 결합도를 낮추고 테스트와 유지보수성을 향상시킬 수 있다.iOS 개발에서 객체지향의 5원칙인 SOLID 원칙(특히 OCP, DIP)을 적용할 때 유용확장에는 열려(Open) 있고,
Swift에서 JSON 데이터를 생성하는 방법으로 JSONSerialization과 JSONEncoder의 차이에 대해 정리해보자Foundation 객체(Dictionary<String, Any> 또는 Array)를 JSON으로 변환타입 안정성이 부족 (Any 타
Bithumb API JSON을 Swift 모델로 변환하는 과정에서 발생한 문제와 해결 과정 정리Bithumb API에서 제공하는 코인 시세 데이터를 Swift의 Decodable 모델로 변환하려고 했는데, 일반적인 딕셔너리 매핑 방식이 실패함JSON의 data 내부를