기본 콘텐츠로 건너뛰기

추천 가젯

리액트 + 비트(Vite)로 모바일 청첩장 만들기 — 1편

모바일 청첩장 시리즈 1편 · 기획/스택/배포 리액트 + 비트(Vite)로 모바일 청첩장 만들기 — 1편 안녕하세요, 이번에 결혼 준비를 하면서 여자친구와 같이 모바일 청첩장 을 만들고 있어요. 여자친구가 디자인을 해서 전달해주면 제가 개발을 진행하고 있어요. 이 글은 구현기 1편 으로, 전체 흐름과 스택, 배포 구성까지 “부담 없이” 훑어봅니다. (코드는 여러 버전 테스트 중!) 이 글에서 보는 것 왜 SPA 모바일 청첩장인가? 기본 스택 & 폴더 구조 라우팅 선택: HashRouter가 편한 이유 Cloudflare Pages로 자동 배포 현재 진행 중인 UI 버전들(테스트 기록) 1) 왜 SPA 모바일 청첩장인가? 모바일 청첩장은 핵심이 명확해요. 가볍고 빠르고 끊김이 없어야 하고, 사진/지도/일정이 터치에 친화적 이어야 합니다. 그래서 React + Vite 로 싱글 페이지 앱(SPA)을 구성했고, 정적 호스팅(CDN)인 Cloudflare Pages 에 올려 GitHub 푸시 → 자동 배포 까지 한 번에 묶었습니다. UX 팁 · 이미지 WebP, loading="lazy" 기본 · 큰 터치 타깃 · BGM은 “사용자 탭 후” 재생(모바일 정책) 2) 기본 스택 & 폴더 구조 서버는 따로 두지 않았고, 정적 빌드 결과물( dist/ )만 올립니다. 현재 의존성은 아래와 같아요. package.json(요약) { "name": ...

📝 dataclasses로 데이터 구조 쉽게 정의하기

Dataclass icon

📝 dataclasses로 데이터 구조 쉽게 정의하기

dataclasses는 Python 3.7부터 도입된 모듈로, 생성자, 비교, 표현식 등을 자동 생성해 클래스를 간결하고 명료하게 정의할 수 있게 합니다. 아래 예제들로 핵심 기능을 살펴보실 수 있어요.

✅ 1. 기본 dataclass 정의와 자동 생성 기능

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int

u = User("홍길동", 30)
print(u)  # User(name='홍길동', age=30)
  • ✨ `__init__`, `__repr__`, `__eq__` 등 기본 메서드가 자동으로 만들어집니다.

✅ 2. 기본값, 타입 힌트, 필드 옵션 설정

from dataclasses import dataclass, field

@dataclass
class Article:
    title: str
    body: str = ""
    tags: list[str] = field(default_factory=list)
    views: int = 0

a = Article("데이터 클래스 예제")
print(a)  # fields default properly initialized
  • ⚠ `default_factory`는 mutable 타입 필드에 안전하게 사용 가능합니다.

✅ 3. `__post_init__()`으로 추가 초기화 처리

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float
    norm: float = 0.0

    def __post_init__(self):
        self.norm = (self.x**2 + self.y**2) ** 0.5

p = Point(3, 4)
print(p.norm)  # 5.0
  • 계산 필드나 검증 로직을 `__post_init__()`으로 넣으면 구조가 더 깔끔해집니다.

✅ 4. 비교, 정렬, 변경 불가능 클래스 만들기

from dataclasses import dataclass

@dataclass(order=True, frozen=True)
class Item:
    price: float
    name: str

i1 = Item(9.99, "A")
i2 = Item(5.00, "B")
print(i1 > i2)  # True
# i1.price = 10  # dataclass is frozen → error
  • `order=True`은 <, > 연산자까지 자동 제공, `frozen=True`는 불변 객체를 만듭니다.

✅ 5. 직렬화 대응: `asdict()`와 `astuple()`

from dataclasses import asdict, astuple

u = User("영희", 28)
print(asdict(u))   # {'name':'영희','age':28}
print(astuple(u))  # ('영희', 28)
  • 쉽게 JSON 변환이나 DB 저장 포맷으로 변환할 수 있어 편리합니다.

✨ 요약 & 활용 팁

  • 생성자, 비교, 표현식을 자동으로 해주어 코드가 간결해짐
  • 기본값, mutable 필드, 추가 초기화 등을 쉽게 처리
  • 정렬 가능하고 불변 객체(frozen)도 손쉽게 설정
  • `asdict()`/`astuple()`로 직렬화 변환이 매우 편리
  • 실무: 설정 객체, 요청/응답 데이터, 결과 엔터티 정의에 폭넓게 사용 가능

댓글

가장 많이 본 글

Icons by Flaticon