플러터 강좌: 13.1 조건문과 로그인 기능 구현

안녕하세요! 이번 강좌에서는 플러터에서 조건문을 사용해 로그인 기능을 구현하는 방법에 대해 알아보겠습니다. 플러터는 구글에서 개발한 UI 툴킷으로, iOS와 Android를 포함한 다양한 플랫폼에서 애플리케이션을 쉽게 만들 수 있도록 돕습니다. 조건문은 프로그램의 흐름을 제어할 수 있는 중요한 요소입니다. 그럼 본격적으로 시작해 보겠습니다.

1. 조건문의 개요

조건문은 주어진 조건이 참인지 거짓인지를 평가하여 프로그램의 흐름을 결정하는 데 사용됩니다. 플러터(또는 다트 언어)에서는 주로 ‘if’, ‘else if’, ‘else’, ‘switch’ 문을 사용하여 조건을 평가합니다.

        
        // 간단한 예제
        if (조건) {
            // 조건이 참일 때 실행되는 코드
        } else {
            // 조건이 거짓일 때 실행되는 코드
        }
        
    

이와 같은 조건문을 활용하면 유저의 입력에 따라 동적인 사용자 경험을 제공할 수 있습니다. 이를 통해 플러터 애플리케이션의 꼭 필요한 기능인 로그인 화면을 구현할 수 있습니다.

2. 로그인 화면 설계

로그인 화면은 사용자로부터 ID와 비밀번호를 입력받는 간단한 폼으로 구성됩니다. 이번 강좌에서는 텍스트 필드와 버튼을 사용하여 로그인 화면을 구현할 것입니다.

2.1 템플릿 구조

        
        import 'package:flutter/material.dart';

        void main() {
          runApp(MyApp());
        }

        class MyApp extends StatelessWidget {
          @override
          Widget build(BuildContext context) {
            return MaterialApp(
              home: LoginScreen(),
            );
          }
        }

        class LoginScreen extends StatefulWidget {
          @override
          _LoginScreenState createState() => _LoginScreenState();
        }

        class _LoginScreenState extends State {
          // ID와 비밀번호를 저장할 변수
          String _username = '';
          String _password = '';

          @override
          Widget build(BuildContext context) {
            return Scaffold(
              appBar: AppBar(
                title: Text('로그인 화면'),
              ),
              body: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  children: [
                    TextField(
                      decoration: InputDecoration(labelText: '아이디'),
                      onChanged: (value) {
                        _username = value;
                      },
                    ),
                    TextField(
                      decoration: InputDecoration(labelText: '비밀번호'),
                      obscureText: true,
                      onChanged: (value) {
                        _password = value;
                      },
                    ),
                    ElevatedButton(
                      onPressed: _login,
                      child: Text('로그인'),
                    ),
                  ],
                ),
              ),
            );
          }
        }
        
    

3. 로그인 기능 구현

로그인 버튼을 클릭하면 특정 조건에 따라 로그인이 성공했는지 확인하는 기능을 구현해야 합니다. 이때, 본인의 아이디와 비밀번호를 미리 설정하여 확인하겠습니다.

        
        void _login() {
          // 미리 설정한 아이디와 비밀번호
          const String predefinedUsername = 'user';
          const String predefinedPassword = 'password';

          // 조건문을 사용하여 로그인 확인
          if (_username == predefinedUsername && _password == predefinedPassword) {
            // 로그인 성공
            showDialog(
              context: context,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: Text('로그인 성공'),
                  content: Text('환영합니다!'),
                  actions: [
                    TextButton(
                      child: Text('확인'),
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                    ),
                  ],
                );
              },
            );
          } else {
            // 로그인 실패
            showDialog(
              context: context,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: Text('로그인 실패'),
                  content: Text('아이디 또는 비밀번호가 틀렸습니다.'),
                  actions: [
                    TextButton(
                      child: Text('확인'),
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                    ),
                  ],
                );
              },
            );
          }
        }
        
    

위 코드에서는 사용자가 입력한 아이디와 비밀번호가 미리 정의된 정보와 일치하는지를 확인합니다. 일치할 경우 로그인 성공 메시지를 팝업으로 표시하며, 일치하지 않을 경우 로그인 실패 메시지를 표시합니다. 우리는 조건문을 활용하여 흐름을 제어하고 있습니다.

4. 로그인 성공 시 화면 전환

로그인이 성공하면 사용자를 다른 화면으로 전환할 수 있습니다. 예를 들어, 메인 화면으로 이동할 수 있습니다. 아래는 로그인 성공 시 화면을 전환하는 코드입니다.

        
        void _login() {
          const String predefinedUsername = 'user';
          const String predefinedPassword = 'password';

          if (_username == predefinedUsername && _password == predefinedPassword) {
            // 로그인 성공 시, 메인 화면으로 이동
            Navigator.pushReplacement(
              context,
              MaterialPageRoute(builder: (context) => MainScreen()),
            );
          } else { /* ... (로그인 실패 처리) ... */ }
        }

        class MainScreen extends StatelessWidget {
          @override
          Widget build(BuildContext context) {
            return Scaffold(
              appBar: AppBar(
                title: Text('메인 화면'),
              ),
              body: Center(
                child: Text('환영합니다!'),
              ),
            );
          }
        }
        
    

위의 내용에서 `Navigator.pushReplacement`를 사용하면 로그인 성공 시 새로운 화면으로 전환하며 이전 화면을 스택에서 제거하여 돌아올 수 없게 합니다.

5. 조건문 한 번 더 활용하기

조건문은 로그인 기능 외에도 사용자의 입력에 따라 다양한 기능을 추가할 수 있습니다. 예를 들어, 사용자가 비밀번호를 잊어버렸을 때 비밀번호 찾기 링크를 제공하는 것과 같은 기능을 생각해 볼 수 있습니다.

        
        // 비밀번호 찾기 버튼 추가 예제
        Column(
          children: [
            // 기존 입력 필드...
            TextButton(
              onPressed: () {
                // 비밀번호 찾기 처리
                _forgotPassword();
              },
              child: Text('비밀번호를 잊으셨나요?'),
            ),
          ],
        );

        void _forgotPassword() {
          // 비밀번호 찾기 로직 처리
          showDialog(
            context: context,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text('비밀번호 찾기'),
                content: Text('등록된 이메일로 비밀번호 재설정 링크를 전송했습니다.'),
                actions: [
                  TextButton(
                    child: Text('확인'),
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                  ),
                ],
              );
            },
          );
        }
        
    

6. 마무리

이번 강좌에서는 플러터를 사용하여 로그인 기능을 구현하고, 조건문을 통해 로그인 성공 여부를 판별하는 방법에 대해 알아보았습니다. 조건문을 적절히 활용하면 사용자 경험을 개선하고 동적인 애플리케이션을 만드는 데 큰 도움이 됩니다.

이제 여러분도 자신만의 로그인 기능을 구현하여 더 많은 기능을 추가해보세요. 각종 연습과 실습을 통해 다양한 조건문을 사용하여 복잡한 로직을 이해하고 구현하는 데 도움을 받을 수 있습니다.

감사합니다!