카테고리 없음

[내일배움캠프 사전캠프] 3일차

kwontete 2025. 9. 4. 18:12

3일차 조건문,동기와 비동기,웨젯트리,클래스 객체를 배웠다.

 

우선 조건문이란

프로그램이 특정 조건을 만족할때만 특정 코드를 실행하도록 제어하는 문장이다.

조건문은 if문과 switch문이 있다.

 

먼저 if문은 if와else가 있다.

이는 참과 거직의 모든 케이스를 개발해주며

구조는 이러하다.


if (number > 5) {
    print('number는 5보다 큽니다.');
  } else {
    print('number는 5보다 크지 않습니다.');
  }

여기서  print('number는 5보다 큽니다.'); 이 부분은 참일경우를 뜻하고

print('number는 5보다 크지 않습니다.'); 이 부분은 아닐 경우를 뜻한다.

 

switch문의 구조는 이러하다.

 

switch (number) {
    case 1:
      print('number는 1입니다.');
      break;
    case 2:
      print('number는 2입니다.');
      break;
    case 3:
      print('number는 3입니다.');
      break;
    default:
      print('number는 1, 2, 3 중 하나가 아닙니다.');
  }

 

여기서 case는 갯수 제한 없이 얼마든지 추가가 가능하며 

default: 부분은 case에 해당되지 않는 경우 실행 로직이다.

 

그렇다면 언제 if문과 switch문을 사용할까?

switch문으로 설명을 하자면

1.조건이 특정 값(상수)과 비교될때

2.코드의 가독성을 높이고 싶을때

3.enum 타입과 같은 열거형을 비교할때

열거형은 IDE에서 자동으로 모든 case를 자동으로 만들어주기 때문에 

enum을 비교할때는 switch문을 사용하는 것이 좋으며

enum 타입은 다양한 케이스가 있으면서도 명확하게 구분할 수 있는 것들을

사용한다. 

동기와 비동기

우선 동기란 작업이 순차적으로 처리되는 것을 의마하며 하나의 작업이 끝냐야

다음 작업이 진행된다.

즉 하나의 은행 창구에 한명씩 들어갈 수 있는 것이다.

 

print('작업 1 시작');
  performTask();
  print('작업 1 완료');
}

void performTask() {
  print('작업 2 실행');

 

구조는 이러하며

 

동기는 단점이 있는데

하나는 블로킹이며 나머지는 비효율성이다.

 

비동기는 작업을 병렬적으로 처리할 수 있다

즉 작업이 완료될 때까지 기다리지 않고 다음 작업을 바로 시작하는 것이다

 

위와 다르게 여러개의 은행 창구를 둬 많은 인원을 받을 수 있게 한다.

주로 네트워크 요청,파일 쓰기/읽기,등 시간이 걸리는 작업에 사용한다.

 

비동기는 복잡성과 디버깅이 어렵다는 단점이 있으며 

asyc,await키워드를 사용한다.

이는 데이터 요청 시 요청을 받야야만 화면에 결과를 보여줄 수 있기 때문에

요청하고나서 결과를 받을때까지 기다려야 하는 상황을 만들어줘야하는데 

그것을 처리할 수 있게 도와준다.

 

우선 asyc는 함수에 asyc를 붙이면 비동기 함수가 되며,

비동기 함수는 항상 Future 객체를 반환하도록 설계되어있다.

 

await은 비동기 함수 내에서만 사용이 가능하며,

Future이 완료될때까지 기다리며 완료되면 결과 값을 반환한다.

또 await은 비동기 코드를 동기 코드처럼 작성할 수 있게 해주기도한다.

 

구조는 이러하다.

 

void main() async{
  print('작업 1 시작');
  await performTask();
  print('작업 1 완료');
}

Future<void> performTask() async {
  await Future.delayed(Duration(seconds: 2));
  print('작업 2 실행');
}

 

위젯트리

게임 프로젝트를 진행함에도 모든 것을 위젯으로 개발 했으며 

그 위젯은 트리 구조로 띄게 될 수 밖에 없다.

 

구조는 이러하며

대충 설명하자면 cardboards에서 이벤트 함수를 home으로

home에서 함수를 받아 header로 전달하여 text로 전달하는 것이다.

 

클래스 객체

객체란 우리의 삶 속에 자동차,폰,사람등을 말하는 것이며

앱내에선 클래스 객체라고 불린다.

이런 객체는 각각의 고유한 속성과 기능을 가지고있다.

 

클래스 객체의 구조는 이러하다

 

class [클래스명] {

     생성자 ()

     멤버변수 //특성

 

      메서드 () {

}

 

코드를 작성하다보면

final,late키워드가 나오는데

final 키워드는 컴파일러에게 값을 바꾸지 않을꺼야라고 입력하는 것이고

late 키워드는 나중에 값을 초기화한다는것이다.

 

또 리펙토링이란 단어가 나오는데 코드의 동작을 변경하지 않으면서 

코드의 내부 구조를 개선하는 작업을 뜻한다.

리펙토링의 주목적인 가독성 유지보수성,확작성이다.

 

이렇게 1강을 마쳤는데 실질적으로 내가 당장 할 수 있는 건 없는 것 같다.

계속 보고 연습해봐야겠다.