Flutter를 처음 시작했을때로 돌아가면 하지않았을것들

Ss·2023년 8월 31일

대학 졸업을 앞둔시점 이러쿵저러쿵 어쩌다보니 첫 취업을 플러터로 하게되었다.
빨리 1인분을 하기위해 대학때와는 다르게 제대로된 공부를 시작했었는데
그 당시 1.19 버전으로 매우 따끈따끈한 상태였고 그 덕분인지 자료가 그리 많지 않았다.

적은 자료를 기반으로 혼자 공부를 하다보니 얻게 되는 정보를 맹신하게 되는 방향으로 흘러갔고
아무튼 돌아는 가는 개발을 하게 되었다.

이제와서 후회하며 리펙토링을 진행 했었으며, 진행하는 과정에서 들었던 생각을 정리해보았다.

  1. statefulwidget을 지양한것.
    const 선언을 위해 statelesswidget만을 고집하며 개발을 했었는데 그로 인해 쉽게 stateful로 쉽게 개발할 내용을 어렵고 지저분하게 개발을 했다.
    state를 어떻게 사용하냐에 따라 달라지는 것이고 잘 못썼을 때 문제가 생길 수 있는 거지 Statefulwidget이 잘못된 게 절대 아니다.
  1. 매개변수로 context 넘기지 않으려 한것.
    flutter의 특징중 하나인 위젯, 그리고 그 위젯의 정보가 있는 것이 Buildcontext. context 라고 하며 context에 대한 접근이 매우 조심스럽다.
    그런 context를 build 함수 내에서가 아닌 다른곳에서 접근하는것은 좋지 못하다는 글을 본적이 있고 그것을 고집하게되었다.
    context가 위젯의 정보를 갖고있다는게 그만큼 바뀌지 않아야 하고 그럴려면 최대한 건들지 않아야 한다는 의미도 있지만 반대로 그만큼 필요로 하는곳도 많다는 의미이기도 하다.
    context를 build 함수 안에서만 사용하려다보니 프로젝트 전체 구조의 방향성이 흔들리는 경우가 생겼다.
    한가지 룰을 지키기 위해 두세개를 지키지 않는, 아이러니한 상황이 되어버렸다.
  1. 레이어를 완벽하게 분리하려고 한것.
    flutter 만이 아닌 아키텍쳐, 디자인패턴 맹신이라고 볼수도 있을것 같은 내용이다.
    내가 개발하는 프로젝트는 provider를 이용해 state의 관리와 뷰단을 분리 하려고 했다.
    안드로이드 공식문서에서도 레이어를 나눠 개발하기를 권장하듯 flutter 역시 그게 가능할거라 생각했다.
    물론 아직 실력이 부족한면도 있겠지만, 플러터 특성상 ui만 완벽하게 분리가 어려운것 같고 이것을 완벽하게 분리를 하려던 시도에 많은 시간을 소비했고 이도저도 아닌 점점 이상한 구조가 되어버렸다.
  1. pub.dev를 남용한것.
    dart, flutter의 패키지들이 있는 사이트이다.
    firebase, google login, 네이티브 기능 등 많은 도움이 되는 패키지들도 있지만 스크롤 위젯, 데이트피커 등 디자인이나 개발의 편의를 위한 패키지들도 많다.
    개발 초반에 복잡한 위젯을 만들지 못한다는 핑계로 이런 패키지들을 많이 사용했었는데 이것들을 직접 만들어볼 생각을 했다면 실력이 더 빨리 늘지 않았을까 생각해본다.
  1. dart를 제대로 공부하지 않은 것.
    flutter는 언어가 아니다. dart 언어를 제대로 공부했다면 다른 언어를 배우면서 사용해오던 습관을 바꾸고 dart만의 문법으로 더 빠르고 짧은 코드를 만들 수 있지 않았을까 생각한다.
    "만들면서 익히자", "프레임워크 쓰는데 언어를 언제 공부하고 있어" 와 같은 마인드로 개발을 하다보니 그 당시 짰던 코드들이 너무나도 옛스럽다. 코드만 보면 이게 최근에 나온 dart인지 java5인지 모를 수준이다.
  1. 다른 사람의 코드를 받아들이지 않은것.
    같은 결과물을 만들더라도 모든 사람이 같은 코드를 짤수는 없다. A를 이용해 B의 결과를 만들어야 한다면 블로그, 깃허브에서 A를 이용한 코드만을 찾아 다녔다. 당연하게도 그런 자료는 많지 않았고 그것이 맞다는 보장조차 되지 않는다.
    좀더 열린 마음으로 A' 를 이용한 코드를 분석하며 시도해봤으면 좋았을것 같다.

적으면서도 든 생각이지만 flutter만의 문제가 아닌 개발을 처음 시작할때 겪는 초보자의 실수가 아닐까 싶다.
처음 배우면서 뭐가 맞는건지 누가 이렇다 저렇다 딱 적해주길 바랬고 누군가가 정해주었다면 그것이 진리인듯 받아들인게 문제가 된게 아닌가 생각이 든다.
아직도 배우는 중이고 작성한 내용이 추가가 될지 수정이 될지 삭제가 될지는 모르겠지만 flutter로 개발하거나 새로운 기술을 배울때 같은 후회를 반복하지 않기를...


23.09.19 추가.

함수를 따로 분리하지 않은것.
대충적은 예시코드

Button(
	child:Text('버튼');
    onPressed:() async {
    	var one =1;
    	var two =2;
		var ten =10;
        await Future.delay(Duration(seconds: 10));
        ...
        ...	
        }
     )

onpressed에 들어간 코드를 _onPressed로 왜 빼지 않았는지...
이제서야 수정을 해보니 코드가 너무나도 깔끔하다

0개의 댓글