이번 포스팅에서 우리가 배워볼 것은 다음과 같다.
- 들어가기 전 기초 개념 & 상식 정리
- C++의 언어의 역사와 특징
- 비주얼 스튜디오 설치
- 입출력 학습 / 간단한 예제 프로그램을 컴파일하고 실행하기
- 변수와 수식의 개념을 학습하기
- 정리
1. 들어가기 전 개념 & 상식 정리
* 기계어 : 0과 1로 구성되어 있는 "001101110001010..."과 같은 형태. 컴퓨터는 전기 신호인 on과 off로 전달하므로 0과 1로 이루어져 있는 것이다.
* 절차 지향 프로그래밍(procedural programming) : 기본적으로 프로시저를 사용하여 프로그램을 작성하는 프로그래밍 방식이다. 선형적으로 이루어져 있다. 참고로 객체 지향 프로그래밍에서는 데이터와 알고리즘이 묶여있다.(비선형적)
* 통합 개발 환경(IDE: integrated development environment) : 프로그램 개발에 필수적인 편집, 컴파일, 실행, 디버깅 기능을 하나로 통합한 도구이다.
2. C++의 언어의 역사와 특징
C++는 1980년대 초에 AT&T 벨연구소의 Bjarne Stroustrup에 의하여 개발되었습니다. C++는 C언어를 유지한 상태에서 좀 더 확장한 것이라고 볼 수 있습니다. 그 확장된 부분이 바로 Class 개념이니 C + Classes => C++인 셈입니다.
C++는 C언어에 클래스 개념을 추가하고 이어서 가상 함수, 연산자 중복 정의, 다중 상속, 템플릿, 예외 처리 등이 차례로 추가되었습니다.
[C++의 설계 철학]
- 엄격한 타입 검사를 가진다.
- 범용 언어이다.
- 객체 지향적으로 작성하게 된다면 효율적이고 이식성이 뛰어나게 된다!
- 여러 가지의 프로그래밍 스타일을 지원한다.(절차 지향 프로그래밍 / 데이터 추상화 / 객체 지향 프로그래밍 / 일반화 프로그래밍)
- 프로그래머가 자유롭게 선택할 수 있도록 설계되어져 있다.
- 최대한 C와 호환되어져 있다.
- 플랫폼에 의존적이거나 일반적이지 않은 특징은 제거되어져 있다.
[C++의 특징]
- [매우 중요]클래스(class) - 클래스를 이용하여 하나의 객체의 속성과 동작들을 한 곳으로 모아서 정의할 수 있습니다!
- 상속(inheritance) - 클래스를 상속받아서 기존의 코드를 재사용할 수 있어요!
- 연산자 중복(operator overloading) - 대상에 따라서 동일한 연산자로 새로운 연산을 정의할 수 있어요!
- 함수 중복(function overloading) - 매개 변수만 다르면 동일한 이름의 함수를 여러개 만들 수 있어요!
- new와 delete 연산자 - 동적 메모리의 할당과 해제를 담당하는 연산자
- 제네릭(generics) - 클래스 정의를 자료형에 상관없이 재사용하는 기술
[모던 C++]
C++ 11과 C++ (14)는, 많은 새로운 기능을 도입했다. 그 기능들은 아래와 같다.
- 범위(range) 기반의 반복 루프 기능
- 타입 자동 추론 기능(auto)
- 보편적인 초기화
- 람다식
[C++는 어디에 사용되는가?]
C++는 실행속도가 C#, Java, Perl, Python에 비해 빠른편이라서 주로 하드웨어 접근할 때 많이 쓰는 편이다.
cf) 삼성전자는 여전히 절차지향 언어를 사용하는 편이다. (간단한 프로그램인데 C++로 객체지향 코드 작성하면 code over될 수 있다.)
[C++의 장점]
- C++로 작성된 프로그램은 속도가 빠르다.
- C++은 멀티패러다임 프로그래밍을 지원한다. 즉 절차지향, 객체 지향, 제네릭 방법을 동시에 지원한다.
- 하드웨어에 접근할 수 있다.
- 메모리를 효율적으로 사용한다.
- C언어 프로그램을 그냥 가져다가 사용할 수 있다.
- 고성능의 게임이나 인공지능, 장치 드라이버에 적합하다.
3. 비주얼 스튜디오 설치
Visual Studio 공식 사이트 들어가서 커뮤니티 버전으로 Download 하면 된다.
쭉 설치한 다음에, 워크로드 단계에서 'C++를 사용한 데스크톱 개발'을 체크해주고 설치해주면 C++를 사용할 준비가 완료되었다.
그 다음에 새 프로젝트를 만든 후, 솔루션 탐색기에서 소스파일에 우클릭 -> 추가 -> 새 항목을 선택하여 새 소스 파일을 만들면 이제 코딩할 준비까지도 완료했다.
4. 입출력 학습 / 간단한 예제 프로그램을 컴파일하고 실행하기
#include <iostream> // 헤더파일(input output stream : 내보내고 가져오는 stream을 담당하는 라이브러리)
using namespace std; // 이름 공간 설정
int main() { // 함수 선언
cout << "hello world" << endl; // cout : 모니터로 내보내라 | cin : 컴퓨터로 들여보내라
}
// return 0; 메인함수로 0이 반환되었다(코드가 잘 마무리되었다는 뜻)
여기서 using namespace std;를 안쓰면 아래의 cout와 endl를 사용할 수 없기 때문 오류가 발생된다. 그냥 cout와 endl를 부른다는건 글로벌하게 부른다는 것이다. 즉 '철수야'라고 그냥 부른다면 누구 집에 사는 철수를 부르는지 부르는 셈. 따라서 std를 사용해서 std 공간 안에 있는 철수를 부를 수 있게 using namespace std;를 만들어주는 것이다. std(클래스)에는 cout, endl, cin를 포함하여 자주 사용되는 함수들로 정의되어져 있다.
아, 물론 아래 cout << "hello world" << endl; 대신 std::cout << "hello world" << std::endl; 로도 할 수 있지만 귀찮으니 이렇게 using namespace std;로 사용하는 편이다.
또한 여기서 cout는 Consle Output(콘솔 출력)을 의미하고 endl는 End of Line을 의미한다. endl까지 입력하면 콘솔창에는 다음 라인으로 넘어가진다.
마지막에서 'return 0;' 문장이 실행되면 main() 함수는 작업을 끝내고 외부로 0값을 반환한다. 0을 반환하면 "잘 무리없이 동작한다"는 의미로 받아들이면 된다.
int i;
cin >> i; // 정수를 읽어서 i에 저장한다.
double f;
cin >> f; // 실수를 읽어서 f에 저장한다.
다음 코드는 입력과 관련해서 코드를 정리한 것이다. cin은 Consle Input(콘솔 입력) 이라는 의미이다.
5. 변수와 수식의 개념을 학습하기
변수(variable)는 데이터(값)를 저장하는 상자라고 보면 된다.
// 변수 선언 정리
int i; // 변수 i를 선언한다.(RAM에 i라는 그릇이 하나 생성)
i = 100; // 변수 i에 100을 저장한다.
int i = 100; // 변수 i를 선언하고 100을 초기화한다.(3~4줄 코드를 한 줄로 압축한 것)
int i {100}; // int i = 100; 과 동일
string s {"hello"}; // string s = "hello";과 동일
여기서서 '=' 과 '==' 은 다르니 주의하자.('=='는 비교연산이다.) 참고로 int는 integer(정수)이고 string은 문자열 이다.
예시로 여기서 bool형을 뽑자면 bool형은 1byte, 즉 8bit 이므로 2의 8승(0~255)까지의 표현력이 생긴다. (∵한 자리에 0 또는 1이 들어가므로)
한편, long long과 long double의 경우, 얘네는 특별하게 엄청난 긴 숫자를 쓸 때만 사용한다. 그 외 나머지는 자주 쓰는 자료형들이다.
연산자 | 의미 |
x + y | x와 y를 더한다 |
x - y | x에서 y를 뺀다 |
x * y | x와 y를 곱한다 |
x / y | x를 y로 나눈다 |
x % y | x를 y로 나눈 나머지 |
6. 정리
앞으로 우리가 많이 칠 코드에 대해서 한 번에 모아 정리했으니 주석 설명 참고하여 이해해보자.
#include <iostream> // 헤더파일(input output stream : 내보내거나 가져오는 stream을 담당하는 라이브러리)
#include <string>
using namespace std;
/* 이름 공간 설정(std 안쓰면 오류 발생 why? 아래의 cout와 endl를 사용할 수 없기 때문
그냥 cout와 endl를 부른다는건 글로벌하게 부른다는 것이다.
즉 '철수야'라고 하면 누구 집에 사는 철수를 부르는지 부르는 셈
따라서 std를 사용해서 std 공간 안에 있는 철수를 부를 수 있는 것.
아래에 std::cout << "hello world" << std::endl; 로도 할 수 있지만 귀찮으니
이렇게 using namespace std;로 사용해도 된다.
*/
auto add(int x, int y) {
return x + y;
}
int main() { // 함수 선언
cout << "hello world" << endl;
// cout : 모니터로 내보내라(출력) | cin : 컴퓨터로 들여보내라(입력) | endl : end of line
// 변수의 선언
int i; // 변수 i를 선언한다.
i = 100; // 변수 i에 100을 저장한다.
// int i = 100; // 변수 i를 선언하고 100으로 초기화한다.
// int i { 100 }; // int i = 100;과 동일하다.
string s{ "hello" };// string s = "hello";과 동일하다.
// 논리형
bool b1;
b1 = true;
cout << b1 << endl;
// 문자형
char ch;
ch = 'a';
cout << ch << endl;
// 문자열
string s1 = "Good";
string s2 = "Morning";
string s3 = s1 + " " + s2 + "!";
cout << s3 << endl;
// 문자열 연습1
string s4 = "Good";
string s5 = "Bad";
bool b2 = (s4 == s5);
cout << b2 << endl;
// 문자열 연습2
string s6 = "사과";
string s7;
s7 = s6 + " " + to_string(10) + "개";
// string + int는 올바르지 않은 문법이므로 to_string을 사용한다.
cout << s7 << endl;
// 기호 상수(절대 바뀌지 않는 것. ex: PI)
const double TAX_RATE = 0.25;
// 기호 상수 선언(보통 변하지 않는 변수는 대문자로 쓰는 것으로 사람들끼리 약속한다.)
int income = 1000;
income = income - TAX_RATE * income;
// auto 키워드(자동 타입 추론 automatic type deduction)
/* 비유 : 밖에서 누군가 배식을 해줄 때 그 사람이 뭘 줄지 모르니
내가 그것에 맞는 그릇을 가지고 가는 것
즉, 자료를 던져주면 알아서 그릇을 준비하라는 키워드.
되게 단순해보이지만 나중에 객체(class)를 받을 때 자료형이 다양해져서
이것을 해결할 때 auto를 사용하면 편리하다.
우선은 원래 있던 자료형들을 써보는 것을 추천하고 나중에 복잡해질 때
auto 키워드를 사용하는 것을 추천.(공부 순서에 적절) */
auto d = 1.0; // 그럼 d는 double 형이 된다.ㅁ
auto sum = add(5, 6); // sum은 int 형이 된다.
// 이름 입력받아서 출력하기
string name;
cout << "이름을 입력하시오: ";
cin >> name;
cout << name << "님 환영합니다." << endl;
return 0; // return 0; 메인함수로 0이 반환되었다(코드가 잘 마무리되었다는 뜻)
}
'Develop > C, C++' 카테고리의 다른 글
[C, C++] 포인터(Pointer) (0) | 2023.12.18 |
---|---|
[C/C++] 함수(Function) (0) | 2023.12.18 |
[C/C++] 함수와 포인터를 사용해서 문자열을 뒤집어보자! (0) | 2023.10.12 |
[C++] 포인터를 사용해서 배열의 합계와 평균을 계산해보자! (0) | 2023.10.10 |
[C++/1편 - 실습편] C++ Setting & Variable, Basic Concept (0) | 2023.09.13 |