본문 바로가기

전체 글

Flutter 기반 함수형 에러핸들링 Flutter에서의 함수형 에러 처리 Dart 언어는 에러를 처리하기 위해 try, catch, 그리고 throw와 같은 기본적인 메커니즘을 제공한다. 하지만 함수형 프로그래밍(FP)을 활용하면 더 명확하고 안전한 방식으로 에러를 처리할 수 있다. 이 글에서는 Flutter에서 fpdart 패키지의 Either 타입을 활용한 함수형 에러 처리 방법을 소개한다. 함수형 프로그래밍이란? 함수형 프로그래밍(FP)은 다음과 같은 특징을 지닌 프로그래밍 패러다임이다.순수 함수: 동일한 입력에 대해 항상 동일한 출력을 반환하며, 외부 상태를 변경하지 않음불변성: 데이터가 변경되지 않으며, 새로운 데이터는 기존 데이터를 복사하여 생성선언적 스타일: "무엇을" 해야 하는지에 집중하며, "어떻게" 해야 하는지는 추상화이.. 더보기
SOLID 원칙 Flutter 프로젝트에 적용하기 SOLID 원칙은 소프트웨어 개발에서 객체 지향 프로그래밍(OOP)의 설계 원칙으로, 유지보수성과 확장성을 높이며 변경에 따른 부작용을 줄이는 데 도움을 준다. 이 원칙은 2000년 Robert C. Martin(일명 Uncle Bob)에 의해 소개되었으며, 이후 Michael Feathers가 SOLID라는 약어를 만들면서 사용되기 시작했다. 각 원칙과 이를 Flutter 프로젝트에 적용하는 방법을 정리해 보았다. 1. S - 단일 책임 원칙 (Single Responsibility Principle, SRP) 정의: 클래스나 모듈은 하나의 책임만 가져야 하며, 변경의 이유도 하나여야 한다. 책임이란 특정 작업이나 기능을 의미하며, 단일 책임 원칙은 클래스가 너무 많은 기능을 담당하지 않도록 설계하는 .. 더보기
Secure API key 사용 플러터 개발을 할 때 API 키와 같은 민감한 정보를 어떻게 안전하게 보호할 수 있을까? 이 포스팅에서는 다양한 방법과 각 방법의 장단점을 정리해 보도록 한다. 1. App Build 파일에 API 키를 포함하는 것은 위험하다.App Build 파일에 포함된 거의 모든 정보는 복호화가 가능하다. 여기에는 주석으로 남겨둔 테스트 계정 정보, API 키, 혹은 실수로 포함된 개인적인 데이터까지 포함된다.예: Android Studio의 APK 분석기를 사용하면 빌드 파일에 포함된 리소스를 쉽게 볼 수 있다. 2. 개선된 방법: .env 파일 사용.env 파일을 사용하면 민감한 정보를 프로젝트 내에서 분리하여 관리할 수 있다. flutter의 경우 flutter_dotenv 패키지를 활용하면 .env 파일에 .. 더보기
Flutter에서 Android MacAddress 에러 기존에 배포하던 태블릿 기기에서 사용하던 MAC 주소 접근 방법이 김수석님이 사용하는 폰에서는 동작하지 않는 문제가 발견되었다. 기존 배포용 태블릿 안드로이드 버전은 Android11 이었으며, '/sys/class/net/wlan0/address' 파일을 통해 MAC 주소를 가져오는 방법을 사용하고 있었다. 문제는 이러한 방법은 네트워크 인터페이스의 설정 파일에 직접 액세스하여 MAC 주소를 가져오기 때문에 상대적으로 간단하고 편하지만 결국은 트릭키한 방법이기 때문에 안드로이드 버전에 따라 동작하지 않을 수 있다는 것이다. 현재 안드로이드의 보안 및 프라이버시 정책은 지속적으로 강화되고 있으며, 특정 디렉토리나 파일에 대한 접근을 제한하는 추세이다. 검색해보니 기존에 동작하던 Android 11에서도 .. 더보기
2024 마라톤 일정 (서울) - 4월 말 이후 👉 2024년 4월 20일 (토) - 여명국제마라톤 장소: 서울한강시민공원 뚝섬지구수변광장 시간: 오전 9시 출발 비용: Full(5만원), Half(4만원), 10km(3.5만원), 5km(3만원) 특이사항: 2인 이상 기념품 1) 접이식 스포츠 롤백 2) 그래미 여명1004 (2캔) 👉 2024년 4월 21일 (일) - 고양특례시 JTBC마라톤 장소: 고양종합운동장 시간: 오전 8시 출발 비용: Half(7만원, 2시간 30분), 10km(6만원, 1시간 20분), 5km(4만원) 특이사항: 기록모아 사이트에 최근 5년 오프라인 대회 기록증 제출 기념품 1) 티셔츠 2) 스포츠 양말 3) 맨소래담 👉 2024년 4월 28일 (일) - 튼튼이마라톤 장소: 서울한강시민공원 뚝섬지구수변광장 시간: 오전 .. 더보기
git branch 이용하여 코드 반영, 머지하기 git branch를 이용하여 임시 작업 중 코드를 공유하고 작업 완료 후 메인에 머지하는 절차를 기술 Office 1. git checkout main 후, git pull로 코드 최신화 진행 2. git branch honken // 임시 작업용 브랜치를 생성한다. 3. git branch로 브랜치 생성 여부 확인 Honken@WIN-7L2FHRE2JFR MINGW64 /c/dev/02_remote/work/temp (main) $ git branch honken - main 4. git checkout honken 명령어로 작업을 반영할 브랜치로 갈아탄다. 5. 작업 후 작업내용 add 및 commit 진행 6. git push origin honken 명령어로 honken에 push 진행 7. 이.. 더보기
forEach vs map forEach와 map은 Dart에서 컬렉션을 탐색하는 데 사용되는 메서드로, 각각의 사용 목적과 반환 값에 차이가 있다. forEach: List numbers = [1, 2, 3, 4, 5]; numbers.forEach((number) { print(number * 2); }); 사용목적 - forEach는 컬렉션의 각 요소에 대해 특정 동작을 수행하고자 할 때 사용된다. - 주로 컬렉션을 반복하면서 각 요소에 대해 일련의 작업을 수행하고 싶을 때 활용된다. 반환 값 - forEach는 반환 값이 없다. void를 반환하며, 각 요소에 대해 주어진 동작이 실행된다. map: List numbers = [1, 2, 3, 4, 5]; List doubledNumbers = numbers.map((num.. 더보기
Dart 내용 정리 Dart 변수는 기본적으로 Camel Case를 따른다. var vs dynamic - var로 선언 후 값이 처음 담기면 이 때 지정된 타입으로 고정된다. - 즉, var tmp1 = 'This is Var'; 라고 적는 순간 tmp1 = 100;은 불가능 하단 소리다. - 하지만 dynamic은 이러한 처리가 가능하다. - 다만 var의 경우도 만약 var tmp1; 식으로 선언하게 되면 이후 tmp1 = 'This is Var'; tmp1 = 100; 처리가 가능하다. final vs const - final 또는 const 키워드로 선언된 값은 변경이 불가능하다. - 다만 final은 런타임에 값을 지정하는 것이 허용이 된다. - 예를 들어, 현재 시각을 변수에 담는다고 할 때 const는 이것이.. 더보기