컴퓨터로 만들어지는 서비스
메인프레임
PC
워크스테이션
-> C / C++
웹 서비스
프론트 엔드 -> 사용자 측면(표준, HTML)
백 엔드 -> 서버 측면(Servlet/JSP/Spring, PHP, ASP.NET, Django, Flask, Node.js 등등...)
모바일
- SKT : SKVM(Java, SK)
- KT : Brew(C 기반, 퀄컴)
- LGT : J2ME(Java, 썬마이크로시스템즈)
- 휴대폰 액정 사이즈의 종류가 수십가지
-> 통합플랫폼
- WIPI (Java or C, 대한민국 정부)
- 국회 -> WIPI 의무 탑재 법안
- 휴대폰 액정 사이즈 -> 4가지로 통일
2007년
iPod, iPod Touch
이미 iPod 앱스토어와 아이튠즈로 컨텐츠가 많이 활성화 된 상태
이후 출시된 안드로이드는 컨텐츠가 부족했음
2008년
WIPI 법안 폐기 후 KT에서 아이폰을 들여옴
아이폰 : objective-c -> swift
3.5인치 -> 4인치, 6.3인치 등등
안드로이드 : java -> kotlin
다양한 사이즈의 액정
통합 플랫폼
Phongap : 어도비 -> 아파치 재단
cordova : 아파치에서 cordova 표준(웹기반 or 네이티브 기반)
Flutter : cordova 표준 기반으로 구글에서 만든 크로스플랫폼
-> cordova 네이티브 표준 + MVVM 개발 패턴 + Material UI
-> android, iOS, Windows, Mac, Linux, Web, Chrome OS 까지 서비스할 수 있는 어플을 만들 수 있다.
-> 모바일인 경우 android를 기반으로 개발하고 타 플랫폼으로 포팅하는 방식으로 운영된다
-> Flutter 의 다양한 제한점 때문에 Compose 등장
->
Dart
구글이 디자인한 멀티플랫폼 언어
Flutter는 Dart언어를 사용하고 있다
웹 애플리케이션 개발 시 Single Page Web Application을 개발할 때 사용한다.
Dart Pad
웹에서 Dart 언어 문법을 사용해 볼 수 있는 웹기반 개발도구
https://dartpad.dev
프로그래밍은 가능하나 개발 도구로 사용하긴 어려움
IntelliJ 개발 환경 구축

Dart SDK 내려받기


5개의 설치 옵션을 제시하고 있는데 3번을 선택하면 SDK를 내려받을 수 있다.

"Dart SDK"를 눌러야 압축파일이 받아지고 옆의 "SHA-256"을 눌러버리면 압축파일이 아니라 별도의 인증서파일이 받아진다

내려받은 SDK폴더는 편의성을 위해 작업폴더에 위치시키면 된다
설치한 IntelliJ를 열고 Plugins에서 Dart를 검색하여 설치한다

새 프로젝트를 만들 때 Dart를 고르고 SDK 경로를 설정해주면 된다

다트 프로젝트
프로젝트 상위 폴더에서 오른쪽 클릭 후 New -> Dart File 을 선택한다


Dart 가상 머신
Dart 프로그램은 Dart 가상 머신(Dart VM)에 의해 동작한다
웹 애플리케이션의 경우 크로미움을 지원하는 모든 브라우저에 Dart 가상머신이 기본 내장되어 있다.
(따라서 크로미움을 지원하지 않는 브라우저에서는 Dart로 만든 웹 애플리케이션이 동작하지 않는다)
모바일 애플리케이션은 개발하는 애플리케이션 내부에 Dart 가상머신이 포함된다.
모바일 애플리케이션 내부에 Dart 가상머신을 실행시키는 코드가 포함되어 있다.
iOS와 AOS가 하는 일은 Dart 가상머신을 실행시키는 것 뿐이다.
프로그램이 시작되면 Dart는 main함수를 찾아 실행시킨다
Dart 문법
문자열
- dart 는 다른 프로그래밍 언어처럼 큰 따옴표("")로 묶어 문자열을 표현한다.
- 작은 따옴표('') 로 묶은 것도 문자열이다.
기본 출력
세미콜론
- dart는 명령문 마지막에 반드시 세미콜론을 찍어줘야 한다.
주석
- 코틀린과 동일하다
- // : 한 줄 주석
- /* */ : 여러 줄 주석
자료형
- 정수형 : int
- 실수형 : double
- 문자형 : String
- 논리형 : bool
변수 선언
- 변수 선언시 변수 명 앞에 자료형을 명시해야 한다.
- 자료형과 저장하는 값이 맞지 않으면 오류가 발생한다.
var, dynamic
- 변수 선언 시 자료형을 나타내는 키워드 대신에 var나 dynamic을 사용할 수 있다.
- var나 dynamic을 사용하면 변수에 저장하는 값에 타입을 보고 변수의 자료형이 결정된다.
- var는 자료형이 결정되면 다른 자료형의 값을 저장할 수 없다.
- dynamic은 자료형이 결정되지 않고 다양한 자료형의 값을 저장할 수 있다.
final, const
- dart 에서 상수를 만들기 위해 사용하는 키워드
- 상수는 기억장소에 값이 한 번 저장되면 그 값을 변경할 수 없다.
- const : 빌드타임 상수. 기억장소가 관리할 값을 코드를 통해 결정해줘야 한다.
- final : 런타임 상수. 기억장소가 관리할 값을 실행 중에 구해 결정해줘야 한다.
- const 상수는 컴파일이 될 때 실제 값으로 코드가 변경된다.
- 이에 기억장소가 실제로 만들어지는 것이 아니기 때문에 실행중에 구한 값을 담을 수 없다.
- final 상수는 컴파일이 될 때 코드 그대로 유지가 된다.
- 이에 기억장소가 실제로 만들어지는 것이기 때문에 실행중에 구한 값을 담을 수 있다.
- 이는 기억장소의 과도한 생성으로 메모리 낭비를 초래하는 일을 예방하기 위함이다.
null 관련 연산자
- dart는 코틀린과 같이 null을 허용하는 변수와 null을 허용하지 않는 변수를 구분하여 선언할 수 있다.
- 기본적으로 모든 변수는 null을 이용하지 않으며 null을 허용하고 싶은 변수는 ?를 사용해 선언해준다.
- 이는 null 안정성을 확보하기 위한 장치이다
??= 연산자
- null을 허용하는 변수에 null 값이 들어있을 경우에만 변수에 값을 담겠다는 연산자이다.
타입 비교 연산자
- is 키워드를 사용하여 변수의 타입을 비교할 수 있다.
- 비교 후 리턴되는 값은 bool 타입
if 문
- 다른 프로그래밍 언어들의 if문과 동일하다
- 주어진 조건식이 true일 경우 수행된다.
switch ~ case 문
- kotlin의 when과 비슷하다.
- switch에 지정된 변수의 값이 같은 부분으로 이동되어 수행된다.
- dart에서는 다른 언어와 달리 변수의 값에 해당하는 case 부분이 수행되고 끝나면 밖으로 나가기 때문에 break를 넣을 필요가 없다
List
- 0부터 1씩 증가되는 순서값을 가지고 객체를 관리한다.
- 같은 클래스 타입의 객체를 담는 것을 권장하며 제네릭으로 타입을 설정해주는 것이 좋다.
Map
Set
- 집합
- 중복된 값(혹은 객체)를 담을 수 없다.
- 주로 리스트에서 중복된 것을 제외하고자 할 때 사용한다.
- 순서나 이름으로 데이터를 관리하지 않기 때문에 순서가 바뀔수도 있다.
enum
- 열거형
- 변수가 가질 수 있는 값을 미리 정해놓는 개념