SlideShare a Scribd company logo
1 of 16
0. Flutter 소개
목차
• 0.1. Fuchsia 프로젝트
• 0.2. Flutter
• 0.3. Null safety
• 목 적 : Flutter가 만들어진 이유와 중요한 개념인 Null safety를 이해할 수 있다.
0.1. Fuchsia 프로젝트
- 구글의 안드로이드, 크롬 OS에 이은 차세대 OS
- Zircon 마이크로 커널을 기반
- 2016년 공식 발표 없이 Github에 코드 게시
0.1.1. Fuchsia란
0.1. Fuchsia 프로젝트
- OS의 핵심 기능(프로세스, 메모리, 파일 시스템, 입출력, 프로세스 간 통신)을 관리하는 곳
0.1.2. Kernel
단일 커널(Monolithic kernel) 마이크로 커널(Micro kernel)
설명 모듈들이 구분 없이 하나로 구성되어 있는 구조
프로세스 관리, 메모리 관리 등과 같이 반드시 커널에
있어야 하는 기능만 모듈로 남아 있는 구조
장점 모듈 간의 통신비용이 줄어 효율적인 운영이 가능
- 커널이 가벼움
- 서버 개발이 용이
- OS의 기능 변경이 쉬움
- 실시간 시스템에 활용하기 좋음
단점
- 버그나 오류 처리의 어려움
- 업데이트 시간이 오래 걸림
- 다양한 환경의 시스템에 적용이 힘듦
- 크고 복잡한 현대의 OS에 적합하지 않음
- 단일 커널보다 속도가 느림
- 프로세스 간 통신 발생을 최소화하여야 함
예시 Android → 안드로이드 파편화 Fuchsia
0.1. Fuchsia 프로젝트
0.1.3. Fuchsia의 등장 이유
- IoT(Internet of Things)를 고려하여 만들어진 OS
- 스마트폰, 컴퓨터 등 모든 OS를 하나로 통합 (범용 오픈 소스 운영 체제)
- 음성 명령에 최적화 (RTOS: Real Time Operating System) → AI 음성
cf. Android: 터치 디스플레이에 최적화
- 안드로이드의 파편화
0.1. Fuchsia 프로젝트
0.1.4. 안드로이드의 파편화
- 파편화(Fragmentation): 기기의 앱 구동 환경이 제각각 분열되어 있는 것
- 하드웨어와 OS 버전의 다양성이 많지 않은 iOS에 비해 파편화 정도가 심함
- 여러가지 문제를 일으킴
e.g., 기기의 다양성으로 인한 UI 해상도 문제
<안드로이드의 파편화>
https://brunch.co.kr/@mobiinside/893
0.2. Flutter
0.2.1. Flutter 소개
- 구글에서 2018년 새롭게 소개된 크로스 플랫폼 모바일 앱 개발 프레임워크
- Fuchsia의 사용자 인터페이스와 애플리케이션을 만들기 위해 사용
- 프로그래밍 언어로는 Dart를 사용
- 인터페이스와 사용자 경험을 하나로 통일 → 자동으로 인터페이스 렌더링
- Flutter 홈페이지: https://flutter.dev/
0.2. Flutter
0.2.2. Flutter의 특징
- 컴포넌트와 유사하게 뷰를 묘사하는 다트 클래스로는 위젯이 있다.
- 다트 언어의 경우 컴퓨터로 앱을 개발 할 때 JIT(Just In Time) 컴파일러를 사용해
실시간으로 코드를 컴파일하고 실행할 수 있다. → hot reload
0.3. Null safety
0.3.1. Null
void whatIsYourFood(Food f){
if(f==null){
print('need a food name');
}else{
String cooker = f.recipe.toString();
print(cooker);
}
}
- 아직 값이 정해지지 않은 것
→ 번거로움 그렇지만 if를 집어넣지 않으면 에러가 뜰 수 있음
→ 음식의 이름이 null로 되면 안되기 때문
0.3. Null safety
0.3.2. null safety
- 모든 변수는 null이 될 수 없으며, non-nullable 변수에는 null값을 할당할 수 없음
- non-nullable 변수를 위한 null check가 필요 없음
- Class 내의 변수는 반드시 선언과 동시에 초기화를 시켜야 함
→ null값이 없으면 어떻게 표현해야 되나?
→ 그리고 변수의 값이 선언하자마자 할당되는 것이 아니라 나중에 할당하는 경우는 어떻게
해야 되나?
0.3. Null safety
0.3.2. null safety의 구체적인 예시
0.3.2.1. null aware operator - ?
class Animal{
String? name;
}
void main(){
Animal animal = Animal();
print(animal.name);
}
- 선언과 동시에 값을 할당하지 않을 때 사용
- 값을 초기화 하지 않아도 에러 없음
- 초기화 하지 않으면 null로 자동 초기화
0.3. Null safety
0.3.2. null safety의 구체적인 예시
0.3.2.2. null assertion operator - !
void main(){
int x = 50;
int? y;
if (x > 0){
y = x;
}
int value = y!;
print(value);
}
- 코드의 흐름상 null이 아님을 확신할 수 있을 때만 사용
- 잘못 사용하면 런타임 에러 발생
0.3. Null safety
0.3.2. null safety의 구체적인 예시
0.3.2.3. late initialized - late
class Animal{
late String name;
}
void main(){
Animal animal = Animal();
animal.name = "rabbit";
print(animal.name);
}
- 선언과 동시에 값을 할당하지 않을 때 사용
- late로 선언된 변수는 이용하기 위해 나중에 초기화를 해야 함
0.3. Null safety
0.3.2. null safety의 구체적인 예시
0.3.2.3. late initialized - late
late를 사용하지 않았을 경우 late를 사용했을 경우
class Person{
int age = calculation();
void printAge(){
print('age'); // 2
}
}
int calculation(){
print('calculate'); // 1
return 30; // 3
}
void main(){
Person p = Person();
p.printAge();
print(p.age);
}
class Person{
// lazy initialization
late int age = calculation();
void printAge(){
print('age'); // 1
}
}
int calculation(){
print('calculate'); // 2
return 30; // 3
}
void main(){
Person p = Person();
p.printAge();
print(p.age);
}
- 상용하지 않을 수도 있는 함수를 미리 사용하지 않게 함
0.3. Null safety
0.3.2. null safety의 구체적인 예시
0.3.2.4. not optional - required
void main(){
print(add(a:8, b:32));
}
int add({required int a, required int b}){
int sum = a + b;
return sum;
}
- 함수에서 named, optional parameter을 설정할 때 non-nullable로 지정하기 위해 사용
- 타입 앞에 붙여서 사용함
추가 null-safety 예시: https://dart.dev/codelabs/null-safety

More Related Content

Similar to 0. flutter 소개

Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Bansook Nam
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
WeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdfWeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdfjaneSim13
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for AndroidSangkyoon Nam
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
[135]모바일 키보드, 스마트보드에 AI 적용하기
[135]모바일 키보드, 스마트보드에 AI 적용하기[135]모바일 키보드, 스마트보드에 AI 적용하기
[135]모바일 키보드, 스마트보드에 AI 적용하기NAVER D2
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellijSewon Ann
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현NAVER Engineering
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?NAVER Engineering
 
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼NAVER D2
 
모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍Suhan Park
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
2014_서버용 자료유출방지 솔루션_시온
2014_서버용 자료유출방지 솔루션_시온2014_서버용 자료유출방지 솔루션_시온
2014_서버용 자료유출방지 솔루션_시온시온시큐리티
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기Tae Young Lee
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍NDOORS
 
Ubuntu에서 Flask개발 맛보기 - 1
Ubuntu에서  Flask개발 맛보기 - 1Ubuntu에서  Flask개발 맛보기 - 1
Ubuntu에서 Flask개발 맛보기 - 1Booseol Shin
 

Similar to 0. flutter 소개 (20)

Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
WeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdfWeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdf
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
[135]모바일 키보드, 스마트보드에 AI 적용하기
[135]모바일 키보드, 스마트보드에 AI 적용하기[135]모바일 키보드, 스마트보드에 AI 적용하기
[135]모바일 키보드, 스마트보드에 AI 적용하기
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
 
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
 
모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
2014_서버용 자료유출방지 솔루션_시온
2014_서버용 자료유출방지 솔루션_시온2014_서버용 자료유출방지 솔루션_시온
2014_서버용 자료유출방지 솔루션_시온
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
Ubuntu에서 Flask개발 맛보기 - 1
Ubuntu에서  Flask개발 맛보기 - 1Ubuntu에서  Flask개발 맛보기 - 1
Ubuntu에서 Flask개발 맛보기 - 1
 

0. flutter 소개

  • 2. 목차 • 0.1. Fuchsia 프로젝트 • 0.2. Flutter • 0.3. Null safety
  • 3. • 목 적 : Flutter가 만들어진 이유와 중요한 개념인 Null safety를 이해할 수 있다.
  • 4. 0.1. Fuchsia 프로젝트 - 구글의 안드로이드, 크롬 OS에 이은 차세대 OS - Zircon 마이크로 커널을 기반 - 2016년 공식 발표 없이 Github에 코드 게시 0.1.1. Fuchsia란
  • 5. 0.1. Fuchsia 프로젝트 - OS의 핵심 기능(프로세스, 메모리, 파일 시스템, 입출력, 프로세스 간 통신)을 관리하는 곳 0.1.2. Kernel 단일 커널(Monolithic kernel) 마이크로 커널(Micro kernel) 설명 모듈들이 구분 없이 하나로 구성되어 있는 구조 프로세스 관리, 메모리 관리 등과 같이 반드시 커널에 있어야 하는 기능만 모듈로 남아 있는 구조 장점 모듈 간의 통신비용이 줄어 효율적인 운영이 가능 - 커널이 가벼움 - 서버 개발이 용이 - OS의 기능 변경이 쉬움 - 실시간 시스템에 활용하기 좋음 단점 - 버그나 오류 처리의 어려움 - 업데이트 시간이 오래 걸림 - 다양한 환경의 시스템에 적용이 힘듦 - 크고 복잡한 현대의 OS에 적합하지 않음 - 단일 커널보다 속도가 느림 - 프로세스 간 통신 발생을 최소화하여야 함 예시 Android → 안드로이드 파편화 Fuchsia
  • 6. 0.1. Fuchsia 프로젝트 0.1.3. Fuchsia의 등장 이유 - IoT(Internet of Things)를 고려하여 만들어진 OS - 스마트폰, 컴퓨터 등 모든 OS를 하나로 통합 (범용 오픈 소스 운영 체제) - 음성 명령에 최적화 (RTOS: Real Time Operating System) → AI 음성 cf. Android: 터치 디스플레이에 최적화 - 안드로이드의 파편화
  • 7. 0.1. Fuchsia 프로젝트 0.1.4. 안드로이드의 파편화 - 파편화(Fragmentation): 기기의 앱 구동 환경이 제각각 분열되어 있는 것 - 하드웨어와 OS 버전의 다양성이 많지 않은 iOS에 비해 파편화 정도가 심함 - 여러가지 문제를 일으킴 e.g., 기기의 다양성으로 인한 UI 해상도 문제 <안드로이드의 파편화> https://brunch.co.kr/@mobiinside/893
  • 8. 0.2. Flutter 0.2.1. Flutter 소개 - 구글에서 2018년 새롭게 소개된 크로스 플랫폼 모바일 앱 개발 프레임워크 - Fuchsia의 사용자 인터페이스와 애플리케이션을 만들기 위해 사용 - 프로그래밍 언어로는 Dart를 사용 - 인터페이스와 사용자 경험을 하나로 통일 → 자동으로 인터페이스 렌더링 - Flutter 홈페이지: https://flutter.dev/
  • 9. 0.2. Flutter 0.2.2. Flutter의 특징 - 컴포넌트와 유사하게 뷰를 묘사하는 다트 클래스로는 위젯이 있다. - 다트 언어의 경우 컴퓨터로 앱을 개발 할 때 JIT(Just In Time) 컴파일러를 사용해 실시간으로 코드를 컴파일하고 실행할 수 있다. → hot reload
  • 10. 0.3. Null safety 0.3.1. Null void whatIsYourFood(Food f){ if(f==null){ print('need a food name'); }else{ String cooker = f.recipe.toString(); print(cooker); } } - 아직 값이 정해지지 않은 것 → 번거로움 그렇지만 if를 집어넣지 않으면 에러가 뜰 수 있음 → 음식의 이름이 null로 되면 안되기 때문
  • 11. 0.3. Null safety 0.3.2. null safety - 모든 변수는 null이 될 수 없으며, non-nullable 변수에는 null값을 할당할 수 없음 - non-nullable 변수를 위한 null check가 필요 없음 - Class 내의 변수는 반드시 선언과 동시에 초기화를 시켜야 함 → null값이 없으면 어떻게 표현해야 되나? → 그리고 변수의 값이 선언하자마자 할당되는 것이 아니라 나중에 할당하는 경우는 어떻게 해야 되나?
  • 12. 0.3. Null safety 0.3.2. null safety의 구체적인 예시 0.3.2.1. null aware operator - ? class Animal{ String? name; } void main(){ Animal animal = Animal(); print(animal.name); } - 선언과 동시에 값을 할당하지 않을 때 사용 - 값을 초기화 하지 않아도 에러 없음 - 초기화 하지 않으면 null로 자동 초기화
  • 13. 0.3. Null safety 0.3.2. null safety의 구체적인 예시 0.3.2.2. null assertion operator - ! void main(){ int x = 50; int? y; if (x > 0){ y = x; } int value = y!; print(value); } - 코드의 흐름상 null이 아님을 확신할 수 있을 때만 사용 - 잘못 사용하면 런타임 에러 발생
  • 14. 0.3. Null safety 0.3.2. null safety의 구체적인 예시 0.3.2.3. late initialized - late class Animal{ late String name; } void main(){ Animal animal = Animal(); animal.name = "rabbit"; print(animal.name); } - 선언과 동시에 값을 할당하지 않을 때 사용 - late로 선언된 변수는 이용하기 위해 나중에 초기화를 해야 함
  • 15. 0.3. Null safety 0.3.2. null safety의 구체적인 예시 0.3.2.3. late initialized - late late를 사용하지 않았을 경우 late를 사용했을 경우 class Person{ int age = calculation(); void printAge(){ print('age'); // 2 } } int calculation(){ print('calculate'); // 1 return 30; // 3 } void main(){ Person p = Person(); p.printAge(); print(p.age); } class Person{ // lazy initialization late int age = calculation(); void printAge(){ print('age'); // 1 } } int calculation(){ print('calculate'); // 2 return 30; // 3 } void main(){ Person p = Person(); p.printAge(); print(p.age); } - 상용하지 않을 수도 있는 함수를 미리 사용하지 않게 함
  • 16. 0.3. Null safety 0.3.2. null safety의 구체적인 예시 0.3.2.4. not optional - required void main(){ print(add(a:8, b:32)); } int add({required int a, required int b}){ int sum = a + b; return sum; } - 함수에서 named, optional parameter을 설정할 때 non-nullable로 지정하기 위해 사용 - 타입 앞에 붙여서 사용함 추가 null-safety 예시: https://dart.dev/codelabs/null-safety