분류 전체보기
-
Managing model data in your appSwiftUI/SwiftUI 애플 문서 한글화 2023. 6. 5. 13:23
Article Hype boy 아티스트 NewJeans 앨범 NewJeans 1st EP 'New Jeans' 발매일 2022.08.01 이 문서는 https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app 를 한글화한 문서입니다. 앱에서 모델 데이터 관리 앱의 데이터 모델 과 뷰 사이의 연결 Overview 일반적으로 앱에서 데이터는 사용자 인터페이스나 다른 로직과 별개로 데이터 모델을 사용하여 저장하거나 처리합니다. 이렇게 모델을 분리하는 경우 모듈화를 향상시키고, 테스트 가능성을 개선하며, 앱의 작동 방식에 대해 쉽게 이해할 수 있도록 합니다. 기존에는 뷰 컨트롤러를 사용하여 모델과 사용자 인터페이스 간에 데이터..
-
Managing user interface stateSwiftUI/SwiftUI 애플 문서 한글화 2023. 6. 5. 12:18
Article Spicy 아티스트 aespa 앨범 MY WORLD - The 3rd Mini Album 발매일 2023.05.08 해당 문서는 https://developer.apple.com/documentation/swiftui/managing-user-interface-state 를 한글화한 문서입니다. 사용자 인터페이스 상태 관리 앱 내 뷰 계층에 뷰 별로 데이터를 캡슐화하여 뷰를 재 사용할 수 있도록 만들기 Overview 데이터를 뷰들 간 공유 할 수 있는 단일 소스로 이루어진 데이터가 필요한 경우 최소 공통 부모 뷰에 상태(State) 형태로 데이터를 저장합니다. 스위프트는 프로퍼티를 통해 데이터를 읽기 전용으로 제공하거나 바인딩(Binding)을 사용하여 상태에 대한 양방향 연결을 만들 수..
-
swift 에서 C++ 사용하기 - opencv 연동iOS Swift 2020. 9. 9. 23:44
swift에서는 직접적으로 C++ 을 사용할 수 없다. C++을 사용하기 위해서는 Object-C 파일에서 C++ 를 사용하고, Object-C 소스 파일과 헤더파일을 생성한 후 Header 파일을 브릿지해서 swift에서 object-c 함수를 호출하도록 해야한다. 구조는 아래와 같다. 실제 C++ 코드는 OpenCVWapper.mm 에서 사용되고 해당 인터페이스의 정의 부분인 OpenCVWrapper.h 파일을 EdgeDector-Bridging-Header.h를 통해서 브릿지 하면 swfit 소스 파일에서 이를 호출해 사용할 수 있는 구조로 이루어 진다. 여기서는 opencv의 프레임워크를 연동해 이미지의 에지를 그리는 예제를 통해서 실제 어떻게 C++ 라이브러리를 swift를 통해서 사용할 수 있..
-
Playground를 이용한 UI 프로토타입 설계iOS Swift 2020. 9. 9. 18:51
Swift 에서 스토리보드를 이용해 앱을 구현할 경우 SwiftUI의 장점 중 하나인 프리뷰를 이용할 수 없다. 프리뷰를 이용해 UI를 설계할 경우 스토리보드 보다 빠른 속도로 구현할 수 있고 구현을 바로 프리뷰를 통해서 확인할 수 있다. 이런 장점을 스토리보드를 사용하지 않고 Playground에서 Live view를 통해서 비슷하게 개발 시 이용할 수 있다. 특히 스토리보드 없이 코드로 뷰를 설계할 때에는 해당 구현을 바로 실제 설계에 반영할 수 도 있다. 프로토타입 구현을 위해 우선 새로운 플레이그라운들 생성하는 데 Single View를 선택한다. 생성된 파일은 UIViewController를 상속받은 MyViewController 클래스가 뷰에 Hello world!를 표시한다. 우선 loadV..
-
RSA 인증Modern C++ 2020. 9. 6. 20:41
인증은 통신하려는 상대방이 신뢰할 수 있는 지를 확인하는 사용자 인증과 메시지의 내용을 누군가 바꿔치기 했는지를 확인하기 위한 메시지 인증으로 나눌 수 있다. 사용자 인증은 공개키 기반인 RSA를 이용한 디지털 서명 방식을 사용할 수 있다. 원리는 메시지의 해쉬 값에 인증서 발급자가 개인키를 통해 암호화하고 이를 수신하는 쪽은 해쉬 값을 공개키로 암호화를 해제해 해쉬함수를 통해 메시지의 무결성을 검사하는 방식으로 이루어 진다. 암호화된 해쉬 값을 디지털 서명 값이라고 하는 데 이 값은 오직 인증서 발급자의 개인키로만 암호화되고 이를 공개키를 통해서 확인 할 수 있기 때문에 이를 통해 인증서를 발행한 쪽에서 이 메시지를 전송했음을 신뢰할 수 있다. 물론 중간에 침입자가 자신이 만든 인증서를 상대방의 인증서..
-
구글 테스트 툴을 이용한 UnitTest용 CMakefileModern C++ 2020. 9. 6. 15:05
FetchContent는 Modern CMake에 추가된 기능으로 ExternalProject 를 통해서 이루어지던 방법들을 통해 외부 프로젝트를 설정 시간에 이동 시킬 수 있다. FetchContent를 사용하기 위해서는 include를 통해서 해당 모듈을 추가시키고 FetchContent_Declare를 통해 외부 프로젝트의 저장소를 정의 한다. FetchContent로 설정된 외부 프로젝트의 설정은 FetchContent_Populate()를 통해서 이루어 지고 해당 프로젝트를 add_subdirectory를 통해서 소스 디렉토리와 바이너리 디렉토리를 현재 프로젝트에 추가한다. #CMake 에서 FetchContent 모듈을 사용을 위해 include include(FetchContent) #외부 ..
-
packaged_task를 이용한 스레드 풀 구현 2Modern C++/Task 기반 비동기 프로그래밍 2020. 8. 28. 22:58
이전 장에 std::async 와 동일한 작업을 수행하는 함수를 구현해 보았다. 이제는 스레드에서 호출되는 람다를 queue에 저장하는 코드를 구현해 보자 2. queue 에 task 푸시 #include #include #include #include //람다 저장용 task_queue std::queue task_queue; #include template std::future async(Func&& func, Args... args) { using Result = std::result_of_t; //task 객체가 현재 범위를 벋어나면 사용 할 수 없으므로 동적으로 할당 auto task = new std::packaged_task( std::bind(std::forward(func), std::f..
-
packaged_task를 이용한 스레드 풀 구현 1Modern C++/Task 기반 비동기 프로그래밍 2020. 8. 28. 05:54
이전 장에서 std::async 함수를 통해서 비동기 태스크를 생성하는 방법과 내부에서 std::promise 와 std::future 객체를 통해서 스레드에서 어떻게 future 객체에 결과를 전달했는 지를 살펴 보았다. C++ 은 std::async 이외에도 packaged_task를 지원해 해당 태스크를 다른 스레드에 전달해 이를 수행할 수 있다. #include #include #include int add(int a, int b) { std::cout