[Swift] COW (Copy-On-Write) 이해하기
·
📌 Swift
COW(Copy-On-Write) 개념 정리COW(Copy-On-Write)는 이름 그대로 “쓰기 시 복사”를 의미하는 메모리 관리 기술입니다. 값 타입(Struct, Array, String 등)이지만 내부적으로는 값을 복사할 때, 실제 데이터를 곧바로 복사하지 않고 원본과 사본이 동일한 메모리 공간을 공유하게 됩니다. 그러다 둘 중 하나의 값을 수정(Write)하는 시점이 오면, 그 시점에 데이터를 복제하여 별도의 메모리 공간을 할당하게 됩니다. COW의 동작 흐름수정 전var a = [1, 2, 3]var b = a // a와 b는 같은 버퍼(buffer)를 가리킵니다.이 시점에서 a와 b는 같은 힙 메모리 공간(ex: 0x600000849d14)을 가리킵니다. 값 타입(Array)이지만, Swi..
[iOS] SnapKit의 제약 설정 메서드 + 예시 코드
·
📱 iOS
이 글은 장바구니 셀 높이 동적 조절 문제에서 이어지는 내용입니다. 최근 팀 프로젝트에서 장바구니 셀 높이 동적 조절 문제를 해결하면서 SnapKit의 remakeConstraints를 처음 사용했었습니다. 원래 makeConstraints밖에 몰랐기에 제약 메서드를 더 공부해서 정리해 봤습니다. SnapKit 제약 설정 메서드 정리우선 제가 찾아본 결과 메서드는 아래와 같이 총 4가지가 있었습니다. makeConstraints: 제약을 최초 설정할 때 사용.remakeConstraints: 기존 제약을 전부 제거하고 새로 설정updateConstraints: 기존 제약을 그대로 유지하면서 일부 값만 변경prepareConstraints: 제약을 미리 정의해 두고 필요할 때 activate()로 사용이제..
장바구니 셀 동적 높이 조절 + 스크롤 문제 해결
·
🖋️ TIL Journal
🍏 문제 상황팀 프로젝트에서 장바구니 부분을 맡아서 TableView의 단독 스크롤 구조로 시작하여, 상품 목록과 공간은 나눠진 상태였다. 그런데 팀원 모두 첫 팀 프로젝트라 그런지 생각 못했던 부분이 생겼다. 바로 작은 화면(iPhone SE 등)에서는 목록 영역이 커서 장바구니가 가려지고 스크롤 하기 힘든 상황이었다. 결국 회의를 통해서 두 영역을 ScrollView로 감싸고, productPageView와 cartView를 StackView에 함께 넣어서 스크롤 되는 구조로 변경했지만, 셀 영역과 스크롤이 동적으로 늘어나야 하는데 해결하지 못하는 문제에서 막혔다. 🍏 해결 방법 고민처음에는 CartView의 TableView만 스크롤 되도록 했기에 장바구니가 화면 아래에 가려지는 문제가 있었..
[Swift] 프로그래머스 - 콜라스 추측 문제 풀이
·
🖋️ TIL Journal
문제 요약주어진 num이 1이 될 때까지, 짝수면 2로 나누고 홀수면 3을 곱하고 1을 더하는 작업을 반복한다.단, 반복 횟수가 500번을 넘기면 -1을 반환한다. 처음 풀이 (while문 기반)func solution(_ num:Int) -> Int { var count = 0 var num = num while num != 1 { if count >= 500 { return -1 } if num % 2 == 0 { num /= 2 } else { num = num * 3 + 1 } count += 1 } return count}조건에 따라 짝수면 2로 나누고, 홀수면 3을 곱하고 1을 더하며, count라는 변수를 ..
[Swift] 오토 클로저(@autoclosure)란?
·
📌 Swift
오토 클로저(@autoclosure)란?Swift에서 오토클로저(@autoclosure)는 표현식을 자동으로 클로저로 감싸주는 문법이다. 보통 클로저를 인자로 받는 함수에서, 표현식을 더 간결하게 넘기기 위해 사용한다. 괄호 { } 없이도 표현식을 전달할 수 있다. 예를 들자면,func logIfTrue(_ predicate: () -> Bool) { if predicate() { print("True 입니다") }}logIfTrue { return 2 > 1} 이렇게 쓰던 코드를 @autoclosure를 사용하면,func logIfTrue(_ predicate: @autoclosure () -> Bool) { if predicate() { print("Tr..
[iOS] UILabel 주요 속성 정리
·
📱 iOS
1. font텍스트의 글꼴(Font)과 크기(size)를 지정한다. .boldSystemFont(ofSize:), .systemFont(ofSize:), 커스텀 폰트도 사용이 가능하다.label.font = UIFont.boldSystemFont(ofSize: 16) // 볼드체label.font = UIFont.systemFont(ofSize: 16) // 시스템 폰트label.font = UIFont(name: "BMDOHYEON", size: 16) // 커스텀 폰트 2. text레이블에 표시할 문자열(String)을 설정한다.label.text = "Hello, Swift!" 숫자 같이 쓰려면 "\(변수)원" 처럼 문자열 보간 사용let price = 3000label.text = "\(price..