[Design Pattern] TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ)

TDD๋ž€? TDD๋ž€ Test Driven Development์˜ ์•ฝ์ž๋กœ 'ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ…Œ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ์ž‘์€ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ด๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์งง์€ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ์˜ ๋ฐ˜๋ณต์— ์˜์กดํ•˜๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ ์• ์ž์ผ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜์ธ eXtream Programming(XP)์˜ 'Test-First'๊ฐœ๋…์— ๊ธฐ๋ฐ˜์„ ๋‘” ๋‹จ์ˆœํ•œ ์„ค๊ณ„๋ฅผ ์ค‘์š”์‹œํ•ฉ๋‹ˆ๋‹ค. **eXtream Programming(XP) : ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์˜ˆ์ธก์„ ์ตœ๋Œ€ํ•œ ํ•˜์ง€ ์•Š๊ณ  ์ง€์†์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ์™„์„ฑํ•˜๋Š” ์• ์ž์ผ ๊ธฐ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜๋กœ, ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋”๋ผ๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ TDD์˜ ์ ˆ์ฐจ TDD์—์„œ๋Š” ์ œํ’ˆ์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์ฝ”๋“œ์™€ ๋ณ„๊ฐœ..

CS/Design Pattern 2022. 7. 4. 20:19
[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„] OOP์™€ FP

OOP๋ž€? OOP๋Š” Object Oriented Programming์˜ ์•ฝ์ž๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. class์™€ object์— ๊ธฐ๋ฐ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„(๋””์ž์ธ ํŒจํ„ด)์œผ๋กœ, ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ class๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์—์„œ object instance๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋กœ๊ทธ๋žจ์„ ๋””์ž์ธ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ž๋ฐ”๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๊ฐ์ฒด ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹ OOP์˜ ์žฅ์  ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ๋ฅ ์„ ๋†’์ด๊ณ  ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›€ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด์กด์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ(์บก์Šํ™”) OOP์˜ ํŠน์ง• 4๊ฐ€์ง€ ์บก์Šํ™”(Encapsulation) ์บก์Šํ™”๋Š” ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๋กœ์ง์€ ๊ฐ์ถ”๊ณ  ์™ธ๋ถ€์—๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ •..

CS/Design Pattern 2022. 7. 3. 21:55
[Git] Git branch strategy ๋ช…๋ช… ๊ทœ์น™ ๋ฐ ์ข…๋ฅ˜

Git์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ช…์˜ ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด, commit ์ด๋ฆ„ ๊ทœ์น™, branch ๋ช…๋ช… ๊ทœ์น™ ๋“ฑ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ์ผ์ •ํ•œ ๊ทœ์น™์„ ์ •ํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ๊ณ ๋ ค ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ master, develop, feature, release, hotfix 5๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ๋ธŒ๋žœ์น˜๋“ค๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Master(Main) Branch ์ œํ’ˆ์œผ๋กœ ์ถœ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ์œ„ ๋ธŒ๋žœ์น˜ ๋ฐฐํฌ ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐฐํฌ(Release) ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋งŒ์„ master branch์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. (๋ณดํ†ต master ๋ธŒ๋žœ์น˜์˜ ๊ฐฑ์‹  ๊ธฐ์ค€์œผ๋กœ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.) Develop Branch ๋‹ค์Œ ์ถœ์‹œ ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜ master์˜ ํ•˜์œ„ ๋ธŒ๋žœ์น˜๋กœ, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜..

Git 2022. 7. 3. 20:46
[Git] Git์ด๋ž€?

Git์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Git์€ 2005๋…„์— ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์Šค์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ๋ถ„์‚ฐ ๋ฒ„์ „๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Distributed Version Control System - DVCS)๋กœ, ์ปดํ“จํ„ฐ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ณ  ์—ฌ๋Ÿฌ๋ช…์˜ ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์— ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž‘์—…์„ ์กฐ์œจํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Git ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ˜•์ƒ ๊ด€๋ฆฌ ๋„๊ตฌ์ค‘ ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋‚˜์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•  ๋•Œ, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ** ํ˜•์ƒ ๊ด€๋ฆฌ ๋„๊ตฌ (Configuration Management Tool) ๋Œ€ํ‘œ์ ์ธ ํ˜•์ƒ ๊ด€๋ฆฌ ๋„๊ตฌ(๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ)์€ SVN๊ณผ Git์ด ์กด์žฌํ•˜๋Š”๋ฐ, Git์€ ์ค‘์•™ ์„œ๋ฒ„๋งŒ ์‚ฌ์šฉํ•˜๋Š” SVN๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ถ„์‚ฐํ˜• ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ, ๋กœ์ปฌ ์ €..

Git 2022. 7. 3. 20:25
[Java] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ณด์„ ์‡ผํ•‘

[๋ฌธ์ œ] https://programmers.co.kr/learn/courses/30/lessons/67258 ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ณด์„ ์‡ผํ•‘ ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr [ํ’€์ด] ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•ต์‹ฌ์ธ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์šฐ์„ , ์ดˆ๊ธฐ์— ํ•„์š”ํ•œ ์ž๋ฃŒ๋ฅผ ์„ธํŒ…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Set set์œผ๋กœ ๋ณด์„์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. gems๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ Map pick์— ๊ฐ ๋ณด์„์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋ฉฐ ๋งจ์•ž์—์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์„์„ธํŠธ๋ฅผ ์ €์žฅํ•ด์„œ ์ดˆ๊ธฐ start์™€ end๋ฅผ ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋‹ค์Œ, ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ left๋ฅผ right๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉฐ gems๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ์ƒˆ๋กœ์šด ๋ณด..

Algorithm/Programmers 2022. 7. 3. 19:32
[Java] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ˆ˜์‹ ์ตœ๋Œ€ํ™”

[๋ฌธ์ œ] https://programmers.co.kr/learn/courses/30/lessons/67257 ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ˆ˜์‹ ์ตœ๋Œ€ํ™” IT ๋ฒค์ฒ˜ ํšŒ์‚ฌ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด์–ธ์€ ๋งค๋…„ ์‚ฌ๋‚ด ํ•ด์ปคํ†ค ๋Œ€ํšŒ๋ฅผ ๊ฐœ์ตœํ•˜์—ฌ ์šฐ์Šน์ž์—๊ฒŒ ์ƒ๊ธˆ์„ ์ง€๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋Œ€ํšŒ์—์„œ๋Š” ์šฐ์Šน์ž์—๊ฒŒ ์ง€๊ธ‰๋˜๋Š” ์ƒ๊ธˆ์„ ์ด์ „ ๋Œ€ํšŒ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‹ค์Œ๊ณผ programmers.co.kr [ํ’€์ด] ์กฐํ•ฉ๊ณผ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์šฐ์„  ํ•„์š”ํ•œ ์ž๋ฃŒ๋“ค์„ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค. ArrayList exp๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉฐ ์—ฐ์‚ฐ์ž๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. (Set ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ํ’€์ด ๋‹น์‹œ์—๋Š” ์ƒ๊ฐ์„ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.ใ…Žใ…Ž) expression.charAt(i) < 48๋ฅผ ํ†ตํ•ด ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ( ์•„์Šคํ‚ค ์ฝ”๋“œ ์ด์šฉ ) ์—ฐ์‚ฐ์ž๋“ค์€ num..

Algorithm/Programmers 2022. 7. 3. 19:24
[Java] ๋ฐฑ์ค€ 2110๋ฒˆ - ๊ณต์œ ๊ธฐ ์„ค์น˜

https://www.acmicpc.net/problem/2110 2110๋ฒˆ: ๊ณต์œ ๊ธฐ ์„ค์น˜ ์ฒซ์งธ ์ค„์— ์ง‘์˜ ๊ฐœ์ˆ˜ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์œ ๊ธฐ์˜ ๊ฐœ์ˆ˜ C (2 ≤ C ≤ N)์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ง‘์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xi (0 ≤ xi ≤ 1,000,000,000)๊ฐ€ www.acmicpc.net [๋ฌธ์ œ] [ํ’€์ด] 0๋ฒˆ์งธ์ง‘ ~ N-1๋ฒˆ์งธ ์ง‘๊นŒ์ง€ ์ด๋ถ„ํƒ์ƒ‰์„ ํ†ตํ•ด interval ๊ฐ’์„ ์ด์šฉํ•ด ๊ณต์œ ๊ธฐ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ interval๊ฐ’์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ง‘์˜ ๋ฒˆํ˜ธ๋“ค์ด 1 2 8 4 9 ์ด๊ณ  ๊ณต์œ ๊ธฐ๋Š” 3๊ฐœ๋ฉด, ์ตœ๋Œ€๊ฐ’์€ (9-1) / 2 = 4์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ 1~9๊ฐ€ ๋ชจ๋‘ ์ฑ„์›Œ์ ธ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด 1 5 9๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ..

Algorithm/Baekjoon 2022. 6. 28. 22:29