From 6d9e9d3fc08f17a225f138a52647fd50ba94d1e2 Mon Sep 17 00:00:00 2001 From: yoon Date: Fri, 3 Oct 2025 17:44:25 +0900 Subject: [PATCH] =?UTF-8?q?=20[FEATURE]=20#8=20=EA=B3=84=EC=82=B0=EA=B8=B0?= =?UTF-8?q?=20=EB=AA=A8=EB=93=88=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기본 사칙연산 기능 추가 (덧셈, 뺄셈, 곱셈, 나눗셈) - 계산 기록 저장 및 조회 기능 - 0으로 나누기 예외 처리 - 타입 힌트 및 docstring 추가 --- .github/pull_request_template.md | 115 +++++++++++++++++++-------- .github/pull_request_template_old.md | 39 +++++++++ calculator.py | 63 +++++++++++++++ 3 files changed, 184 insertions(+), 33 deletions(-) create mode 100644 .github/pull_request_template_old.md create mode 100644 calculator.py diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 09be227..4f94c71 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,39 +1,88 @@ -## 개요 +## 🚀 개요 -> GitHub 개발 워크플로우를 체계화하고 자동화하기 위한 템플릿과 CI/CD 시스템을 구축했습니다. -> 효율적인 협업과 코드 품질 관리를 위해 이슈 관리, PR 검토, 릴리즈 과정을 자동화했습니다. +> -## PR 유형 +## 📌 관련 이슈 + +Closes # + +## 🎯 변경사항 요약 + +- +- +- + +## 🏷️ PR 유형 어떤 변경 사항이 있나요? -- [x] 새로운 기능 추가 -- [ ] 버그 수정 -- [ ] CSS 등 사용자 UI 디자인 변경 -- [x] 코드에 영향을 주지 않는 변경사항(오타 수정, 탭 사이즈 변경, 변수명 변경) -- [ ] 코드 리팩토링 -- [x] 주석 추가 및 수정 -- [x] 문서 수정 -- [x] 파일 혹은 폴더명 수정 -- [x] 파일 혹은 폴더 삭제 - -## 작업 상세 내용 - -### 🚀 새로 추가된 기능 -1. **GitHub Actions 워크플로우 구축** - - `ci-cd.yml`: 코드 품질 검사, 테스트, 자동 배포 - - `pr-review.yml`: PR 자동 검토 및 라벨링 - - `issue-management.yml`: 이슈 자동 관리 및 응답 - - `release.yml`: 릴리즈 자동화 및 변경사항 생성 - -2. **체계적인 템플릿 시스템** - - 버그 리포트 템플릿 (`bug_report.md`) - - 기능 요청 템플릿 (`feature_request.md`) - - PR 템플릿 개선 (체크리스트 및 구조화) - -3. **자동화 기능** - - 이슈/PR 자동 라벨링 - - 커밋 규칙 검증 - - 보안 검사 (하드코딩된 시크릿 탐지) - - 코드 품질 검사 (Black, isort, Flake8) +- [ ] ✨ 새로운 기능 추가 +- [ ] 🐛 버그 수정 +- [ ] 🎨 CSS 등 사용자 UI 디자인 변경 +- [ ] 🔧 코드에 영향을 주지 않는 변경사항(오타 수정, 탭 사이즈 변경, 변수명 변경) +- [ ] ♻️ 코드 리팩토링 +- [ ] 📝 주석 추가 및 수정 +- [ ] 📚 문서 수정 +- [ ] 🚚 파일 혹은 폴더명 수정 +- [ ] 🔥 파일 혹은 폴더 삭제 + +## ⌛ 작업 상세 내용 + +### 🎉 새로 추가된 기능 + + + +### 🛠️ 수정된 기능 + + + +### 🗑️ 제거된 기능 + + + +## 📊 더 꼼꼼히 봐야할 부분 + + +- [ ] 성능에 영향을 줄 수 있는 변경사항 +- [ ] 보안 관련 변경사항 +- [ ] 데이터베이스 스키마 변경 +- [ ] API 변경사항 +- [ ] 없음 + +## 🧪 테스트 방법 + + +```bash +# 테스트 실행 방법 +``` + +## 📸 스크린샷 (UI 변경 시) + + +| Before | After | +|--------|-------| +| | | + +## 🌐 반드시 참고해야하는 변경 사항 + + +- [ ] 환경 변수 변경 +- [ ] 패키지 의존성 변경 +- [ ] API 엔드포인트 변경 +- [ ] 데이터베이스 마이그레이션 필요 +- [ ] 배포 방법 변경 +- [ ] 없음 + +## ✅ 체크리스트 + + +- [ ] 🔍 내 코드를 스스로 리뷰했습니다 +- [ ] 💭 복잡한 코드에 주석을 달았습니다 +- [ ] 📚 관련 문서를 업데이트했습니다 +- [ ] 🧪 테스트를 추가하거나 기존 테스트를 수정했습니다 +- [ ] ✅ 모든 테스트가 통과합니다 +- [ ] 🔒 보안 이슈가 없는지 확인했습니다 +- [ ] 📏 코딩 스타일 가이드를 준수했습니다 +## 📝 추가 컨텍스트 + \ No newline at end of file diff --git a/.github/pull_request_template_old.md b/.github/pull_request_template_old.md new file mode 100644 index 0000000..09be227 --- /dev/null +++ b/.github/pull_request_template_old.md @@ -0,0 +1,39 @@ +## 개요 + + +> GitHub 개발 워크플로우를 체계화하고 자동화하기 위한 템플릿과 CI/CD 시스템을 구축했습니다. +> 효율적인 협업과 코드 품질 관리를 위해 이슈 관리, PR 검토, 릴리즈 과정을 자동화했습니다. + +## PR 유형 +어떤 변경 사항이 있나요? + +- [x] 새로운 기능 추가 +- [ ] 버그 수정 +- [ ] CSS 등 사용자 UI 디자인 변경 +- [x] 코드에 영향을 주지 않는 변경사항(오타 수정, 탭 사이즈 변경, 변수명 변경) +- [ ] 코드 리팩토링 +- [x] 주석 추가 및 수정 +- [x] 문서 수정 +- [x] 파일 혹은 폴더명 수정 +- [x] 파일 혹은 폴더 삭제 + +## 작업 상세 내용 + +### 🚀 새로 추가된 기능 +1. **GitHub Actions 워크플로우 구축** + - `ci-cd.yml`: 코드 품질 검사, 테스트, 자동 배포 + - `pr-review.yml`: PR 자동 검토 및 라벨링 + - `issue-management.yml`: 이슈 자동 관리 및 응답 + - `release.yml`: 릴리즈 자동화 및 변경사항 생성 + +2. **체계적인 템플릿 시스템** + - 버그 리포트 템플릿 (`bug_report.md`) + - 기능 요청 템플릿 (`feature_request.md`) + - PR 템플릿 개선 (체크리스트 및 구조화) + +3. **자동화 기능** + - 이슈/PR 자동 라벨링 + - 커밋 규칙 검증 + - 보안 검사 (하드코딩된 시크릿 탐지) + - 코드 품질 검사 (Black, isort, Flake8) + diff --git a/calculator.py b/calculator.py new file mode 100644 index 0000000..5250e23 --- /dev/null +++ b/calculator.py @@ -0,0 +1,63 @@ +""" +계산기 모듈 +간단한 수학 연산을 수행하는 계산기 기능을 제공합니다. +""" + +class Calculator: + """간단한 계산기 클래스""" + + def __init__(self): + """계산기 초기화""" + self.history = [] + + def add(self, a: float, b: float) -> float: + """두 수를 더합니다""" + result = a + b + self.history.append(f"{a} + {b} = {result}") + return result + + def subtract(self, a: float, b: float) -> float: + """두 수를 뺍니다""" + result = a - b + self.history.append(f"{a} - {b} = {result}") + return result + + def multiply(self, a: float, b: float) -> float: + """두 수를 곱합니다""" + result = a * b + self.history.append(f"{a} * {b} = {result}") + return result + + def divide(self, a: float, b: float) -> float: + """두 수를 나눕니다""" + if b == 0: + raise ValueError("0으로 나눌 수 없습니다") + result = a / b + self.history.append(f"{a} / {b} = {result}") + return result + + def get_history(self) -> list: + """계산 기록을 반환합니다""" + return self.history.copy() + + def clear_history(self): + """계산 기록을 지웁니다""" + self.history.clear() + + +if __name__ == "__main__": + # 계산기 테스트 + calc = Calculator() + + print("🧮 간단한 계산기") + print("=" * 30) + + # 기본 연산 테스트 + print(f"10 + 5 = {calc.add(10, 5)}") + print(f"10 - 3 = {calc.subtract(10, 3)}") + print(f"4 * 6 = {calc.multiply(4, 6)}") + print(f"15 / 3 = {calc.divide(15, 3)}") + + print("\n📝 계산 기록:") + for record in calc.get_history(): + print(f" {record}") \ No newline at end of file