Dart 익숙치 않은 기초

SeonHo·2024년 8월 8일

Dart

목록 보기
3/13
post-thumbnail

저번주부터 지금까지 Dart 연습 문제 30개 정도 풀었습니다.

연습 문제를 고민하고 코드로 작성하느라 빨리 녹초가 되는거 같습니다. ㅋㅋ

연습 문제 뿐만 아니라 수업에서 기억 많이 나는 부분과
Dart가 처음이라 몰랐던 부분도 한번 작성해 볼려고 합니다!

저는 안스로 연습 문제를 풀었습니다.
Dart가 Python 처럼 코드 한줄 치고 실행하면
콘솔에서 바로 확인이 가능했고, 밑줄된 오류 부분을
바로 있었던 점이 좋았습니다.

그래서 Dart는 인터프리터 언어인가? 라고 생각했는데 아니라고 합니다.
Dart는 AOT 컴파일 (Ahead-of-Time), JIT 컴파일 (Just-in-Time)
방식을 지원하는 하이브리드 언어 입니다.

AOT 컴파일 은 프로그램 실행 전에 미리 모든 코드를 기계어로
변환하여 실행 파일을 생성하고,
JIT 컴파일 은 프로그램 실행중 필요한 부분만 컴파일 하여
실행한다고 합니다.

JIT를 보고 JAVA의 JIT 컴파일 방법인가? 라고 생각했는데
비슷하지만 다르다고 하네요.

비교DartJAVA
JIT 컴파일러의 역할Dart를 기계어로 변환바이트코드를 기계어로 변환
최적화JIT 컴파일 외 AOT 컴파일을 지원하여 다양한 최적화 가능다양한 최적화 기법을 사용하여 고성능 추구
언어 특징동적 타입, AOT/JIT 혼용정적 타입, 가상 머신 기반
사용환경Dart VM 또는 Native 플랫폼JVM (Java Virtual Machine)

Dart에서 처음 접한

String? name;
int? age;

타입 뒤에 ?nullable 이라고 하며,
해당 변수에 null 값의 사용을 허용한다 하고 배웠습니다.

import 'dart:io';

void main() {
	stdout.write('이름을 입력하세요');
    String? name = stdin.readLineSync()!;
    
	stdout.write('나이를 입력하세요');
	int? age = int.parse(stdin.readLineSync()!);
    
    if (name != null && age != null) {
    	print('제 이름은 $name, 나이는 $age세 입니다.');
    } else {
    	print('잘못 입력했습니다'.);
    }
}

저는 값을 지정 안했을 때 ? 주로 사용 했습니다.

stdin, stdout, !

stdout.write();
stdin.readLineSysc()!;

print 는 출력 후 줄바꿈을 해줍니다.
stdout.write 는 출력 후 같은 줄에 옆에 출력됩니다.

stdin.readLineSysc()! 는 사용자로부터 입력을 받고 싶을 때 사용합니다.
python에 input() 과 동일한 기능입니다.

stdin.readLineSync()! 는 무조건 변수 앞에
String 타입으로 지정해줘야 합니다.

stdin.readLineSysc()!! 를 사용하는데
변수 뒤에 ! 붙이는 것을 null 어서트 라고 하며,
해당 변수가 절대 null 값이 될 수 없다고 할 때 사용하는 연산자입니다.

import 'dart:io' 라이브러리를 입력해야
stdin, stdout 사용할 수 있습니다.

dart:io library 공식문서

dart:io 에 대해 궁금하여 찾아봤습니다.
dart:io 라이브러리이며 웹 애플리케이션이 아닌 파일에 대한
파일, 소켓, HTTP 및 기타 I/O 지원 을 한다고 합니다.

dart:io HTTP 통신까지 크.. 휼룽한 라이브러리구나

Dart에서 처음 class를 작성할 때 생성자(constructor)로
를 써서 인스턴스 변수를 초기화 한다는 것을 처음 봤었습니다.

예제 및 연습 문제에서 계속 사용하는 것을 보고
class에서 constructor는 무조건 사용하는구나 하고 생각했는데
무조건은 아니고 강력히 권장한다고 하네요.;;

산술 연산자 / ~/

연산자의미비고
/값을 나눈다실수형(double)로 변환
~/나눈 몫을 구한다정수형(int)로 변환

논리 연산자 &&,||, !

연산자의미
&&AND, 양쪽 다 True여야 True
IIOR, 한쪽이 True면 True
!NOT, 참 -> 거짓, 거짓 -> 참

dynamic

연습 문제
1. list를 선언
2. list의 값 : index[0] = ['apple', 'orange'],
index[1] = [true, false], index[2] = null,
index[3] = [1, 'golf', 3]
3. list 값: , list 길이: , 마지막 item길이: 출력
4. nested list를 사용

void main() {
  List<dynamic> list = [['apple','orange'],
  [true,false],null,[1,'golf',3],];
  
  print("list 값: $list");
  print("list의 길이: ${list.length}");
  print("마지막 item길이: ${(list.last).length}");
}

dynamic 타입으로 여러개의 타입을 받을 수 있었습니다.
nested list는 리스트안에 리스트 였습니다. [ [ ], [ ] ]

연습 문제
1. Map type 변수를 만들어라
2. 변수는 name, id, grade key 갖는다.

void main(){
  Map<String, dynamic> student =
  {'object': 'history',
    'id': '',
    'grade': {'math': 3, 'history': 4.3,
    }
  };
  print("${student['object']} 과목 ${student['grade']['history']}");
}

map은 {} 괄호이며, dynamic 타입이 사용이 편한거 같습니다.

이번주까지 실습문제를 완료해야해서
다음번에 더 가져오겠습니다.

profile
목표를 달성하자!

0개의 댓글