Menu
Coddy logo textTech

요약 - 사용자 프로필 시스템

Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 29번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 널 안정성(null safety) 개념을 하나로 모으는 완전한 사용자 프로필 시스템을 구축해 보겠습니다. 필수 정보와 선택적 세부 정보가 혼합된 사용자 계정을 관리하는 시스템을 만들 것입니다.

코드를 두 개의 파일로 구성합니다:

  • user_profile.dart: 사용자 계정을 나타내는 UserProfile 클래스를 정의합니다. 어떤 정보가 필수적(예: 사용자 이름)이고 어떤 정보가 선택적(예: 자기소개 또는 전화번호)인지 생각해보세요. 클래스에는 다음이 포함되어야 합니다:
    • Null을 허용하지 않는 String username - 모든 사용자는 사용자 이름을 가져야 합니다.
    • Null을 허용하지 않는 String email - 모든 사용자는 이메일을 가져야 합니다.
    • Null을 허용하는 String? displayName - 사용자는 다른 이름을 표시하고 싶어 할 수 있습니다.
    • Null을 허용하는 String? bio - 모든 사람이 자기소개를 작성하지는 않습니다.
    • Null을 허용하는 int? age - 나이는 선택적인 개인 정보입니다.
    • usernameemailrequired를 사용하는 명명된 매개변수(named parameters) 생성자
    • ??를 사용하여 표시 이름이 설정되어 있으면 표시 이름을 반환하고, 그렇지 않으면 사용자 이름을 반환하는 getDisplayIdentity() 메서드
    • 자기소개가 존재하고 20자보다 길면 첫 20자 뒤에 ...을 붙여 반환하고, 20자 이하이면 전체 자기소개를 반환하며, 자기소개가 없으면 null을 반환하는 getBioPreview() 메서드 (안전한 접근을 위해 ?.를 사용하세요)
    • ??=를 사용하여 현재 null인 경우에만 자기소개를 'Hello, I am new here!'로 설정하는 setDefaultBio() 메서드
    • 사용자의 전체 프로필을 표시하는 printProfile() 메서드
  • main.dart: 사용자 프로필 클래스를 가져오고 널 안정성 기능의 전체 범위를 보여주기 위해 여러 사용자를 생성합니다:
    • 사용자 이름이 'alice_dev'이고 이메일이 'alice@code.com'인 사용자를 생성한 다음, 표시 이름을 'Alice'로, 자기소개를 'Software developer passionate about clean code and testing'으로, 나이를 28로 설정합니다.
    • 사용자 이름이 'bob_builder'이고 이메일이 'bob@build.io'인 사용자를 생성한 다음, 표시 이름만 'Bob'으로 설정합니다.
    • 사용자 이름이 'charlie99'이고 이메일이 'charlie@mail.net'인 사용자를 생성합니다 (모든 선택적 필드는 null로 둡니다).
    • 세 사용자 모두에 대해 setDefaultBio()를 호출합니다.
    • 각 사용자에 대해 순서대로 printProfile()을 호출한 다음, Identity: [getDisplayIdentity()]를 출력하고, 이어서 Bio preview: [getBioPreview()]를 출력합니다.

printProfile() 메서드는 다음 형식으로 출력해야 합니다:

===== User Profile =====
Username: [username]
Email: [email]
Display Name: [displayName or "Not set"]
Bio: [bio or "No bio"]
Age: [age or "Not specified"]

Alice의 자기소개는 이미 값이 있기 때문에 setDefaultBio() 호출 후에도 변경되지 않는 반면, Charlie는 기본 자기소개가 할당되는 것을 확인하세요. 또한 자기소개 미리보기가 Alice의 긴 자기소개는 자르지만, Charlie의 짧은 기본 자기소개는 전체를 보여주는 것을 관찰하세요.

예상 출력:

===== User Profile =====
Username: alice_dev
Email: alice@code.com
Display Name: Alice
Bio: Software developer passionate about clean code and testing
Age: 28
Identity: Alice
Bio preview: Software developer p...
===== User Profile =====
Username: bob_builder
Email: bob@build.io
Display Name: Bob
Bio: Hello, I am new here!
Age: Not specified
Identity: Bob
Bio preview: Hello, I am new here!
===== User Profile =====
Username: charlie99
Email: charlie@mail.net
Display Name: Not set
Bio: Hello, I am new here!
Age: Not specified
Identity: charlie99
Bio preview: Hello, I am new here!

직접 해보기

import 'user_profile.dart';

void main() {
  // TODO: 이메일이 'alice@code.com'인 사용자 'alice_dev'를 생성하세요.
  // displayName을 'Alice'로 설정하세요.
  // bio를 'Software developer passionate about clean code and testing'으로 설정하세요.
  // age를 28로 설정하세요.
  
  // TODO: 이메일이 'bob@build.io'인 사용자 'bob_builder'를 생성하세요.
  // displayName만 'Bob'으로 설정하세요.
  
  // TODO: 이메일이 'charlie@mail.net'인 사용자 'charlie99'를 생성하세요.
  // 모든 선택적 필드는 null로 남겨두세요.
  
  // TODO: 세 사용자 모두에 대해 setDefaultBio()를 호출하세요.
  
  // TODO: 각 사용자 순서대로 (alice, bob, charlie):
  // 1. printProfile()을 호출하세요.
  // 2. "Identity: [getDisplayIdentity()]"를 출력하세요.
  // 3. "Bio preview: [getBioPreview()]"를 출력하세요.
}

객체 지향 프로그래밍의 모든 레슨