지식

Flutter 위젯 정렬 완벽 가이드 | Row, Column, MainAxisAlignment, CrossAxisAlignment 이해하기

서론

Flutter 위젯 정렬,

플러터(Flutter)로 UI를 만들다 보면 가장 처음 부딪히는 벽이 바로 **정렬(Alignment)**입니다.
Row, Column, Stack, Align 등 다양한 위젯에서 정렬 방식을 이해하면 더 깔끔하고 유연한 UI를 만들 수 있습니다.
이번 글에서는 플러터의 주요 정렬 속성과 실전 예시를 통해 정렬 개념을 완벽하게 정리해봅니다.


1. Row와 Column의 기본 구조

Row는 가로 방향, Column은 세로 방향으로 위젯을 배치합니다.

Row(
  children: [
    Text('왼쪽'),
    Text('가운데'),
    Text('오른쪽'),
  ],
)
Column(
  children: [
    Text('위'),
    Text('가운데'),
    Text('아래'),
  ],
)

핵심: Row는 MainAxis = 가로축, Column은 MainAxis = 세로축입니다.


2. MainAxisAlignment (주축 정렬)

주축 방향(가로 혹은 세로)의 정렬을 담당합니다.

Row(
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: [
    Text('A'),
    Text('B'),
    Text('C'),
  ],
)
옵션설명
start시작 지점 정렬 (기본값)
center중앙 정렬
end끝 지점 정렬
spaceBetween요소 사이에 균등 간격
spaceAround요소 양쪽 여백 포함 균등 간격
spaceEvenly전체 구간을 균등 분할

3. CrossAxisAlignment (보조축 정렬)

보조축(세로축 혹은 가로축)의 정렬을 설정합니다.

Row(
  crossAxisAlignment: CrossAxisAlignment.center,
  children: [
    Text('Top'),
    Text('Middle'),
    Text('Bottom'),
  ],
)
옵션설명
start위쪽 혹은 왼쪽 정렬
center가운데 정렬
end아래쪽 혹은 오른쪽 정렬
stretch가능한 공간까지 확장

4. Align 위젯으로 개별 위젯 정렬하기

Row나 Column 전체가 아닌 특정 위젯만 정렬하고 싶다면 Align 위젯을 사용합니다.

Align(
  alignment: Alignment.bottomRight,
  child: Text('오른쪽 아래'),
)

Alignment에는 다음과 같은 옵션이 있습니다:

  • Alignment.topLeft
  • Alignment.center
  • Alignment.bottomRight
  • Alignment(x, y) 형태로 세밀한 조정도 가능 (x=-1.0~1.0, y=-1.0~1.0)

5. Stack과 Positioned로 절대 위치 정렬

Stack은 위젯을 서로 겹쳐서 배치하며, Positioned를 사용해 정밀 제어가 가능합니다.

Stack(
  children: [
    Container(width: 200, height: 200, color: Colors.blue),
    Positioned(
      top: 10,
      right: 10,
      child: Text('상단 오른쪽'),
    ),
  ],
)

Tip: Stack은 Z축(겹침)을 표현할 때 유용하지만, 오버플로우를 주의해야 합니다.


6. 실전 예시 – 로그인 화면 정렬

Column(
  mainAxisAlignment: MainAxisAlignment.center,
  crossAxisAlignment: CrossAxisAlignment.stretch,
  children: [
    Text('로그인', textAlign: TextAlign.center),
    SizedBox(height: 20),
    TextField(decoration: InputDecoration(labelText: '아이디')),
    TextField(decoration: InputDecoration(labelText: '비밀번호')),
    ElevatedButton(onPressed: () {}, child: Text('로그인')),
  ],
)

로그인 폼을 화면 중앙에 정렬하고, 버튼은 가로폭 전체를 채워 사용자 경험(UX)을 개선했습니다.


결론

플러터의 정렬은 단순히 위젯을 ‘배치’하는 것이 아니라, UI의 완성도와 반응형 디자인의 핵심 요소입니다.
Row와 Column의 개념을 이해하고 MainAxisAlignment, CrossAxisAlignment, Align, Stack을 조합하면
어떤 화면도 정교하게 컨트롤할 수 있습니다.

eorbaos1985

Recent Posts

Aluminium OS – 구글의 차세대 Android 기반 PC OS

Aluminium OS - Android가 PC로 향하는 이유와 의미 2025년 말, 구글이 내부 코드명 “Aluminium”로 불리는…

3개월 ago

2026년 기준중위소득 100% · 120% — 1~4인 가구 기준 완전정리

1. 2026년 기준중위소득이란? 2026년 기준중위소득은 대한민국 전체 가구의 중간 소득을 의미하며, 정부의 다양한 복지사업과 지원제도의…

3개월 ago

한국, 월드컵 2포트 진입 추진! 월드컵 2포트의 장단점 총정리

월드컵 2포트 진입, 왜 이렇게 중요한가? 한국 축구 대표팀이 월드컵 2포트 진입을 목표로 국제 A매치를…

3개월 ago

플러터 스키아 엔진 완전 이해: 왜 플러터는 스키아로 빠른 UI를 만드는가

플러터 스키아 엔진 완전 이해: 왜 플러터는 스키아로 초고속 UI를 구현할까 플러터(Flutter)는 단 하나의 코드베이스로…

3개월 ago

플러터 그리드 위젯 완벽 가이드: GridView로 반응형 UI 만들기

플러터 그리드 위젯 완벽 가이드 플러터(Flutter)는 하나의 코드베이스로 iOS, Android, Web까지 동시에 빌드할 수 있는…

3개월 ago

Flutter 생명주기 완벽 이해: 위젯의 생성부터 소멸까지 한눈에 정리

Flutter 생명주기란 무엇인가? **Flutter 생명주기(Lifecycle)**란, 앱 실행 중 위젯이 생성되고 사라지기까지의 전 과정을 의미합니다.즉, Flutter…

3개월 ago