본문 바로가기

분류 전체보기

[Flutter] 크로스 플랫폼 앱 개발과 플러터 네이티브 앱 개발 네이티브 라고 하면 플랫폼에 종속된 방법을 의미하는 용어이다. 모바일 운영체제인 안드로이드와 iOS 처럼 각 플랫폼에 종속된 코드를 네이티브 코드라고 한다. 이런 네이티브 코드를 사용하면 각 플랫폼에서 제공하는 기법으로 최적화된 앱을 개발할 수 있지만, 다른 플랫폼에서는 서비스할 수 없다는 단점이 있다. 안드로이드 앱은 안드로이드 런타임(Android runtime, ART)에서 동작하므로 앱을 개발할 때 안드로이드 런타임에서 제공하는 라이브러리를 이용하고 언어는 자바나 코틀린을 사용한다. 반면에 iOS 앱은 코코아 터치 환경에서 실행되므로 코코아 터치에서 제공하는 라이브러리를 이용하며 개발 언어는 오브젝티브-C 또는 스위프트를 사용한다. 크로스 플랫폼 앱 개발 한 가지 기술로 여러 플..
[Swift] 코딩테스트 연습! Lv1. 대충 만든 자판 import Foundation /* 대충 만든 자판 - 휴대폰의 자판은 컴퓨터 키보드 자판과는 다르게 하나의 키에 여러 개의 문자가 할당될 수 있습니다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀝니다. 예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가 할당되어 있다면 1번 키를 한 번 누르면 "A", 두 번 누르면 "B", 세 번 누르면 "C"가 되는 식입니다. 같은 규칙을 적용해 아무렇게나 만든 휴대폰 자판이 있습니다. 이 휴대폰 자판은 키의 개수가 1개부터 최대 100개까지 있을 수 있으며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배열되어 있습니다. 또, 같은 문자가 자판 전체에 여러 번 할당된 경우도 있고, 키 하나..
[Swift] 코딩테스트 연습! Lv1. 카드 뭉치 import Foundation /* 카드 뭉치 - 코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다. 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다. 한 번 사용한 카드는 다시 사용할 수 없습니다. 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다. 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다. 예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다..
[Swift] 코딩테스트 연습! Lv1. 둘만의 암호 import Foundation /* 둘만의 암호 - 두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다. 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다. index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다. skip에 있는 알파벳은 제외하고 건너뜁니다. 예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h..
[Flutter] 플러터 아키텍처! Flutter의 아키텍처는 크게 다음과 같은 레이어로 구성된다. Flutter Engine : Flutter 앱이 구동되는 기본 환경이다. Dart 언어로 작성된 애플리케이션 코드와 Flutter Engine이 구성된 C/C++ 코드가 결합되어 동작한다. (텍스트의 표시 및 형식을 처리) Flutter Framework : Flutter Engine 위에서 동작하는 UI 프레임워크이다. 앱 개발자는 Flutter Framework를 사용하여 UI 요소, 애니메이션, 그래픽 효과 등을 구현한다. (앱 위젯, 제스쳐, 애니메이션, 일러스트 및 자료를 처리하는 플랫폼) Dart Platform (embedder) : Dart 플랫폼은 Flutter Engine과 Flutter Framework의 기반 구조를 ..
[Flutter] 렌더링 원리 Flutter의 렌더링 원리는 다음과 같다. Flutter는 애플리케이션의 UI를 위해 커스텀 위젯 트리를 생성한다. 위젯 트리는 자신의 위치, 크기, 레이아웃, 스타일 등 각 위젯의 속성을 갖는다. Flutter는 각 UI 요소에 대한 그래픽 객체(graphics object)를 생성한다.(렌더링 트리) 이 객체는 각 UI 요소의 레이아웃, 스타일, 그래픽 효과 등을 정의한다. Flutter는 GPU에 최적화된 Skia 그래픽 라이브러리를 사용하여 렌더링 트리를 화면에 그린다. 마지막으로, Flutter는 다시 화면에 그려진 결과를 반영하여 애플리케이션의 UI를 갱신한다.(디스플레이 장치에 표시)
[Flutter] isolate / embedder / taskRunner Flutter에서 isolate는 독립적인 스레드의 단위를 의미한다. (Dart의 스레드와 같은 개념이다. ) isolate는 독립적인 메모리 공간 내에서 독립적으로 실행되는 프로세스이다. 이를 통해 개발자는 복잡한 앱을 구성하는데 필요한 병렬적인 처리를 쉽고 안전하게 수행할 수 있다. (스레드 끼리 메모리를 공유하면 한 스레드가 메모리를 변경할 때 다른 스레드가 실행되지 않도록 Lock을 걸어 공유 리소스를 보호해야 하는데 Lock 은 심각한 교착상태, 기아상태를 유발할 수도 있다. 따라서 독립적인 메모리 공간을 갖는 isolate 는 안정성을 높이는데 도움을 준다.) isolate은 Dart 프로그래밍 언어의 개념으로, 플러터 프레임워크에서도 지원한다. 예를 들어, 앱의 UI를 렌더링하는 동안 동시에..
[Flutter] StatelessWidget / StatefulWidget 생명 주기 Stateless Widget 생명 주기 Stateless Widget은 상태 변화가 없는 위젯으로 생명주기는 간단하게 다음과 같다. 위젯 생성: build() 메서드가 최초 호출될 때 생성된다. build() 메서드 호출: build() 메서드는 Flutter Framework에서 UI를 그리기 위해 호출된다. UI 그리기: build() 메서드에서 정의한 UI가 화면에 그려진다. 위젯 소멸: 위젯이 더 이상 필요하지 않을 때 소멸된다. Stateless Widget은 간단하게 build() 메서드만 호출하면 된다. build() 메서드가 호출될 때마다 새로운 위젯을 생성하지 않고 기존 위젯을 재사용한다. Stateful Widget 생명 주기 Stateless Widget 과 달리 Stateful w..