#include <iostream>
// 문자열 관련 라이브러리
#include <string>
// c++ 표준 라이브러리 사용
using namespace std; // C++ Standard Library
int main()
{
// 변수
// int 자료형 : 정수값을 저장
// 1, 102, 123, 등 정수 값을 저장
// float 자료형 : 실수 값을 저장
// 3.12 , 3.436, 등 실수 값 저장
// string 자료형 : 문자열 저장
// "대한민국", "C++ 공부", "!!" 과 같은 문자열 저장
http://kor.pe.kr/util/4/charmap.htm
// 변수는 프로그램이 사용하는 데이터를 일시적으로 저장하는 목적으로 사용하는 메모리 공간이다.
// 변수는 우리가 자료형에 이름을 붙여 준 것이다.
// 이름을 붙여준다는 것은 붙힌 사람 마음대로 입니다. 하지만 변수의 이름에는 규칙이 있다.
// 1. 변수의 이름에는 숫자, 영문자, 특수문자로 _(UnderScore)가 쓰일 수 있다.
// 2. 영문자로 시작할 경우 소문자로 쓴다. 필수는 아니지만 관례이다. 영문자로 쓸 경우 대문자와 소문자를 가립니다.
// apple 과 Apple 은 다른 변수이다.
// 3. 숫자로 시작해서는 안된다.
// 4. 키워드를 사용해서 변수 이름을 선언하면 안된다.
// 5. 특수문자인 _(Underscore)로 시작할 수 있다.
/**
C++은 자체 사용을 위해 C++ 17 기준으로 84개 단어를 예약해 놓았습니다. 이러한 단어를 키워드(keyword)라고 합니다.
alignas, alignof, and, and_eq, asm, auto, bitand, bitor, bool, break, case, catch,
char, char16_t, char32_t, class, compl, const, constexpr, const_cast, continue, decltype, default, delete,
do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend
goto, if, inline, int, long, mutable, namespace, new, noexcept, not, not_eq, nullptr,
operator, or, or_eq, private, protected, public, register, reinterpret_cast, return, shrot, signed, sizeof,
static, static_assert, static_cast, struct, switch, template, this, thread_local, throw, true, try, typedef,
typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while, xor, xor_eq
*/
/**
변수 선언
자연스럽게 써야하는 문법적 요소
1. 포인터 Pointer
2. 참조자 Reference
3. 상수 Constant
4. 동적할당 Dynamic Memory Allocation
5. 스마트 포인터 2011년도에 지원을 시작함
. unique_ptr : 객체의 유일한 소유권을 가지는 스마트 포인터
. shared_ptr : 객체간의 공유가 가능한 스마트 포인터
. weak_ptr : shared_ptr의 순환참조 문제를 해결한 약한 참조의 스마트 포인터
*/
// 변수의 이름이 길기는 하지만 상관이 없다.
int thisIsMyFirstVariable;
/**
주석은 설명글로 문장에 영향을 주지 않는다.
*/
/**
변수의 이름으로 상관은 없지만 a라는 변수의 이름은 직관성이 떨어지고
어떤 이름의 변수인지 알아보기 불편하다.
변수나 함수, 클래스의 이름을 지을때는 고민을 많이 해야한다. 이름만 보더라도 어떤의미의 변수, 함수 , 클래스 이름인지 알 수 있도록 한다
*/
int a;
/**
변수의 이름 최대 길이
C언어 256자
C++ 40억자
*/
/** 숫자로 시작하니 변수로써 쓸 수 없다*/
//int 1Score; // (x)
/** 변수의 이름에 한글을 쓰면 안된다. 에러는 안나지만 안된다. */
int 스코어;
/** 변수의 이름은 -(UnderScore)로 시작할 수 있다.
멤버 변수는 변수 이름만 보더라도 멤버 변수인 것을 알 수 있도록
m, m_, _를 붙여 주곤 한다.
*/
int _thisIsMySecondVariable;
/**
; = 세미콜론
: = 콜론
코드를 작성할 격우 꼭 마지막에 세미콜론(;)을 찍어줘야한다.
*/
/**
() : 소괄호
{} : 중괄호
[] : 대괄호
<> : 꺽쇠괄호
*/
// 변수 선언
int intValue1; // 정수 타입
float floatValue1; // 실수 타입
double doubleValue1; // 정밀도가 더 높은 실수 타입
char charValue1; // 문자 타입
string stringValue1; // 문자열 타입
/** 우리가 만든 변수에 값을 변경*/
intValue1 = 123;
cout << "intValue1 : " << intValue1 << endl; // endl : endline
cout << endl; // 공백 추가
/**
제대로 결과 값이 보인다,
float 타입 변수에 값을 줄 때는 뒤에 "F", "f"를 붙여준다
intValue1변수의 값이 2048이고 floatValue1변수의 값이 2048이면
2048이라는 값을 볼때는 정수인지 실수인지 구분이 안갈 수 있다
*/
floatValue1 = 3.14f;
cout << "floatValue1 : " << floatValue1 << endl; // endl : endline
cout << endl;
/**
double타입은 값 뒤에 float타입처럼 문자가 없다
float타입과 double타입의 차이점은 정밀도의 차이입니다.
*/
doubleValue1 = 3.14;
cout << "doubleValue1 : " << doubleValue1 << endl; // endl : endline
cout << endl;
/** Char(문자) 타입은 작은따옴표 안에 값을 넣어준다. */
charValue1 = 'a';
cout << "charValue1 : " << charValue1 << endl; // endl : endline
cout << endl;
/** string(문자열) 타입은 큰따옴표 안에 값을 넣어준다. */
stringValue1 = "C와 C++ 공부";
cout << "stringValue1 : " << stringValue1 << endl; // endl : endline
cout << endl;
/**
변수를 선언할 때 같은 타입이라면 한 줄에 변수를 선언할 수 있다.
하지만 각자 따로 선언하는게 좋다.
*/
//int intValue2, intValue3; // (x) 안좋은 예시
int intValue2;
int intValue3;
/**
main()함수는 특별한 함수이다. 우리가 함수를 정의해 주면 호출하지 않으면
함수를 쓸 수 없다. 하지만 main()함수는 우리가 호출하지 않아도
자동으로 호출되는 이벤트 함수이다.
게임을 분석할 때 main() 함수부터 분석을 한다.
*/
/** 생성자 시작함수 매프레임 호출함수
Unity C# Awake Start Update
native C++ 생성자 main 구현해 주어야 한다
Unreal C++ 생성자 BeginPlay Tick
*/
}