내일배움캠프 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 




1. 오늘의 학습 키워드

*인사이트클럽
  • 슐렙 블라인드니스(Schlep Blindness): 창업자들이 지루하고 복잡하며 불편한 문제를 무의식적으로 피하는 경향. 하지만 이런 문제들이 산업의 병목이자 거대한 기회임.
  1. 지루하고 어려운 문제에 답이 있다 – 모두가 피하는 문제일수록 산업의 핵심 병목이자 기회.
  2. 완벽보다 실행과 속도 – 작은 단계라도 빨리 시작하고 개선해야 한다.
  3. 고통이 큰 문제 = 큰 보상 – 불편을 해결하면 유니콘 기업으로 성장할 수 있음.
  4. 트렌드보다 필요 – 유행은 사라지지만 실제 문제는 지속된다.
  5. 행동이 아이디어를 이긴다 – 실행 가능한 해법이 미완성 아이디어보다 훨씬 가치 있다.

결론: 스타트업의 성공은 화려한 아이디어가 아니라, 모두가 회피하는 어려운 문제를 집요하게 해결하는 데 있다.


 
*Dart 프로그래밍 강의 

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에서 사용가능





2. 오늘 학습한 내용을 나만의 언어로 정리하기

*Dart 프로그래밍 강의 

클래스와 생성자의 이름이 같다.
클래스 이름은 타입을 지정하는 성격이 생기므로 메인함수에서 변수로 사용하고, 이름을 붙여서 클래스 내의 함수, 즉 메서드를 작동시킨다.
새로운 값이 아래에 들어오면 기존 값이 새로운 값으로 대체된다.
메서드는 클래스 내에 있는 함수를 뜻한다.
this 는 자기 클래스 안에서 호출, super 는 자식클래스가 부모클래스를 참조함.


-------------------------------------------

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();     // 현대 자동차가 빵빵 경적을 울립니다.



3. 학습하며 겪었던 문제점 & 에러 - 문제&에러에 대한 정의 :  - 내가 한 시도 : 
 - 해결 방법 :  - 새롭게 알게 된 점 : 
 - 이 문제&에러를 다시 만나게 되었다면? : 



4. 내일 학습 할 것은 무엇인지
- 인사이트클럽 9시
- Dart 강의 3-3까지 완강
- QnA 과제 및 심화과제 살펴보기
- QnA 세션 16~17시
- 스터디  17~18시
- 네트워킹 19~21시

댓글

이 블로그의 인기 게시물

내배캠15일차_map() reduce() fold()

내배캠16일차_Flutter_스토어 앱 만들기

내배캠 [3주차 WIL]