본문 바로가기

전체 글

(21)
unowned vs weak 뭐가 다른데? 미소유 참조(unowned)와 약한 참조(weak) 저번 포스팅에서 참조에 대해서 잠깐 다뤘던 내용이지만 미소유 참조(unowned)와 약한 참조(weak)는 둘 다 참조 카운트를 증가시키지 않아요. 이 두 가지는 순환 참조 문제를 해결하기 위해 사용되는데요, 사용 방식과 특징에 약간의 차이가 있습니다. 1. 미소유 참조(unowned): 미소유 참조는 참조하는 객체가 항상 메모리에 존재할 것이라는 전제 하에 사용됩니다. 따라서 미소유 참조를 통해 객체에 접근할 때 nil 검사를 하지 않아도 됩니다. 하지만 참조하는 객체가 메모리에서 해제된 후에 미소유 참조를 통해 접근하려고 하면 런타임 오류가 발생합니다. 2. 약한 참조(weak): 약한 참조는 참조하는 객체가 메모리에서 언제든지 해제될 수 있다는 전..
참조, 강한참조 약한참조, 순환참조...? 참조가 뭔가요? 참조는 다른 객체의 주소를 가리키는 것을 말합니다. 어떤 집에 찾아가고 싶은데 그러려면 먼저 그 집이 어디있는지 알아야 하잖아요? 주소를 받은 수 집에 찾아간다면 그 안에 들어간 후 집이 어떻게 생겼는지 볼 수 있고, 의자를 뺀다거나 하는 수정사항을 발생시킬수도 있겠죠! 이와 같이 프로그래밍에서 참조를 통해 다른 객체에 접근을 하고 수정을 할 수 있습니다. 참조 : 다른 객체의 주소를 가리키는 것 class SpongeBob { var name = "스펀지밥" } class Squidward { var name = "징징이" var friend: SpongeBob? // 스펀지밥을 참조하는 변수 } let spongeBob = SpongeBob() let squidward = Squidw..
UINavigationBar 커스텀 * Sopt 32기 앱잼을 하며 노션에 작성한 트러블 슈팅을 옮겨온 글입니다. 네비바 커스텀 장점 뷰 계층구조 자동 관리 앱 내에서 통일된 내비게이션 스타일을 유지하기 용이 화면 회전 및 다양한 디바이스 크기에 쉽게 대응 원래는 **UIView**에 컴포넌트를 올리는 방식으로 네비바 커스텀을 진행했었는데요, 이러한 장점이 있다는 것을 알게 된 후 기존 **UIView**에 컴포넌트를 올리는 방식이 아닌 **UINavigationBar**을 커스텀하는 방식으로 전환하게 되었습니다. 그러나 예상보다 커스텀이 가능한 범위가 제한되어 있었고, 특히 네비바의 높이를 조정하는 과정에서 네비바가 view를 가리는 이슈가 발생했습니다. import UIKit final class PophoryNavigationCont..
의존성, 의존성 역전의 법칙과 의존성 주입 의존성이 뭔데요? 한 객체에서 특정 요소가 변경되면 참조를 하고 있는 객체의 다른 요소에도 영향을 주는 관계를 말해요. - 자동차로 예를 들어보자면 기름이 다 떨어지거나 엔진이 고장난다면 자동차가 동작하지 않겠죠? 이런 상황을 프로그래밍적인 용어로'자동차는 휘발유에 의존하고 있다'라고 표현할 수 있어요! 이처럼 어떤 요소가 다른 요소에 의존하는 것을 의존성이라고 합니다. 의존성 역전의 법칙은 또 뭐죠? 의존성 역전의 법칙(Dependency Inversion Principle, DIP)은 소프트웨어 설계 원칙 중 하나로, 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 되며, 둘 모두 추상화된 인터페이스에 의존해야 한다는 원칙입니다. 말이 좀 어렵죠.. ㅎㅎ 제가 좋아하는 스펀지밥을 데려와보겠습니다..
앱개발 심화 키워드 요약 1-1. 프로퍼티 옵저버 값이 변경될 때 특정 동작을 수행함 프로퍼티 옵저버를 활용하면 프로퍼티의 값이 변경되기 전 특정 코드를 실행(willSet)하거나 값이 변경된 후(didSet)에 다른 코드를 실행할 수 있습니다! 이를 활용해서 속성의 변경 사항을 감지하고 추가 동작을 수행할 수 있어요. class Order { var quantity: Int = 0 { didSet { updateStatistics() } } func updateStatistics() { // 주문 수량에 따른 통계 업데이트 로직 print("주문 수량이 변경되었습니다. 통계를 업데이트합니다.") } } let spongebob = Order() spongebob.quantity = 10 // 주문 수량이 변경됨 1-2. 타입캐..