어플 개발에서 드모르간 법칙

앱을 만들다 보면 조건이 늘 “좋은 형태”로만 들어오지 않습니다. 서버는 실패 상태를 부정 플래그로 내려주고, OS 권한은 기본적으로 거부/미결정 상태가 섞여 있으며, 외부 SDK는 isInvalid처럼 부정형 상태를 그대로 제공합니다. 이런 상태에서 조건식을 억지로 긍정 논리로만 유지하려고 하면 NOT NOT 같은 이중 부정이 늘고 괄호가 복잡해지면서, 작은 실수 하나가 화면 진입 오류나 권한 우회 같은 문제로 … 더 읽기

앱 실무에서 불리언 대수

앱 개발 실무에서 가장 흔한 장애 원인은 복잡한 조건식이 서로 다른 곳에서 제각각 구현되거나, AND/OR/NOT 조합이 의도와 다르게 평가되는 경우입니다. 로그인, 권한, 결제, 구독, 폼 검증, 네트워크 예외, 기능 플래그 같은 핵심 흐름은 모두 “참/거짓” 판단으로 구성되고, 이 판단이 조금만 어긋나도 버튼이 잘못 활성화되거나(누르면 실패), 권한이 뚫리거나(보안 이슈), 결제가 중복되거나(금전 이슈), 화면이 무한 로딩에 빠지는(UX … 더 읽기

앱 제작에서 비트 개념

앱을 만들 때 “비트(bit)”는 이론 용어가 아니라 실무에서 매일 마주치는 설계 단위입니다. 화면에 보이는 글자, 서버로 보내는 요청, 로컬에 저장하는 설정값, 이미지·오디오 파일, 심지어 “로그인됨/아님” 같은 상태까지도 결국은 비트들의 조합으로 표현됩니다. 문제는 비트 자체가 의미를 갖는 게 아니라, “이 비트열을 무엇으로 해석할지”에 대한 약속(문맥)이 있어야만 제대로 동작한다는 점입니다. 앱 개발에서 자주 터지는 버그 상당수가 이 … 더 읽기

조건문/반복문 실전 예제

조건문(if/switch)과 반복문(for/while)은 문법을 외우는 순간에는 쉬워 보이지만, 실제로는 “언제 if를 쓰고, 언제 while을 걸어야 하는지”가 헷갈리기 시작합니다. 가장 빠르게 감을 잡는 방법은 입력값 검증 예제로 배우는 겁니다. 회원가입처럼 사용자가 값을 입력하고, 그 값이 이상하면 막고, 다시 입력받는 흐름에서 조건문과 반복문이 자연스럽게 같이 쓰이기 때문입니다. 이번 글에서 “문법 설명”보다 예제 상황을 먼저 보여주고, 그 안에서 조건문과 … 더 읽기

Flutter 컬렉션 기본: List / Map / Set 선언과 수정

Flutter 개발에서 컬렉션(List/Map/Set)은 상태(state), UI 렌더링 데이터, API 응답 파싱 결과를 담는 핵심 자료구조입니다. 문제는 “담는 것”보다 어떻게 바꾸는지(수정), 그리고 어떻게 안 바뀌게(불변) 설계하는지에서 실수가 많이 난다는 점입니다. 이 글에서 선언/수정/불변 패턴을 한 번에 정리해드리겠습니다. List / Map / Set 요약 List: 순서가 있는 값들의 묶음 (인덱스로 접근, 중복 허용) Map: key → value 매핑 … 더 읽기

변수 스코프와 생명주기

Flutter(Dart)로 앱을 만드시는 초보자분들은 질문이 거의 비슷합니다. “변수는 어디에 저장돼요?”, “왜 값이 자꾸 초기화돼요?”, “왜 UI가 안 바뀌죠?” 같은 질문입니다. 이 문제의 핵심은 대부분 스코프(scope) 와 생명주기(lifetime) 를 제대로 구분하지 못해서 생깁니다. 이번 글에서는 전역/지역/클래스 필드의 스코프 차이, Flutter에서의 상태 생명주기, 그리고 실수를 유발하는 shadowing(섀도잉)까지 한 번에 정리해드리겠습니다. 변수 스코프(scope) 스코프는 “이 변수를 어디에서 접근할 … 더 읽기

const 생성자, const 컬렉션, canonicalization

Dart/Flutter에서 const는 단순히 “값이 안 바뀐다”를 넘어, 컴파일 타임 상수(compile-time constant) 를 만들고, 동일한 const 표현식은 하나의 인스턴스로 공유(canonicalization) 되며, Flutter에서는 이 특성이 위젯 트리에서 불필요한 객체 생성을 줄이는 방법입니다. const 생성자 클래스에 const 생성자를 붙인다는 건, 그 클래스가 “상수 인스턴스”로 만들어질 자격이 있다는 선언입니다. 다만 여기서 상수 인스턴스라는 말은 감성적인 표현이 아니라, “컴파일 타임에 … 더 읽기

Null safety(널 안정성) ?, !, late 필요한 이유

Flutter 하다가 name.length 한 줄 썼는데 갑자기 에러가 뜨고, ! 붙이니까 또 어느 날 앱이 크래시 나는 경험을 하게 됩니다. 그 원인은 대부분 null safety에서 ?, !, late를 헷갈려서입니다. 이 글에서 세 가지를 “실무에서 왜 자주 쓰는지” 기준으로 깔끔하게 정리해드리겠습니다. Null safety 한 줄 정의 Dart의 null safety는 “null이 들어올 수 있는지”를 타입으로 구분해서 위험한 … 더 읽기

var 잘못하면 dynamic, Object? 처리

Dart(Flutter)에서 var는 “타입을 자동으로 정해주는 키워드”로 알려져 있습니다. 그래서 많은 초보자가 var를 “타입을 안 써도 되는 편한 문법” 정도로만 이해하고 넘어가는데, 이 과정에서 자주 생기는 오해가 하나 있습니다. var는 보통 안전하게 타입을 추론해 고정해주지만, 작성 방식이 조금만 어긋나면 결과적으로 dynamic처럼 느슨해지거나, 혹은 Object?로 다뤄야 하는 상황이 생긴다는 점입니다. 이 글에서는 “var를 잘못 쓰면 왜 dynamic/Object?처럼 … 더 읽기

Flutter(Dart) 변수 값 변경 방법

Flutter로 어플로 만들 때 변수 값 변경이 왜 필요할까요? 변수 값 변경이 불가능한 경우, 변수의 양은 기하급수적으로 늘어나고, 일일이 변수 코드를 작성해야 하기 때문입니다. 이번 글에서 변수 값 변경하는 방법에 대해 자세히 알아보겠습니다. 변수값 바꾸는 방법 Dart(Flutter)에서 변수값을 바꾸는 방법은 간단합니다. 변수에 새 값을 “대입”하면 값이 바뀌죠. 대입은 =로 표현하고, 이미 선언된 변수에 다시 대입하는 … 더 읽기