프로그래밍 기본 원리
C 컴파일 기반 언어 JS 인터프리터 언어
타입스크립트는 컴파일 과정을 통해 JS 로 변환하는 방식이기에 C 기초를 학습하고 넘어가기!
프로그래밍 : 개발자가 sw를 제작하는 과정
3단계 : 구상 > 설계 > 구현
프로그래밍 언어 : 사람의 언어 > C언어 > 기계어 010111
즉 사람의 언어를 기계어로 변환하는 코드. 컴퓨터가 알아들을 수 있는 과정 : 컴파일 과정
프로그래밍 개념
설계(문서화 작업) > 원시코드(소스코드) 작성 > 컴파일(이진코드로 변환) > 링크(참조파일들 링크)
컴파일 + 링크 = 빌드
협업의 환경설정
온라인에서 C 코드 돌릴 수 있는 사이트
C언어의 기본 구성요소의 함수는 리액트의 컴포넌트와 유사하다.
`console.log()` > `printf`
엄격한 C언어의 문법 `;` 필수!
`return 0;` 리턴값 자체는 의미가 없고, 함수의 수행이 끝남을 의미한다.
주석문 : 부연설명, 코드수행 막음
`//` or `/* */`
변수 Variable , 자료형
변수 : 변경이 가능한 수. 특정 크기의 메모리를 차지한다는건 알 수 있지만, 어떤 값이 들어갈 지 예측할 수 없다.
메모리의 기준
8 bit * 4 = 32 bit = 4byte
7이라는 데이터가 메모리에 저장되었을 때 접근하는 방법은 ? 주소값으로 가져오기!
그 주소값에 이름을 부여한 것이 변수이다.
메모리 영역 Stack, Queue
- 코드 : 실행 명령어들 저장
- 스택 stack : 지역변수 및 매개변수 저장. 데이터가 들어온 순서대로 쌓는다. FILO (LIFO)
- 힙 heap, Queue : 프로그래머가 직접 할당. 데이터가 들어온 순서대로 나간다. FIFO
- 데이터 : 전약변수, static 변수 저장
객체지향은 스택 + 힙을 사용한다.
키보드나 마우스로 발생한 이벤트를 OS 시스템큐(애플리케이션큐)에 저장하고, 큐 구조로 처리된다.
콜스택, 메모리 힙의 데이터 저장 구조
- 원시 타입 데이터
- 변수 a에 10이 저장된 콜스택 메모리의 주소값이 저장된다.
- int a = 10; int b = 20; > int a = 20; : 이때 a의 주소값과 b의 주소값은 같아진다.
- 가비지컬렉터 처리 : 더이상 참조되지 않는 데이터 10을 적절한 시점에 메모리에서 해제한다.
- 참조 타입 데이터 : 포인터
- 메모리 힙의 주소값이 저장된 콜스택의 주소값은 각각 b,c,d에 저장된다.
- 배열, 객체
배열 : 힙메모리에 값 저장한 주소값을 스택 메모리에 저장한다. 그 값이 저장된 스택 메모리의 주소값을 변수로 지정함
자료형 char, int, double
선언한 변수가 얼만큼의 메모리 공간을 할당할 것인지 결정한다.
효율적인 메모리 공간을 활용하기 위해서!
- 정수형
- char : 1byte 문자 하나의 크기. 123~127
- short : 2byte
- int : 4byte
- long : 4byte
- 실수형
- float : 4byte
- double : 8byte
- long double : 10~16byte
정수형 : `int` 0을 포함한 부호가 있는 수
실수형 : `double` 소수점 이하를 가지는 수.
문자형 : `char` `아스키코드`
*아스키코드 : 0 = 48, A = 65, a = 97
#include <stdio.h>
int main()
{
//정수
int width = 10;
int height = 20;
printf("사각형의 넓이는 %d \n", width * height);
//실수
float area;
int r = 5;
area = r*r*3.14;
printf("원의 넓이는 %f \n",area);
//아스키코드
char ch1 = 'A';
printf("%d, %c", ch1, ch1);
return 0;
}
///console
사각형의 넓이는 200
원의 넓이는 78.500000
65, A
Constant 상수
변하지 않는 수
메모리 공간에 수가 존재하지만, 한번 입력한 값을 변경할 수 없다.
#include <stdio.h>
int main()
{
//상수
const int TEN = 10;
// TEN = 20;
printf("const 상수 선언 %d", TEN);
return 0;
}
`const` 변수 선언 앞에 기소를 붙이면 상수화가 되고, 선언과 동시에 초기화 해야한다.
안할 시 `error: assignment of read-only variable ‘TEN’` 에러 발생
scanf 입력
사용자로부터 데이터를 입력 받을 시 사용하는 함수이다.
데이터 입력 시의 구조 `scanf( "%d" , &변수...);`
#include <stdio.h>
int main()
{
//scanf
int input = 0;
scanf("%d",&input);
printf("input*5 : %d",input*5);
return 0;
}
변수명 앞에 `&` 표기하는 이유는? 주소연산자! 변수의 주소값을 참조한다.
OS 스택의 데이터는 방대하기 때문에, 메모리변수의 주소값을 이용해서 scanf 를 작동시킨다.
다른 언어에서도 동일하기 주소값을 참조하는데, C언어에서만 명시적으로 코드를 표시한다.
*사용자로부터 알파벳 문자 하나를 입력 받는다. 그리고 이에 해당하는 숫자를 출력하라. 예를 들어 'A'를 입력하면 출력 결과는 65가 되어야 한다.
#include <stdio.h>
int main()
{
char alpha;
scanf("%c",&alpha);
printf("alpha의 아스키코드 숫자 : %d",alpha);
return 0;
}
⭐ 변수와 상수 차이점
변수 Variable | 상수 Constant | |
값의 변경 | 값이 변경될 수 있다. | 값이 변경되지 않는다. |
선언 방법 | 소문자, 카멜케이스, 밑줄 사용 | 대문자, 밑줄 사용 |
사용 목적 | 변경 가능한 데이터를 저장하고 처리하기 위함 | 변하지 않는 값을 저장하기 위함 |
예시 | `userAge = 11` `result = 0` | `PI = 3.141592` `MAX_USERS = 100` |
☑️ 배운 점
컴파일 + 링크 = 빌드 과정을 통합해서 사용한다.
상수 const 사용
가비지 컬렉터 처리