전체 글 31

WidgetsFlutterBinding.ensureInitialized 함수는 뭐하는 녀석일까?

서론 플러터 프로젝트를 진행하다보면 미리 구현된 다양한 패키지를 가져다 쓰는 것을 당연하게 여기게 됩니다. 패키지마다 나름의 구현 방식이 있겠지만, 몇몇 패키지들은 공통적으로 main 함수에서, 그리고 runApp 함수의 호출 전에, WidgetsFlutterBinding.ensureInitialized 함수의 호출이 필수적인 경우가 있습니다. 지금까지는 그저, 플러터 엔진의 어떤 중요한 부분을 '확실하게 초기화한다'라는 의미가 있겠거니 하고 필요하다니까 쓴 경향이 없지 않지만, 문득 '도대체 이게 뭔데?' 라는 의문이 들어 찾아보게 되었습니다. WidgetsFlutterBinding.ensureInitialized 함수의 역할 이 함수의 기능은 예상 했듯이, 플러터 엔진의 ..

카테고리 없음 2023.04.25

[세미나] 각 언어별 가비지 컬렉션의 동작 방식

오늘 제가 이야기해 볼 주제는 가비지 컬렉터 입니다. 개발일을 하면서 가비지 컬렉터에 대해 많이 들어보셨을 거고, 대충 어떤 일을 하는 애 인지 알고 계실거에요. 가비지 컬렉터는 쉽게 말해 메모리에 굳이 남아있을 필요없는 쓰레기들을 주워가는 쓰레기 콜렉터죠. 우리가 쓰는 언어들 대부분 가비지 컬렉터가 구현되어 있어서 굳이 이걸 왜 알아야할까 싶기도 합니다. 우리가 가비지 컬렉터를 알아야 하는 이유는 명확합니다.가비지 컬렉터의 작동 방식을 이해하면 메모리 누수나 성능 저하, 오버플로우와 같은 문제를 미리 예방할 수 있기 때문입니다. 메모리 관리에 소홀하게 되면 정말 크나큰 문제가 생기기도 하는데, 극단적인 사례가 하나있습니다. 1996년 '아리안 5'라는 로켓 하나가 폭발하게 됩니다. 유럽도 인간을 우주에..

[세미나] HTTP A to Z

HTTP를 가능하게 해주는 인터넷 네트워크 IP TCP, UDP PORT DNS URI와 웹브라우저 요청 흐름 URI 웹브라우저 요청 흐름 HTTP 기본 클라이언트 서버 Stateful, Stateless 비연결성 HTTP 메세지 HTTP 메서드 GET POST PUT PATCH DELETE 그외 HTTP 상태코드 1XX - 요청 처리중 2xx - 성공 3xx - 리다이렉션 4xx - 클라이언트 오류 5xx - 서버오류 HTTP 헤더 일반헤더 표현 콘텐츠 협상 전송방식 인증 쿠키 캐시와 조건부 요청 캐시 기본동작 검증헤더와 조건부 요청 프록시캐시 캐시 무효화 HTTP통신에 대해 좀더 깊게 공부해보고싶다는 갈망이 있던 차에 HTTP A to Z 라는 주제를 뽑게 되었습니다. 이번 세미나를 위해 인프런에서 ..

[세미나] 앱 라이프 사이클

포그라운드(Foreground) & 백그라운드(Background) 기본 개념 포그라운드와 백그라운드에 대해, 두 가지 관점에서 이야기 할 수 있습니다. 앱 상태에 따른 구분: 일반적으로, 화면에 보이는지 아니면 보이지 않는 상태에서 실행되고 있는지에 따라 각각 포그라운드와 백그라운드에 있다고 말합니다. 앱 내 특정 작업의 실행 환경에 따른 구분: 앱 자체는 포그라운드에 있더라도, 그 앱의 특정 작업은 백그라운드에서 실행된다고 말할 수 있습니다. 예를 들면, UI 관련 작업은 포그라운드에서, 데이터 처리는 백그라운드에서 실행될 수 있습니다. 앱의 상태(생명주기) Android 앱(액티비티)의 실행 상태 onCreate(): 액티비티가 생성될 때 호출되며, 초기화 작업을 수행합니다. onStart(): 액..

카테고리 없음 2023.04.13

[세미나] Flutter의 상태관리 라이브러리 비교

프런트 개발은 데이터들의 상태관리가 매우 중요합니다. 상태란 사용자에게 보여지는 모든 ui에 영향을 줄 수 있는 모든 데이터들이라고 할 수 있습니다. 하드코딩으로 앱개발을 하지 않는 이상 상태관리는 꼭 필요한데요. 이런 상태관리를 용이하게 해주기 위해 flutter는 많은 상태관리 라이브러리들이 있습니다. 데이터의 복잡도와 크기에 따라서 또는 팀원들의 숙련도와 인원 수 에따라서 상태관리 라이브러리를 결정하곤 합니다. 오늘은 저희가 사용하는 Flutter에서의 상태관리 라이브러리들의 특징을 알아보려고 합니다. 상태관리란 무엇일까요? 상태라고 하면 추상적으로 다가올 수 있지만 상태란 Data와 동일하다고 생각하면 상태관리라는 말이 좀 더 자연스럽게 다가옵니다. flutter에 대입하여 보면 flutter는 ..

카테고리 없음 2023.04.13

[Flog Favorite] go_router 패키지

Flutter에는 정말 많은 패키지들이 존재하고, 지금도 누군가는 새로운 기능, 유용한 기능을 만들어 내고 있다. 필자는 항상 패키지의 사용 대신, 직접 구현을 하고자 하려는 편인데, 쉽지않다. 또한 생산성 측면에서도 아주 최악이다. 그럼에도 직접 구현을 하는 것에 여러가지 장점이 있다고 생각하지만, 커뮤니티 내에서 생산되는 수많은 패키지들에 대한 정보들을 아는 것 또한 개인의 업무 역량, 효율적인 시간 투자 등 여러 이점을 제공한다고 생각하여 많은 패키지들을 알아보기로 하였다. 그래서 Flog Favorite 을 또 새로 만들었다. 현재 진행하고 있는 프로젝트 내부에는 GetX에서 제공하는 route 기능을 사용하고 있다. 각각 view의 위치 및 기능 등에 맞추어 일련의 규칙에 따라 route 이름을..

Weekly Flutter 2023.03.22

[Flutter 주석 파헤치기] 03-2. Key

저번 시간에는 Flutter에서의 Key의 개념과, 그 하위 클래스 중 하나인 GlobalKey에 대해서 알아보았다. 이번 시간에는 Key의 나머지 하위 클래스인 LocalKey에 대해서 알아보도록 하자. 2. LocalKey Key 클래스 중에서 GlobalKey를 제외한 나머지는 전부 LocalKey에 해당한다. A key that is not a [GlobalKey]. LocalKey에 달려 있는 얼마 안 되는 주석 중에서, 다음 항목을 보며 저번 시간에 대한 복습을 하도록 하자. Keys must be unique amongst the [Element]s with the same parent. By contrast, [GlobalKey]s must be unique across the entire..

카테고리 없음 2023.03.22

[Flutter Widget] 무한 스크롤 위젯

무한 스크롤 위젯은 대용량 데이터 세트를 탐색할 때 원활한 사용자 경험을 제공하기 위해 SNS서비스 등에서 널리 사용되는 기술입니다. pub.dev의 Flutter Favorite 패키지인 infinite_scroll_pagination 패키지를 통해 적용하는 방법을 알아보겠습니다. 사용방법은 간단합니다. 스크롤이 특정 위치(마지막)에 도달하면 자동으로 pagination이 가능한 api에서 지속적으로 다음 페이지의 데이터를 가져와서 child에 추가해주는 코드입니다. pagination이 가능한 api에서 데이터를 가져오는 함수를 추가해줍니다. static const _pageSize = 20; Future _fetchPage(int pageKey) async { try { final newItems ..

카테고리 없음 2023.03.15

다트의 인스턴스 복사

우리 앱의 식단 기록 기능을 구현하던 중, 깊은 복사의 중요성을 간만에 느끼게 되어 작성하게 되었습니다. List, Map 또는 클래스 안에 다른 인스턴스들을 넣어 사용할 때 리마인드 할 수 있다면 좋을 것 같습니다. 원본은 바꾸고 싶지 않다고 우리 앱의 식단 기록 기능은 다른 기록 기능들보다, 1회 기록 할 때의 데이터 크기가 큽니다. 또한, 사용자가 원하는 대로 그 데이터를 수정할 수도 있죠. 실제 식단 기록 과정을 예로 들면, 1회 식단 기록 안에는 다수의 음식 정보, 끼니 타입, 시간 등이 존재하고, 음식 정보 안에는 섭취 용량, 단위 정보 등이 존재합니다. 간식의 경우에는 이 식단 정보가 다수로 존재할 수도 있고, 기록 전에 사용자는 대부분의 정보를 조작할 수 있습니다. 사진이나 새로운 음식을 ..

Weekly Flutter 2023.03.15