갑자기 웬 다트?
언젠가 제 서비스를 만들기 위해 > 올해 무조건 앱 출시 경험을 만들기 위해 > 플러터를 도구로 정했고 > 플러터에서 쓰는 다트 언어를 배우는 중입니다. 플러터의 최대 장점은 구글 마테리얼 디자인과 애플 Cupertino 디자인 위젯을 가져다 쓰기 쉽다는 점입니다. 하나하나 개발할 여력이 없는 개린이에게 그-나마 적합해보여 플러터를 선택했어요! 2018년에는 worst programming language to learn 1위로 선정되었다는데, 플러터의 부흥으로 다트도 다시 살아나고 있다고 합니다.
☑️main함수가 모든 코드의 시작이다. 이 최상위 함수 안에서 코드를 작성하면 됩니다.
void main(){
...
}
☑️Dart는 땀을 항상 흘린다 😓
void main(){
print('Dart');
}
//Dart
Dart 연습은 Dart 공식 웹에디터에서 하면 됩니다 dartpad.dev/
플러터로 앱개발할 때 쓰는 공식 IDE는 안드로이드 스튜디오인데 동료 개발자는 Visual Studio Code 쓰시더라구요. 우선 저는 안드로이드 스튜디오로 입문중입니다.
주석 Comment
초보땐 역시 주석을 과하다 싶을 정도로 쓰는게 좋습니다 (남을 위해서가 아니라, 내일의 나를 위해^_^)
//한줄 주석
/*
여러줄 주석
*/
변수 Variable
(키워드) 타입 변수명 = 초기값 ;
String name = "word";
변수 타입:
- String : "큰따" '작따' 상관없음
- int : 정수
- double : 실수
- num : 정수/실수, int/double을 포함하기 때문에 int, double 변수를 담을 수 있음
- bool
- List : []
- Map : {key:value} (파이썬으로 치면 딕셔너리)
- Set : 순서 x, 중복 x
- void : null
- var : 타입 미지정/변경 불가능
- dynamic : 타입 미지정/변경 가능 🦎
- Object : dynamic과 동일
키워드:
- const: 변경 불가능 (처음부터)
- final
void main(){
String name = "word";
print(name);
//word
}
//var 변수는 처음 지정한 값으로 타입이 바귀고, 평생 다시 바뀔 수 없다.
var hello=50;
//이제 var은 type이 int로 초기화돼 다른 것이 될 수 없다 😢초보자는 실수가 잦으니 var는 당분간 제껴두자
변수는 $변수명으로 쓸 수 있다.
String func1( String a){
return a+"님 안녕하세요";
}
//이렇게도 쓸 수있음
String func1( String a ){
return "$a님 안녕하세요";
}
//유진님 안녕하세요
//중괄호 쓰면뭘 더 할 수도 있음
String func1(String a){
return ${a+"킹왕짱"}님 안녕하세요";
}
//유진킹왕짱님 안녕하세요
변수는 이름표/호칭/닉네임/별명 (수학적 = 이 아님)
지역 변수, 전역 변수 local variable, global variable
지역변수는 지역범위에서만 실행된다. 지역변수 안에서 선언된 변수는 전역변수에서 부를 수 없습니다.
지역변수, 전역변수는 상대적 개념입니다.
지역변수(1) 안에 또 다른 지역변수(2)가 있을 땐? 지역변수 (2)를 기준삼으면, 지역변수(1)은 전역변수이고 Main함수를 기준삼으면 지역변수 (1)은 지역변수입니다.
비유: 엄마는 할머니에겐 딸이고, 나에게는 엄마이다.
함수 선언, 인자 설정 (Declare, Parameter, Argument)
타입 함수명(인자) {코드...}
String func1(){
return 'word';
}
//반환만 하는 함수면 이렇게 단축해서 쓸 수 있다.
String func1() => 'word';
인자를 쓰는 방법
1. 기본 인자 (타입을 강제하기)
String func1(String a){
return a;
}
//여러개도 가능
String func1(String a, bool b, int c){
return a;
}
print(func1('word',true, 3))
//word
2. 인자의 네이밍 옵션 주기
인자에 중괄호{}를 걸어주면 순서가 상관없어진다.
String func( {String a, bool b, int c}){
return a;
}
//순서도 상관없음
print ( func1(c: 3, a: 'word', b: true) );
//word
3. 기본 + 네이밍 옵션 혼합해서 쓰기
호출할 때는 인자에 필수값만 써도 된다.
//a만 바깥에 두면 필수값이 됨
String func1( String a, {bool b, int c}){
return a;
}
//a만 써도 잘 출력됨
print( func1('word') );
//word
Class 만들기
Class는 양식입니다 ex. 휴가신청서 양식
☑️클래스 이름은 대문자로 시작해서 쓰는게 좋습니다. 그래야 대문자를 보고 클래스구나~ 하고 알아볼 수 있어서 그렇게 하라고 하네요.
☑️클래스는 메인함수 밖에서 선언 (만들고)
☑️출력은 메인함수 안에서 (만든걸 사용하려면)
//클래스를 만들고,
class MyClass{
String name;
}
void main(){
//사용하려면, 여기서
//클래스 이름이 타입이 되는거고
//이 클래스를 변수에 담아 쓰겠다고 변수 선언
//이제 my로 MyClass 템플릿을 가져다 쓸 수 있게된것!
//new는 생략가능하지만 초보는 쓰길 추천
MyClass my = new MyClass();
//같은 템플릿으로 다른 변수를 만들 수 있음
//나와, 내 옆자리 사원은 같은 휴가양식을 쓰지만 내용은 다름.
//이런 경우 클래스는 같지만, 출력되는 값(=instance)가 다르다고 함.
MyClass my2 = new MyClass();
my.name='유진';
print(my.name);
}
//유진
개발자는 게을러서 코드를 줄이고 싶어한다! 위 코드를 그래서 줄일 수 있는 생성자 함수가 있습니다.
☑️생성자 함수
클래스와 똑같은 이름을 가지고 있는 함수를 만들고, 인자에 name 을 넣어줌
☑️this.name
this= 상대적인 global 위치에 있는.
class MyClass{
String name;
//생성자 함수 (=사용법?이라고 이해하겠음 일단)
MyClass({this.name});
}
void main(){
//이렇게 바로 쓸 수 있음,
//my.name='유진' 이라고 쓰는 대신에.
MyClass my = new MyClass(name: '유진');
print(my.name);
}
//유진
하나 더.
클래스 안에 함수를 만들어도 된다.
이후 메인 함수에서 그 클래스함수를 불러와서 쓰면된다.
class MyClass{
String name;
//함수를 만들어
String func(){
return this.name+'님이 휴가를 갑니다';
}
//기본값을 세팅해줘야함
//네이밍 옵션 {}으로 감싸주는 이유는, 나중에 인자가 많아질 때 트러블이 없게끔 Ex. 이름, 휴가희망일, 부서 등...
MyClass( {this.name='홍길동'});
}
void main(){
//클래스 안 함수를 쓸땐 이렇게 .을 써서 (메소드)
new MyClass().func();
//이걸 프린트하면,
print(new MyClass().func())
}
//홍길동님이 휴가를 갑니다
클래스 안에, 다른 클래스의 출력물을 담고 싶을 때가 있다.
class MyClass{
}
class UClass{
}
//이렇게 두 클래스가 있는데, UClass의 출력을 MyClass안에서 하고싶을 수 있다는 말임.
//근데 이렇게 하면 UClass가 MyClass에 종속됨을 기억.
class MyClass{
String name;
//클래스를 담을 변수를 여기서 선언해주면됨 (메인함수에서 하는것과 같음. 메인함수에선 myClass만하면되니까 편함)
UClass uClass=new UClass();
}
class UClass{
String name;
UClass({this.name='백두산'});
}
void main{
print( new Myclass().uClass.name);
}
//백두산
Further Study
문법만 익히면 또 까맣게 잊어버리기 쉽상이니까.. 꼭 여러 예문을 만들어봐야겠다 느꼈습니다. 더 베스트는 작디작은 프로젝트 시작하기.. 이 문법이 당연한 것이 될때까지 😱
Don't do it until you get it right. Do it until you can't get it wrong.
Reference
다트 공식문서
dart.dev/guides
medium.com/dartlang-c/dart-%EB%B3%80%EC%88%98%EC%99%80-%ED%83%80%EC%9E%85-8aac991cecea
'developStudy' 카테고리의 다른 글
[Python] Sum (0) | 2021.09.11 |
---|---|
[Python] Range (0) | 2021.09.11 |
[Python] Map, Lambda, Zip (0) | 2021.02.18 |
[Javascript] 상도덕편 🚮 (0) | 2021.02.16 |
앱 버전 쓰는 방법 (Semantic Versioning) (0) | 2021.01.19 |
댓글