피그마와 친해지는 시간을 가져봤다. 원래 디자인을 전공해서 그런지 익숙하기도 하고 오랜만이라 흥미롭게 배웠는데, 디자인의 매력은 역시 직관적인 것이 가장 큰 것 같다. 오늘 배운 것 중 오토 레이아웃, 플러그인, 레이어 정렬 기능을 중점적으로 학습했다.오토 레이아웃 :
오늘 한 과제의 내용은 이렇다.해당 과제를 보고 나는 1번부터 차례대로 적어내려갔다. 이렇게 1번을 완료하고나서 다른 팀원이 한 것을 봤는데 class를 이용해 이렇게 정리를 했더라.final class로 정의된 UserInfo 클래스를 이용한 것이 답과 달라서 신박했
성적관리 시스템은 과제를 진행하고도 복습만 4번 이상 한 듯 하다.학생, 과목, 성적을 관리하기 위해 Dictionary, Set, Array를 사용했는데, 이 구조를 활용함으로써 정보들을 효율적으로 저장하고 관리할 수 있겠다 라고 생각했다. 각 구조가 어떤 상황에서
오늘 클래스를 만들고 그 클래스 안에 여러 함수를 구현하는걸 중심적으로 공부했다. 하기 전에, 먼저 클래스가 무엇인지부터 이해하는 것이 중요했기 때문에 개념부터 확실히 잡고 들어가고 싶었다.클래스는 설계도와 같고 이 설계도를 바탕으로 실제 인스턴스를 만들어야 한다는 개
오늘 팀원과 swiftUI를 찍먹하다가 enum 을 사용했는데 (막 따라치느라 검색을 못 해봄) 간단히 만들어볼 다마고치 유형의 프로젝트를 만드는 중, 성별을 지정하는 부분에서 사용 된 enum에 대해 간단히라도 짚고 넘어가려한다. 배운 것 같은데 기억이 나지 않
어제 enum에 대한 TIL을 작성했는데, 댓글에 또 공부거리를 제공해주신 팀원님 덕분에 한번 알아볼 겸 오늘의 TIL을 작성해보려한다.CaseIterable은 영어 단어로 "Case"와 "Iterable"이라는 두 단어로 이루어져 있다.Case : 선택지나 항목을 의
오늘 팀원이 계좌관리 시스템 구축 과제를 했는데 내가 한 것과 달라서 궁금하여 이참에 TIL거리로 삼아 공부하기로 했다. 코드를 쓴 걸 보다가 willSet이라는걸 봤는데 팀원의 블로그 글 중 마지막에 'willSet을 사용하던 didSet을 사용하던 출력은 같다'
복문은 같은 작업을 여러 번 반복할 때 사용하는 구문이다. Swift에서 반복문은 여러 가지 방식으로 사용할 수 있으며, 크게 세 가지 주요 종류가 있다 for-in 반복문, while 반복문, 그리고 repeat-while 반복문. 각각의 반복문을 간단하게 짚어보
willSet 의 심화로 온도조절 시스템을 만들어보자 개인적으로 나는 28도 이상이면 덥고 16도 이하면 춥기 때문에 온도 설정을 그에 맞게 지정해주었다. willSet을 이용하여 온도가 변할 예정임을 알려주는 멘트와 변경 된 후 didSet을 이용해 변경이 되었음을
코모도로란? 코딩공부 + 뽀모도로타이머 = 코모도로 타이머 ! 앱 개발은 단순한 코딩 작업 이상의 과정이라고 생각한다. 성공적인 앱은 철저한 기획을 통해 탄생할 수 있고 이 과정은 개발의 방향성과 사용자 경험에 큰 영향을 미치기 때문이다. 오늘 기획해 보면서 중요
우선 처음 배운대로 배경화면을 설정해주고 가운데에 Button을 추가하여 임시로 TAP이라고 지어주었다. 디테일은 접어두고 실행이 되게끔 하는 것이 중요하니 25분의 타이머가 잘 되는지 확인하고 싶었기 때문에 버튼을 우클릭하여 코드와 연결해준다. 여기서 연결이 된 @
내가 바로 전에 쓴 글을 보다가 DispatchQueue를 뭘 알고 적었는지 모르겠더라 ... 구글에 검색했을 당시에는 타이머가 시작한 후 픽셀이 떨어질 때 픽셀들이 쌓여 바닥부터 차오르는 애니메이션을 구현하기 위해서 코드를 보고 작성한 걸로 기억이 난다. 그런데,
전에 디스패치큐에 대해 깊게 파고드느라 일시정지 됐을 때 앱이 정지되는 오류 개선을 오늘 하게 되었다.이것도 너무 오래 걸렸는데 .. 우선 코드를 변경한 부분 부터 살펴볼텐데, 변경 전과 후의 코드를 비교하며 설명해보려한다.변경 전 변경 후 : tapButton을 최상
알고리즘 문제를 풀어보라고 하는 팀원이 문제를 던져주었다.33 = 944 = 169+16 = 25제일 긴 변 5\*5 =25 이니.. 오케이 대충 공식 이해 완답이 잘 나오는걸 확인하고 그대로 복붙해서 검사했더니..ㅎㅎㅎㅎ 오늘 어차피 많이 틀렸어서 괜찮다...코드는
타이머를 만들다가 (action: () -> Void) 라는 코드를 작성하게 되었는데 저게 뭐지 ? 싶었다. 알아보니 (action: () -> Void) 에서 Void 는 반환 값이 없다는 것을 의미한다고 하는데, 쉽게 말하면 " 아무 값도 돌려주지 않는 함수 (클로
전에 컬렉션에 대해 썼던 블로그에 간단하게 이니셜라이저에 대한 내용을 적긴 했지만 자세히 다뤄보지는 못했다. 오늘은 객체 생성자와 해제자까지 통틀어 한번 쉽게 이해해보려 한다. 생성자 ( Initializer )] 생성자는 객체가 처음 생성될 때 호출되어 객체의
이름하야 피닉스 톩크 !!!!!! 라고 했는데 아직 미정이다.본캠프를 들어가기 전 날 나답지 않게 긴장을 해서 그런지 아침 6시까지 뜬 눈으로 지새우고 결국 잠을 포기하고 얌전히 의자에 앉아 본캠프OT을 기다렸다. 그리고 42시간이 지났다. 제정신으로 쓰는게 아니라
형상 관리 도구 중 하나이다.형상관리 도구는 소프트웨어를 개발하는 과정에서 발생하는 변경사항을 체계적으로 관리하기 위한 도구라고 한다. 그리고 깃허브는 깃 저장소를 온라인에서 관리할 수 있게 해주는 웹 기반 플랫폼인데, 깃을 사용하면 원격 저장소에 깃으로 관리하는 프로
우선 시작은 파일을 넣어줄 폴더를 만드는 것, test라는 이름으로 새폴더를 만들었다.그리고 가져올 프로젝트를 clone 해야하니 터미널을 열어서 프로젝트 주소를 가져와 클론해줄 것이다.주소 복사 꼭 해주고 아 해당 폴더에 저장할 것을 알려줘야하니 꼭 저장할 폴더에서
우리는 주작톡의 런치 이미지가 너무 빨리 없어져버리는 것에 대해 딜레이를 주기로 했다.위 코드는 튜터님의 도움을 받아 완성된 딜레이코드이다. 실행되면 딜레이가 잘 들어가는 걸 확인할 수 있었다.그런데 만약 내가 마음이 바뀌어서 런치스크린에 페이드인/아웃 애니메이션을 넣
오늘 프로그래머스로 위 문제 4개를 풀어보고 풀이를 기록해보려한다.나의 답)문제를 봤을 때 이미 readLine()! 까지 적혀있어서 print(s1) 만 작성하면 끝나는 간단한 문제였다.나의 답)위 문제와 마찬가지로 print 구문만 작성하여 해당 문제도 해결. 나의
기분탓인지 모르겠지만 어제보단 쉬운 느낌? 오늘 일단 4개만 풀고 일요일에 좀 많이 풀어볼까 한다.나의 답)import Foundationlet n = readLine()!.components(separatedBy: " ").map { Int($0)! }let (a,
나의 답)일단 문제를 보자마자 아 이거 삼항연산자 이용하면 되겠다! 가 바로 머리에 떠올랐다. 기본적으로 삼항연산자는 ,조건 ? 참일 때의 값 : 거짓일 때의 값이라는 것이 전제하기 때문에 그냥 프린트 구문안에 바로 조건을 넣어버렸더니 정답이었다. 처음에 생각했던 풀이
나의 답) 돌렸는데... ?????? 테스트 18번 중에 1개 틀린거면 통과 해주지 ... ㅠ 그마저 시간 초과인데... 설마,, 상수 이름이 길어서 그런가 싶어 이름을 간단하게 a, b, c 로만 바꿔서 다시 돌려봤다. ???? 머세요 ㅜ 풀기까지 과정
오늘 swift 문법 종합반 1주차 강의를 듣고 계산기를 만들어보는 과자게 있다. 앞서 배운 문법 내용들을 활용하여 만들어야하는데, 레벨 1~4 까지 있지만 레벨 3까지는 필수이며, 레벨 4는 할 수 있다면 해보는 것으로 선택할 수 있다. Lv. 1 더하기( +
1번. 각 클래스를 만들고 클래스간에 관계를 고려해서 calculator 클래스와 관계를 맺기. 클래스가 다른 클래스를 참조하거나 다른 클래스의 인스턴스를 생성하거나 의존성을 주입받는다거나. 오퍼레이트를 따르는 객체를 받는것. 이니셜라이저로 받은 부분 2. ca
우선 객체 지향 프로그래밍 이라는 뜻을 알아야하기 때문에 살펴보자면 계산기를 만들 때 이따금씩 듣게 되었던 OOP 가 객체 지향 프로그램이었다.Object-Oriented Programming, OOP 어떤 데이터를 입력 받아 순서대로 처리하고 결과를 도출해내는 명령어
SOLID는 다섯 가지 원칙으로 구성되어 있다 SOLID 는 객체지향 프로그래밍(OOP)에서 좋은 설계를 위한 다섯 가지 원칙을 나타내는 약어다. (솔직히 솔리드 들었을 때 가수 솔리드 밖에 떠오르지 않았다) 아무튼 이 원칙은 객체지향 설계에서 코드를 더 유지보수
나의 답) 이걸 풀기 앞서 zip 이라는 함수를 먼저 공부해야했다. zip의 기본 형태를 보자.zip 은 배열이나 문자열을 한 쌍으로 묶어서 새로운 시퀀스를 만드는 함수인데,zip을 사용하면 두 시퀀스를 동시에 순회할 수 있다보니.. 번갈아가며 값을 결합하거나 연산할
나의 답)사실 이것도 뭔가 메서드를 이용하는게 아닐까.. 하고 파이썬으로 푸는 방법을 검색해봤다.근데 파이선에서는 join 이라는 메서드로 이용하길래 파이썬이랑 swift는 비슷하니 구글에 검색해봤더니, 바로 joined 메서드가 나왔다.공식문서까지 확인하니 매우 흡사
이번 주 과제를 받았는데, Command Line Tool 프로젝트로 과제를 진행하라고 한다.왜 그걸로 하는건지 궁금했다.MacOS 의 Command Line Tool 는 주로 콘솔에서 간단하게 사용자와 상호작용할 수 있기 때문이라고 하는데,Command Line To
오늘 Lv.2 와 이어 어제 하지 못한 Input으로 입력받는 것 까지 구현을 해보려고 한다. 우선 만들어볼 클래스를 정리했다. 꼬질 글로 정리.. 진짜 급하게 써서 그렇다 원래 글씨 이쁘ㄷr * 코드로 옮긴 후)* 정답 클래스 만들기 Input 클래스 만들
갈아 엎었다.내 기준 그렇다.전 코드에서는 if else 로 줄줄이 이어져 내려왔다. 하지만 보다보니 (다른 수강생분들이 하는 것과 비교해보니) ,guard 문을 많이들 사용하더라. 보다보니 왜 쓰는지 알았다.뭔가 조건이 만족하지 않으면 처리되는 부분이 한눈에 보기 편
스린이인 내가 이걸 만들다니.......
어제 블로그 작성한 부분 중에 내가 Character 타입에 대해 이해하지 못해,튜터님을 찾아갔었다는 내용이 있다.튜터님을 찾아가고 나서 문제는 해결 했지만, 짚고 가야할 부분과더 고민해볼 포인트, 그리고 그 고민을 해결할 수 있는 필요배경지식에 대해 공부해보라며 친절
문자..열....곱하...기?
나의 답)난 예전에 코테 잘 풀고 싶어서 코테할 때 자주 쓰이는 함수들 << 예전에 이 분의 글을 보고 코테할 때 요긴하게 쓰이나보다 하며 메모한 게 기억이 났다.해당 블로그에서 본 max 랑 min 이 생각 났는데 이번 문제에서는큰 값을 가져와야하니까..
stride 짱이에요 진자로
강의를 듣다가 스크롤 뷰 위에 스택 뷰를 얹고priority 를 1000 에서 250 으로 낮추는 내용이 나왔다.해당 부분인데, 이렇게 하면 유연성이 높아져서.. 스크롤이 잘 된다라고 하시며부연설명도 해주셨지만 좀처럼 이해가 되지 않았다.오늘 마무리 시간에 팀원들과 데
Xcode 코드베이스 강의를 듣다가 스냅킷을 설치하는 부분이 있었는데,설치 후 import Snpkit 이라 쓰면 오류나고..어찌저찌 타겟에 추가를 해서 빌드하면 ...' no such file or directory ' <- 이 오류 때문에 빌드가 되지 않음..
코드베이스로 구현하고자 할 때는 몇 가지 셋팅을 해줘야한다. 1. Main 스토리보드 지우기 메인 스토리보드는 그냥 클릭 후 백스페이스를 누르면 지워진다 . "지울거냐?" " ㅇㅇ 레츠 고 트레시 트레시" 2. Build Settings에서 main 지우기
그래 레벨 1 까진 강의에서 배운대로 했더니 괜찮았다. 근데 레벨 2 부터 UIStackView 를 쓰라고 할 줄은 몰랐지ㅜ우선 스택뷰는 총 4개가 필요할 것 같고 저 4개를 한번에 또 묶어주는 작업도 필요할 것 같다.그냥 buttons 라는 메서드를 만들어서 그 안에
메모리 구조 자료 구조 공부만 5번은 넘게 한 것 같은데 왜 뇌에 안 들어오죠 그래도 코딩은 좋아
삼항연산자 이용하면 꿀인데....
저번주에 여기까지 하고 마무리를 했다.버튼을 눌렀을 때 해당 버튼이 눌리는 것 까지 프린트로 확인했으니, 오늘은 숫자를 눌렀을 때 화면에 숫자를 띄워주고 등등 레벨 8단계까지 해보려한다.자 가보자아아아일단 숫자를 치면 label에 나오게 해봐야할 것 같다.저번에 만들어
나의 답)알고리즘 반이 생겨서 세 문제를 받게 되었는데, 이게 제일 뭔가 어려웠다.심지어 다른건 난이도가 1단계이고 이건 0단계인데... 어렵던데 ㅜ 라며 부정했다.우선 array에 들어있는 정수를 정리해야했다.result 라는 변수를 먼저 선언해주고 배열의 첫번째를
우연히 어제 코딩테스트 관련 블로그를 보다가 "재귀적으로 문제를 해결 할 수 있다."라는 문구를 봤다. 그런데 오늘 자료구조 특강 시간에 재귀함수의 대한 내용이 나와서 어?이건 공부하라는 계시구나 ㅎㅎ 하고 공부해봤다.재귀함수, 재귀호출 이런 말을 들을 때 잘 몰랐지만
오늘 MVC, MVVM 대해 간략한 공부를 했었다.내가 알아 본 결과 간단히 표현하자면, MVC와 MVVM 중 어떤 패턴을 따를지 결정하는 기준은 간단한 프로젝트일 경우,MVC 패턴이 적합하다.현재와 같은 소규모 앱에서는 MVC 구조만으로도 충분히 유지보수 가능한 코드
Delegate 패턴은 iOS 개발에서 매우 자주 사용되는 디자인 패턴 중 하나로, UIKit에서도 주요한 역할을 한다고 한다.UITableViewDelegate와 UICollectionViewDelegate는 Delegate 패턴의 대표적인 사례인데,사용자와 인터페이
나의 답)문제에서 "홀수라면 n 이하의 홀수의 합", "짝수라면 n 이하의 짝수의 제곱의 합"이라는 두 가지 조건이 주어졌는데, 이걸 어떻게 효율적으로 나눠서 처리할지 고민했다. 처음에는 조건별로 따로따로 구현하려다 보니 코드가 완전 장황해져서 유지보수가 어려워질 것
나의 답)주어진 문제는 비교 연산자와 논리 연산자를 조합하여 정수 n과 m의 관계를 확인하는 것인데,문제가 조금만 길어져도 이해하기가 어려워진 나는.. 읽고 이해하는데 5분 넘게 걸린 듯 하다 ㅎㅎ 입출력 예시를 보고 음 그럼 총 네가지의 예시가 필요하다는 걸 알게 되
와어프레임과 깃만 정리하는데 하루가 다 갔다..내가 맡은 부분은 UITableView 담당인데 주문을 담는 리스트 역할이라고 보면 된다.미리 테이블뷰 공부하길 잘했다 싶지만 .. 복습하러 가야겠다.그리고 오늘 깃 데스크탑을 이용해 브랜치를 만드는 것도 익숙해지고 있다(
테이블 뷰 맡길 잘...했다!!!!!!!1
테이블 뷰 어렵ㄴ
보는 것 처럼 누른 순서대로 deleteItem 버튼을 누르면 저런 오류가 났다.에러 메시지인 Index out of range는 배열의 인덱스를 잘못 참조했을 때 발생한다고 하는데...이 문제는 menuList.remove(at: row)에서 row 값이 menuLi
부족한 저를 이끌어준 고생한 우리 팀원들에게 절을 하며 마칩니다.
메뉴 3개이상 추가할 때 마지막 메뉴의 위치가... 테이블뷰를 만드는 과정에서 항목을 추가할 때 3개 이상 항목을 추가하게 되면 장바구니에는 담기지만 뭘 추가했는지 굳이 스크롤을 내려가며 봐야하는 불편함이 있었다. 그렇게 스크롤이 사용자가 추가하는 메뉴를 추적하며
hitTest란? 공식문서) hitTest(_:with:)의 역할을 보자면, hitTest(_:with:)는 뷰 계층에서 어떤 뷰가 터치 이벤트를 처리할지 결정하는 메서드이다. point는 터치된 지점이고, event는 발생한 터치 이벤트 정보를 나타내주는데, 이 메서드는 호출된 뷰나 해당 뷰의 자식 뷰들 중에서 터치 이벤트를 처리할 적합한 뷰를 ...
메모리구조와 자료구조 내용에 대한 블로그를 작성할 때 전체적으로 ARC에 대한 부분을 공부한 적이 있다.이번에는 ARC와 MRC의 개념에 대해 알아보려고 한다.ARC와 MRC는 메모리 관리 방식으로 객체의 생명주기를 관리하는 역할을 한다는 건 같다.둘은 비슷한 목적을
강의를 듣다가 문득 coreDate로 프로젝트를 굳이 만들어야하는 이유가 궁금했다. 일반프로젝트를 하다가 갑자기 일기작성하는 기능을 넣는다던지 하면 굳이 바꿔야하나 싶기도 하고 처음부터 Core Data로 프로젝트를 설정해야 할까? * 1. Core Data 프로
난 처음 디코딩과 Codable, 그리고 인코딩에 대해 공부할 때 뭐부터 해야할지도 모르겠고 왜 해야하는지 몰랐다. 우선 순서는 디코딩과 인코딩의 개념을 먼저 이해한 후 이후에 Codable에 대해 공부하려고 하는데, 왜냐고 한다면 그냥 자연스러운 순서라고 한다.
CRUD는 데이터 관리를 위한 기본적인 네 가지 작업을 나타내는 약어이다. Create: 데이터를 생성(추가)하는 작업 Read: 데이터를 읽거나 조회하는 작업 Update: 기존 데이터를 수정하는 작업 Delete: 데이터를 삭제하는 작업 1. CRUD의 역할
날씨앱을 만들어보며 api에 대한 이해를 높여가는 시간을 가졌다.우선 ViewController에 기본이 되는 라벨들을 배치해주고 스냅킷을 이용해 오토레이아웃까지 잡아준다.오토레이아웃까지 야무지게 잡은 모습.그리고 강의를 들을 때마다 느끼지만 configureUI 만들
그렇다 어김없이 개인과제가 시작되었다. 이름하야 " 포켓몬 전화번호부 " 만들기. 시작한다. 우선 새로운 프로젝트를 만드는데 스토리지는 core data로 꼭 지정해주기. Lv.1 UI 구현하기 레벨 1 부터 차근차근 해나가보자! 우선 예시도 봐야하니 더미데이
처음보는 보라색 피 처음 보는 UIImageView.image must be used from main thread only 보라색 에러가 나왔다. 에러 메시지는 UIImageView의 image 속성이 메인 스레드에서만 사용되어야 한다는 것을 의미한다고 하는데,
'Contact' 엔티티를 추가해서 엔티티에는 'name', 'phoneNumber', 'profileImage' 속성을 추가했다. 그리고 ContactListViewController 파일로 돌아와서 아래 코드를 추가했다. 이 코드는 Core Data에서 작업
이름순으로 정렬하는건 sorted로 알고 있다. 하지만 코어데이터상에선 사용하는게 달랐는데, [CoreData] 기초개념 (2): Query & Sorting 이 블로그에서 NSSortDescriptor로 정렬조건을 추가하는 걸 발견했다. 그리고 좀 더 알아보니
네비게이션 바의 title을 연락처의 이름으로 설정해서, 사용자에게 현재 수정 중인 연락처를 직관적으로 알려주고,기존 연락처(contact)의 데이터를 가져와 nameTextField와 phoneTextField에 표시한다.그러면 사용자는 기존 데이터를 보고 필요한 경
해설을 보다가 초반부에 왜 두가지 초기화 방식을 사용하는지 궁금했다.이런식으로 초기화를 진행했는데, 우선 init(frame: CGRect) 는 뷰가 프레임 정보를 받아서 초기화 될 때 호출되는 초기화 메서드이고, 여기서의 setupView()는 커스텀 초기화 작업을
이슈 브랜치 오늘 처음 듣고 멘붕이 왔다.그래서 알GitHub는 협업과 코드 관리를 위한 강력한 플랫폼이라는건 이미 다들 아는 사실이다.그 중에서도 이슈(issue)와 이슈 브랜치(issue branch)는 프로젝트를 체계적으로 관리하고 작업을 명확히 구분하기 위해 필
나의 답) 한 시간의 두배만큼 증식하는거면 경과한 시간마다 X2를 해주면 되겠다 싶어 바로 for문이 생각나서 초기 세균의 수를 result 값에 지정하고, 반복문을 통해 세균 마릿 수가 몇 마리던 하나씩 모두 2를 곱해주었다. 값은 잘 맞았고 정답이긴 했는데
해설강의 내용에서 api를 다루는 부분을 정리해보려한다.우선 Repository라는 새로운 폴더를 생성하고 그 안에 ImageRepository라는 swift 파일을 생성했다.안에 내용은 우선 아래처럼 작성했다.알라모파이어를 사용하는 대신 정석방법으로 우선 해보자.위
영화관 앱의 세부 화면을 맡게 되어서 UI작업을 시작했다. 우선, MovieDescriptionView는 영화 설명을 보여주는 뷰로, 기본적으로 긴 텍스트를 다루기 위해 UILabel을 사용했다. 하지만 텍스트의 양이 많아지면 화면에 전부 보이지 않기 때문에,
오늘은 이 헛헛한 좋아요 버튼을 눌렀을 때 클릭애니메이션을 구현해보려고 한다.버튼액션의 경우 controller가 담당하는 부분이라서 UI만 모아져있는 view에서 작업하는게 아닌 MovieDetailViewController에서 작업해야한다.앞으로 공유버튼과 예매하기
버튼만 눌리면 됐지.. 색도 변경했는데.. 숫자 카운트까지 해야하나.... 해야했다. 좋아요 숫자는 따로 가져오고 저장할 서버도 없기에 랜덤으로 지정하고, (대신 같은 영화 두번 들어가면 좋아요 숫자가 바뀜) 누르면 카운트가 올라가고 한번 더 탭하면 내려가면서 색
소개글이 짧은대도 불구하고 더보기 버튼이 나오는게 싫었던 팀원 B씨를 위해 수정했습니다이름하야 더보기 버튼 글자 수에 따라 안보이게 하기이이-영화 상세 정보를 표시하는 앱에서 소개 글(overview)의 길이에 따라 '더보기' 버튼을 표시하거나 숨기는 기능이 필요했다.
도움과 협력각자 맡은 역할을 충실히 수행하면서, 팀원이 도움을 요청하면 작업을 마친 팀원이 적극적으로 도와줬습니다. 덕분에 모두 기능을 구현하고 기한 내에 프로젝트를 완료할 수 있었습니다.기능 단위 PR과 승인 조건기능 단위로 이슈를 발행하고 PR을 진행했으며, PR
API(Application Programming Interface)는 현대 개발에서 없어서는 안 될 중요한 개념인건 다들 알고 있을 것이다.하지만 처음 공부를 시작하면 생소한 용어, 비동기 작업, 네트워크 구조 등 많은 장애물에 부딪히기 마련이고,나 또한 API를 배
Moya는 네트워크 레이어를 캡슐화하고, 코드 가독성을 높이는 데 유용한 라이브러리다. API 요청을 명확하게 정의해주고, 코드의 재사용성과 유지보수성을 높일 수 있다는 설명을 보고 알라모파이어보다 모야를 써보면 어떨까 싶어서 연습해보았다. Moya를 사용하여 어
팀원분이 addTarget말고 addAction으로 써보는게 어떠냐 라고 스쳐지나간 듯 들었던 이야기가 있었다.그 당시 addAction은 모르겠고 빨리 코드를 작성해야 하니 아는 코드로 하느라 addTarget으로 그냥 작성해버렸는데..addAction은 Swift에
Swift의 async/await는 비동기 프로그래밍의 새로운 패러다임이다. 라고 한다는데, 확실히 비동기 작업은 현대 소프트웨어 개발에서 필수적이다. 네트워크 요청, 파일 입출력, 데이터베이스 접근 등 시간이 오래 걸리는 작업은 메인 스레드를 차단하지 않고 수행해
Continuation은 Swift에서 비동기 작업을 동기 코드처럼 작성할 수 있게 돕는 중요한 개념이라고 한다.특히 Swift의 async/await 구문과 함께 사용될 때 유용하다고 하는데, Continuation은 기존의 콜백 기반 비동기 API를 async/aw
RxSwift는 데이터의 변화를 감지하고 반응하는 리액티브 프로그래밍(Reactive Programming)을 위한 Swift 라이브러리인데,한마디로 이벤트가 발생할 때마다 자동으로 반응하는 프로그램을 쉽게 만들 수 있게 도와주는 라이브러리라고 보면 된다.버스 정류장에
RxSwift와 Combine은 비동기 프로그래밍과 반응형 프로그래밍을 지원하는 도구들이다.하지만 각자의 장단점도 있고, 특정 상황에서 어떤게 더 적합할지도 고민해봐야할 것 같았다.오늘 두 프레임워크를 비교하고, 어떤 상황에서 어떤 도구를 선택하는 것이 좋은지에 대해
전 글에서도 설명 했듯이, Combine은 Apple이 Swift 생태계에 도입한 강력한 프레임워크로 비동기 프로그래밍 및 데이터 스트림 처리를 손쉽게 할 수 있도록 도와준다고 했다. 자세히 알아보자.Combine은 Swift 언어의 비동기 작업 처리와 이벤트 기반 프
NSCollectionLayoutSection은 UICollectionView에서 레이아웃을 정의하는 중요한 요소 중 하나인데,이 객체는 UICollectionView 내의 섹션을 정의하고 그 섹션 안에서 아이템들이 어떻게 배치될지를 설정한다. 그리고 섹션은 NSCol
NSCollectionLayoutGroup은 UICollectionView의 레이아웃을 구성하는 데 중요한 역할을 하는 클래스다. UICollectionView는 여러 개의 아이템을 화면에 표시할 때 사용되는데, 이 아이템들을 어떻게 배치할지 정의하는 것이 바로
원래 APIManager가 굉장히 길었다.하지만 Moya 로 리팩토링을 하고나서의 APIManager는...물론 따로 BookApi 이라는 파일을 만든거고 이게 API 정의 파일인데, 실제 API 요청을 만드는 데 필요한 설정을 모아 놓은 것이다.각 케이스에 맞는 U
나의 답) 이번 문제는 문자열과 조건문을 활용하여 특정 문자를 대문자로 변환하는 작업이었는데, 해결을 하면서 과정을 한번 적어보려 한다.문제를 분석해보자면, 주어진 조건은 두 가지였다. 하나는 문자열 my_string에서 특정 문자를 찾아야 한다는 점이고다른 하나는
Swift는 안전성과 가독성을 중요시하는 언어인데, 변수나 상수를 사용할 때 값이 없을 가능성을 명확히 표현할 수 있도록 옵셔널(Optional)이라는 개념을 제공한다.옵셔널은 변수나 상수에 값이 없을 수도 있음을 나타내는 타입인데예를 들면 아래와 같이 일반 변수를 선
UITabBarController는 iOS 애플리케이션에서 화면 간 전환을 관리하기 위해 사용하는 컨트롤러인데,하단에 탭 바(Tab Bar)가 표시되며 사용자는 탭 바의 아이템을 탭하여 서로 다른 화면(또는 뷰 컨트롤러)으로 전환할 수 있다.일반적으로 탭 바 컨트롤러는
오늘 개발 중에 발생한 문제들을 해결하려 했지만, 예상치 못한 오류들이 계속해서 나타났다.특히 viewModel과 coreDataManager의 초기화 문제, 그리고 coreDataManager를 뷰 컨트롤러에 전달하는 과정에서 오류를 해결하려고 여러 방법을 시도했지만
앱 개발에서 데이터 저장을 관리하기 위해 Core Data를 사용해야하는데 오늘까지 Core Data를 완전히 구현하지 못했고 그 과정에서 겪은 여러 문제들을 정리해보려 한다.프로젝트는 외부 API에서 책 데이터를 받아오는 구조로KakaoBook이라는 구조체를 사용하고
iOS 개발을 할 때 UI 코드나 객체 초기화 과정을 좀 더 깔끔하게 작성하고 싶을 때가 많다. 특히 UIKit을 활용해 화면을 구성하면, UIView나 UILabel 같은 컴포넌트를 생성한 뒤 속성을 일일이 설정하는 반복적인 과정을 자주 겪게 되는데,Swift 언어가
내가 맡은 부분 네트워크 통신을 담당했다.이번 기회에 api를 타파해보자.오늘은 팀원들과 열심히 와이어프레임을 짜서 뿌듯하다. 열심히 해야겠다.
모야는 참 편하다.TargetType를 채택하려면 저 다섯가지를 꼭 작성해야한다고 친히 Fix가 뜨고 나는 안에 값만 잘 넣어주면 된다.OpenWeatherMap의 One Call API를 사용해 날씨 정보를 받아오려면 먼저 네트워크 요청을 어떻게 구성해야 할지 고민을
타입 속성(Type Property)static 키워드를 사용하면 구조체나 클래스 자체에 속하는 속성을 정의할 수 있다.그리고 인스턴스와 무관하게 해당 타입 자체에서 공유되는 속성을 의미한다.인스턴스 속성 vs 타입 속성인스턴스 속성특정 인스턴스에 속한다.각 인스턴스마
팀원분이 짠 fetchWeather 코드를 분석해봤다.우선WeatherRepositoryProtocol을 사용한 이유는 의존성 분리, 테스트 용이성, 코드의 유연성을 확보하기 위해서인 것 같다.Moya 라이브러리의 MoyaProvider를 생성하는 부분인데, Moya
오늘은 UIMenu와 UserDefaults를 이용해 온도 단위(섭씨/화씨) 설정 기능을 구현한 과정을 기록하려한다.이 기능은 사용자 경험을 개선하기 위해 사용자가 선택한 온도 단위를 앱 전반에 동기화하고 유지하도록 구현을 했다.아래 사진처럼 아이폰의 날씨 앱에서 설정
설명은 나중에
SettingsManager는 온도 변환 및 사용자 설정값을 관리한다.온도 변환 공식은 태어나서 처음 봣는데 아래와 같다.섭씨 → 화씨: ( F = C \\times \\frac{9}{5} + 32 )화씨 → 섭씨: ( C = (F - 32) \\times \\frac
앱의 첫인상을 결정짓는 런치 화면에서 애니메이션을 적절히 활용하면 기억에 남을 수 있는 앱이 될 수 있다고 생각한다.오늘 Lottie를 이용해 런치 화면 애니메이션을 구현하는 방법을 기록해보려한다.Lottie는 Airbnb에서 개발한 애니메이션 라이브러리인데, 디자이너
유지했으면 하는 부분UI를 간결하고 직관적으로 디자인 한 점과 사용자 중심으로 레이아웃을 구성한 덕분에 앱이 보기 쉬웠습니다.팀원들과의 원활한 의사소통과 코드리뷰를 꾸준히 진행했기에 협업의 질을 높일 수 있었습니다.RxSwift를 활용해서 네트워크 요청과 UI업데이트를
와이어프레임 소담 소담잘 부탁해 !
RxCocoa로 UI 컴포넌트를 반응형으로 사용해봤다.textField.rx.text와 button.rx.tap을 Observable로 변환하여 데이터를 처리해봤고,UI 이벤트를 선언적으로 처리하는 Rx의 장점을 알 수 있었다.그리고 RxSwift의 연산자를 사용했는데
Realm은 iOS 개발에서 많이 사용되는 경량 데이터베이스로, 객체 지향적인 접근 방식을 통해 데이터를 쉽게 관리할 수 있도록 도와준다는데,간단한 API와 뛰어난 성능 덕분에 Core Data나 SQLite를 대체하는 데 자주 사용된다고 한다.빠른 성능Realm은 C
코드 치자\~~
어우 요즘 블로그 작성하기 꽤나 힘들다.메인 뷰를 만들다가 이미지뷰 아래에 랜덤으로 기분 좋은 글을 넣어서 이미지뷰를 탭할 때 마다 랜덤으로 내가 작성해놓은 한마디가 나왔으면 좋겠다.열심히 적었는데 너무 정상적인 것 같아서 나중에 살짝 재밋게도 바꿔보고 싶다.아 그리고
오늘은 알럿을 구현하고 모달띄우기도 했다.기능: 이름 입력을 요청하는 알림창을 띄우고, 텍스트 필드를 통해 사용자로부터 이름을 입력받음.구현: AlertManager를 통해 재사용 가능한 알림창을 작성.알럿 설정할 때 처음 on viewController: UIView
뀨웅?gif 파일을 넣어보는 기능은 처음 해봤는데 공부할겸 기록해보려한다.기본적으로 iOS앱에서는 GIF파일을 사용하려면 몇가지 단계를 거쳐야한다고 한다. 먼저 GIF 파일을 프로젝트에 추가하고, UIImage 확장을 통해서 GIF를 애니메이션 이미지로 변환시켜준 뒤에
iOS 앱에서 사용자에게 간단한 메시지를 보여주기 위해 토스트(Toast) 메시지를 구현하는 방법을 소개해본다.토스트 메시지는 Android에서 흔히 사용되는 UI 패턴인데 iOS에서는 기본적으로 제공되지 않기 때문에 직접 구현해야 한다. 아래는 UIView를 확장하여
코어데이터는 애플의 데이터 관리 프레임워크이다. 데이터를 객체로 관리하며, 데이터의 저장, 검색, 정렬 등을 쉽게 처리할 수 있고,SQLite와 같은 데이터베이스를 사용하지만 직접 SQL 쿼리를 작성하지 않고도 객체 지향적으로 데이터를 다룰 수 있다고 한다.코어데이터는
UIKit은 애플이 2008년 iOS 2.0과 함께 출시한 프레임워크다. 오랜 시간 동안 iOS 앱 개발의 표준으로 사용되어 왔고 명령형(Imperative) 프로그래밍 방식을 기반으로 한다.명령형 프로그래밍: 개발자가 UI의 상태를 직접 관리하고, UI를 업데이트하기
DTO는 데이터를 전달하기 위해 사용되는 객체인데 주로 계층 간(ViewModel과 ViewController) 데이터를 주고받을 때 사용된다.목적데이터 전달 전용: 데이터와 그 구조를 캡슐화하여 다른 계층에서 쉽게 사용할 수 있도록 한다.비즈니스 로직 제거: 데이터를
SwiftUI는 Swift 언어로 작성되므로, Swift의 기본 문법을 익혀야 합니다.학습할 내용변수, 상수 (var, let)조건문 (if, switch)반복문 (for, while)함수 (func)구조체 (struct)와 클래스 (class)프로토콜 (protoco
Swift에서는 lazy 키워드를 사용하여 프로퍼티가 실제로 접근되기 전까지 초기화를 지연시킬 수 있다. 이는 성능 최적화 및 불필요한 메모리 사용을 줄이는 데 유용하다. 이번 글에서는 lazy의 동작 방식과 활용법을 깊이 있게 살펴본다.lazy 키워드를 사용하면 프로
Swift에서 클로저(Closure)는 독립적인 코드 블록으로, 함수와 유사하게 사용할 수 있다. 하지만 함수와 달리 이름이 없으며, 다른 변수나 함수의 인자로 전달할 수도 있다. 클로저는 강력한 기능을 제공하지만, 메모리 관리 문제(특히 강한 참조 순환 문제)를 유발
Xcode 프로젝트를 열 때 다음과 같은 오류가 발생할 수 있다.이 오류는 프로젝트의 핵심 파일인 project.pbxproj가 손실되었기 때문에 발생한다. 이 파일은 프로젝트의 설정을 관리하는 중요한 파일로, 없으면 프로젝트를 열 수 없다. 다음은 문제를 해결하는 다
SwiftUI에서 NavigationStack을 사용할 때, 커스텀 뒤로가기 버튼을 추가하면 기본적으로 제공되는 < 버튼과 중복되어 < 뒤로가기 <처럼 보이는 문제가 발생할 수 있다. 이 문제를 해결하는 방법을 정리해 본다. 아래와 같이 DetailV
✔ 3~5개: 일반적으로 사용하기 적절한 개수✔ 2개: 보통 하단 탭바보다는 TabView보다는 Segmented Control이 더 적절함✔ 6개 이상: 가독성과 접근성이 떨어질 수 있어 비추천 (대신 "더보기" 사용 권장) 4개는 적절한 개수이므로 크게 문제없다.
리팩토링은 기존 코드를 더 효율적이고 유지보수하기 쉽게 개선하는 과정이다. 단순히 코드만 정리하는 것이 아니라, 기능적인 안정성과 확장성을 고려해야 한다. ✔ 모듈화: 관련된 기능을 하나의 모듈이나 컴포넌트로 묶어 관리하기 쉽게 만든다.✔ 재사용성 고려: 반복되는 코
앱을 개발할 때 기기마다 UI를 적절하게 조정해야 할 때가 많다. 특히 iPhone SE(1세대, 2세대, 3세대) 같은 화면이 작은 기기에서는 Tab Bar의 높이나 아이콘 배치가 어색해지는 문제가 발생할 수 있다. 이를 해결하기 위해 CustomTabBar를 생성하
Copy-on-Write(COW)는 값 타입(Value Type)의 복사가 불필요한 경우 실제 데이터를 공유하다가, 변경이 발생할 때 새로운 메모리를 할당하여 복사하는 최적화 기법이다. Swift는 Array, Dictionary, Set 등의 컬렉션 타입에서 COW를
알림 관리 클래스인 AlertManager를 재사용 가능하게 리팩토링을 해야했다.앱에서 알림을 자주 사용하다 보면, 알림을 관리하는 방식이 점차 복잡해진다. 한 곳에 알림 관련 로직을 집중시키는 것이 좋지만, 그렇게 하면 코드가 길어지고 반복되는 부분이 많아질 수 있다
앱을 개발하다 보면 다양한 알림(Alert)을 사용자에게 보여줘야 하는 상황이 자주 발생한다. 예를 들어 입력값이 비었을 때, 이미 작성된 데이터가 있을 때, 또는 이미지 업로드 개수를 초과했을 때 등 여러 가지 경우가 있다. 기존에는 각 상황마다 showAlert(
앱을 개발할 때 사용자에게 특정 상황을 알리기 위해 UIAlertController를 사용한다. 하지만 여러 곳에서 알럿을 호출하다 보면 코드가 중복되기 쉽고, 관리가 어려워진다. 이를 해결하기 위해 AlertManager를 활용하여 알럿을 관리하고, 최근에는 Aler
Swift에서 lazy 키워드는 성능 최적화와 메모리 효율성을 위해 자주 사용된다. 특히 클로저와 함께 사용할 경우, 초기화 시점과 메모리 관리에 대한 이해가 필요하다. 이번 글에서는 lazy 프로퍼티와 클로저의 관계, 그리고 이를 활용하는 방법을 정리한다. lazy
]앱 개발을 진행하면서 자연스럽게 PM(Product Manager)의 역할을 고민하게 되었다. 단순히 기능을 구현하는 것을 넘어, "이 앱이 사용자에게 어떤 가치를 줄 수 있을까?", "어떤 방향으로 발전해야 더 의미 있는 서비스가 될까?" 같은 질문이 계속해서 떠올
소프트웨어 개발에서 코드의 구조를 체계적으로 관리하기 위해 다양한 아키텍처 패턴이 사용된다. iOS 개발에서도 MVC와 MVVM은 가장 널리 사용되는 패턴 중 하나이다. 이 글에서는 두 패턴의 개념과 차이점, 그리고 각각의 장단점에 대해 정리한다. MVC는 Model