πŸ“ Book/✏ Clean Code

    [Book] ν΄λ¦°μ½”λ“œ - 9μž₯ λ‹¨μœ„ ν…ŒμŠ€νŠΈ

    9μž₯ λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ§€λ‚œ 1997λ…„λ§Œ 해도 TDDλΌλŠ” κ°œλ…μ„ 아무도 λͺ°λžκ³  λ‹¨μœ„ ν…ŒμŠ€νŠΈλž€ 자기 ν”„λ‘œκ·Έλž¨μ΄ λŒμ•„κ°„λ‹€λŠ” μ‚¬μ‹€λ§Œ ν™•μΈν•˜λŠ” μΌνšŒμ„± μ½”λ“œμ— λΆˆκ³Όν–ˆλ‹€. ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œλ₯Ό 곡듀여 κ΅¬ν˜„ν•œ ν›„ μž„μ‹œ μ½”λ“œλ₯Ό κΈ‰μ‘°ν•΄ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν–ˆλŠ”λ° λŒ€κ°œλŠ” κ°„λ‹¨ν•œ λ“œλΌμ΄λ²„ ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•΄ μžμ‹ μ΄ μ§  ν”„λ‘œκ·Έλž¨μ„ μˆ˜λ™μœΌλ‘œ μ‹€ν–‰ν–ˆλ‹€. ν•˜μ§€λ§Œ μ§€κΈˆμ€ λˆˆλΆ€μ‹  μ„±μž₯을 μ΄λ€˜λ‹€. 꼬치꼬치 따지며 μ½”λ“œκ°€ μ œλŒ€λ‘œ λ„λŠ”μ§€ ν™•μΈν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜κ³  ν†΅κ³Όν•œ ν›„μ—λŠ” λ‚΄ μ½”λ“œλ₯Ό μ‚¬μš©ν•  μ‚¬λžŒλ“€μ—κ²Œλ„ κ³΅κ°œν•˜κ³  ν…ŒμŠ€νŠΈ μ½”λ“œμ™€ λ‚΄ μ½”λ“œλ₯Ό 같은 μ†ŒμŠ€ νŒ¨ν‚€μ§€λ‘œ λ¬Άμ–΄ μ²΄ν¬μΈν•œλ‹€. μ• μžμΌκ³Ό TDD 덕택에 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μžλ™ν™”ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ΄ 이미 λ§Žμ•„μ‘ŒμœΌλ©° 점점 더 λŠ˜μ–΄λ‚˜λŠ” 좔세이닀. ν•˜μ§€λ§Œ 우리 뢄야에 ν…ŒμŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜λ €κ³ ..

    [Book] ν΄λ¦°μ½”λ“œ - 8μž₯ 경계

    [Book] ν΄λ¦°μ½”λ“œ - 8μž₯ 경계

    8μž₯ 경계 μ‹œμŠ€ν…œμ— λ“€μ–΄κ°€λŠ” λͺ¨λ“  μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 직접 κ°œλ°œν•˜λŠ” κ²½μš°λŠ” λ“œλ¬Όλ‹€. λ•Œλ‘œλŠ” νŒ¨ν‚€μ§€λ₯Ό 사고 μ˜€ν”ˆ μ†ŒμŠ€λ₯Ό μ΄μš©ν•œλ‹€. μ–΄λ–€ μ‹μœΌλ‘œλ“  이 μ™ΈλΆ€ μ½”λ“œμ™€ 우리 μ½”λ“œμ˜ 경계λ₯Ό κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν•˜κ³  톡합해야 ν•œλ‹€. 1. μ™ΈλΆ€ μ½”λ“œ μ‚¬μš©ν•˜κΈ° νŒ¨ν‚€μ§€ μ œκ³΅μžλ‚˜ ν”„λ ˆμž„μ›Œν¬ μ œκ³΅μžλŠ” μ μš©μ„±μ„ μ΅œλŒ€ν•œ λ„“ν˜€ 더 λ§Žμ€ ν™˜κ²½μ—μ„œ λŒμ•„κ°€κΈΈ μ›ν•œλ‹€. ν•˜μ§€λ§Œ μ‚¬μš©μžλŠ” μžμ‹ μ˜ μš”κ΅¬μ— μ§‘μ€‘ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 더 μ›ν•œλ‹€. 예둜 java.util.Map을 μ‚΄νŽ΄λ³΄μž. Map이 μ œκ³΅ν•˜λŠ” κΈ°λŠ₯μ„±κ³Ό μœ μ—°μ„±μ€ ν™•μ‹€νžˆ μœ μš©ν•˜μ§€λ§Œ 그만큼 μœ„ν—˜λ„ 크닀. λ„˜κΈ°λŠ” μͺ½μ—μ„œλŠ” Map λ‚΄μš©μ„ μ‚­μ œν•˜μ§€ μ•ŠμœΌλ¦¬λΌ 믿을 수 μžˆμ§€λ§Œ, Map이 μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œ 쀑 Clear()κ°€ μ‘΄μž¬ν•œλ‹€. 즉, Map μ‚¬μš©μžλΌλ©΄ λˆ„κ΅¬λ‚˜ Map λ‚΄μš©μ„ μ§€μšΈ 수 μžˆλ‹€. μ–΄λ–€ 클래슀λ₯Ό μ €μž₯ν•˜λŠ” ..

    [Book] ν΄λ¦°μ½”λ“œ - 7μž₯ 였λ₯˜ 처리

    7μž₯ 였λ₯˜ 처리 λ­”κ°€ 잘λͺ»λ  κ°€λŠ₯성은 늘 μ‘΄μž¬ν•œλ‹€. λ­”κ°€ 잘λͺ»λ˜λ©΄ λ°”λ‘œ μž‘μ„ μ±…μž„μ€ λ°”λ‘œ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ μžˆλ‹€. κ·Έλ ‡λ‹€λ©΄ κΉ¨λ—ν•œ μ½”λ“œμ™€ 였λ₯˜ μ²˜λ¦¬κ°€ 관련이 μžˆμ„κΉŒ? ν™•μ‹€νžˆ 연관성이 μžˆλ‹€. μƒλ‹Ήμˆ˜ μ½”λ“œ κΈ°λ°˜μ€ μ „μ μœΌλ‘œ 였λ₯˜ 처리 μ½”λ“œμ— μ’Œμš°λœλ‹€. μ—¬κΈ°μ„œ μ’Œμš°λœλ‹€λŠ” ν‘œν˜„μ€ μ½”λ“œ 기반이 였λ₯˜λ§Œ μ²˜λ¦¬ν•œλ‹€λŠ” μ˜λ―Έκ°€ μ•„λ‹Œ μ—¬κΈ°μ €κΈ° 흩어진 였λ₯˜ 처리 μ½”λ“œ λ•Œλ¬Έμ— μ‹€μ œ μ½”λ“œκ°€ ν•˜λŠ” 일을 νŒŒμ•…ν•˜κΈ°κ°€ 거의 λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―Έμ΄λ‹€. 였λ₯˜ μ²˜λ¦¬λŠ” μ€‘μš”ν•˜μ§€λ§Œ 이 μ½”λ“œλ‘œ 인해 ν”„λ‘œκ·Έλž¨ 논리λ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ €μ›Œμ§„λ‹€λ©΄ κΉ¨λ—ν•œ μ½”λ“œλΌ λΆ€λ₯΄κΈ° μ–΄λ ΅λ‹€. 1. 였λ₯˜ μ½”λ“œλ³΄λ‹€ μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜λΌ μ˜ˆμ™Έ 처리λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ 였λ₯˜ 처리λ₯Ό ν•  땐, 였λ₯˜ ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•˜κ±°λ‚˜ ν˜ΈμΆœμžμ—κ²Œ 였λ₯˜ μ½”λ“œλ₯Ό λ°˜ν™˜ν•˜λŠ” 방법이 μ „λΆ€μ˜€λ‹€. public v..

    [Book] ν΄λ¦°μ½”λ“œ - 6μž₯ 객체와 자료 ꡬ쑰

    6μž₯ 객체와 자료 ꡬ쑰 λ³€μˆ˜λ₯Ό private둜 μ •μ˜ν•˜λŠ” μ΄μœ κ°€ μžˆλ‹€. 남듀이 λ³€μˆ˜μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ²Œ λ§Œλ“€κ³  μ‹Άμ–΄μ„œ, λ³€μˆ˜ νƒ€μž…μ΄λ‚˜ κ΅¬ν˜„μ„ λ§˜λŒ€λ‘œ λ°”κΎΈκ³  μ‹Άμ–΄μ„œ κ·Έλ ‡λ‹€λ©΄ μ™œ λ§Žμ€ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 쑰회(get) ν•¨μˆ˜μ™€ μ„€μ •(set) ν•¨μˆ˜λ₯Ό λ‹Ήμ—°νžˆ public으둜 μ •μ˜ν•΄ private λ³€μˆ˜λ₯Ό 외뢀에 κ³΅κ°œν• κΉŒ? 1. 자료 좔상화 μ•„λž˜ 두 클래슀 λͺ¨λ‘ 2차원 점을 ν‘œν˜„ν•œλ‹€. // ꡬ체적인 Point 클래슀 // κ΅¬ν˜„μ„ μ™ΈλΆ€λ‘œ λ…ΈμΆœν•œλ‹€. // λͺ…ν™•ν•˜κ²Œ 직ꡐ μ’Œν‘œκ³„λ₯Ό μ“΄λ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€. public class Point { public double x; // κ°œλ³„μ μœΌλ‘œ μ’Œν‘œκ°’μ„ 읽고 μ„€μ •ν•œλ‹€. public double y; } // 좔상적인 Point 클래슀 // κ΅¬ν˜„μ„ 숨겨 클래슀 λ©”μ„œλ“œκ°€ μ ‘κ·Ό 정책을 κ°•μ œν•œλ‹€...

    [Book] ν΄λ¦°μ½”λ“œ - 5μž₯ ν˜•μ‹ λ§žμΆ”κΈ°

    5μž₯ ν˜•μ‹ λ§žμΆ”κΈ° ν”„λ‘œκ·Έλž˜λ¨ΈλΌλ©΄ ν˜•μ‹μ„ κΉ”λ”ν•˜κ²Œ 맞좰 μ½”λ“œλ₯Ό μ§œμ•Όν•œλ‹€. μ½”λ“œ ν˜•μ‹μ„ λ§žμΆ”κΈ° μœ„ν•œ κ°„λ‹¨ν•œ κ·œμΉ™μ„ μ •ν•˜κ³  κ·Έ κ·œμΉ™μ„ μ°©μ‹€νžˆ 따라야 ν•œλ‹€. μ½”λ“œ ν˜•μ‹μ€ μ˜μ‚¬μ†Œν†΅μ˜ μΌν™˜μ΄κΈ° λ•Œλ¬Έμ— νŒ€μœΌλ‘œ μΌν•œλ‹€λ©΄ νŒ€μ΄ ν•©μ˜ν•΄ κ·œμΉ™μ„ μ •ν•˜κ³  λͺ¨λ‘κ°€ κ·Έ κ·œμΉ™μ„ 따라야 ν•œλ‹€. 1. μ μ ˆν•œ ν–‰ 길이λ₯Ό μœ μ§€ν•˜λΌ ν–‰ κΈΈμ΄λŠ” 파일의 크기(길이)λ₯Ό λ§ν•œλ‹€. 500쀄을 λ„˜μ§€ μ•Šκ³  λŒ€λΆ€λΆ„ 200쀄 정도인 νŒŒμΌλ‘œλ„ μ»€λ‹€λž€ μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆλ‹€. 2. μ‹ λ¬Έ κΈ°μ‚¬μ²˜λŸΌ μž‘μ„±ν•˜λΌ μ†ŒμŠ€ 파일의 이름은 κ°„λ‹¨ν•˜λ©΄μ„œλ„ μ„€λͺ…이 κ°€λŠ₯ν•˜κ²Œ μ§“λŠ”λ‹€. μ΄λ¦„λ§Œ 보고도 μ˜¬λ°”λ₯Έ λͺ¨λ“ˆμ„ μ‚΄νŽ΄λ³΄κ³  μžˆλŠ”μ§€ μ•„λ‹Œμ§€λ₯Ό νŒλ‹¨ν•  μ •λ„λ‘œ μ‹ κ²½ μ¨μ„œ μ§“λŠ”λ‹€. μ†ŒμŠ€ 파일 첫 뢀뢄은 고차원 κ°œλ…κ³Ό μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ…ν•˜κ³  μ•„λž˜λ‘œ λ‚΄λ €κ°ˆμˆ˜λ‘ μ˜λ„λ₯Ό μ„Έμ„Έν•˜κ²Œ λ¬˜μ‚¬ν•œλ‹€. λ§ˆμ§€λ§‰μ—λŠ” κ°€..

    [Book] ν΄λ¦°μ½”λ“œ - 4μž₯ 주석

    4μž₯ 주석 잘 달린 주석은 μ–΄λ–€ 정보보닀 μœ μš©ν•˜μ§€λ§Œ λ‚˜μœ 주석은 μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“ λ‹€. 주석은 λ‚˜μœ μ½”λ“œλ₯Ό λ³΄μ™„ν•˜μ§€ λͺ»ν•œλ‹€. μ½”λ“œμ— 주석을 μΆ”κ°€ν•˜λŠ” 일반적인 μ΄μœ λŠ” μ½”λ“œ ν’ˆμ§ˆμ΄ λ‚˜μ˜κΈ° λ•Œλ¬Έμ΄λ‹€. ν‘œν˜„λ ₯이 ν’λΆ€ν•˜κ³  κΉ”λ”ν•˜λ©° 주석이 거의 μ—†λŠ” μ½”λ“œκ°€ 훨씬 μ’‹λ‹€. μ½”λ“œλ‘œ μ˜λ„λ₯Ό ν‘œν˜„ν•˜λΌ λ§Žμ€ 경우 μ£Όμ„μœΌλ‘œ λ‹¬λ €λŠ” μ„€λͺ…을 ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄ ν‘œν˜„ν•΄λ„ μΆ©λΆ„ν•˜λ‹€. 1. 쒋은 주석 법적인 주석: νšŒμ‚¬κ°€ μ •λ¦½ν•œ κ΅¬ν˜„ ν‘œμ€€μ— 맞좰 법적인 이유둜 λ„£λŠ”λ‹€. Ex) μ €μž‘κΆŒ, μ†Œμœ κΆŒ λ“± 정보λ₯Ό μ œκ³΅ν•˜λŠ” 주석: 기본적인 정보λ₯Ό μ£Όμ„μœΌλ‘œ μ œκ³΅ν•˜λ©΄ νŽΈλ¦¬ν•˜λ‹€. Ex) λ°˜ν™˜κ°’ λ“± μ˜λ„λ₯Ό μ„€λͺ…ν•˜λŠ” 주석: κ΅¬ν˜„μ„ μ΄ν•΄ν•˜κ²Œ λ„μ™€μ£ΌλŠ” 선을 λ„˜μ–΄ 결정에 κΉ”λ¦° μ˜λ„κΉŒμ§€ μ„€λͺ…ν•œλ‹€. 의미λ₯Ό λͺ…λ£Œν•˜κ²Œ λ°νžˆλŠ” 주석: λͺ¨ν˜Έν•œ μΈμˆ˜λ‚˜ λ°˜ν™˜κ°’μ€ κ·Έ 의미λ₯Ό..