아래 글은 무시하고 그냥 리액트의 개발 방식 패러다임 때문이다. 순수함수형 방식이라 OOP 를 기본으로 할 때 병렬 처리에 있어 로직도 복잡해지고 UI 교착 상태의 로직을 지속적으로 isolate 하게 다루기도 힘들고 점점 복잡해지기 때문일거라 생각한다. 쓰레드에도 교착상태에 대한 언급이 있기 때문에 그것과 UI 의 상태, 렌더링의 교착상태가 뭔가 비슷해보여서 아래와 같은 생각을 했을 수는 있지만 또한 그러한 이론적 배경의 늬앙스는 맞지만 정확히는 그냥 각 라이브러리들의 개발 방향에 따라 다른 것이고 쓰레드와는 아무 상관이 없다. 쓰레드가 없기 때문. 쓰레드가 있었다면 교착상태에 대한 컨트롤이 가능하므로 객체지향적으로 해도되지만 웹브라우저에 쓰레드는 없으니.. 리액트 컴포넌트는 쓰레드가 없어서 선점형 ..
우선 dependency injection (Inversion of Control, IoC) 만 언급. spring boot jsp mybatis mariadb basic gradle with intellij ultimate lombok 이곳에서도 언급했듯이 프레임워크라 함은 기본적으로 DI 기능을 제공하는 것을 말한다. 조립하듯이 해당 규격에 맞다면 다른 구현체로 갈아 끼울 수 있도록 하는 것을 말한다. 여기에는 Factory Pattern, Stratege Pattern, Dependency Inversion Principal 의 디자인 패턴이 사용될 수 있다. 전략패턴은 인터페이스들 정의하고 로직을 분리하여 사용하고자 하는 곳에서 가져다 사용하는 것이고 DIP 는 사용하고자 하는 곳에서 인터페이스를..
UI 는 Main Thread 에서 갱신을 관리한다. UI 갱신이 한 업데이트 사이클에 우선적으로 이루어져야 할 경우 GCD 의 DispatchQueue.main.async {} 를 사용할 수 있다. 아래는 viewDidLoad, viewWillAppear 등과 같은 일반적으로 사용하는 UIView 의 메소드들 외에 좀 더 내부적으로 디테일한 방식의 메소드들을 설명해놓았다. 기본적으로는 Main Run Loop (위에 언급한 GCD Main Thread) 에서 UI 의 갱신을 담당한다. 이곳에 무거운 연산로직을 넣을 경우 화면이 멈출 수 있다. DispatchQueue.main.async { 이곳에 무거운 연산로직을 넣지 말라. } 화면 갱신이 먼저 수행되어야 할 것을 넣어주어야 한다. 이벤트 큐가 있어..
이 글에서 언급된 함수형 프로그래밍 방식이 최신의 트렌드인 것으로 생각하였지만 iOS 개발을 하며 잘못됨을 인지. React 와 함수형 프로그래밍 Functional Programming vs OOP 함수형 개발방식은 하나의 옵션일 뿐이다. 위의 글에서 언급된 객체지향개발방식 + 쓰레드 의 문제로 지적한 부분이 객체지향방식으로 개발을 했을 때 추상화를 위해서 메소드를 정의하는데 해당 메소드가 어떤 동작을 하라는 명령형 방식이되고 그럴 경우 해당 명령형 메소드가 동작을 할 때 선점형 방식인 쓰레드에서 동작할 것이고 그럴 경우 어떤 컴포넌트의 state 에 영향을 미칠 때 여러군데에서 부수효과가 발생할 경우 해당 state 에 대해 의도치 않은 오류를 야기할 수 있을 것 같다고 문제 제기를 하였다. 하지만 ..