용어(term)
용어 | 한국어 | 의미 |
Hello World | Hello World는 최초로 시작할 때 주로 사용. 101과 비슷한 의미 | |
foo, bar, baz, qux | 아무개, 홍길동 등.. | 큰 의미를 갖지 않습니다. 프로그래머 커뮤니티에서 코드의 내용에 집중할 수 있도록 큰 의미없이 설정하는 이름입니다. |
syntax | 구문, 문법 |
코딩 언어의 문법을 의미합니다.
|
comment | 주석 | 동작하지 않는 코드를 의미합니다. 주석은 코드 블럭을 요약하거나, 추가 정보 등을 제공하므로써 가독성을 높이기 위한 방법입니다. |
program | 순서지 | 컴퓨터 프로그램도 순서대로 수행합니다. |
main | 메인 | 모든 프로그램은 main으로부터 시작합니다. 시작을 의미. |
reserved | 예약어 | 코드를 작성할 때, 컴파일러가 특별한 의미로 해석하기로 약속된 언어로 컴파일러가 '맡아둔'이란 의미. 코딩 언어를 배운다는 것은 reserved word를 모두 사용 할 줄 안다는
의미(keyword(x)) 통신이나 데이터시트 등에서 (미래를 위해 맡아둔, 그래서) 지금은 쓰이지 않는 공간, 핀, 영역 등으로 흔하게 사용 |
interface | 인터페이스 | 프로그램(또는 어떤 대상)과 상호작용을 하기 위한 수단 또는 정의, 방법, 도구를 의미합니다.
|
console | 콘솔 | CLI 프로그램 |
Literal | 리터럴 | 프로그래밍에서 상수 표현 방법 |
ANSI | ANSI | 미국 국립 표준 협회(민간)(ascii 제정), 국제표준은 ISO |
시작하기
기본규칙
- 프로그램의 시작은 main으로 부터 시작합니다.
- 명령어(문장)의 마지막은 세미콜론(;)으로 마무리 합니다.
- 괄호를 열면 무조건 닫아야 합니다.
예 : (), {}, [] - 대소문자를 구별합니다.
예 : ABC <--> abc (서로 전혀 다른 개체로 인식) - 주석(comment)은 컴퓨터가 해석하지 않고 지나갑니다.
주석을 만드는 방법은 (//주석) 또는 (/*주석*/)으로 처리합니다.
#includeint main() { printf("Hello World!\n"); }
코딩 스타일
코딩 스타일은 띄어쓰기, 들여쓰기, 새 줄과 같은 코드의 문법적인 부분과 직접적인 연관이 없지만, 전체적인 포멧을 제안하여 가독성과 생산성을 올리려는 시도입니다.
언어 | 단체 | 표준문서 |
C | GNU Coding Standards | https://www.gnu.org/prep/standards/standards.html#Formatting |
Java | Java Code Conventions | https://www.oracle.com/technetwork/java/codeconventions-150003.pdf |
python | PEP 8 | https://peps.python.org/pep-0008/ |
javascript | JavaScript Standard Style | https://standardjs.com/ |
kotlin | Kotlin Coding Conventions | https://kotlinlang.org/docs/coding-conventions.html |
Allman(or BSD) vs. K&R style
if (condition) { // code block } else { // code block }
if (condition) { // code block } else { // code block }
표기법 | 설명 | 예시 | 선호 |
Pascal Case(Upper Camel Case) | 각 식별자의 첫 글자를 대문자로 (낙타 등처럼 오르락 내리락) |
MyClass, SomeVariable, MyFunction | C, Java |
Camel Case | myClass, someVariable, myFunction | ||
Snake Case | 식별자의 구분을 밑줄('_')로 (뱀 처럼 아래로 긴다.) |
my_class, some_variable, my_function | python |
kabab Case | 식별자의 구분을 하이픈('-')으로 (케밥 가운데 꼬챙이 낀 것 같다.) |
my-class, some-variable, my-function | 웹 언어(html, css, javascript) |
printf
출력을 나타내는 명령어는 printf입니다. 단, printf의 인자(arguments)로 넘겨주는 문자열에 삽입되는 명령어는 따로 암기가 필요합니다.
접두 규칙은 대부분 영미권의 단어를 차용하지만 그 유래가 그리스, 로마에서 출발 한 것들이 많습니다. 자료를 참고하세요.
printf("> 문자 출력 예제\n");
명령어 | 의미 | 기타 |
%c %C | 문자 1개 | character |
%s %S | 문자열 | string |
%d %D | 10진수 | decimal |
%i %I | 10진수 | integer |
%u %U | 부호 없는 10진수 | unsigned |
%o %O | 부호 없는 8진수 | octal |
%x %X | 부호 없는 16진수 | HeXa |
%e %E | 지수표기법 | exponential |
%% | % 부호 | |
\' | ' | |
\" | " | |
\\ | \ | |
\b | 백스페이스 | back space |
\n | 줄바꿈 | new line |
\r | 캐리지(커서) 리턴 | return |
\t | 탭 | tab |
printf % rule
%좌우정렬-공백설정-총자릿수-마침표(.)-소수자릿수-출력기호
의 규칙을 갖습니다.
printf("%-7.2f", 1.264);
규칙 | 옵션 | 예시 | 출력예 |
자릿수 | # | %7d %10d |
____123 _______123 |
공백 설정 | 0 | %07d %7d |
0000123 ____123 |
좌우정렬 | - | %-7d %7d |
123____ ____123 |
소숫점 자릿수 | #.# | %7.2f |
1234567 ___3.14 |
진법
숫자가 0으로 시작하면 10진법이 아닌 경우를 의미합니다. 0뒤의 문자에 따라서 b(binary)는 2진법 x(hex)는 16진법을 의미하고, 문자가 없는 경우(예:030)은 8진법으로 표기합니다. 많은 컴파일 언어에서 2진법과 16진법을 채용하지만 8진법은 누락되는 경우가 있습니다.
printf("16진법 : %X\n", 0x1A);
진법 | 표기예 | 10진법 |
2진법 | 0b1001 | 9 |
16진법 | 0x21 | 33 |
8진법 | 030 | 24 |
진법에 대한 자세한 이해는 아래 사이트를 참조 합니다.
자유주제 > 진법
Ascii
0~128까지의 숫자를 문자와 1:1대응하여 만든 코드입니다. 알파벳과 일부 특수기호, 특수코드(예:문자열 변경)등이 포함되어있습니다. 다국어지원을 위해서 UniCode를 사용합니다.(~65536)
한글을 표현하려면 최소한 2bytes이상이 필요합니다. Unicode는 저장방식이고, EUC-KR, UTF-8은 표현방식(인코딩 방식) 입니다. 자세한 내용은 여기를 참조하세요.
데이터형
변수 선언(declaration)
변수의 선언(declaration)은 컴파일러에게 앞으로 사용하게 될 메모리를 할당을 요청하고, 그 메모리에 이름을 붙여주는, 등록과정을 의미하며, (준비자세로) 프로그램상으론 아무런 동작을 하지 않습니다. 변수의 이름은 다음을 피해야 합니다.
- 밑줄(underline, '_')을 제외한 특수기호를 사용할 수 없습니다.
- 숫자로 시작 할 수 없습니다.
- 예약어를 사용할 수 없습니다.
- 이미 존재하는 이름을 사용할 수 없습니다.(대소문자를 구분)
- 길이 제한이 발생할 수 있습니다.
- (제안)명확한 역할을 알 수 있어야 합니다.
- (제안)너무 길면 가독성이 떨어집니다. 변수생애(life cycle)를 고려하십시오. 모든 정보를 담을 필요가 없습니다.
- (제안)코딩 스타일 가이드가 있다면, 준수합니다. (프로젝트 접두어 규칙 등)
변수형(DataType)
- 1 bit는 정보를 저장하는 가장 작은 단위입니다. 0 또는 1을 기억할 수 있습니다.
- 1 byte는 8 bit입니다.
char c = 'A'; int i = 66; long l = 99; float f = 123456789.; //warning double d = 123456789.987654321;
크기 | 정수형 | 소수형 | |
C | Java | C/Java | |
1 bit | bool | boolean | - |
1 byte | char | byte | - |
2 byte | short | short/char | - |
4 byte | int, long | int | float |
8 byte | long long | long | double |
부호(Signed)
부호를 기록하지 않아도 될 때, 1비트를 절약 할 수 있습니다. 예약어 unsigned를 사용합니다.
unsigned char uc = 127;
위 그림은 8 bit 변수를 나타냅니다.
32bit 또는 64bit 데이터타입(Data Type)은 그 만큼의 저장공간을 가질 것입니다.
부호 비트에 1이 저장되어 있다면 음수, 0이 저장되어 있다면 양수를 의미합니다.
단, 2의 보수로 저장되기 때문에 양수에 부호비트만 변경하면 음수가 되는 것은 아닙니다.
자세한 내용은 2진수를 참조하십시오.
2의 보수를 사용하는 이유는 가산기(덧셈기)로 감산이 가능하기 때문입니다.
sizeof
sizeof 예약어는 해당 변수에 할당된 byte를 반환합니다.
char c; printf("char: %llu / %llu\n", sizeof(c), sizeof(char));
연산자
- 특이한 연산 : 나머지 연산(%), 증감연산(++), 비교연산(==)
- AND, OR, XOR연산, 진리표(Truth Table)
- 0이 '거짓(false)'이고 거짓이 아닌 것은 모두 '참(true)'
1이 '참'의 대표인 것은 맞지만, 0이 아닌 모든 수를 참으로 인식(C언어 한정)
타 언어는 boolean type에 true/false만 입력이 가능하도록 따로 관리(위험관리) - 연산자 우선순위는 언어별로 버전별로 다르므로, 정확히 암기하기보다 괄호()를 적극적으로 쓰는 것을 권장
기본 연산자 분류
분류 | 연산자 |
사칙연산 | +, -, *, /, % |
대입연산 | =, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^= |
증감연산 | ++, -- |
논리연산 | !, &&, || |
비트연산 | ~, &, |, ^, <<, >> |
비교연산 (부등호) |
<, >, <=, >=, ==, != |
연산자 우선순위
우선순위(그룹) | 연산자 | 설명 |
1 | :: | 범위 확인 |
2 | -> | 멤버 선택 |
[] | 배열 첨자 | |
++, -- | 후위 증감 | |
(cast) | 형식변경 | |
3 | sizeof | 크기 |
++, -- | 전위 증감 | |
~ | 1의 보수 | |
! | not | |
-/+ | 단한 부호 | |
&, * | 참조(포인터) | |
4 | -> | 멤버 포인터 |
5 | *, /, % | |
6 | +, - | |
7 | <<, >> | 쉬프트 |
8 | <, >, <=, >= | 부등호 |
9 | ==, != | 등호 |
10 | & | |
11 | ^ | |
12 | | | |
13 | && | |
14 | || | |
15 | ?: | 조건부 |
=, +=, -=, *=, /=, %/,<<=, >>=, &=, |=, ^= | ||
throw | 예외처리 | |
16 | , | 쉼표 |
출처 : Microsoft C++ 도움말, https://docs.microsoft.com/ko-kr/cpp/cpp/cpp-built-in-operators-precedence-and-associativity?view=msvc-170#c-operator-precedence-and-associativity-table
형변환(Typecast)
- 데이터 타입은 연산 후에도 유지되는 경향이 있습니다.
- 컴파일러는 두 개의 데이터 타입을 연산했을 때, 좀 더 정보량이 많은 쪽으로 계산합니다.
예:2byte + 4byte = 4byte
int * float = float - 강제로 변환하기 위해서는 (...)연산을 사용할 수 있습니다.
printf("%f\n", 10 / 3); printf("%f\n", (float)10 / 3);