[TIL / 25.10.11] Combine,, 실습과 함께 훑어봤어요 2
·
iOS/Swift
1. 목표https://jsonplaceholder.typicode.com/users유명한 open api 중 하나인 해당 주소에서 얻어온 users를 테이블뷰에 띄우는 실습을 해봤다. 제대로 구현이 된다면 아래와 같은 결과가 나올 것이다.2. Presentation Layer 우선, 프로젝트 내 아키텍처는 새로 들어가는 프로젝트와 일부 유사하게 clean architecture 기반으로 가져가고 그 외 네트워크는 urlsession 사용한다. 전체적으로 퍼스트파티 위주로 구현한다. 우선 View에 대해선 반응형을 쓰지 않을때와 같았다.Rx를 썼을 때엔 RxCocoa를 사용해 UI 컴포넌트에 대해 여러 기능들을 제공받았는데, Combine엔 RxCocoa같은 게 없다고 한다..!사실 있는데 아직 처음 공..
[TIL / 25.10.11] Combine,, 실습과 함께 훑어봤어요 1
·
iOS/Swift
새 프로젝트에서 Combine을 도입해보기로 결정했기 때문에, 마침 배워보고 싶던 부분이라 공부해봤어요반응형 프로그래밍을 왜 쓰는건지 다시 되짚어보고,, 기존 RxSwift할 때와 어떻게 다른지 중심으로 보고 간단한 open api 받아와서 tableView에 바인딩하는거까지 해보겠습니다~ 1. 반응형 프로그래밍(Reactive Programming)반응형 프로그래밍은 값의 변화(데이터, 이벤트 스트림)가 마치 데이터 흐름처럼 연결/구독되고, 변화가 생길 때마다 자동으로 반응이 흘러가는 것. 비동기들은 기본적으로 예측 어려운 시점에 발생(입력, 네트워킹, 타이머, 센서 등)하기에, 많은 이벤트, 콜백, 비동기 작업을 하나의 Stream으로 간단히 체인/구독해서 관리하려는 개념이다. 퍼스트 파티 기준으로는..
[TIL / 25.09.19] Swift는 왜 struct를 권장하는가
·
카테고리 없음
Swift에서 struct와 class는 비슷해보이지만, 언어 설계 방향과 코드 전체 구조적 특성, 확장성 등 핵심적인 차이를 가진다. class의 경우 Objective-C와의 호환에 맞춰서 도입된 참조 타입(Reference type)이며, 상속, 런타임 타입 체크, ARC(자동 참조 카운트) 관리를 지원한다.struct의 경우 값 타입(Value type)으로, 복사 시 데이터 전체를 새로 복제한다. 상속이 불가능하며, Swift에서 struct는 C의 struct와 달리 메서드, 프로퍼티, 확장, 프로토콜 채택 등 객체지향적 특성을 모두 가진다.이 struct를 클래스와 동등한 1등 시민(First-Class Citizen)으로 두고 실제 표준 라이브러리와 SwiftUI 등 시스템 전반에 기본 설..
[25.08.14] MOUP 리팩토링 및 트러블슈팅 - 동적 높이를 가지는 테이블뷰 셀
·
iOS/Swift
이번엔 정말 한참 잡고 있었던 것 같은데 ...1. 리팩토링한 부분기존 홈 내 알바생이 본인의 근무지를 볼 수 있었고 셀을 탭하면 확장 및 축소가 되어 급여에 대한 상세한 요소들을 볼 수 있어야 했음요런 느낌으로 했어야 했는데 리뉴얼 전 프로젝트에서는 스택뷰로 하게 되면 계속 제약조건 경고와 함께 UI 관련 이슈가 끊이질 않고 원하는대로 되지도 않아서 데드라인이 얼마 남지 않았기에 해당 방식으로 진행함. func setConstraints() { containerView.snp.makeConstraints { $0.top.equalToSuperview().inset(4) $0.directionalHorizontalEdges.equalToSuperview..
[25.08.04] MOUP 트러블슈팅 - .xcconfig 내 url 설정 시 주의사항
·
iOS/Swift
1. 문제 상황구글 로그인을 위해 데이터 레이어를 모두 임시 구현해두고 테스트를 하는데 No endpoint 경고가 뜸NSLocalizedDescription=특정 호스트 이름을 가진 서버를 찾을 수 없습니다.분명 baseURL을 xcconfig에 넣고 이를 info.plist에 등록해서 가져다가 쓴건데...?라우터 패턴 내부에 var baseURL: URL { guard let url = URL(string: NetworkConstants.baseURL) else { fatalError("Invalid base URL") } print("baseURL은 \(url)입니다") return url }// 생략 ...func asUR..
[25.07.31] MOUP 트러블슈팅 - tableHeaderView 레이아웃 제약 경고
·
iOS/Swift
1. 문제 상황홈 화면 상단에 유동적이지 않은 뷰(헤더)를 리뉴얼 전 프로젝트에선 tableHeaderView로 해결해보려 했으나 제약 경고 해결을 시간 내로 빠르게 해결하지 못할 것 같아 섹션 헤더로 넣어 해결했다. 이번 리뉴얼 버전에선 이 헤더가 사실 화면 전체의 상단 영역을 책임 진다고 생각하여 tableHeaderView로 구현해보고 싶어 시도했으나 계속 제약 조건 경고가 뜸 내부적으로 leading, trailing에 대한 제약조건 16을 달아둔 것들이 문제가 됐고 마지막 사항은 HomeHeaderContainerView라는 헤더 뷰 자체가 width가 0이라서 문제가 된다고 한다.tableView.snp.makeConstraints { $0.top.equalTo(topBar..
객체지향 프로그래밍(OOP)의 주요 개념
·
면접 질문 정리
1. 객체지향 프로그래밍(OOP)객체지향 프로그래밍(OOP)은 객체 및 이들간의 관계, 상호작용 등을 기반으로 프로그램을 설계하는 방법론 및 프로그래밍 패러다임데이터를 중심으로, 해당 데이터를 처리하는 기능(메서드)를 하나의 단위(클래스)로 묶어 코드의 재사용성, 유지보수성, 확장성을 높이는 데에 목적이 있다. 2. 객체지향 프로그래밍(OOP)의 핵심 개념 4가지1. 추상화 (Abstraction)불필요한 세부사항은 숨기고, 핵심 개념만 모델링하는 것.메서드들이 어떻게 작동하는지 같은 디테일은 생략, 그 본질을 들여다보는 것.ex) 자동차 - start(), drive() 어떻게 drive가 이뤄지는지는 중요하지않음 2. 캡슐화 (Encapsulation)데이터와 데이터를 다루는 메서드를 하나의 클래스 ..
[모업 MOUP] 프로젝트 첫 출시 회고
·
회고
우선, 우여곡절이 많았지만 최종 프로젝트로 개발한 앱 MOUP이 앱스토어에 출시되었다.https://apps.apple.com/kr/app/moup-%EB%AA%A8%EC%9D%B4%EB%A9%B4-%EC%97%85%EC%9D%B4-%EB%90%9C%EB%8B%A4/id6747497191 ‎MOUP - 모이면 업이 된다‎모이면 업이 된다 — MOUP 알바생의 근무 시간, 날짜, 월급을 자동으로 계산하고, 루틴(체크리스트) 기능으로 업무를 더 쉽게 관리할 수 있는 앱입니다. 주요 기능 - 급여 계산 - 일정 관리 - 캘린apps.apple.com 앱 소개 및 나의 역할 위 섹션에서 볼 수 있듯 모업은 모이면 업이 된다 라는 슬로건을 가지는 앱이다. 알바생이 근무 시간, 날짜, 월급을 입력하고 근무를 등록하..
[25.06.24] MOUP 트러블슈팅 - Listener와 Rx의 timeout
·
iOS/Swift
1. 문제 상황홈 내 테이블뷰에 들어갈 데이터를 불러오는 과정에서 combineLatest를 호출한다.extension HomeViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { guard let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: HomeHeaderView.identifier) as? HomeHeaderView else { return UIView() } Observable...
[TIL / 25.05.27] 날씨 앱 main 페이지 구조 트러블슈팅
·
iOS/Swift
1. 문제 상황현재 기획 상 위 아래로 한페이지씩 pageable하게 구현함. mainPageViewController(UIPageViewController) 하위 뷰컨트롤러들에 위 아랫 UIViewController를 연결해둠.근데 첫번째 페이지에서 화면을 아래로 잡아끌면 새로고침이 되어야함. PTR(Pull To Refresh)가 필요한데,, 문제의 현 구조. 대충 구조만 보고 넘겨주세요class MainPageViewController: UIPageViewController { private let disposeBag = DisposeBag() private let viewModel: PageViewModel private let mainViewModel: MainViewModel ..