λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» 개발자 이야기/✏️ μ •λ¦¬λ…ΈνŠΈ

1μž₯ 크둜슀 ν”Œλž«νΌμœΌλ‘œ κ°œλ°œν•˜λΌ.

by μ •μ„ ν•œ 2023. 6. 13.
728x90
λ°˜μ‘ν˜•

 C++ μ–Έμ–΄κ°€ μ–΄λ €μš΄ 이유,
κ°œλ°œμžμ—κ²Œ μ—¬λŸ¬ 운영체제 μžμ›λ“€(CPU, λ©”λͺ¨λ¦¬, λ””μŠ€ν¬)을 자유둭게 μ΄μš©ν•  수 μžˆλŠ” Cμ–Έμ–΄λ₯Ό νƒ‘μž¬ν•˜κ³  있기 λ•Œλ¬Έμ΄λ‹€.

Cμ–Έμ–΄λŠ” μ–΄μ…ˆλΈ”λ¦¬λ₯Ό λ‚΄μž₯ν•œ 극단적인 μ΅œμ ν™”λ„ κ°€λŠ₯ν•˜λ©° 컀널 레벨의 ν•¨μˆ˜λ„ μ‚¬μš©ν•  수 μžˆλ‹€. κ·Έ μ΄μœ λŠ” 운영체제의 μ½”λ“œ λ˜ν•œ Cμ–Έμ–΄λ‘œ μž‘μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λ‹€.
Cμ–Έμ–΄λ‘œ 개발된 λͺ¨λ“ˆμ€ λΌμ΄λΈŒλŸ¬λ¦¬ν™”λ˜μ–΄ μžλ°”, C#, 슀크립트 μ–Έμ–΄λ“€κ³Ό κ²°ν•©ν•  수 있으며 ν”Œλž«νΌ κ°„ ν˜Έν™˜μ„±λ„ μ’‹λ‹€.

Cμ–Έμ–΄μ˜ 생산성을 λ³΄μ™„ν•˜κ³  기쑴의 λ§‰κ°•ν•œ κΈ°λŠ₯을 μ§€μ›ν•˜κΈ° μœ„ν•΄ 개발된 μ–Έμ–΄κ°€ C++ μ΄λ―€λ‘œ, C++은 Cμ–Έμ–΄μ˜ μž₯점ㅇλ₯Ό κ°€μ§„ 채 생산성을 ν™•λ³΄ν•˜κΈ° μœ„ν•œ λ§Žμ€ κΈ°λŠ₯을 νƒ‘μž¬ν•œ μ–Έμ–΄κ°€ λ˜μ—ˆλ‹€.
κΈ°λŠ₯이 λ§Žμ•„μ‘Œλ‹€ = λ§Žμ€ 것을 μ•Œμ•„μ•Ό ν•œλ‹€. -> μ–΄λ ΅λ‹€.

C++ : Cμ–Έμ–΄ * [μ˜ˆμ•½μ–΄ 문법] * [OOP] * [STL] * [ν…œν”Œλ¦Ώ]
C++은 4κ°€μ§€ μ–Έμ–΄μ˜ 집합체이닀. λΌλŠ” ν‘œν˜„μ΄ μžˆμ„ μ •λ„λ‘œ 각 4개의 μ˜μ—­μ€ λ§Žμ€ λ°°μ›€μ˜ λ…Έλ ₯이 ν•„μš”ν•˜λ‹€.

C++을 μ •λ³΅ν•˜λ©΄ 무엇을 ν•΄μ•Όν•˜λŠ”κ°€?

"핡심 λͺ¨λ“ˆ 개발"
핡심λͺ¨λ“ˆμ€ μƒλ‹Ήνžˆ μ •κ΅ν•˜κ³  λ‹€μ–‘ν•˜κ²Œ κ°œλ°œλ˜μ–΄μ•Ό ν•œλ‹€. 그런 μ˜λ―Έμ—μ„œ C++은 핡심 λͺ¨λ“ˆμ„ κ°œλ°œν•˜κΈ°μ— μ΅œμ ν™”λœ 언어라고 λ³Ό 수 μžˆλ‹€.

핡심 λͺ¨λ“ˆμ΄λž€? 사전적 μ •μ˜ : μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ κ°€μž₯ 의미 μžˆλŠ” λͺ¨λ“ˆ
핡심 λͺ¨λ“ˆμ€ λͺ©μ κ³Ό 생λͺ…λ ₯, μ§„μž…μž₯λ²½μ΄λΌλŠ” μ„Έ κ°€μ§€ νŠΉμ„±μ„ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€.

"λͺ©μ "
핡심λͺ¨λ“ˆμ˜ λͺ©μ μ€ λ‹€μ–‘ν•˜λ‹€. 예λ₯Ό λ“€λ©΄, '남듀과 μ°¨λ³„ν™”λœ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“ˆ'일 수 있고 'κΈ°λŠ₯은 ν‰λ²”ν•˜λ‚˜ 남듀과 μ°¨λ³„ν™”λœ μ„±λŠ₯을 κ°€μ§„ λͺ¨λ“ˆ'일 수 μžˆλ‹€.
- λͺ¨λ“ˆμ„ κ°œλ°œν•  λ•Œ κ³ λ €ν•˜λŠ” 3μš”μ†Œ : 가독성, μ„±λŠ₯, 평이성
단, 각 μš”μ†Œλ“€μ€ μ„œλ‘œ νŠΈλ ˆμ΄λ“œ-μ˜€ν”„ 적인 μš”μ†Œκ°€ μžˆμ–΄ λͺ¨λ“  μš”μ†Œλ₯Ό λ‹€ κ°–μΆ”κΈ°μ—λŠ” ν˜„μ‹€μ μΈ 어렀움이 μžˆλ‹€. λ˜ν•œ κ°€λ…μ„±μ΄λ‚˜ μ„±λŠ₯을 λͺ¨λ‘ ν™•λ³΄ν•˜κΈ° μœ„ν•΄ μƒˆλ‘œμš΄ λ¬Έλ²•μ΄λ‚˜ κΈ°μˆ μ„ λ„μž…ν•΄μ•Ό ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€.
- 3μš”μ†Œλ₯Ό λͺ¨λ‘ 획기적으둜 λ‹¬μ„±ν•˜λŠ” 방법 : ν•˜λ“œμ½”λ”© (μ½”λ”© κ°€μ΄λ“œμ—μ„œλŠ” λ°”λžŒμ§ν•˜μ§€ μ•Šλ‹€κ³  μ„€λͺ…ν•˜λŠ” 코딩방법)

"생λͺ…λ ₯"
ν•˜λ“œμ½”λ”©μ˜ κ°€μž₯ 큰 λ¬Έμ œλŠ” 생λͺ…λ ₯이닀.
ν•˜λ“œμ½”λ”©μœΌλ‘œ ν™•λ³΄ν•œ μ„±λŠ₯은 점점 λ¬΄λ„ˆμ§ˆ μˆ˜λ°–μ— μ—†μœΌλ©° κ·Έ 이후 μ„±λŠ₯, 가독성 λͺ¨λ‘μ— 영ν–₯을 μ€€λ‹€. ν•˜λ“œμ½”λ”©μ€ μ²˜μŒμ—λŠ” μ™„λ²½ν•œ 해결법을 μ œμ‹œν•œ 것 같아도 κΈ΄ μ—¬μ •κ³Ό 같은 μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ ν•˜λ£¨μ‚΄μ΄μ™€ 같은 생λͺ…λ ₯을 κ°€μ§„λ‹€.
생λͺ…λ ₯은 μ–Όλ§ˆλ‚˜ μ˜€λž«λ™μ•ˆ μœ μ§€λ³΄μˆ˜ ν•  수 μžˆλŠ” μƒνƒœλ₯Ό 잘 μœ μ§€ν•˜λŠλƒ 이며, λͺ¨λ“ˆμ΄ κ°€μž₯ κ±΄κ°•ν•œ μƒνƒœλŠ” 가동성과 μ„±λŠ₯, 기술 ν‰μ΄μ„±μ΄λΌλŠ” μ„Έ κ°€μ§€ μš”μ†Œκ°€ λͺ¨λ‘ μ΅œμƒμœ„μ˜ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것이 μ•„λ‹Œ 적정 μ„ μ—μ„œ 잘 κ΄€λ¦¬λ˜λŠ” 것을 λ§ν•œλ‹€.

"μ§„μž…μž₯λ²½"
핡심 λͺ¨λ“ˆμ€ 일정 μˆ˜μ€€ μ΄μƒμ˜ 기술적 λ‚œμ΄λ„λ₯Ό κ°–μΆœ μˆ˜λ°–μ— μ—†λ‹€. μ΄λŸ¬ν•œ λ‚œμ΄λ„λŠ” C++의 μ§„μž…μž₯벽을 높인닀. μ΄λŠ” μž₯애물일 수 μžˆμ§€λ§Œ ν•œνŽΈμœΌλ‘œλŠ” κ°œλ°œμžκ°€ μ™œ κ°œλ°œμ„ μž˜ν•΄μ•Ό ν•˜κ³ , μ™œ 섀계λ₯Ό μž˜ν•΄μ•Ό ν•˜λŠ”μ§€λ₯Ό μ•Œλ €μ£ΌλŠ” μ΄μ •ν‘œμ™€ κ°™λ‹€.
핡심 λͺ¨λ“ˆμ— λŒ€ν•œ μ§„μž… μž₯벽을 많이 κ²½ν—˜ν•΄ 보면 아무리 μƒμ΄ν•œ λΆ„μ•Όμ˜ ν”„λ‘œμ νŠΈμΌμ§€λΌλ„ λŒ€λΆ€λΆ„μ΄ κ³΅ν†΅λœ κΈ°μˆ λ“€μ΄κ³ , κ°€μ΄λ“œμΈ κ²½μš°κ°€ λ§Žλ‹€.

μ•„ν‚€ν…νŠΈλž€?
일반적으둜 '코더'κ°€ μ•„λ‹Œ 'μ•„ν‚€ν…νŠΈ'κ°€ λ˜μ–΄μ•Ό ν•œλ‹€κ³  많이 μ΄μ•ΌκΈ°ν•œλ‹€. ν•˜μ§€λ§Œ μ•„ν‚€ν…νŠΈμ— λŒ€ν•œ κ³ μ •κ΄€λ…μ—μ„œ λ²—μ–΄λ‚˜μ•Ό ν•œλ‹€. μš°λ¦¬λŠ” μ•„ν‚€ν…νŠΈλ₯Ό μ‹ μ²˜λŸΌ μƒκ°ν•˜λŠ” κ²½μš°κ°€ μžˆμ§€λ§Œ 그듀은 신이 μ•„λ‹ˆλ‹€.
μ•„ν‚€ν…νŠΈλŠ” κ²½λ ₯μ΄λ‚˜ μ‹€λ ₯에 상관없이 λˆ„κ΅¬λ‚˜ 될 수 있으며, μ•„ν‚€ν…νŠΈλŠ” 'μ„€κ³„μž'이닀. κ·ΈλŸ¬λ―€λ‘œ ν”„λ‘œμ νŠΈμ˜ λ¬Έμ œμ μ„ 잘 μ•„λŠ” μ‚¬λžŒμ€ μ–΄λ””μ„ κ°€ μƒˆλ‘œ 온 μ•„ν‚€ν…νŠΈκ°€ μ•„λ‹Œ ν”„λ‘œμ νŠΈμ˜ ꡬ성원인 μš°λ¦¬λ“€μ΄λ‹€.

ν•œ ν”„λ‘œμ νŠΈμ˜ ꡬ쑰λ₯Ό 섀계할 λ•Œ, κ°€μž₯ μ€‘μš”ν•œ 것은 λˆˆμ— μ„ νžˆ 보일 μ •λ„λ‘œ 보든 문제λ₯Ό ꡬ체적이고 μ •ν™•ν•˜κ²Œ λ„μΆœν•  수 μžˆλŠ”μ§€, 그리고 그것을 νšŒν”Όν•  λ°©μ•ˆμ„ κ³ μ•ˆν•  수 μžˆλŠ”μ§€μ΄λ‹€.
"λ§Œμ•½ λ‚΄κ°€ ν”„λ‘œμ νŠΈ 전체λ₯Ό 섀계해야 ν•œλ‹€λ©΄ μ§€κΈˆ λ‚΄κ°€ κ°œλ°œν•˜λŠ” λͺ¨λ“ˆμ€ μ–΄λ–€ λͺ¨μŠ΅μ΄μ–΄μ•Ό ν• κΉŒ?"λ₯Ό κ³ μ•ˆν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

ν”νžˆ 섀계와 κ°œλ°œμ„ 숲과 λ‚˜λ¬΄μ— λΉ„μœ ν•œλ‹€. λ‚˜λ¬΄λ₯Ό λ³΄λŠ” μ‚¬λžŒλ„ μˆ²μ„ λ³Ό 쀄 μ•Œμ•„μ•Ό ν•˜κ³ , μˆ²μ„ λ³΄λŠ” μ‚¬λžŒλ„ λ‚˜λ¬΄λ“€μ„ λ³Ό 쀄 μ•Œμ•„μ•Ό μ§„μ§œ 문제λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€.

크둜슀 ν”Œλž«νΌμœΌλ‘œ κ°œλ°œν•˜λΌ.
크둜슀 ν”Œλž«νΌμ΄λž€, 말 κ·ΈλŒ€λ‘œ μ—¬λŸ¬ ν”Œλž«νΌμ— κ±Έμ³μžˆλ‹€λŠ” 뜻으둜 ν•˜λ‚˜μ˜ ν”Œλž«νΌμ— ꡬ애받지 μ•Šκ³  μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ λ™μž‘ν•  수 μžˆλŠ” 것을 μ˜λ―Έν•œλ‹€

"λŸ°νƒ€μž„ 기법과 컴파일 기법"
λŸ°νƒ€μž„ κΈ°λ²•μ˜ 예 : JVM 기법.
컴파일 νƒ€μž„ 기법 : μš΄μš©ν•˜λ €λŠ” ν”Œλž«νΌμ—μ„œ 직접 μ†ŒμŠ€μ½”λ“œλ₯Ό λΉŒλ“œν•˜μ—¬ λ°”μ΄λ„ˆλ¦¬λ₯Ό μƒμ„±ν•˜λŠ” 기법. ν•œ 번 μž‘μ„±ν•œ μ½”λ“œλ₯Ό 각 ν”Œλž«νΌμ—μ„œ 컴파일될 수 μžˆλ„λ‘ λ§Œλ“œλŠ” κΈ°λ²•μœΌλ‘œ μ½”λ“œ μˆ˜μ€€μ—μ„œ ν”Œλž«νΌ 쒅속적인 μ½”λ“œλ₯Ό λΆ„κΈ°ν•˜μ—¬ μ²˜λ¦¬ν•˜μ—¬μ•Ό ν•œλ‹€
컴파일 νƒ€μž„ 기법 예 : κ΅¬κΈ€μ˜ 크둬 λΈŒλΌμš°μ €

크둜슀 ν”Œλž«νΌμ€ 개발된 결과물을 λ‹€λ₯΄κ²Œ ν•˜λŠ” 것이 μ•„λ‹ˆλΌ '개발 κ³Όμ •μ—μ„œμ˜ νš¨μœ¨μ„±'을 μ°ΎλŠ” κΈ°λ²•μ΄λ―€λ‘œ κ²‰μœΌλ‘œ κ΅¬λΆ„ν•˜κΈ°λŠ” μ–΄λ €μš΄ 뢀뢄이닀. λ‹€λ§Œ λΆ„λͺ…ν•œ 것은 λΉ λ₯Έ μ‹œκ°„μ— λͺ¨λ“  ν”Œλž«νΌμ— 배포λ₯Ό ν•  수 μžˆλ‹€λŠ” κ°€μž₯ λΆ„λͺ…ν•œ νŠΉμ§•μ΄ μžˆλ‹€.

"λ””λ°”μ΄μŠ€μ™€ 개발 인λ ₯"
λ””λ°”μ΄μŠ€ κ΄€μ μ—μ„œμ˜ 크둜슀 ν”Œλž«νΌ 개발
PC 뿐만이 μ•„λ‹Œ μŠ€λ§ˆνŠΈν°μ—μ„œλ„ λ™μž‘ν•˜λŠ” μ†”λ£¨μ…˜μ— λŒ€ν•œ μš”κ΅¬κ°€ λŠ˜μ–΄λ‚˜λŠ” μš”μ¦˜μ˜ ν™˜κ²½. λ”°λΌμ„œ 아이폰과 μ•ˆλ“œλ‘œμ΄λ“œ, μœˆλ„μš°, λ¦¬λˆ…μŠ€, λ§₯ λ“±μ˜ 좔가적인 μ†”λ£¨μ…˜ κ°œλ°œμ„ μš”κ΅¬ν•˜λŠ” κ²½μš°κ°€ λŠ˜μ–΄λ‚¬λ‹€.
κ°œλ°œν•΄μ•Ό ν•  μ½”λ“œκ°€ λŠ˜μ–΄λ‚˜λŠ” κ²ƒλΏλ§Œμ΄ μ•„λ‹Œ 같은 λ™μž‘μ˜ μ½”λ“œλ₯Ό μ—¬λŸ¬ 번 μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” 뢀담이 μ‘΄μž¬ν•œλ‹€. λ˜ν•œ 개발자 μ—­μ‹œ μ‚¬λžŒμ΄κΈ°μ— λŠ˜μ–΄λ‚˜λŠ” 반볡적인 업무에 μ‹€μˆ˜λ„ λŠ˜μ–΄λ‚  것이며 μ΄λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν’ˆμ§ˆκ³Όλ„ μ§κ²°λœλ‹€.

개발인λ ₯ κ΄€μ μ—μ„œμ˜ 크둜슀 ν”Œλž«νΌ 개발
ν”νžˆ 개발자 그룹을 λ‚˜λˆŒ λ•Œ, λ°±μ—”λ“œ - 미듀웨어 - ν”„λ‘ νŠΈμ—”λ“œλ‘œ κ΅¬λΆ„ν•˜κ³€ ν•œλ‹€. λ˜ν•œ 핡심λͺ¨λ“ˆμ€ λ°±μ—”λ“œμ— μ†ν•œλ‹€. 
λ°±μ—”λ“œ κ°œλ°œμžλ“€μ΄ μ„ μ •λœ μ΄ν›„μ—λŠ” 그듀이 개발 및 μ§€μ›ν•˜λŠ” ν”Œλž«νΌμ΄λ‚˜ 개발 언어에 따라 미듀웨어와 ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ κ²°μ •λ˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€. λ”°λΌμ„œ λ°±μ—”λ“œ λͺ¨λ“ˆμ΄ μ–΄λ–€ ν”Œλž«νΌμ— 쒅속적이라면 ν•΄λ‹Ή μ†”λ£¨μ…˜μ€ κ·Έ ν”Œλž«νΌμ— 쒅속적인 μƒνƒœλ‘œ 개발이 될 μˆ˜λ°–μ— μ—†λ‹€.
λ”°λΌμ„œ λ‹€μ–‘ν•œ ν”Œλž«νΌμ— μ œκ³΅ν•˜κΈ° μœ„ν•΄ λ°±μ—”λ“œ κ°œλ°œμžλ“€μ€ μš”μ¦˜ 많이 μ“°μ΄λŠ” 크둜슀 ν”Œλž«νΌ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°œλ°œμ„ ν•˜κ²Œ λ˜λŠ” κ²½μš°κ°€ 늘고 μžˆλ‹€.

정리
크둜슀 ν”Œλž«νΌμ€ λ””λ°”μ΄μŠ€μ™€ κ°œλ°œμžλ“€μ„ 톡합할 수 μžˆλŠ” ꢁ극의 μž₯점을 μ§€λ‹Œ κΈ°λ²•μœΌλ‘œ κ³„μ†ν•΄μ„œ μ§„ν™”ν•˜λŠ” λ””λ°”μ΄μŠ€μ™€ μ»€μ Έκ°€λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ 규λͺ¨μ—μ„œ κ°œλ°œμžλ“€μ΄ 살아남기 μœ„ν•΄μ„œλŠ” 크둜슀 ν”Œλž«νΌ 개발 기법을 λ°›μ•„λ“€μ—¬μ•Όλ§Œ ν•œλ‹€.

728x90
λ°˜μ‘ν˜•