분류 전체보기
-
SwiftUI View 안에서 직접 발행, 구독 관리 방법Apple🍎/Combine 2025. 3. 13. 20:47
배경 최근에 SwiftData를 사용해서 프로젝트를 진행하였는데요. 데이터의 읽을 때는 @Query를 사용하면 SwiftUI 뷰 라이프 사이클에 맞춰 알아서 조회를 해주고 변경사항이 생기면 알아서 변경사항을 감지했다가 이를 db에 반영해 주니뷰에 보여줄 정보를 관리하기 위한 별도의 viewModel 계층이 굳이 필요 없겠다는 생각이 들었습니다. 너무 과도한 계층 분리의 쓸모에 대해 생각하던 와중이었기 때문에 "아예 ViewModel을 두지 않고 View에서 모든 걸 처리하자"를 콘셉트로 프로젝트를 진행하였습니다. 문제 상황특정 프로퍼티를 변경을 감지하는 로직이 필요했기 때문에 Combine을 이용해 발행자와 onChange를 조합하여 사용하려고 했습니다. 따라서 발행자와 구독 관리가 필요해졌는데 평소 같..
-
이항 계수 : 뽑을까 말까? / 다항 계수 : 어디에 줄까?Math♾️/Probability Statistics🎲 2025. 3. 12. 23:15
확률은 가능성에 0~1 사이의 숫자를 부여하는 방법으로가장 기본적인 접근은 '우리가 관심 있는 사건이 일어날 수 있는 경우의 수'를 '가능한 전체 경우의 수'로 나누는 것입니다. 예를 들어, 포커 게임에서 스트레이트 플러시나 풀 하우스와 같은 특정 패가 나올 확률을 계산하려면, 전체 가능한 패 중에서 그런 특정 패가 몇 개나 존재하는지 계산해야 합니다. 하지만 52개나 되는 카드들을 가지고 5개를 뽑았을 때 가능한 조합이 몇 개인지 일일이 세는 것은 쉽지 않습니다. 이렇게 상황이 조금만 복잡해져도 경우의 수를 세는 것이 복잡해지기 때문에 이를 좀 더 쉽게 셀 수 있는 도구가 필요합니다. 이항 계수 : 순서 구분 없는 샘플링이항계수는 n개의 객체에서 r개를 선택하는 방법의 수를 계산할 때 사용합니다. 특..
-
inout 파라미터 작동 방식 파해치기Apple🍎/Swift 2025. 3. 11. 22:21
Swift에서 함수의 파라미터로 전달 된 값은 타입에 따라 다르게 동작하며,Inout 키워드를 통해 이 동작 방식을 변경할 수 있는데요. 오늘은 이에 대해 자세히 알아보도록 하겠습니다. 기본 파라미터 동작 방식 Swift에는 두 가지 주요 데이터 타입이 있죠? 값 타입 (Value Type) : Int, String 같은 기본 타입 또는 struct, enum 참조 타입(Reference Type) : class 값 타입은 스택에 저장되며 값을 넘겨 줄 때 원래 값을 복사를 하여 복사본을 넘겨주기 때문에 새로 넘겨 받은 곳에서 값을 변경해도 원래 값에는 영향이 가지 않습니다. 그에 비해 참조 타입은 힙에 저장되며 값을 넘겨 줄때 참조값(메모리 주소)를 넘겨주기 때문에 새로 넘겨 받은 곳에서도 같은 ..
-
SwiftData 사용할 때 변경 시점도 업데이트 하는 방법Apple🍎/SwiftData 2025. 3. 11. 22:21
상황설명 - swiftData를 사용하여 데이터 모델링@Modelpublic final class SceneCard { // MARK: - Properties @Attribute(.unique) public var id: String public var title: String public var order: Int public var summary: String public var subtitle: String public var done: Bool public var createdAt: Date public var modifiedAt: Date ...-@Bindable을 사용해 모델의 프로퍼티를 직접 TextEditor에 바인딩함 struct Scene..
-
생일 문제 : 더 계산이 쉬운 방법을 찾기Math♾️/Probability Statistics🎲 2025. 3. 10. 22:30
생일 문제방에 n명의 사람이 있을 때, 적어도 두 사람(한 쌍)이 같은 생일을 가질 확률이 50% 이상이 되려면 n은 얼마나 커야 할까요?많은 사람들이 직관적으로 "365의 절반인 약 182명 정도는 있어야하지 않을까 생각합니다." 그러나 실제 답은 이것보다 훨씬 작습니다. 왜 그럴까요? 우선 n명의 사람들 사이에 가능한 모든 비교 횟수를 계산해 봅시다. 각 사람이 다른 모든 사람과 생일을 비교한다면:첫 번째 사람은 n-1명과 비교 ( 자신을 제외한 나머지 사람)두 번째 사람은 n-2명과 비교 (첫 번째 사람과 자신을 제외한 나머지 사람)세 번째 사람은 n-3명과 비교 (첫 번째, 두번째 사람과 자신을 제외한 나머지 사람) ...이 합계는 가우스의 공식을 사용하면 n(n-1)/2가 됩니다. 예를 들어,..
-
가능성에 어떻게 숫자를 부여할까?Math♾️/Probability Statistics🎲 2025. 3. 9. 14:05
우리는 일상에서 "비가 올 가능성이 80%다", "이 치료법이 효과가 있을 가능성은 60%다"처럼 확률적 표현을 자주 사용합니다. 이런 표현들은 불확실한 사건에 정확한 숫자값을 부여함으로써 의사결정에 도움을 줍니다. 그런데 이러한 숫자는 어떤 원칙에 따라 부여되는 걸까요?표본 공간: 가능한 모든 결과들의 집합확률을 논하기 위해 가장 먼저 필요한 개념은 표본 공간(Sample Space)입니다.이는 쉽게 말해 '일어날 수 있는 모든 결과들의 모음'입니다. 예를 들어, 동전을 한 번 던지는 실험에서 표본 공간은 {앞면, 뒷면}이고, 주사위를 한 번 던지는 실험에서 표본 공간은 {1, 2, 3, 4, 5, 6}입니다. 동전을 세 번 던지는 실험에서는 표본 공간이 {HHH, HHT, HTH, HTT, THH, ..
-
순열, 조합 : 똑똑하게 세는 방법Math♾️/Probability Statistics🎲 2025. 3. 8. 23:09
확률 계산의 본질: 경우의 수를 세다. 기본적으로 확률은 '특정 사건이 발생할 수 있는 방법의 수'를 '가능한 모든 경우의 수'로 나누어 계산합니다.그러나 문제가 복잡해질수록(예: 10번의 동전 던지기, 포커 패 등) 모든 경우를 일일이 나열하기 어려워집니다.이때 조합론은 가능한 모든 경우의 수를 효율적으로 세는 방법을 제공합니다.몇 가지 기본적인 계산 공식만 알아도 포커, 주사위 게임, 백개먼 등 다양한 게임의 확률을 쉽게 계산할 수 있습니다.동전 던지기첫 번째 예제로, 동전을 10번 던질 때 가능한 모든 고유한 순서의 수를 계산해 봅시다.여기서 중요한 개념은 순서가 중요하다(order matters)는 것입니다.즉, '앞면-뒷면'과 '뒷면-앞면'은 서로 다른 결과로 간주됩니다.각 동전 던지기에는 2..
-
List와 ScrollView+LazyVStack 비교하기Apple🍎/SwiftUI 2025. 3. 7. 00:04
List + TextEditor 리스트 내부 셀 안의 텍스트에디터에 내용이 많아지면 내부 스크롤이 활성화됨 ( 텍스트 에디터 크기도 살짝 늘어남 )ScrollView + LazyVStack + TextEditorLazyVstack 셀 안의 텍스트 에디터에 내용 있는 많아지면 그에 맞춰 텍스터 에디터 크기가 증가함 SwiftUI에서 List와 ScrollView+LazyVStack 조합이 TextEditor와 함께 작동할 때 다른 동작을 보이는 이유가 뭘까요?List와 ScrollView+LazyVStack의 기본적인 차이점List의 동작 방식List는 UITableView를 기반으로 한 컴포넌트로, 고정된 셀 높이나 자동 계산된 높이를 사용합니다. List는 내부적으로 콘텐츠의 크기를 미리 결정하고,..