[C++ 공부] Chap. 1 - (1), (2)
C와의 차이점?
C++은 C를 일부로 포함하고 있다.
그러나, C는 프로그램이 실행되는 순서를 중요하게 생각하는 절차지향 언어이고,
C++은 어떤 프로그램 모음(객체)을 조합해서 실행하는 객체지향 언어이다.
객체지향 언어라도 절차지향 요소가 아예 배제되는 것은 아니지만
프로그래밍 방식 자체가 다르기 때문에 접근 방법에도 많은 차이가 있다.
따라서 C++을 공부하면서 C와 비슷하지만 다른 점이 발견된다면
"무조건 C++의 방식을 따른다." 고 생각하면 좋다.
Chap.1 C와는 다른 C++
핵심 개념
1. 인스턴스 : 변수를 객체라는 다른 형식으로 다루는 것.
2. auto : 초깃값의 자료형에 맞춰 선언하는 인스턴스 자료형을 '자동으로' 결정한다.
3. 참조형 변수: 포인터의 오류를 줄여주는 자료 다루기 방법.
4. 범위 기반 for문: 특정 조건 없이도 반복분을 사용하도록 도와줌.
C에서 자료형과 관련된 핵심 개념
- 정수형 또는 문자형과 같은 자료형: 기본적인 자료 형식
- 구조체 / 공용체: 기존의 자료형을 조합해 만들어낸 새로운 형식
- 포인터: 자료형을 효율적으로 다루기 위해 메모리를 어떻게 이용하는지 이해하기 위한 핵심 개념
Hello World !
iostream
C의 stdio.h와 같은 역할을 하는 표준 헤더 파일.
cout, endl과 같은 객체를 사용하는 데 필요한 헤더 파일이다.
int _tmain( int argc, _TCHAR* argv[ ])
유니코드
전 세계 문자를 하나의 데이터 형식 안에 담아 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
Note that, 문자열의 형태는 MBCS(Multi Bytes Character Set)와 유니코드 두 가지로 나뉜다.
_tmain() 함수와 _TCHAR 자료형
int _tmain ( int argc, _TCHAR* argv[ ])
유니코드를 지원하기 위해 기존의 int main ( int argc, char* argv[ ]) 를 변경한 것으로 생각하면 된다.
즉, 유니코드를 지원하기 위해 재선언된 것이다.
- _tmain() 함수
- Microsoft에서 만든 확장된 형태의 main 함수이다. ( main() 함수는 C++ standard, 즉 C++ 표준함수이다.)
- main() 함수의 경우 멀티 바이트를 사용하고, _tmain() 함수는 유니코드를 사용한다.
- _tmain() 함수를 사용하기 위해서는 tchar.h 헤더 파일을 포함시켜줘야 한다.
- _tmain() 함수는 C에 있는 wmain() 함수의 상수 정의이다.
- _tmain() 함수의 두 번째 매개변수는 'wchar_t*의 배열'이며, 역시 유니코드이다.
- (따라서 Hello 같은 문자열 상수를 사용하지 않고, L"Hello" 같은 형식을 사용한다.)
- - 유니코드를 지원하는 프로그램은 컴파일 시, main() 함수의 와이드 문자 버전인 wmain() 함수로 바뀐다.
- - 유니코드를 지원하지 않는 프로그램은 컴파일 시 main() 함수로 바뀐다.
std::cout << "Hello, World" << std::endl;
"std 네임스페이스에 속한 cout 객체에 Hello, World 문자열과 endl 객체를 넘겨(<<) 문자열을 화면에 출력해줘"
- std : 네임스페이스(namespace) -> "소속"의 개념
- :: : 범위 지정 연산자 혹은 스코프 설정 연산자(Scope resolution operator)라고 한다.
- cout : 콘솔 출력을 담당하는 객체이다.
- << : 연산자 함수이다.
- endl : End of Line, C의 '\n'처럼 개행 역할과 출력 스트림을 모두 내보내는 역할을 동시에 수행한다.
이와 같은 코드 형식은 '출력을 전문으로 하는 객체에게 출력 행위를 맡김'으로써 쉽고 훨씬 효율적으로 사용 가능하며, 보안 역시 안전하다.
+)
- 네임스페이스 (namespace, 이름 공간)
C++에서는 변수, 함수, 구조체, 클래스 등을 서로 구분하기 위해 이름으로 사용되는 다양한 내부 식별자(identifier)를 가진다. 하지만, 프로그램이 복잡해지고 여러 라이브러리가 포함될수록 내부 식별자 간에 충돌할 가능성도 그만큼 증가한다.
따라서 이러한 이름 충돌 문제를 해결하기위해 C++에서는 네임스페이스를 사용한다.
네임스페이스(namespace)는 내부 식별자에 사용될 수 있는 유효 범위를 제공하는 선언적 영역을 의미한다.
개체를 구분할 수 있는 범위를 나타내는 말로, 일반적으로 하나의 네임스페이스에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다. 예를 들어, 파일 시스템은 파일에 이름을 할당하는 네임스페이스이다.
일반적으로 네임스페이스는 헤더파일에서 정의되며, 언제나 새로운 이름을 추가할 수 있도록 개방되어있다.
- 범위 지정 연산자 ( :: , scope resolution operator)
C++에서 가장 우선순위가 높은 연산자이다.
범위지정연산자(::)는 여러 범위에서 사용된 식별자를 식별하고 구분하는 데 사용하는 연산자이다.
(이러한 식별자로는 변수, 함수, 또는 열거체가 올 수 있다.)
범위지정연산자(::)를 변수 이름 앞에 붙이면 해당 변수는 전역으로 사용하라는 의미로 쓰이게 된다.
또한, 클래스에 이 연산자를 사용하면 네임스페이스 멤버를 식별하거나, 클래스의 정적 멤버를 호출할 수 있다.
# 작성법
1. ::식별자
2. 클래스이름::식별자
3. 네임스페이스::식별자
4. 열거체::식별자
*참고 자료
[이것이 C++이다 - 최호성 지음, 한빛미디어]
https://sean.tistory.com/13
_tmain(), main(), wmain() 차이점
_tmain(), main(), wmain() 리버싱을 공부할려고 리버싱의 정석책이라고 불리는 "리버싱 핵심원리" 라는 책을 펼쳤다. 처음 디버깅하는 프로그램은 우리 모두가 아는 hello world 프로그램이었다. 그런데
sean.tistory.com
http://www.tcpschool.com/cpp/cpp_operator_cpp
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
http://www.tcpschool.com/cpp/cpp_scope_namespace
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com