header-img
Info :
728x90

์„œ๋น„์Šค ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ๋Š๋‚€ ์ 

์„œ๋น„์Šค ๊ฐœ๋ฐœ ์‹œ ํ•„์š”ํ•œ ๊ฒƒ

  • ์„œ๋ฒ„ / Web ์‚ฌ์ดํŠธ / Andriod ์•ฑ / iOS ์•ฑ

๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ๊ฐœ๋ฐœ์˜ ์–ด๋ ค์›€

  • ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ง„์ž… ์žฅ๋ฒฝ์ด ๋†’์Œ
  • ํ•ด๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋ณ€ํ•˜๋Š” ์ •์ฑ…์„ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์–ด๋ ค์›€
  • ์–ด๋ ค ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ๋‚œ๋ฌดํ•˜์—ฌ ๋ญ๊ฐ€ ์ œ๋Œ€๋กœ ๋œ ๊ฑด์ง€ ์•Œ๊ธฐ๊ฐ€ ์–ด๋ ค์›€

๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๊ฒฝ์šฐ ํ•ด์•ผํ•  ์ผ - ๋„ˆ๋ฌด ๋งŽ์Œ...

ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ

  • Native : Maui(5์ข… ์ง€์›), React Native, Flutter(Android, iOS, Web, Windows, MacOS, Linux 6์ข… ์ง€์›), Kotlin Multiplatform Mobile(Andriod, iOS)

Flutter ์žฅ์ 

  • Dart ์–ธ์–ด๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ : ๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ ์ ์Œ (๋ ˆ์ด์•„์›ƒ, ๋กœ์ง ๋ชจ๋‘ Dart๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ)
  • Andriod Studio์—์„œ ๊ฐœ๋ฐœ

Native ๋ณด๋‹ค ์ƒ์‚ฐ์„ฑ์ด ๋น ๋ฆ„


์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค


ํ”Œ๋Ÿฌํ„ฐ

๊ฐ™์€ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜ ์ฐจ์ด

Flutter & Dart

์ง€์›ํ•˜๋Š” IDE

  • Andriod Studio
  • IntelliJ
  • Visual Studio Code

Dart ํŠน์ง•

Hello World

main(){
	print("Hello, World!");
}

๋™์‹œ์„ฑ, ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›

  • async-await
  • future
  • stream

UI๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•˜๋Š” Dart์˜ ๊ธฐ๋Šฅ๋“ค

  • collection if
  • collection for
  • Spread ์—ฐ์‚ฐ์ž(...)

ํ™•์žฅ ํ•จ์ˆ˜ ์ง€์›

  • Kotlin, Swift ๋“ฑ์— ์žˆ๋Š” Extension Function ์ง€์›
  • ๊ธฐ์กด ํด๋ž˜์Šค์— ์—†๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

Null Safety ์ง€์›

  • Null์— ์•ˆ์ „ํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ

Flutter ํŠน์ง•

ํ’๋ถ€ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์›

iOS์™€ Andriod ๊ณ ์œ ์˜ ๋””์ž์ธ์„ ์ง€์›

๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์—ฐ๋™

  • MethodChannel

Test ์ฝ”๋“œ ์ž‘์„ฑ

test('http ํ†ต์‹  ํ…Œ์ŠคํŠธ', () async {
	var url = 'https://api.airvisual.com/v2/nearest_city?'
    
    var response = await http.get(url);
    
    expect(response.statusCode, 200);
    
    var jsonResponse = convert.jsonDecode(response.body);
    var code = jsonResponse['status'];
    
    expect(code, 'success');
    
    AirResult result = AirResult.fromJson(jsonResponse);
    expect(result.data.current.pollution.aqius, 63);
});

์˜์กด์„ฑ ์ฃผ์ž…์šฉ ์œ„์ ฏ

  • InheritedWidget

์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • Provider
  • RiverPod
  • GetX
  • Bloc
  • ...

Flutter ๋ง›๋ณด๊ธฐ

๊ธฐ๋ณธ ๊ฐœ๋…

  • ๋ชจ๋“  ๊ฒƒ์€ Widget ์ด๋‹ค
  • ํ™”๋ฉด ๊ฐฑ์‹ ์ด ํ•„์š”์—†๋‹ค: StatelessWidget
  • ํ™”๋ฉด ๊ฐฑ์‹ ์ด ํ•„์š”ํ•˜๋‹ค: StatefulWidget

Child ์†์„ฑ์„ ๊ฐ€์ง€๋Š” ์œ„์ ฏ

Hot Reload๋กœ ๋น ๋ฅธ ๊ฐœ๋ฐœ

  • ์ˆ˜์ • ํ›„ ์ €์žฅํ•˜๋Š” ์ˆœ๊ฐ„ ๋ฐ”๋กœ ๊ฒฐ๊ณผ ๋ฐ˜์˜

์ž˜๋ชป๋œ UI ์ž‘์„ฑ ์‹œ ๋กœ๊ทธ ๋ฐ”๋กœ ํ™•์ธ

Flutter ์ง„์ž… ์žฅ๋ฒฝ

  • ๋””์ž์ธ๋„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ
  • Dart ์–ธ์–ด๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ
  • ํ•˜๋‹ค๋ณด๋ฉด ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์‹์ด ์–ด๋Š์ •๋„ ํ•„์š”ํ•จ

ํ”Œ๋Ÿฌํ„ฐ ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ

๊ทธ๋ฆฌ๊ณ  ์‹ค์Šต...

์‹ค์Šต ๋ถ€๋ถ„์€ ๋‚˜์ค‘์— ๋…นํ™”๋ณธ์œผ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผํ•˜๋ฉฐ...
์‹ ๊ธฐํ•œ ๊ฒƒ๋“ค ์žˆ์œผ๋ฉด ์ถ”๊ฐ€ ํฌ์ŠคํŒ…์„ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...

๐Ÿต๐Ÿ’

728x90
๋”๋ณด๊ธฐ
Seminar