동기적 처리와 비동기적 처리의 선택은 주로 코드 실행의 흐름과 작업의 성격에 따라 결정됩니다. 여기에서는 동기적 처리와 비동기적 처리의 차이와 각각의 상황에서 어떤 접근 방식이 적합한지에 대해 설명드리겠습니다.동기적 처리 (Synchronous)동기적 처리는 코드의 실행이 순차적으로 진행되는 방식입니다. 한 작업이 완료되기 전까지 다음 작업이 실행되지 않습니다. 동기적 처리를 사용할 때는 다음과 같은 특성이 있습니다:단순한 코드 흐름: 코드가 순차적으로 실행되기 때문에 작업의 흐름을 이해하기 쉽습니다.결과를 기다림: 한 작업의 결과가 필요한 경우, 그 결과가 준비될 때까지 대기하고 이후 작업을 진행합니다.블로킹 가능성: 주로 동기적 작업은 결과를 기다리는 동안 스레드가 블로킹될 수 있습니다. 이는 다른 ..
// WorkManager Chaining // A -> 순서 상관 없이 실행되도 괜찮음 // B -> 순서 상관 없이 실행되도 괜찮음 // C -> 무조건 A / B 모두 실행 된 뒤에 실행되어야 한다 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val workManagerA = OneTimeWorkRequestBuilder().build() val workManagerB = OneTimeWorkRequestBuilder().build() val ..
sample code // MainActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) SimpleThread().start() //WorkManagerA // val workManagerA = OneTimeWorkRequestBuilder().build() //객체 생성 // WorkManager.getInstance(this).enqueue(workManagerA) val myData : Data = workDataOf( "a" to 10..
Repository Pattern : Data의 출처에 관계 없이 동일한 인터페이스로 데이터를 접근할 수 있도록 하는 패턴이다. DataSource를 캡슐화 시킨다. - Data Layer에 대한 의존성을 줄일 수 있다. 즉, Data Layer와 Presentation Layer 간의 Coupling이 줄어든다. - Presentation Layer에서 Data Layer에 직접 접근하지 않으므로, 새로운 Data의 추가가 쉽다. - Presentation Layer에서는 Repository에 데이터 요청만 하면 되므로, 일관된 인터페이스로 데이터를 요청할 수 있다. - Unit Test를 통한 검증하기가 쉬워진다. 별도의 Repository 클래스를 사용한다. UseCase : 서비스를 사용하고 있는..
- Coroutine - ViewModelScope
간단하게 instanceof는 특정 Object가 어떤 클래스/인터페이스를 상속/구현했는지를 체크하며 Class.isAssignableFrom()은 특정 Class가 어떤 클래스/인터페이스를 상속/구현했는지 체크합니다. // instanceof MacPro obj = new MacPro(); if (obj instanceof Computer) { ... } // Class.isAssignableFrom() if (Computer.class.isAssignableFrom(MacPro.class)) { ... }
call vs Response 차이 1. Call - Call 서버에 요청을 보낼 때, 각각의 Call은 자체적으로 HTTP 요청과 응답 쌍을 생성한다. execute() : 동기적 실행하기 때문에 UI를 차단한다. enqueue() : 비동기적으로 요청을 보내고 응답을 반환한다. 서버와 통신 중에 유저와 화면간의 상호작용이 가능하기 때문에 권장. 2. Response - 요청 이후의 응답을 받을 수 있다. Response는 성공일 수도, 실패일 수도 있기 때문에 각 케이스에 대하여 핸들링 필요. 3. Call vs Response - Call은 서버에 대한 요청과 응답 결과에 대한 반환을 한 번에 수행하고, Response는 요청 이후 응답 결과에 대한 반환만 수행한다. https://velog.io/..
Kotlin - coroutine : 콜백 대신 오래 실행되는 작업을 처리하는 방법 콜백기반 -> 순차코드 코루틴 속성 : 비동기(=nonblocking) 일시 중단 함수를 사용하며 비동기 코드를 순차적으로 만든다. 중단과 suspend의 차이점 : 쓰레드가 중단되면 다른 작업이 발생하지 않는다. 스레드가 일시 중단되면 결과를 사용할 수 있을 떄까지 다른작업이 수행됩니다. 코루틴의 필요한 3가지 작업 : 취소할 수 있는 모든 것 디스패처 : 다양한 스레드에서 실행되도록 코루틴을 보낸다. 범위 : 코루틴이 실행되는 컨텍스트를 정의. 코루틴의 작업 + 디스패처에 대한 정보를 결합. viewmodelscope : onCleared() 호출할 때 직접 coroutine context를 명시적으로 취소를 하지않아..
withContext, async 차이 suspend 코루틴 함수를 정의하는 키워드. 기존 스레드 작업과 코루틴, 비동기 작업 순차진행 Suspend - resume suspend 함수가 호출될 때, 기존 진행 코드는 멈춘다.(suspend) 그리고 이 함수가 끝날 때 기존 진행 코드가 실행된다.(resume) CoroutineContext가 지정한 쓰레드에서 동작. IO Thread 함수 실행 ? withContext : CoroutineContext를 실행 인자와 suspend 함수를 인자로 받고 그 CoroutineContext에서 그 suspend 함수를 실행시킵니다. 그리고 부모 CoroutineContext는 이 전체 실행이 끝나고 결과를 반환할 때까지 기다립니다.? CoroutineConte..
1. MVVM 특장점 view -> view model -> model : 단방향 의존성을 갖도록 최대한 분리시킨 디자인 패턴 코드의 재사용성 증가 viewmodel이 view에 의존하지 않기 때문에 M:N 관계가 가능하다. view는 필요에 따라 여러 viewmodel 클래스를 가져다 쓸 수 있으며(1:m), 여러 view들이 하나의 viewmodel 클래스를 사용할 수 있다.(n:1) viewmodel의 모듈화가 가능하다. 유지보수가 수월해진다. 유닛테스를 하기 용이해진다.(viewmodel, model) viewModel : UI의 데이와 그에 필요한 변경 로직을 담당한다. view에 대한 data 담당 구성 변경으로 액티비티가 종료됐다가 재생성되어도 살아서 데이터를 보관한다. (view와 안전하게..
- Total
- Today
- Yesterday
- 언리얼엔진
- 언리얼IK
- #ui canvas
- 보행이동기반블렌딩
- ui
- 언리얼루트모션활성화
- rootmotion
- 쿠키
- 캔버스
- 유니티 캔바스
- #unity
- additive
- 초조한유녕
- 세션
- 언리얼엔진Locomotion
- 캔바스
- 애디티브
- 언리얼엔진루트모션
- Inverse Kinematics
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |