내일배움캠프 13일차_251001
<오늘 하루 일정>
오전
9:00~12:40 Dart 강의 수강
12:40~13:40 점심시간
오후
13:40~14:20 인사이트클럽
14:20~16:00 Dart 강의 수강
16:00~18:00 전체 네트워킹 및 팀 빌딩
18:00~19:00 저녁시간
19:00~21:00 네트워킹 및 Dart 스터디, 튜터님과 QnA
- 슐렙 블라인드니스(Schlep Blindness): 창업자들이 지루하고 복잡하며 불편한 문제를 무의식적으로 피하는 경향. 하지만 이런 문제들이 산업의 병목이자 거대한 기회임.
- 지루하고 어려운 문제에 답이 있다 – 모두가 피하는 문제일수록 산업의 핵심 병목이자 기회.
- 완벽보다 실행과 속도 – 작은 단계라도 빨리 시작하고 개선해야 한다.
- 고통이 큰 문제 = 큰 보상 – 불편을 해결하면 유니콘 기업으로 성장할 수 있음.
- 트렌드보다 필요 – 유행은 사라지지만 실제 문제는 지속된다.
- 행동이 아이디어를 이긴다 – 실행 가능한 해법이 미완성 아이디어보다 훨씬 가치 있다.
결론: 스타트업의 성공은 화려한 아이디어가 아니라, 모두가 회피하는 어려운 문제를 집요하게 해결하는 데 있다.
Exception (예외): 클래스를 상속받아서 구현
1) DefferedLoadExcption : 필요한 시점에 로드되도록 설정한 라이브러리가 로드되지 못했을 떄
DefferedLoadExcption(String message) message - 예외에 대한 설명 써주면 됨
2) FormatException : 데이터가 처리 가능한 형태가 아니어서 데이터를 처리하기 어려울때
FormatException([String message = “ “, dynamic source, int? offset])
message - 예외에 대한 설명, source = 예외가 발생한 원인
[예시]
String invalidNumber = "abc";
int result = int.parse(invalidNumber);
//int.parse 문자열을 정수형으로 바꿔줌, 문자열을 정수로 바꿀 수 없으면 FormatException 발생
3) IOException : 입출력 관련 동작을 하는 중에 발생하는 오류
IOException()
4) FileSystemException : 파일에 접근할 수 없을 때 발생
[참고]
HttpException
ProcessException
SignalException
SocketException
StdoutException
TlsException
WebSocketException
5) OSError : 운영체제 레벨에서 발생하는 오류, 운영체제로 부터 받은 오류에 대한 정보를 들고 있음
OSError([String message = “ “, int errorCode = noErrorCode])
Message에는 운영체제가 제공하는 예외에 대한 설명 들어감
errorCode에는 운영체제가 제공하는 오류코드 들어감
6) TimeoutException : 비동기 결과를 기다리는 동안 특정시간이 초과되었을 때 발생
TimeoutException(String? Message, [Duration? duration])
Message : 시간 초과가 발생항 원인에 대한 설명
Duration : 초과된 시간
발생한 예외를 처리하기 위한 경우 : try, catch, on, finally 사용
1) Try {//예외가 발생할 수 있는 코드 :
}
Try 코드 실행 중에 예외가 발생했을 떼 실행할 코드를 넣는 부분.
Catch (e) {
Print(e.);
}
2) Catch 예외 발생 않으면 실행 되지 않음
3) On : 예외 타입이 특정되기 때문에 catch에 객체가 전달되었을 때 객체를 가지고 할 수 있는 동작이 더 많음
단독 사용 안됨, catch 랑 항상 같이 써야 함.
void main(){
try{
String words = 'abcde';
int result = int.parse(words);
print(result);
}
on FormatException catch (e) {
print(e.message);
}
finally{
print("예외 처리가 끝났어요.");
}
}
on IOException catch(e) {
// IOException 이 발생했을 때 실행할 코드}
4) Finally : 예외 발생여부 상관없이 실행할 코드를 넣는 부분
Try catch 끝나고 실행됨
필수적인 것은 아님
Finally {
// 예외처리 후 실행할 코드
}
Throw
예외를 의도적으로 발생시키기 위해 사용
Try, catch, on
[예시]
void printAge(int age) {
if (age<0) {
throw Exception('나이는 당연히 0보다 커야죠');
}
print(age);
}
Dart 가 미리 정의해둔 오류
-ArgumentError: 허용되지 않는 인자를 함수에 전달했을 때
-AssetionError : assert() 문에 매개별수에 전달하는 조건문이 거짓일때 발생,
-assert(101<100); 거짓, 오류발생논리오류잡을 때 사용,
-RangeError : Argument 클래스를 상속받은 클래스
-IndexError : 허용되지 않는 범위의 Index를 사용했을 때 발생
-NoSuchMethodError : 함수나 메서드를 실행 못할 때 발생
-OutOfmemoryError : 시스템 메모리 부족 시 발생
-StackOverflowError: 메모리 공간중 하나인 스택(stack)영역이 수용가능한 범위를 넘어가는 현상
(메모리공간?
코드, 데이터(전역변수,정적변수 담는공간), 힙(개발자가 직접 할당,해체할 수 있는 공간), 스택(지역변수,매개변수 담는 공간, 실행이 끝나면 사라짐)
-StateError : 동작수행 불가 시 발생
-TypeError : 예상 타입과 다를 때 발생
-UnimplementesError : 구현되지 않은 메서드나 기능 호출 시 발생
-UnsupportedError : 객체를 통해 실행될 수 없는 동작일 때 발생
예외랑 오류의 차이
1) 예외 : 코드가 논리적으로 맞지 않거나 적절하지 않은 값이 입력되었을 때 발생
예상가능, 발생 시 try catch로 처리할 수 있음. 발생하더라도 처리하면 프로그램 정상실행
2) 오류 : 주로 시스템에 문제가 생겼을 때 (메모리 부족 같은)
예상불가능, 처리못함. 발생시 프로그램 종료
[예제]
void checkAge(int age){
if(age<0) {
throw Exception('나이는 음수가 될 수 없습니다.');
}
print('나이: $age세');
}
void main(){
try{
checkAge(-5);
} catch(e){
print('오류:$e');
}
}
라이브러리
특정 기능이나 작업을 쉽고 빠르게 수행할 수 있도록 미리 작성한 코드의 집합.
작업 수행 시 자주 사용하는 코드를 모아둔 것
효율성, 재사용성, 코드 가독성이 좋아짐.
Dart SDK에 포함되어있는지에 따라 2가지로 나누어짐
1) Dart SDK 표준 라이브러리
플랫폼에 따라 사용할 수 잇는 라이브러리가 다름.
-모든 플랫폼 : dart:core, dart:async, dart:collection, dart:convert, dart:developer, dart:math
-네이티브플랫폼: 모바일, 데스크탑 타겟, dart:ffi, dart:io
-웹플랫폼: 자바스크립트로 컴파일 되는 코드
Package:web, dart:js_interop, dart:html
2) Dart SDK에 포함되어 있지 않은 라이브러리
외부 개발자들이 만든 것.
- Pub.dev에서 사용가능
class Refrigerator {
// String fruit;
// String vegetable; //값이 있어도 대입값으로 나옴.
// String milk;
List<String> foods;
Refrigerator(this.foods); // -> 생성자 (간략화 버전)
// Refrigerator(List<String> foods): this.foods = foods; // -> 생성자
}
void main() {
List<String> newFoods = ['fruit2', 'vegetable2', 'meat2'];
Refrigerator myFood = Refrigerator(newFoods);
print('${myFood.foods}');
}
class Vehicle {
String brand;
Vehicle(this.brand);
void start() {
print('$brand 차량이 시동을 겁니다.');
}
}
class Car extends Vehicle {
// this는 현재 클래스 Car를 의미 super 는 부모클래스 Vehicle
// Car(String brand) : super(brand); // 원래 슈퍼 쓰는 방법
Car(super.brand);
void honk() {
print('$brand 자동차가 빵빵 경적을 울립니다.');
}
}
void main() {
Car myCar = Car('현대');
print(myCar.brand);
myCar.start(); // 현대 차량이 시동을 겁니다.
myCar.honk(); // 현대 자동차가 빵빵 경적을 울립니다.
댓글
댓글 쓰기