λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Dev-diary/λ…μ„œ

22.03.24 [읽기 쒋은 μ½”λ“œκ°€ 쒋은 μ½”λ“œλ‹€] - λ”μŠ€ν‹΄ λ³΄μ¦ˆμ›°, νŠΈλ ˆλ²„ 파우컀

by ciocio 2022. 3. 24.

πŸ“ 책을 읽게 된 계기

 

νŒ€ ν”„λ‘œμ νŠΈ 진행에 μ•žμ„œ νŒ€ κ·œμΉ™μ„ μ •ν•˜κ²Œ λœλ‹€.

μ΄λ•Œ λ³€μˆ˜λͺ…, 파일λͺ… λ“± 얕은 μ½”λ“œ μŠ€νƒ€μΌμ„ ν†΅μΌμ‹œμΌœλ†“κ³  μ‹œμž‘ν•  수 μžˆλŠ”λ°,

μ–΄λ–€ κ±Έ κΈ°μ€€μœΌλ‘œ μ •ν•΄μ•Όλ˜λŠ”μ§€ λͺ¨λ₯΄κ² λ”라.

읽기 νŽΈν•˜λ‹€λŠ” 기쀀도 엉망이고 ..!!

νŒ€ λ‹¨μœ„ μž‘μ—…μ„ ν• λ•Œ 적어도 쒋은 κ·œμΉ™μ„ μ œμ•ˆν•  μˆ˜λŠ” μžˆμ–΄μ•Όκ² λ‹€λŠ” 생각에 읽게 λ˜μ—ˆλ‹€.

 


πŸ’‘ λͺ©μ°¨

1. ν‘œλ©΄μ  μˆ˜μ€€μ—μ„œμ˜ κ°œμ„ 
     βœ” 이름에 정보 λ‹΄κΈ°
     βœ” μ˜€ν•΄ν•  수 μ—†λŠ” 이름듀
     βœ” λ―Έν•™
     βœ” 주석에 λ‹΄μ•„μ•Ό ν•˜λŠ” λŒ€μƒ
     βœ” λͺ…ν™•ν•˜κ³  κ°„κ²°ν•œ 주석 달기 
2. 루프와 논리λ₯Ό λ‹¨μˆœν™”ν•˜κΈ°
     βœ” 읽기 μ‰½κ²Œ νλ¦„μ œμ–΄ λ§Œλ“€κΈ°
     βœ” κ±°λŒ€ν•œ ν‘œν˜„μ„ 잘게 μͺΌκ°œκΈ°
     βœ” λ³€μˆ˜μ™€ 가독성
3. μ½”λ“œ μž¬μž‘μ„±ν•˜κΈ°
     βœ” μƒκ΄€μ—†λŠ” ν•˜μœ„ 문제 μΆ”μΆœν•˜κΈ°
     βœ” ν•œ λ²ˆμ— ν•˜λ‚˜μ”©
     βœ” 생각을 μ½”λ“œλ‘œ λ§Œλ“€κΈ°
     βœ” μ½”λ“œ λΆ„λŸ‰ 쀄이기
4. μ„ νƒλœ μ£Όμ œλ“€
     βœ” ν…ŒμŠ€νŠΈμ™€ 가독성
     βœ” λΆ„/μ‹œκ°„ μΉ΄μš΄ν„°λ₯Ό μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•˜κΈ°

 

 

 βœ” 이름에 정보 λ‹΄κΈ° 

 

νŠΉμ •ν•œ 단어 κ³ λ₯΄κΈ°

 

상황에 따라 Get λŒ€μ‹  Fetchλ‚˜ Downloadλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 λ‚«λ‹€. → μ΅œλŒ€ν•œ ꡬ체적으둜 적기

 

ex.

단어 λŒ€μ•ˆ
send μ „μ†‘ν•˜λ‹€ deliver / dispatch / announce / distribute / route
find μ°Ύλ‹€, λ°œκ²¬ν•˜λ‹€ search / extract / locate / recover
start μ‹œμž‘ν•˜λ‹€ launch / create / begin / open
make μƒμ„±ν•˜λ‹€ create / set up / build / generate / compose / add / new

μ–΄λ””κΉŒμ§€λ‚˜ μ˜ˆμ‹œλ‹€. 상황에 더 μ ν•©ν•œ, μ•Œλ§žμ€ 단어λ₯Ό μ“°λ €κ³  μ΅œλŒ€ν•œ λ…Έλ ₯ν•  것 ❗

 

 

보편적인 이름 ν”Όν•˜κΈ°

 

λ‹Ήμ‹œ 상황을 μ œλŒ€λ‘œ ν‘œν˜„ν•˜λŠ” 단어가 μ•„λ‹ˆλΌλ©΄, 보편적인 이름은 μ΅œλŒ€ν•œ ν”Όν•˜μž.

보편적인 이름을 μ‚¬μš©ν•˜λ €λ©΄ κΌ­ κ·Έλ ‡κ²Œ ν•΄μ•Όν•˜λŠ” μ΄μœ κ°€ μ‘΄μž¬ν•΄μ•Ό ν•  것이닀 ❗ - ❗

 

ex.

3쀑 for문을 λŒλ•Œ μš°λ¦¬λŠ” 보편적으둜 i, j, k ... 순의 μ•ŒνŒŒλ²³ μ „κ°œλ₯Ό 많이 μ‚¬μš©ν•œλ‹€.
크게 잘λͺ»λœ 점은 μ—†λŠ”λ°, κ·Έλž˜λ„ 읽기 νŽΈν•˜κ²Œ κ°œμ„ ν•˜μžλ©΄
→ if (clubs[ci].members[mi] == users[ui])
μ΄λŸ°μ‹μœΌλ‘œ ν—·κ°ˆλ¦¬λŠ” 일 μ—†κ²Œ 정리할 수 μžˆκ² λ‹€ γ…Žγ…Ž

 

 

좔상적인 이름보닀 ꡬ체적인 이름을 μ‚¬μš©ν•˜κΈ°

 

ex.

πŸ”— (IN C++) DISALLOW_EVIL_CONSTRUCTORDISALLOW_COPY_AND_ASSIGN
C++μ—μ„œλŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 클래슀λ₯Ό μœ„ν•œ copy constructorλ‚˜ assignment operatorλ₯Ό μƒλž΅ν•˜λ©΄, μžλ™μœΌλ‘œ 기본값을 μ œκ³΅ν•œλ‹€. μ΄λŠ” νŽΈλ¦¬ν•œ κΈ°λŠ₯μ΄μ§€λ§Œ μš°λ¦¬κ°€ μ•Œμ§€ λͺ»ν•˜κ²Œ λ²Œμ–΄μ§€κΈ° λ•Œλ¬Έμ— λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ‚˜ 각쒅 문제λ₯Ό μΌμœΌν‚¨λ‹€.
결과적으둜 ꡬ글은 맀크둜λ₯Ό μ‚¬μš©ν•΄μ„œ μ‚¬μ•…ν•œ μƒμ„±μžκ°€ λ§Œλ“€μ–΄μ§€λŠ” 것을 λΆˆν—ˆν•˜λŠ” 정책을 μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.
κ·ΈλŸ¬λ‚˜ EVIL은 ꡉμž₯히 주관적인 ν‘œν˜„μ΄κ³  DISALLOWν•˜λŠ” λŒ€μƒλ„ λ“œλŸ¬λ‚˜μ§€ μ•ŠλŠ”λ‹€. (λͺ¨ν˜Έλͺ¨ν˜Έ)
λ˜ν•œ operator=() λ₯Ό κΈˆμ§€ν•˜λŠ”λ° μ΄λŠ” μƒμ„±μžλ„ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— γ…‹γ…‹γ…‹ κ²°κ΅­ 이름이 λ³€κ²½λ˜κ³  λ§Œλ‹€.

πŸ”— (IN command-line-flag) --run_locally
→ 이 ν”Œλž˜κ·Έκ°€ μ„ νƒλ˜λ©΄ ν”„λ‘œκ·Έλž˜λ°μ€ 디버깅 정보λ₯Ό 좜λ ₯ν•œλ‹€.
→ 이 ν”Œλž˜κ·Έμ˜ 문제점
• νŒ€μ— μƒˆλ‘œ ν•©λ₯˜ν•œ μ‚¬λžŒμ€ 무엇을 μœ„ν•œ ν”Œλž˜κ·ΈμΈμ§€ μ•Œ 수 μ—†λ‹€.
  → λ‘œμ»¬μ—μ„œ μ‚¬μš©ν•˜λŠ” ν”Œλž˜κ·ΈμΈκ°€ ..? μ§μž‘/μΆ”μ •ν•˜κ²Œ λ§Œλ“€μ§€ μ•ŠκΈ° !!
• ν”„λ‘œκ·Έλž¨μ„ 원격 μ»΄ν“¨ν„°μ—μ„œ μ‹€ν–‰ν•  λ•Œλ„ 디버깅 정보λ₯Ό 좜λ ₯ν•  수 μžˆλŠ”λ°, μ΄λ•Œ run locally 이라 .. γ…‹γ…Žγ…‹
  → μ—¬λŸ¬κ°€μ§€ 상황을 κ³ λ €ν•œ μž‘λͺ… μ„ΌμŠ€κ°€ ν•„μš”ν•¨ !!
• λ‘œμ»¬μ—μ„œ μ„±λŠ₯검사λ₯Ό μˆ˜ν–‰ν•  λ•Œ λ‘œκΉ… κΈ°λŠ₯으둜 μΈν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό μ›μΉ˜ μ•ŠλŠ” κ²½μš°λ„ μžˆλ‹€.
  → 포괄적이고 μ€‘μ˜μ μΈ ν‘œν˜„ 쒋지 μ•Šμ•„ !!

 

 

λ³€μˆ˜λͺ…에 μ€‘μš”ν•œ μ„ΈλΆ€ 정보 덧뢙이기

 

μ‚¬μš©μžκ°€ λ°˜λ“œμ‹œ μ•Œμ•„μ•Όν•˜λŠ” λ³€μˆ˜μ™€ κ΄€λ ¨λœ μ€‘μš”ν•œ μ •λ³΄λŠ” 좔가적인 λ‹¨μ–΄λ‘œ λ§Œλ“€μ–΄μ„œ 이름에 λΆ™μ΄λŠ” 게 μ’‹λ‹€.

 

ex.

ν•¨μˆ˜ 인수 λ‹¨μœ„λ₯Ό ν¬ν•¨ν•˜μ—¬ μž¬μž‘μ„±
Start(int delay) Start(int delay_secs) 초
CreateCache(int size) CreateCache(int size_mb) λ©”κ°€λ°”μ΄νŠΈ
ThrottleDownload(float limit) ThrottleDownload(float max_kbps) μΌ€μ΄λΉ„ν”Όμ—μŠ€
Rotate(float angle) Rotate(float degrees_cw) μ •λ°©ν–₯(+) 

πŸ“ Kbps (Kilobits per second : 1μ΄ˆλ‹Ή 1,000 bits)

데이터 전솑 맀체가 주어진 μ‹œκ°„μ— 전솑할 수 μžˆλŠ” λ°μ΄ν„°μ˜ μ–‘, 주파수 λŒ€μ—­μ„ λ‚˜νƒ€λ‚Ό λ•Œ μ“°λŠ” λ‹¨μœ„

πŸ“ CW / CCW (Clock Wise : μ‹œκ³„ λ°©ν–₯ / Counter Clock Wise : μ‹œκ³„ λ°˜λŒ€ λ°©ν–₯)

μ‹œκ³„ λ°©ν–₯ === μ •λ°©ν–₯ / μ‹œκ³„ λ°˜λŒ€ λ°©ν–₯ === μ—­λ°©ν–₯ 의 의미둜 자주 μ“°μž„

 

ex.

상황 λ³€μˆ˜λͺ… 더 λ‚˜μ€ 이름
νŒ¨μŠ€μ›Œλ“œκ°€ 'plaintext'에 담겨 있고,
좔가적인 처리λ₯Ό ν•˜κΈ° 전에 λ°˜λ“œμ‹œ μ•”ν˜Έν™”λ˜μ–΄μ•Ό ν•œλ‹€.
password plaintext_password
μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” μ„€λͺ…문이 화면에 λ‚˜νƒ€λ‚˜κΈ° 전에
μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬κ°€ λ˜μ–΄μ•Ό ν•œλ‹€.
comment unescaped_comment
html λ°”μ΄νŠΈκ°€ UTF-8둜 λ³€ν™˜λ˜μ—ˆλ‹€. html html_utf8
μž…λ ₯데이터가 'url encoded' λ˜μ—ˆλ‹€. data data_urlenc

λ³€μˆ˜μ˜ λ‹¨μœ„λΏλ§Œ μ•„λ‹ˆλΌ κΌ­ λͺ…μ‹œν•΄μ•Όν•˜λŠ” 정보가 μžˆλ‹€λ©΄ λ‚˜νƒ€λ‚΄μ£Όμž.

 

 

μ‚¬μš© λ²”μœ„κ°€ λ„“μœΌλ©΄ κΈ΄ 이름을 μ‚¬μš©ν•˜κΈ°

 

μ—¬λŸ¬ νŽ˜μ΄μ§€μ— κ±Έμ³μ„œ μ‚¬μš©λ˜λŠ” λ³€μˆ˜μ˜ 이름은 의미λ₯Ό μ•Œμ•„λ³΄κΈ° νž˜λ“€ μ •λ„λ‘œ 짧게 μž‘λͺ…ν•˜μ§€ 마라.

λ‹€λ§Œ 쒁은 λ²”μœ„μ—μ„œ 잠깐 μ‚¬μš©λ˜λŠ” λ³€μˆ˜λͺ…은 μ§§μ„μˆ˜λ‘ μ’‹λ‹€.

 

 

λŒ€λ¬Έμžλ‚˜ 밑쀄 등을 μ˜λ―ΈμžˆλŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•˜κΈ°

 

문법적 차이가 λ“œλŸ¬λ‚˜κ²Œ μ„œλ‘œ λ‹€λ₯Έ 개체의 이름에

각자 λ‹€λ₯Έ ν¬λ§·νŒ… 방식을 μ μš©ν•˜λŠ” 방법은 μ½”λ“œλ₯Ό 더 읽기 μ‰½κ²Œ ν•΄μ€€λ‹€.

→ μ–Έμ–΄λ§ˆλ‹€ 차이가 있기 λ•Œλ¬Έμ—, 개발자 μž¬λŸ‰μœΌλ‘œ 처리될 λ“― ν•˜λ‹€ :)

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€