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