Flutter Column과 Row로 화면을 배치하는 방법
·
Flutter
왜 이 내용을 정리하나Flutter에서 화면을 만들 때 위젯을 세로나 가로로 나란히 놓는 일은 거의 모든 화면에서 반복된다. 프로필 카드에서 이미지 옆에 이름과 설명을 두는 경우, 하단 버튼 두 개를 가로로 나누는 경우, 목록 항목 안에서 아이콘과 텍스트를 한 줄에 맞추는 경우가 모두 여기에 해당한다. 이때 쓰는 기본 위젯이 Column과 Row다. 둘의 동작 방식과 정렬 속성을 정확히 알아 두지 않으면 화면이 깨지거나 오버플로우 경고가 계속 나오기 쉽다. 이 노트에서는 Column과 Row의 기본 개념, 정렬 방식, 자주 부딪히는 문제를 정리해 본다.개념 설명Column은 자식 위젯을 위에서 아래로 세로 방향으로 배치한다. Row는 자식 위젯을 왼쪽에서 오른쪽으로 가로 방향으로 배치한다. 두 위젯 모두..
Swift 옵셔널 체이닝으로 중첩 딕셔너리 값 안전하게 꺼내기
·
Swift
왜 이 내용을 정리하나설정 값이나 API 응답처럼 딕셔너리가 여러 단계로 중첩된 데이터를 다룰 때, 중간에 어떤 키가 없을 수 있다. 이때 강제 언래핑(!)을 쓰면 런타임에 크래시가 발생한다. 옵셔널 체이닝은 중간 단계가 nil이면 나머지 접근을 건너뛰고 전체 결과를 nil로 만들어 주기 때문에, 이런 상황을 안전하게 처리하는 기본 도구가 된다. 이 노트에서는 옵셔널 체이닝으로 중첩 딕셔너리를 조회하는 방법과 그 과정에서 생기는 함정을 정리해 본다.개념 설명Swift에서 딕셔너리의 subscript 접근 dict[key]는 항상 옵셔널을 반환한다. 키가 존재하면 값이 감싸진 옵셔널이, 없으면 nil이 나온다. 여기에 ?를 붙이면 옵셔널 체이닝이 된다. config[section]?[network]처럼 쓰..
Flutter에서 StatelessWidget과 StatefulWidget을 나누는 기준
·
Flutter
왜 이 내용을 정리하나Flutter로 화면을 만들다 보면 위젯 클래스를 만들 때마다 StatelessWidget으로 할지 StatefulWidget으로 할지 먼저 고민하게 된다. 버튼을 누르면 숫자가 바뀌는 카운터, 체크박스 상태, 입력창에 적힌 글자처럼 화면 안에서 값이 변하는 경우에는 StatefulWidget이 필요하다. 반대로 받은 값을 그대로 화면에 그리기만 하는 경우에는 StatelessWidget으로 충분하다. 이 구분을 잘못하면 상태가 필요 없는 위젯을 괜히 복잡하게 만들거나, 반대로 값이 바뀌어도 화면이 갱신되지 않는 문제가 생긴다. 이 노트에서는 두 위젯의 차이와 나누는 기준을 정리해 본다.개념 설명StatelessWidget은 생성된 뒤에 자기 안에서 바뀌는 값을 갖지 않는다. bui..
Python 딕셔너리 컴프리헨션으로 리스트를 키-값 쌍으로 바꾸고 중복 키 동작 확인하기
·
Python
왜 이 내용을 정리하나리스트로 받은 데이터를 조회하기 쉬운 딕셔너리로 바꾸는 작업은 실무에서 자주 나온다. API 응답에서 ID 목록을 받아 이름을 찾거나, CSV 한 줄씩 읽은 레코드를 키 기준으로 정리하거나, 설정 값 목록을 이름으로 찾는 상황이 대표적이다. 이때 딕셔너리 컴프리헨션을 쓰면 반복문 없이 한 줄로 변환할 수 있다. 다만 같은 키가 여러 번 나오면 어떤 값이 남는지 모르고 쓰면 데이터가 조용히 사라지기 때문에, 이 동작을 직접 확인해 두는 것이 중요하다. 이 노트에서는 딕셔너리 컴프리헨션의 기본 문법과 중복 키에서 마지막 값이 남는 이유, 그리고 그 동작을 확인하는 방법을 정리해 본다.개념 설명딕셔너리 컴프리헨션은 리스트 컴프리헨션과 같은 형태로 쓴다. 중괄호 안에 키표현식: 값표현식 f..
Python 함수 정의와 리스트 순회 기본 예제 정리
·
Python
왜 이 내용을 정리하나파이썬으로 데이터를 다룰 때 가장 자주 쓰는 패턴은 리스트를 받아 조건에 맞는 값만 골라 가공하는 것이다. 숫자 목록에서 짝수만 뽑거나, 문자열 목록에서 특정 글자로 시작하는 항목만 모으는 작업이 대표적이다. 이런 작업은 함수로 감싸 두면 호출하는 쪽에서 입력과 출력만 신경 쓰면 되므로 코드가 읽기 쉬워진다. 그래서 함수를 정의하는 문법과 for 문으로 리스트를 순회하는 방식을 함께 익혀 두면 이후의 여러 예제를 이해하는 데 도움이 된다. 이 노트에서는 함수 정의, 리스트 순회, 조건문, 리스트에 값을 쌓는 방법을 짧은 예제 하나로 묶어서 정리해 본다.개념 설명파이썬에서 함수는 def 키워드로 정의한다. def 다음에 함수 이름과 괄호 안의 매개변수 목록을 쓰고, 콜론 뒤에 들여쓰기..
React useState로 카운터 상태 관리하기 - 가장 짧은 함수형 컴포넌트
·
React
왜 이 내용을 정리하나React를 처음 배울 때 가장 먼저 부딪히는 개념이 상태(state)다. 일반 변수에 값을 넣고 화면을 갱신하려고 하면 화면이 바뀌지 않는 경우가 많다. 이유는 React가 렌더링 결과를 추적하는 방식과 관련이 있다. 값이 바뀌었다는 사실을 React에 알려야 컴포넌트가 다시 실행되고, 그 결과가 화면에 반영된다. 이때 쓰는 도구가 useState 훅이다.버튼을 누르면 숫자가 올라가고 내려가는 카운터는 상태 관리의 가장 단순한 형태다. 입력 폼, 토글 버튼, 장바구니 수량 같은 기능도 구조는 같다. 값을 보관하고, 값을 바꾸는 함수를 이벤트에 연결하고, 바뀐 값을 JSX에 출력하는 흐름이다. 그래서 카운터 하나를 제대로 이해해 두면 이후의 상태 관리를 훨씬 덜 헷갈리게 다룰 수 있..
파이썬 제너레이터와 yield로 대용량 파일을 메모리 효율적으로 읽기
·
Python
왜 이 내용을 정리하나파이썬으로 로그 파일이나 CSV 파일을 처리하다 보면, 파일 크기가 수 GB를 넘는 경우를 자주 만난다. 이런 파일을 read()로 통째로 읽으면 전체 내용이 메모리에 올라가서 프로그램이 느려지거나 메모리 부족 오류가 날 수 있다. 그래서 파일을 한 줄씩 읽으면서 필요한 만큼만 메모리에 두는 방법이 필요하다. 이 노트에서는 제너레이터와 yield가 이 문제에 어떻게 쓰이는지 정리해 본다.개념 설명제너레이터(generator)는 값을 한꺼번에 만들어 리스트에 담아 두지 않고, 요청될 때마다 하나씩 만들어 내는 이터레이터이다. 함수 안에서 yield 키워드를 쓰면 그 함수는 일반 함수가 아니라 제너레이터 함수가 된다. yield는 값을 호출한 쪽에 돌려주고 함수의 실행 상태를 그대로 멈..
대학원 해커톤 후기 — 캠퍼스런(CampusRun)을 만든 하루
·
대학원
이번에 대학원에서 하루짜리 해커톤에 참가했다. 결론부터 말하면 우승은 하지 못했다. 그래도 하루 만에 아이디어를 실제로 돌아가는 서비스로 만들어 배포까지 해냈고, 그 과정이 정말 재밌었다.평소에는 각자 연구실에서 따로 지내던 사람들이 한 공간에 모여 밤늦게까지 같은 문제를 붙잡고 있는 경험은 생각보다 훨씬 특별했다. 이 글은 우리 팀 숟가락이 만든 서비스 캠퍼스런(CampusRun)과 그날 하루의 기록이다. 아이디어: "학식 포장 좀 해줄 사람?"아이디어는 우리 모두의 경험에서 나왔다. 수업이나 과제 중에 "학식 포장만 좀", "출력물만 가져다줬으면", "택배만 받아줬으면" 하는 5~20분짜리 잔심부름이 자주 생긴다. 그런데 부탁할 친구가 마침 근처에 없으면 결국 카톡으로 아는 사람을 수소문해야 했다.기..
2026학년도 1학기를 마치며
·
대학원
바쁜 일상 속에서도 의미 있는 성과를 만들어낼 수 있다는 것을 깨달은 한 학기였습니다.바쁜 일상 속의 학업이번 1학기는 정말 알찬 한 학기였습니다. 저는 기계학습개론, 생성모델응용, 컴퓨터시스템, 프로그래밍특론 이 네 개의 강의를 수강했습니다. 각 강의는 저에게 새로운 지식의 문을 열어주었고, 동시에 깊이 있는 학습의 기회를 제공했습니다.하지만 무엇보다 도전적이었던 점은 회사에 다니면서 이 모든 학업을 병행해야 했다는 것입니다. 아침에는 업무에 집중하고, 저녁에는 강의를 듣고, 밤에는 과제와 공부를 하는 일정은 솔직하게 말해서 생각보다 훨씬 힘들었습니다. 때로는 포기하고 싶은 마음도 들었지만, 그때마다 저 자신을 다시 다잡고 한 발 한 발 나아갔습니다. 그 과정에서 저는 제 안에 있던 힘을 발견했고, 불..
국민대학교 소프트웨어융합대학
·
대학원
요즘 회사 생활을 하면서 석사 면접도 보고 이런저런 준비를 하느라, 정말 오랜만에 블로그에 글을 올리게 됐다.하루하루는 바쁘게 지나가는데, 문득 “지금 이대로 괜찮을까?”라는 생각이 들면서 자연스럽게 다시 공부에 대한 욕심이 생겼다.회사에서 실무를 하다 보니 개발이라는 게 단순히 코드만 잘 짜는 걸 넘어서,설계, 문제 정의, 기술 선택의 이유까지 함께 고민해야 한다는 걸 점점 더 크게 느끼게 됐다.그 과정에서 스스로 부족하다고 느끼는 부분도 많았고, 체계적으로 다시 한 번 정리해보고 싶다는 생각이 들었다.그렇게 고민 끝에 도전하게 된 게 바로 국민대학교 소프트웨어융합대학 석사 과정이다.면접을 준비하면서 오랜만에 이론도 다시 보고,왜 개발을 시작했는지, 앞으로 어떤 개발자가 되고 싶은지도 많이 돌아보게 됐..