본문 바로가기
developStudy

[Flutter] Dart 기본 중에 기본 #변수 #함수 #클래스

by holaf 2021. 1. 13.
반응형

갑자기 웬 다트?

언젠가 제 서비스를 만들기 위해 > 올해 무조건 앱 출시 경험을 만들기 위해 > 플러터를 도구로 정했고 > 플러터에서 쓰는 다트 언어를 배우는 중입니다. 플러터의 최대 장점은 구글 마테리얼 디자인과 애플 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

 

Dart documentation

Learn to use the Dart language and libraries.

dart.dev

medium.com/dartlang-c/dart-%EB%B3%80%EC%88%98%EC%99%80-%ED%83%80%EC%9E%85-8aac991cecea

 

Dart: 변수와 타입

Come to the Dart side

medium.com

 

brunch.co.kr/@mystoryg/118

 

04화 다트 주석, 타입, 변수, 상수

플러터를 위한 다트 프로그래밍 | 다트의 주석, 타입, 변수, 상수 다트의 주석, 변수, 상수, 타입은 다른 프로그래밍 언어와 거의 유사한 형태이다. 따라서 새롭거나 어려운 내용은 없다. 1. 주석(c

brunch.co.kr

 

반응형

'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

댓글