ν‹°μŠ€ν† λ¦¬ λ·°

β€» μ€‘κ°„κ³Όμ œλ¬Ό : κΈ°κ°„ μ§€μΌœμ„œ μ œμΆœν•˜κΈ° 

 


πŸ“’ C와 C++ μ–Έμ–΄

C++ μ–Έμ–΄λž€?

· 1979λ…„ Bell μ—°κ΅¬μ†Œμ˜ Bjarne Stroustrup(λΉ„μ•Όλ„€ 슀트둭슀트룹)이

C μ–Έμ–΄λ₯Ό ν™•μž₯ν•΄ λ§Œλ“  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

· 1983λ…„λΆ€ν„° C++ 이름 μ‚¬μš©

 

μ£Όμš” ν™•μž₯ λ‚΄μš©

· 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° : 클래슀, 상속, λ‹€ν˜•μ„±, 동적 바인딩 λ“±

· μΌλ°˜ν™” ν”„λ‘œκ·Έλž˜λ° : ν…œν”Œλ¦Ώ

· μ˜ˆμ™Έμ²˜λ¦¬

 

 


πŸ“’ C++ μ–Έμ–΄μ˜ ν‘œμ€€

κ΅­μ œν‘œμ€€ν™”κΈ°κ΅¬μ˜ C++ ν‘œμ€€ν™” μ—°ν˜

≫ μžλ£Œν˜•μ— λŒ€ν•œ μΆ”λ‘ μ΄λΌλ˜μ§€ λžŒλ‹€ 등이 λ„μž…λ˜μ–΄ C++11 λΆ€ν„° λ§Žμ€ λ³€ν™”λ₯Ό κ°–κ²Œ λ˜μ—ˆμŒ

οΌŠμ •μ²΄λœ μ–Έμ–΄κ°€ μ•„λ‹Œ, κ°œμ„ μ΄ ν•„μš”ν•œ 뢀뢄을 λ³΄μ™„ν•˜μ—¬ λ°œμ „ν•˜λŠ” μ–Έμ–΄!

οΌŠλ‚΄κ°€ κ°€μ§„ μ»΄νŒŒμΌλŸ¬κ°€ μ΅œμ‹  버전을 λ‹€ μ§€μ›ν•˜λŠ” 것은 μ•„λ‹˜


πŸ“’ C++ ν”„λ‘œκ·Έλž¨μ˜ μ†ŒμŠ€ 파일

// 크게 두 κ°€μ§€ μœ ν˜•

1. μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨ 파일

≫ μ²˜λ¦¬ν•˜κ³ μž ν•˜λŠ” μž‘μ—… μˆ˜ν–‰, C++ ν”„λ‘œκ·Έλž¨ λͺ…λ Ήμ–΄λ₯Ό λ‹΄κ³  있음
≫ 파일의 ν™•μž₯자 : .cpp / .cxx / .C λ“± μ‚¬μš© (.cppλ₯Ό κ°€μž₯ 많이 μ‚¬μš©)

 

2. 헀더 파일

≫ μ—¬λŸ¬ μ†ŒμŠ€ νŒŒμΌμ— κ³΅ν†΅μ μœΌλ‘œ μ„ μ–Έλ˜λŠ” λ‚΄μš©μ„ 담은 파일

γ€€: ex) 클래슀, ν•¨μˆ˜μ˜ μ›ν˜•, 맀크둜, μ „μ—­λ³€μˆ˜, μƒμˆ˜ λ“±

≫ 단독 μ»΄νŒŒμΌλ˜μ§€ μ•Šκ³ , #include λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄ 곡톡적인 λ‚΄μš©μ„

γ€€λ°˜λ³΅μ  μž‘μ—… 없이 κ°„λ‹¨νžˆ μˆ˜ν–‰ν•  수 있게 됨

≫ ν™•μž₯자 : .h / .hpp λ“± μ‚¬μš© (일반적으둜 .h μ‚¬μš©)

 


πŸ“’ C++ ν”„λ‘œκ·Έλž¨μ˜ λΉŒλ“œ

ν—€λ”νŒŒμΌμ˜ λ‚΄μš©μ€ λ‹¨λ…μœΌλ‘œ 컴파일 λ˜μ§€ μ•Šκ³  #include "sub.h" λͺ…령에 μ˜ν•΄ .cpp 파일 λ‚΄μ—μ„œ 컴파일

: μ‹€μ œλ‘œ λ²ˆμ—­λ˜λŠ” νŒŒμΌμ€ Sub.cpp / Sample.cpp μ†ŒμŠ€ 파일.

 

λ˜ν•œ, μ†ŒμŠ€ νŒŒμΌμ„ λ²ˆμ—­ν•˜λ©΄ λͺ©μ  파일이 λ§Œλ“€μ–΄ 짐 (κ·Έ 과정을 '컴파일 ν•œλ‹€' 라고 함)

 

ν•˜μ§€λ§Œ λͺ©μ  파일이라 ν•΄μ„œ 단독 λ™μž‘ λΆˆκ°€

λ™μž‘ν•˜λ €λ©΄ 라이브러리(C++κ°€ μ œκ³΅ν•˜λŠ” μœ μš©ν•œ κΈ°λŠ₯) 와 κ²°ν•© ν•„μš”!

 

κ²°ν•©ν•˜λŠ” κ³Όμ • = 링크

결과적으둜 μ‹€ν–‰ ν”„λ‘œκ·Έλž¨ 파일('.exe')이 λ§Œλ“€μ–΄ 짐

 

→ μ΄λŸ¬ν•œ μ „λ°˜μ μΈ κ³Όμ • : ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œν•˜λŠ” 것

 

ν•„μš”ν•œ 도ꡬ

· μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨ 및 GUI λ“±μ˜ νŽΈμ§‘κΈ°/에디터 (μ†ŒμŠ€ νŒŒμΌμ„ λ§Œλ“€κΈ° μœ„ν•¨)

· 컴파일러 (컴파일 μ‹œ ν•„μš”)

· 링컀 (링크 μ‹œ ν•„μš”)

· 디버깅 도ꡬ (μ—λŸ¬λ₯Ό μ°Ύμ•„λ‚΄κΈ° μœ„ν•œ 디버거)

 

≫ 이λ₯Ό λͺ¨λ‘ 묢은 ν†΅ν•©κ°œλ°œν™˜κ²½(IDE) 쑴재

ex) vs code / eclipse / dev c++ / code Blocks λ“±

 


πŸ“’ C++ μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨

주석은 싀행에 ν•΄λ‹Ήλ˜λŠ” λͺ…령이 μ•„λ‹˜ → // μ‚¬μš©

 

C++ 주석

≫ μžλ°”μ™€ 주석 μ‚¬μš© 방법 동일

 


πŸ“’ μ„ ν–‰μ²˜λ¦¬

μ„ ν–‰μ²˜λ¦¬μ˜ μ§€μ‹œ

#둜 μ‹œμž‘λœ λͺ…령은 μ„ ν–‰μ²˜λ¦¬

 

μ„ ν–‰μ²˜λ¦¬λž€?

· C++ ν”„λ‘œκ·Έλž¨μ„ μ»΄νŒŒμΌν•˜κΈ° 전에 μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨μ„ κ°€κ³΅ν•˜μ—¬
μ»΄νŒŒμΌλŸ¬κ°€ μ‹€μ œλ‘œ λ²ˆμ—­ν•  μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 것

 

· μ„ ν–‰μ²˜λ¦¬κΈ° μ§€μ‹œμ–΄(preprocessor directives)둜 μ²˜λ¦¬λ₯Ό μ§€μ‹œν•¨
- μ„ ν–‰μ²˜λ¦¬κΈ° μ§€μ‹œμ–΄λŠ” ‘#’둜 μ‹œμž‘함
- μ„ ν–‰μ²˜λ¦¬κΈ° μ§€μ‹œμ–΄ λ¬Έμž₯은 ν•œ ν–‰μ— ν•œ κ°œμ˜ λ¬Έμž₯을 μž‘성함

γ€€(일반적인 λ¬Έμž₯은 ν•œ ν–‰, μ—¬λŸ¬ ν–‰ 상관 없이 μž‘μ„± κ°€λŠ₯)

 

· λŒ€ν‘œμ μΈ μ„ ν–‰μ²˜λ¦¬
- ν—€λ”νŒŒμΌ μ‚½μž… : #include
- 맀크둜 μ„ μ–Έ 및 ν•΄μ œ : #define, #undef
- 쑰건뢀 컴파일 : β‘  #if (#endif 와 ν•„μˆ˜λ‘œ 짝을 이룸 // if문의 끝을 μ•Œλ¦¬λŠ” 것),

γ€€β‘‘ #ifdef (λ§Œμ•½ μ •μ˜λ˜μ–΄ 있으면 μ°Έ, μ•„λ‹ˆλ©΄ κ±°μ§“), β‘’ #ifndef (λ§Œμ•½ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄)

 ≫ 쑰건으둜 ν•΄λ‹Ή λ¬Έμž₯을 λ²ˆμ—­ν•  μ§€ 말 μ§€ κ²°μ •ν•˜λŠ” 것

 

μ„ ν–‰μ²˜λ¦¬μ˜ 예 - 헀더 파일 μ‚½μž…

#include : 헀더 νŒŒμΌμ„ μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨ 파일과 κ²°ν•©μ‹œν‚€λŠ” λͺ…λ Ή

≫ a.cpp μ†ŒμŠ€ νŒŒμΌμ„ 컴파일 ν•  λ•Œ μ•„λž˜ ν—€λ”νŒŒμΌ(a.h)을 ν•΄λ‹Ή μ„ ν–‰μ²˜λ¦¬κΈ° μ§€μ‹œμ–΄ μœ„μΉ˜μ— μ‚½μž…

 

· <iostream> μ—λŠ” .h ν™•μž₯μžκ°€ μ—†μŒ → μ‚¬μš©μžκ°€ λ§Œλ“  νŒŒμΌμ€ " " μ•ˆμ— λ„£μŒ

γ€€C++ ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” 헀더 파일인 경우 ν™•μž₯자 λΆˆν•„μš”

· μ²˜μŒμ— C++ κ°€ 생겼을 λ•Œ .hλΌλŠ” ν™•μž₯μžκ°€ ν•„μš”ν–ˆμ§€λ§Œ

γ€€ν‘œμ€€μ΄ κ°œμ •λœ 이후 .hκ°€ μžˆλŠ” 이전 버전과 이후 λ²„μ „μœΌλ‘œ ꡬ뢄할 수 μžˆλ‹€.

· ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ κ°€μ Έμ˜¨ νŒŒμΌμ„ κ°€μ Έμ˜¬ 경우 이름 < > (κΊ½μ‡ ) μ‚¬μš©

· 같은 폴더 λ‚΄ μœ„μΉ˜ν•œ ν—€λ”νŒŒμΌμ„ κ°€μ Έμ˜¬ κ²½μš°μ—λŠ” " " μ‚¬μš©

 

οΌŠμΆ”κ°€λ‘œ cout . endlκ³Ό 같은 μž…μΆœλ ₯κ³Ό κ΄€λ ¨λœ 객체듀을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ”

γ€€ν•΄λ‹Ή λ‚΄μš©μ΄ iostream νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆμœΌλ―€λ‘œ #include ν•΄ μ£Όμ–΄μ•Ό 함!

 


πŸ“’ λ¬Έμž₯

C++ ν”„λ‘œκ·Έλž¨μ˜ λ¬Έμž₯κ³Ό 블둝(block)

 


πŸ“’ ν•¨μˆ˜

ν•¨μˆ˜μ˜ ꡬ성

≫ 메인 ν•¨μˆ˜λŠ” int μžλ£Œν˜•μ„ λ°˜ν™˜ν•¨


πŸ“’ μž…μΆœλ ₯ 슀트림

// 객체 : λ³€μˆ˜μ™€ ν•¨μˆ˜ 묢음 (처리 λ‹¨μœ„ 묢음)

std::cout 객체

endl : end of line (ν–‰μ˜ 끝으둜 μ•„λž˜ 쀄뢀터 좜λ ₯ν•˜λ„λ‘ 함)

 

std::cin 객체

ꡬ뢄 문자 : 데이터λ₯Ό ꡬ뢄 → 띄어쓰기λ₯Ό ꡬ뢄 문자둜 인식

 


πŸ“’ λͺ…칭곡간

λͺ…μΉ­κ³΅κ°„μ΄λž€?

:: 은 μ†Œμ†λœ λ²”μœ„(μ˜μ—­)을 λ‚˜νƒ€λ‚΄λŠ” 기호

 

std = standard (ν‘œμ€€)

 

λͺ…칭곡간 μ‚¬μš© 예

γ€€β–Ό μ½”λ“œλΈ”λŸ­ μ°Έμ‘°

#include <iostream>

namespace NameSpace1 { int a = 10; }	// λͺ…μΉ­ 곡간
namespace NameSpace2 { int a = 20; }	// λͺ…μΉ­ 곡간 (μœ„μ•„λž˜ aλŠ” 닀름)
int a = 30;	// μ „μ—­ λͺ…μΉ­ 곡간 (λͺ…μΉ­ 곡간에 μ†ν•˜μ§€ μ•ŠμŒ)
namespace NameSpace1 { int b = 50; }	// μœ„μ˜ int aκ°€ μ†ν•œ 것과 같은 λͺ…μΉ­ 곡간

int main()	// 메인 ν•¨μˆ˜
{
	int a = 40;	// μ§€μ—­ λ³€μˆ˜ (블둝 μ•ˆμ— 있음)
    
    /* μœ„μ˜ λ„€ aλ₯Ό κ΅¬λΆ„ν•΄λ³΄μž. */
    
	std::cout << NameSpace1::a << std::endl;	// 10 좜λ ₯
	std::cout << NameSpace2::a << std::endl;	// 20 좜λ ₯
	std::cout << ::a << std::endl;	// 30 좜λ ₯
	std::cout << a << std::endl;	// 40 좜λ ₯
	std::cout << NameSpace1::b << std::endl;	// 50 좜λ ₯
	return 0;
}

 

β˜… main() ν•¨μˆ˜λŠ” ν•œ 개의 ν”„λ‘œμ νŠΈ λ‚΄ ν•œ 번만 μ •μ˜(μ„ μ–Έ)ν•  수 μžˆλ‹€!

 

'using'을 μ΄μš©ν•œ λͺ…칭곡간 μ‚¬μš©

≫ stdλΌλŠ” λͺ…칭곡간 이름을 기본으둜 μ‚¬μš©ν•˜κ² λ‹€ μ§€μ •ν•˜λŠ” 것

ν•˜μ§€λ§Œ μœ„μ™€ 같은 using namespace std;λŠ” ꢌμž₯ν•˜μ§€ μ•Šκ³ ,

μ•„λž˜μ²˜λŸΌ ν•„μš”ν•œ κ°μ²΄μ—λ§Œ using μ‚¬μš©μ„ μΆ”μ²œ.

 

using namespace둜 μ§€μ •ν•œ λͺ…μΉ­ μƒλž΅ν•΄λ³΄κΈ°

≫ μ›λž˜ cout μ•žμ— 있던 std:: λ₯Ό μƒλž΅ν•  수 있게 됨

οΌŠλ§Œμ•½ 좩돌 λ°œμƒ μ‹œ λͺ…μΉ­ 곡간을 μ§€μ •ν•΄ ꡬ뢄토둝 ν•˜μž.

 

또 λ‹€λ₯Έ using namespace의 예

 


β˜‘οΈ 정리

 


πŸ–₯οΈπŸ–±οΈ μ‹€μŠ΅

// Visual Studio Community μ‚¬μš© (λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈ 제곡)

 

κΈ°λ³Έ ν™”λ©΄

β‘  : νŽΈμ§‘ μ°½ / β‘‘ μ†”λ£¨μ…˜ 탐색기

 

λΉŒλ“œ

 

디버깅

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG more
Β«   2025/05   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
κΈ€ 보관함