본문 바로가기

분류 전체보기

[Flutter] StatefulWidget 의 State 플러터에서 위젯은 불변이므로 StatelessWidget 이든 StatefulWidget 이든 화면을 다시 빌드하면 이전 객체를 다시 이용하는 것이 아니라 새로운 객체가 생성된다. StatelessWidget 은 상태를 관리하지 않으므로 보통은 데이터가 많거나 로직이 복잡하지 않는다. 따라서 상위 위젯으로 인해 화면이 다시 빌드될 때 객체가 새로 생성 되더라도 문제가 없다. StatefulWidget 은 보다 많은 데이터에 복잡한 로직을 가진다. 이런 객체를 다시 빌드될 때마다 다시 생성한다면 비효율적이다. 따라서 StatefulWidget은 위젯 트리 구조에 포함해 매번 생성되게 만들고, 실제 데이터와 업무 로직은 State 객체를 따로 두어 화면이 다시 빌드될 때마다 매번 생성되지 않게 한다. Sta..
[Flutter] 위젯 트리 Flutter 에는 화면을 구성하는 3개 트리 구조가 존재 한다. 개발자가 코드를 작성하는 위젯 트리(Widget Tree)와 Flutter 프레임워크가 화면을 만들 때 만드는 엘리먼트 트리(Element Tree), 렌더 트리(Render Tree) 이다. 위젯은 화면에 보일 뷰를 설명할 뿐 실제 화면에 출력할 대상은 아니다. 프레임워크에서 뷰 설명을 보고 위젯 트리를 참조해 실제 화면에 출력할 객체들을 별도의 트리 구조로 만든다. (플러터 인스펙터[Flutter Inspector]를 통해 위젯의 트리 구조를 확인할 수 있다.) Text 위젯을 사용하면 하위에 RichText 위젯이 자동으로 생성된다. 그리고 각 위젯의 상세 설명에서 어떤 위젯은 renderObject 정보를 가지고 있고 어떤 위젯은 ..
[Swift] 백준! 2822번 - 점수 계산 https://www.acmicpc.net/problem/2822 2822번: 점수 계산 8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문 www.acmicpc.net import Foundation var dic:[Int:Int] = [:] for i in 1...8 { let n = Int(readLine()!)! dic[n] = i } var list:[Int] = [] let sorted = dic.keys.sorted(by: >) var sum = 0 for i in 0...4 { sum += sorted[i] list.append(dic[sor..
[Swift] 백준! 2167번 - 2차원 배열의 합 https://www.acmicpc.net/problem/2167 2167번: 2차원 배열의 합 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 www.acmicpc.net import Foundation let l = readLine()!.split(separator: " ").map{ Int(String($0))! } let N = l[0] var b:[[Int]] = [] for _ in 1...N { b.append(readLine()!.split(separator: " ").map{ Int(String($0))! }) } let ..
[Swift] 백준! 17478번 - 재귀함수가 뭔가요? https://www.acmicpc.net/problem/17478 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net import Foundation let n = Int(readLine()!)! print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.") jp(0) func jp(_ i:Int) { var bar = i > 0 ? String(repeating: "____", count: i) : "" if i == n { print(""" \(bar)"재귀함수가 뭔가요?" \(bar)"재귀함..
[Swift] 백준! 1789번 - 수들의 합 https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net import Foundation let S = Int(readLine()!)! var i = 1 var sum = 0 while true { if S == sum { i -= 1 break } else if S < sum { i -= 2 break } sum += i i += 1 } print(i)
[Swift] 백준! 1094번 - 막대기 https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net import Foundation let n = Int(readLine()!)! let str = String(n, radix: 2) let c = str.filter{ $0 == "1" }.count print(c)
[Flutter] 플러터 아키텍처와 특징 플러터 아키텍처 앱 개발은 Dart 언어로 개발된 프레임워크에서 제공하는 다양한 API를 이용한다. 이렇게 개발한 앱을 플러터 엔진이 실행하는데 엔진은 대부분 C++로 작성되어 있다. 엔진이 제공하는 기능 가운데 플랫폼 채널은 각 플랫폼의 네이티브 코드와 연동하는 방법을 제공한다. 플러터는 애플리케이션의 화면을 스키아 그래픽 엔진으로 직접 출력한다. 플러터로 개발한 애플리케이션을 어느 플랫폼에서 실행하든 프레임워크와 엔진 부분은 같으므로 모든 플랫폼에서 동작하는 애플리케이션을 똑같은 코드로 작성할 수 있다. 각 플랫폼마다 어느정도 차이가 각 플랫폼에 맞게 실행되도록 하는 역할이 임베더이다. 임베더는 플랫폼에 종속된 부분이다. 안드로이드 용 임베더는 자바와 C++로, iOS와 macOS 용은 오브젝티브-C..