Error: The plugin "cloud_firestore" requires a higher minimum iOS deployment version than your application is targeting. To build, increase your application's deployment target to at least 13.0 as described at https://docs.flutter.dev/deployment/ios 에러내용은 cloud firestore 패키지는 최소 iOS 13을 지원하는데 지금 너의 프로젝트는 iOS12로 타겟팅되어있어~ 라는 내용이다. VSCode에서 새로운 프로젝트를 만들면 디폴트값으로 iOS12로 타겟팅되기 때문에 13이상으로 올려주어야한다. 먼저..
전체 글
답변 요약// Key Pathlet person = Person(name: "Alice", age: 25)let nameKeyPath = \Person.name // Person 객체의 `name` 프로퍼티에 대한 Key Pathlet ageKeyPath = \Person.age // Person 객체의 `age` 프로퍼티에 대한 Key Path 상수나 변수에 함수를 참조로 할당할 수 있는 것처럼 프로퍼티의 위치도 참조로 할당할 수 있습니다. 프로퍼티에 직접 접근해서 값을 꺼내오는게 아니라 키패스를 사용하면 간접적으로 접근하여 특정 타입의 어떤 프로퍼티 값을 가리켜야 할지 미리 지정해두고 사용할 수 있습니다. 이를 다르게 말한다면 키패스는 프로퍼티에 대한 접근을 추상화한 타입입니다.부가 설명/..
답변 요약Key-Value Observing 이란 특정 키값의 변화를 감지하는 기능으로 객체 프로퍼티 변경사항을 다른 객체에게 알릴 수 있는 코코아 프레임워크에 내장되어 있는 패턴입니다.부가 설명KVC(Key-Value Coding)는 NSKeyValueCoding 프로토콜에 의해 동작한다. NSKeyValueCoding 의 특징은 컴파일 타임에 접근하는 것이 아닌 문자열을 사용하여 런타임에 객체의 프로퍼티에 접근하거나 값을 설정한다는 것이다. Key-value coding은 KVO(Key Value Observing), 코코아 바인딩, 코어 데이터 등 코코아 프레임워크에 자주 적용되는 원리이다. 또한 NSObject를 채택하고 있는 친구는 모두 NSKeyValueCoding 프로토콜을 채택하고 있다고..
Statless 위젯의 경우Stateless 위젯의 경우 위와 같이 같은 타입이라도 다른 데이터로 인식하지만 이러한 위젯트리를 정말로 그리는 Element Tree 에서는 같은 타입은 모두 똑같이 인식해버린다. 만약 위젯트리에서 Red와 Blue의 context를 바꾸더라도 둘은 같은 타입이기 때문에 Element Tree는 이를 전혀 알 수 없다.Stateful 위젯의 경우Stateful 위젯의 경우 State는 위젯이 가지고 있는 것이 아닌 Element Tree가 소유하고 있다. 만약 위젯트리에서 Red, Blue 가 바뀐다면 Element Tree 에서는 Red WidgetTree에 Blue State를 넣게 된다. 이렇게 같은 타입이여도 Element Tree에서 다른 위젯으로 인식할 수 있..
Address메모리에는 주소가 있다. 이러한 주소에는 두가지 종류, 가상메모리주소와 물리적 메모리 주소가 있다. 프로그램이 실행되면 프로세스가 되며 독자적인 주소공간이 형성된다. 이때 효율적인 메모리 사용을 위해 CPU는 가상메모리(logical address, virtual address)를 참조하고 가상메모리는 실제 메모리(physical memory)를 참조하게 된다. 이러한 엮여있음을 주소바인딩이라고 한다. 가상 메모리에서 물리적 메모리로 주소변환이 되는 순간은 크게 3가지 시점으로 나누어 볼 수 있다. Compile time binding 컴파일 시점에 물리적 메모리 주소가 결정된다. 가상메모리 주소가 사실상 물리적 메모리 주소. 컴파일 바인딩에 의해 만들어진 코드를 절대코드(absolute..
Deadlock데드락은 4가지 조건을 만족시킬 때 발생한다. Mutual Exclusion(상호배제)한 프로세스 자원을 얻으면 해당 자원을 독점적으로 사용한다. No preemption (비선점)자원을 가지면 빼앗기지 않음 Hold and wait다른 자원을 점유하기 위해 기다릴 때는 내가 들고 있는 자원을 점유한 상태에서 기다린다. Circular wait자원을 기다리는 프로세스끼리 참조순환이 되어야만함사각형R은 자원, 동그라미P는 프로세스이다. 작은 점은 자원의 인스턴스 갯수를 의미한다. 화살표를 따라갔을 때 만약 사이클이 형성이 안된다면 데드락이 아니다. 만약 사이클이 있고, 자원당 인스턴스가 하나만 있으면 데드락, 자원당 인스턴스가 여러개라면 데드락 가능성이 있는 상태이다.(만약 자원당 인스턴스..
네이버 블로그/velog 에서 작성했던 내용들을 티스토리로 통합중입니다 :) 동시성 프로그래밍으로 프로그램 구성하기메인스레드의 경우 UI관련 사용자와 직접 상호작용하는 작업을 처리하는데, 데이터변환, 이미지 처리를 메인스레드에서 전부 처리할 경우 약간의 버벅임 문제가 발생한다.메인스레드의 과중화된 업무를 방지하기위해 나온것이 바로 Concurrency(동시성)이다. 동시성 프로그래밍은 여러개의 스레드를 사용함으로써 동시작업을 가능케한다. 하지만 단점도 있는데 바로 thread safety를 유지하기 어렵다는 것이다. 다른 스레드가 작업하는걸 순차적으로 가져와서 지키기가 어려워진다.동시성 환경에서 thread safety를 유지하기 위한 노력으로 애플은 GCD 라이브러리를 만들어서 제공하고 있다.Dispa..
답변요약routes와 onGenerateRoute는 모두 Flutter에서 화면 전환을 관리하기 위한 방법이지만 사용 방법과 유연성에서 차이가 있습니다. routes는 간단한 네비게이션을 설정할 때 사용됩니다. 이는 애플리케이션 내에서 사용할 모든 라우트(경로)를 미리 정의하는 방법입니다. routes 매핑은 애플리케이션이 시작될 때 설정되며, 각 경로에 대해 어떤 위젯을 표시할지 코드를 작성합니다 onGenerateRoute는 더 복잡한 네비게이션 로직을 처리할 때 사용됩니다. 이 메서드는 라우트가 요청될 때 호출되며, 요청된 라우트에 따라 동적으로 위젯을 생성하고 반환할 수 있습니다. 주로 라우트에 데이터 주입을 하거나, 특정 조건에 따라 다른 페이지를 표시해야 할 때 유용합니다 정리하자면 rout..
병행제어MultiLevel Queue란 Ready queue를 여러개로 분할하는 것을 말한다. Multi level Queue에서는 큐의 종류를 두가지로 나눈다. -> foreground / background. 큐를 나누는 기준은 사용자와 ineteract를 하는경우에 foreground 큐에 그렇지 않은 경우에 background 큐에 둔다. forground는 사용자와 interactive하기 때문에 더 많은 CPU time 을 준다. 보통 Time slice로 RR알고리즘을 사용하여 80%는 foreground, 20%는 FCFS 알고리즘으로 background에 할당하여 starvation을 방지한다. Multi level feedback queue 는 기존의 multilevel queue보다 ..
데이터 바인딩이란?클린아키텍쳐에서 마틴 파울러가 말하는 GUI프로그래밍The View is the humble object that is hard to test. The code in this obejct is kep as simple as possible.The presenter is the testable object. Its job is to accept data from the application and format it for presentation so thaat the View can simply move it to the screen.험블오브젝트 패턴에 의해 GUI는 두 개로 나뉜다 바로 뷰(구체적 구현사항)와 프레젠터(테스터블한 행동들)이다.Anything and everything t..