프로젝트에서 보기 →

[Freeview] 가장 쉬운 언어, Flutter로 가장 쉽게 앱 개발하기 | 코딩 왕초보를 위한 앱 만들기 풀 패키지

태그
기술 앱개발 앱개발강의 flutter
시작일
종료일
수정일

https://www.youtube.com/watch?v=enGYdDtmTEs

# 1. 이건 꼭 알아야 한다[^1]

[? 질문] 완성된 UI 캡처(레퍼런스)를 기준으로 Flutter에서 화면을 “같은 느낌”으로 빠르게 구현하려면 무엇부터 만져야 하는가[^1]  
[= 답] **배경색(Scaffold/background)**, **아이콘/테마 색상(특히 primaryColor)**, **기본 그림자(elevation) 제거**, 그리고 **여백(Spacer/패딩/간격 상수)과 버튼 높이 같은 규격 값 조정**을 순서대로 손보며 화면의 인상을 맞춘다.[^2]

[? 질문] Flutter 기본 컴포넌트가 “자동으로” 만들어내는 시각 요소(예: 그림자)가 마음에 들지 않을 때 어떻게 제어하는가[^4]  
[= 답] 예시로 버튼/머티리얼 컴포넌트가 기본으로 만드는 그림자는 **elevation 값을 0(또는 ‘none’에 해당하는 설정)**으로 낮춰 없애며, 테두리/경계선이 보이면 관련 속성을 조정해 경계가 사라지게 만든다.[^4]

[? 질문] 화면이 답답해 보이는 문제는 무엇으로 해결하는가[^7]  
[= 답] Column 등 레이아웃을 **Padding으로 감싸거나**, 상수화된 **space(예: regular/large space)**를 적절히 추가하고, 전체 좌우 패딩(예: 20)과 버튼 높이(예: 48) 같은 수치를 지정해 “호흡(여백)”을 확보한다.[^7]

---

# 2. 큰 그림[^1]

이 콘텐츠는 Flutter로 앱 화면을 구현할 때, 이미 완성된 페이지 위젯을 캡처해 둔 레퍼런스를 바탕으로 **스타일(색/그림자/여백/크기)**을 조정해 화면을 “맞춰가는” 과정을 짧게 시연한다.[^1] 작업 흐름은 배경색을 흰색으로 맞추고, 아이콘 테마 색을 primaryColor로 바꾸고, 기본 그림자를 제거한 뒤, Column과 버튼 주변의 패딩/간격을 수치로 조정하는 방식으로 진행된다.[^2]

- **색상(Colors/Theme)**을 먼저 맞춰 전체 인상을 정리한다: 배경을 화이트로, 아이콘 테마는 미리 정의한 primaryColor로 변경한다.[^2]  
- Flutter 기본값이 주는 **그림자(elevation)**는 필요 없으면 제거해 디자인을 깔끔하게 만든다.[^4]  
- 마지막으로 **여백 시스템(Spacer/space 상수/패딩)**과 **버튼 높이(예: 48)** 같은 규격을 잡아 “답답함”을 해소하고 정렬감을 맞춘다.[^7]

---

# 3. 하나씩 살펴보기[^1]

## 3.1 레퍼런스(완성 캡처) 기반으로 작업을 시작한다[^1]

![📸 0:00](https://fileupload.godd.app/api/files/ec76c38a-f0c3-484e-8c62-83526a806acd/download)


화자는 “완성된 페이지 위젯을 캡쳐해 놓은 것”을 가지고, 그 레퍼런스를 기준으로 화면을 맞춰보겠다고 말하며 작업을 시작한다.[^1] 즉, 빈 화면에서 즉흥적으로 만들기보다, 이미 목표로 하는 화면 이미지(캡처)를 기준점으로 두고 “디테일을 잡아가는” 방식이다.[^1]

- 여기서 암묵적으로 전제되는 접근은 다음과 같다.[^1]
  - 목표 화면(캡처)이 있으니, 구현 시에도 **시각적으로 크게 티 나는 요소부터** 맞춘다.
  - 대표적으로 **배경색, 아이콘 색, 그림자 유무, 여백**이 화면의 첫인상을 크게 좌우한다.

> [!NOTE] 레퍼런스 기반 구현의 의미  
> 캡처(목표 이미지)를 놓고, Flutter 위젯의 기본 스타일을 “디자인 의도”에 맞게 하나씩 수정해가며 UI를 수렴시키는 작업 흐름을 보여준다.[^1]

---

## 3.2 배경색을 화이트로 지정해 화면의 바탕을 맞춘다[^2]

![📸 0:12](https://fileupload.godd.app/api/files/c61b274e-d703-4d07-865f-f90c6fca1d75/download)


화자는 “백그라운드 컬러를 … 화이트로” 적용하면 “화이트가 먹힙니다”라고 말하며, 화면 배경색을 흰색으로 맞추는 장면을 보여준다.[^2] 이 단계는 화면에서 가장 면적이 큰 바탕을 먼저 통일함으로써, 이후 요소(버튼/아이콘/여백)가 어떤 대비로 보일지를 안정적으로 판단하게 해준다.[^2]

- 실제로는 다음 같은 조정이 암시된다.[^2]
  - Scaffold의 backgroundColor 또는 상위 컨테이너의 color를 흰색으로 준다.
  - 배경이 흰색으로 바뀌면, 아이콘/텍스트/버튼의 색 대비를 다시 확인할 수 있다.

---

## 3.3 아이콘 테마(IconTheme) 색상을 primaryColor로 변경한다[^3]

![📸 0:20](https://fileupload.godd.app/api/files/af695139-c755-430b-bbdb-fe559c5517aa/download)


화자는 뒤쪽에 “버튼이 있는데 … 아이콘 팀(IconTheme)이라는 부분”이 있다고 말하며, 해당 부분의 컬러를 자신이 정해둔 “컬러스의 파이머리 컬러(primaryColor)”로 바꾸면 변경이 보인다고 설명한다.[^3] 즉, 아이콘 색을 개별 아이콘마다 하드코딩하기보다, 아이콘 테마(또는 테마 컬러)를 통해 일괄적으로 디자인 톤을 맞추는 흐름이다.[^3]

- 이 대목에서 전달되는 포인트는 다음과 같다.[^3]
  - “내가 정해둔” 컬러 시스템(예: `MyColors.primaryColor`)을 만들어 두고 사용한다.
  - IconTheme(혹은 ThemeData.iconTheme 등)를 활용하면, 특정 영역의 아이콘 색을 통일할 수 있다.
  - 컬러를 바꾸면 즉시 화면에서 “바뀐 것”이 확인되므로, UI 피드백 루프가 빠르다.

> [!TIP] 컬러 시스템을 먼저 정해두기  
> 화면을 맞출 때 요소별로 색을 그때그때 정하면 일관성이 깨지기 쉽다. “내가 정해둔 primaryColor” 같은 기준 색을 두고 IconTheme/Theme로 연결하면 톤이 안정적으로 맞춰진다.[^3]

---

## 3.4 Flutter 기본 그림자(elevation)를 제거해 의도한 플랫한 느낌을 만든다[^4]

![📸 0:36](https://fileupload.godd.app/api/files/2473a8b4-8526-4080-91c8-1de353611581/download)


화자는 “기본적으로 그림자를 그려 주고 있어요”라고 말하면서, Flutter의 기본 스타일이 어떤 위젯(버튼/머티리얼 계열)에 **그림자**를 자동으로 붙이고 있음을 지적한다.[^4] 그리고 “그림자를 난 없애고 싶다”라고 하며, 설정을 통해 “경계선이 없어진 것을 볼 수” 있다고 설명한다.[^4]

이 구간의 핵심은, 디자인 레퍼런스가 **플랫(flat)한 UI**를 요구할 때 Flutter 기본값(머티리얼 기본 elevation)이 거슬릴 수 있으며, 이를 속성으로 제어할 수 있다는 점이다.[^4]

- 암시되는 조정 항목[^4]
  - elevation(또는 Material의 shadow 관련 속성)을 0으로 만들어 그림자를 제거한다.
  - 그림자 제거 과정에서 “경계선”처럼 보이던 요소도 함께 정리된다(화자의 표현상 “경계선이 없어진 것”).[^4]
- 결과적으로 버튼/카드가 떠 보이지 않고 배경과 자연스럽게 붙는 느낌을 만든다.[^4]

> [!IMPORTANT] 기본값을 ‘디자인 의도’로 되돌리기  
> Flutter는 기본값으로 “그럴듯한” 머티리얼 스타일을 제공하지만, 레퍼런스 디자인과 다르면 반드시 걷어내야 한다(예: elevation 제거).[^4]

---

## 3.5 레이아웃의 ‘여백이 너무 없다’는 문제를 인지하고 space 상수를 활용한다[^5]

![📸 0:49](https://fileupload.godd.app/api/files/840c8273-48cc-4b4f-839a-5844bf137b31/download)


화자는 Column의 “여백이 너무 없어” 보인다고 말하면서, 현재 레이아웃이 빽빽해 보이는 문제를 짚는다.[^5] 이어서 “리커 … 미리 사이즈 … 앱을 만들어 왔어요”처럼 사전에 어떤 형태의 레이아웃/상수 세팅이 있음을 언급하며, 다음 단계로 간격(스페이싱)을 조정하려는 흐름으로 넘어간다.[^5]

특히 “하이트 … 40을 그냥 먹는 게 아니라 … 스페이스”라는 말로 보아, 단순히 고정 높이 값을 아무 의미 없이 쓰는 것이 아니라, **의미 있는 spacing 상수(예: regular/large)**를 두고 조합해 쓰는 방식을 강조한다.[^6]

- 여기서의 메시지[^5][^6]
  - 여백은 ‘있으면 좋다’ 수준이 아니라, 화면의 가독성과 버튼/텍스트의 숨 쉴 공간을 만든다.
  - spacing을 수치로만 남발하지 말고, “regular/large” 같은 **의미 기반 상수**로 관리하면 일관성이 생긴다.

---

## 3.6 large space를 만들 때 regular space를 더한 형태로 구성한다[^6]

![📸 1:01](https://fileupload.godd.app/api/files/03a864bc-1ece-4325-a534-b5f4c43942b3/download)


화자는 “여기서도 … 레귤러를 한번 …”라는 흐름으로, 간격 시스템을 구성하는 방식을 말한다.[^6] 그리고 “라지 스페이스는 레귤러 스페이스가 더해진 형태로 작성”했다고 설명한다.[^7]

즉, spacing을 완전히 독립적인 값들로 흩뿌리는 것이 아니라, **큰 간격(large)**을 **기본 간격(regular)**의 조합/확장으로 설계하는 방식이다.[^7] 이렇게 하면 전체 UI에서 간격의 리듬이 자연스럽게 통일된다.[^7]

- 예시로 해석 가능한 구조(화자의 설명을 ‘원칙’으로 재구성)[^7]
  - `regularSpace`를 기본 단위로 둔다.
  - `largeSpace = regularSpace + (추가 간격)`처럼 구성해, large가 regular의 연장선이 되게 한다.

> [!TIP] 스페이싱을 ‘단위 시스템’으로 만들기  
> regular/large를 서로 무관한 값으로 두면 화면마다 리듬이 깨진다. large를 regular 기반으로 확장하면 전체 UI가 균질해진다.[^7]

---

## 3.7 Column을 Padding으로 감싸 여백을 추가한다[^7]

![📸 1:07](https://fileupload.godd.app/api/files/67a275d3-c12d-4169-9081-1910e55ca134/download)


화자는 “여백이 조금 답답해 보이지 않으신가요”라고 묻고, 해결책으로 “칼럼을 패딩으로 감싸서 여백을 추가”하겠다고 말한다.[^7] 즉, Column 자체의 자식들 간 간격뿐 아니라, **화면 가장자리(또는 상위 컨테이너)와의 거리**도 부족해 답답한 느낌이 나므로, 외곽 패딩을 준다는 것이다.[^7]

- 적용 방식[^7]
  - Column 위젯을 Padding 위젯으로 감싼다.
  - 패딩 값은 이후 구체적으로 “20”을 언급하며 설정한다.[^8]

---

## 3.8 Column 패딩을 20으로 주고, 버튼 높이를 48 정도로 맞춘다[^8]

![📸 1:23](https://fileupload.godd.app/api/files/c291d3b0-795f-448c-8e17-1dd41648ea68/download)


화자는 “칼럼 여백을 줄 때 … 20으로 주면”이라고 말하며 좌우/상하 여백을 20으로 설정하는 장면을 진행한다.[^8] 또한 “하방 버튼… 사이즈… 버튼에 하이트… 48 정도”라고 하며 하단 버튼의 높이를 약 48로 맞춘다.[^8]

이 구간은 디자인 구현에서 자주 필요한 “규격” 조정의 대표 예시를 보여준다.[^8]

- 수치로 명시된 조정 사항[^8]
  - Column(또는 화면 바디 영역) 패딩: **20**
  - 버튼 높이: **약 48**
- 이렇게 하면 터치 타깃 크기와 시각적 균형이 맞고, 화면의 ‘답답함’이 줄어드는 효과를 노린다.[^8]

> [!IMPORTANT] 수치가 디자인을 결정한다  
> 여백(20), 버튼 높이(48) 같은 수치는 “감”이 아니라 결과물을 좌우하는 명확한 디자인 파라미터로 다룬다.[^8]

---

## 3.9 화면과의 정렬을 맞추고, 바디 영역의 좌우 패딩(20)을 재확인한다[^9]

![📸 1:42](https://fileupload.godd.app/api/files/69d6a341-6cbb-4864-bcae-4042dd53519e/download)


화자는 “이 화면과 … 맞춰줍니다”, “저희 바디 영역을 여기 20이었죠”라고 말하며, 화면 전체 정렬과 바디 패딩 기준(20)을 다시 확인한다.[^9] 즉, 부분적으로 패딩을 넣는 데서 끝나지 않고, 화면의 기준선(바디 영역 패딩)을 중심으로 요소들이 일관되게 정렬되었는지 점검하는 단계다.[^9]

- 전달되는 작업 습관[^9]
  - 한 번 정한 레이아웃 기준(예: 좌우 20)을 유지한다.
  - 요소를 추가/수정할 때 기준선이 흐트러지지 않게 “맞춰준다”.

---

## 3.10 추가 여백을 주어 부담스럽지 않은 화면을 만든다[^10]

![📸 1:51](https://fileupload.godd.app/api/files/37b08402-df2f-470c-84fd-79ad2dc34b7b/download)


마지막으로 화자는 “이 부분에 여백을 줘야 합니다”, “여기서도 부담스럽지 않고 … 좀 더 … 할 수 있게끔”이라는 취지로, 특정 영역에 추가 여백이 필요함을 강조한다.[^10] 결론적으로 이 시연은 기능 구현이 아니라 **UI 디테일(여백/간격/규격) 조정이 사용성 및 인상에 직결**된다는 점을 보여주며 마무리된다.[^10]

- 화자가 말하는 ‘효과’의 방향[^10]
  - 화면이 덜 부담스럽다(빽빽함 감소).
  - 사용자(또는 콘텐츠 맥락상 “디자인/콘텐츠를 보는 사람”)가 더 편안하게 볼 수 있다.

---

# 4. 핵심 통찰[^1]

1. 레퍼런스(캡처)를 두고 구현할 때는 **면적이 큰 요소(배경색)**부터 맞추는 것이 전체 톤을 빠르게 안정시킨다.[^2]  
2. 아이콘 색 같은 반복 요소는 개별 지정보다 **IconTheme + primaryColor 같은 컬러 시스템**으로 통일하는 편이 유지보수와 일관성에 유리하다.[^3]  
3. Flutter(머티리얼) 기본 스타일의 **그림자(elevation)**는 의도와 다르면 과감히 제거해야 레퍼런스에 가까워진다.[^4]  
4. “답답함”은 대개 콘텐츠 자체가 아니라 **여백(패딩/간격)** 부족에서 온다. Column을 Padding으로 감싸는 것만으로도 화면 인상이 크게 바뀐다.[^7]  
5. spacing은 40 같은 숫자를 무작정 쓰기보다, **regular/large 같은 의미 기반 상수 체계**로 설계하면 화면 전반의 리듬이 통일된다.[^6][^7]  
6. 버튼 높이(예: 48)처럼 **규격화된 수치**를 정해두면 화면의 균형과 터치 경험을 동시에 잡을 수 있다.[^8]

- 실행 관점의 시사점[^3][^8]
  - - 프로젝트에 `MyColors.primaryColor`처럼 **기준 색상 팔레트**를 먼저 정의한다.
  - - `regularSpace`, `largeSpace` 같은 **간격 상수**를 만들고 large는 regular 기반으로 확장한다.
  - - 화면 바디 좌우 패딩(예: 20)과 버튼 높이(예: 48) 같은 **디자인 규칙**을 정해 전 화면에 적용한다.

---

## 참고(콘텐츠 정보)

- 제목: [Freeview] 가장 쉬운 언어, Flutter로 가장 쉽게 앱 개발하기 | 코딩 왕초보를 위한 앱 만들기 풀 패키지[^1]  
- 채널: 패스트캠퍼스[^1]  
- 길이: 2분 2초[^1]  
- 링크: https://www.youtube.com/watch?v=enGYdDtmTEs[^1]  
- 키워드: 앱개발, 앱개발강의, flutter, 플러터, dart, 다트, 안드보라, 앱개발입문, 앱개발기초[^1]  

---

[^1]: @[00:00] “완성된 페이지 위젯을 캡쳐해 놓은 것을 가지고… 디테일… 잡아 보도록 하겠습니다”
[^2]: @[00:12] “백그라운드 컬러… 화이트… 이렇게 화이트가 먹힙니다”
[^3]: @[00:20] “아이콘 팀…”, @[00:27] “컬러를… 컬러스의 파이 머리 컬러로 바꿔주면… 바뀐 것을 볼 수 있습니다”
[^4]: @[00:36] “기본적으로 그림자를…”, @[00:43] “그림자를… 없애고… 경계선이 없어진 것을 볼 수 있죠”
[^5]: @[00:49] “이 칼럼의 이 여백에 너무 없어…”
[^6]: @[01:01] “하이트… 40을 그냥 먹는게 아니라… 스페이스…”
[^7]: @[01:07] “레귤러…”, @[01:12] “라지 스페이스는 레귤러 스페이스가 더해진 형태…”, @[01:18] “칼럼을 패딩으로 감싸서 여백을 추가…”
[^8]: @[01:23] “여백… 20으로…”, @[01:29] “버튼에 하이트… 48 정도…”, @[01:34] “여백들을 좀 줄게요”
[^9]: @[01:42] “맞춰줍니다”, @[01:45] “바디 영역… 20이었죠”, @[01:48] “홀… 20…”
[^10]: @[01:51] “이 부분에 여백을 줘야 합니다”, @[01:54] “여기서도 부담스럽지 않고…”
← 프로젝트에서 보기