무한 반복문 실행 시키고 그 반복문 안의 변수를 실시간으로 바꾸는 방법 좀 알려주세요.

조회수 879회

안녕하세요. 코딩 초보 입니다.

제가 앱에 구현하고자 하는 기능이 있는데 무한루프에 빠져들고 이를 해결할 아이디어가 떠오르지 않아 질문을 올립니다. 아마 코딩 좀 만져보신분은 쉬운일 일지도 모르겠네요. 검색으로 찾고자 해도 무한루프 단어밖에 안떠올라요. ㅠㅠ

필요한 기능으로는

앱에서 버튼을 눌러 반복적으로 깜빡깜빡 거리게 동작시켜 놓고 그 반복문 안의 변수를 실시간으로 변경을 하고자 하는데요. 이게 무한루프로 빠지고 제가 생각했던것과 같이 움직이지 않더라고요. 앱은 플러터(flutter, dart 언어)로 작성중이고 필요부분만 축소시켜 코드를 작성해 보자면..


void blinker(bool value) {
  setState(() {
    while (value == true) {
      print('ON ON ON');
      sleep(Duration(seconds: 2));
      print('OFF OFF OFF');
      sleep(Duration(seconds: 2));

      if (value == false) {
        break;
      };
    };
  });
}

토글 스위치를 올렸을때 위 blinker 함수가 작동을 하여 ON 과 OFF 가 2초씩 딜레이를 갖고 무한반복을 하게 만듭니다. 이때 메인 위젯에서 2초 딜레이에 해당하는 변수를 두어 변수가 바뀌면 실시간으로 blinker 함수에 적용되었으면 합니다.

그런데, 그 전. 위 함수에서 보시듯 토글 스위치를 내렸을때 value 는 false 가 되어 반복문이 멈췄으면 헸는데 그렇게 되지가 않아요. 즉, 무한 반복을 시켜놓고 그 함수 안에 다시 접근을 하지 못하여 딜레이 시간도 변경을 못하고 토글 스위치로 끄지도 못해 아무것도 조작할 수 없는 상태입니다.

이 문제를 해결해 보고자 메인 위젯과 따로 돌아가는 isolate 이라는 함수를 찾게 되어 사용해 보았는데요. 메인 위젯과 isolate 함수가 서로 순차적으로 돌지를 않아 토글 스위치가 멈추지 않고 작동을 하기는 하나 실시간 변수를 적용하지는 못하는것 같더라구요. 메인 위젯에서 isolate 함수를 작동시키면 메인 함수 코드가 뭘하든 isolate 은 자기 갈길만 가는.. 그리고, 토글 스위치로 isolate 함수를 다시 불러오면 이전에 돌고 있는 함수가 호출될줄 알았는데 새로운 isolate 함수가 작동되어 똑같은 두개가 시간차를 두고 동시에 작동합니다.

간추린 요약.

  • 토글 스위치를 올리면 ON & OFF 가 일정 딜레이를 두고 무한 반복 작동을 시작함.
  • 이 무한 루프에 다시 접근하여 변수(딜레이 시간)를 변경하고 싶음.
  • 하지만 무한 루프가 작동하는 상태에서 변수 변경하는 것도 토글을 내려 무한반복 정지 시키는 것도 하지 못하는 상황.

이것 저것 많이 적어 둔것 같은데 코딩 초보에게 방법 좀 알려주세요. 아니면 검색해서 찾아보기라도 할 수 있도록 이런 저런 떡밥을 던져주셔도 됩니다.

읽어 주셔서 고맙습니다.

  • 언어가 뭐죠? 초보자 2021.12.20 09:01

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)