컴퓨터가 코드를 해석하는 방식에 따라 컴파일 언어, 인터프리터 언어로 나뉘어짐
소스 코드 전체를 한번에 기계어로 변환 후 실행파일을 만들어 실행하는 방식
ex. C, C++, C#, JAVA
컴파일 하지 않고 소스 코드를 한 라인씩 해석하면서 실행하는 방식
ex. Python, JavaScript, Ruby
메모리에는 크게 코드 영역, 스택 영역, 힙 영역, 데이터 영역으로 구분
코드 영역 : 실행 명령어들 저장
데이터 영역 : 전역변수, static 변수 저장
힙 영역 : 프로그래머가 직접 할당
스택 영역 : 지역변수, 매개변수, 리턴값 저장
stack
LIFO(Last-in First-out) : 마지막으로 입력된 자료가 제일 먼저 나가는 방식
heap(queue)
FIFO(First-in First-out) : 먼저 입력된 자료가 제일 먼저 나가는 방식
Call Stack : 원시 타입(숫자 등) 데이터가 저장
Memory Heap : 참조 타입(객체 등) 데이터가 저장
1.원시 타입 데이터
변수 a에는 10이 저장된 콜스택 메모리의 주소값이 저장
변수 식별자 a 자체는 콜스택 상의 실행 컨텍스트(Execution Context)의 렉시컬 환경(Lexical Environment)이라는 곳에 저장
2.참조 타입 데이터
참조타입 데이터 → 메모리 힙에 저장
힙의 주소값 → 콜스택에 저장
콜스택의 주소값 → 변수 b, c, d에 저장
3.원시 타입 변수 생성
원시 타입의 데이터 값은 콜스택에 저장되고, 데이터 값이 저장된 콜스택의 주소 값은 변수 a,b에 각각 저장됨
4.원시 타입 재할당
변수 a에 20을 재할당하면 본인의 메모리에 있는 값을 변경하는 것이 아니라 기존에 20을 저장하고 있는 메모리의 주소값으로 교체
만약 기존에 20을 저장하고 있는 메모리가 없다면, 메모리의 값을 20으로 바꾸는 것이 아니라 새로운 메모리를 확보하여 20을 저장하고 변수 a가 가리키는 주소값을 교체
❕ 포인터 : 주소값을 저장하는 변수
🗑️ 가비지 컬렉터
Heap 영역에서 동적으로 할당했던 메모리 중 더 이상 참조되지 않는 데이터를 모아 적절한 시점에 메모리에서 제거
#include <stdio.h>
int main(void)
{
printf("Hello World");
return 0;
}
컴파일 기반 언어는 문장을 마칠 때 세미콜론(;)을 찍어주어야 함
return : 함수의 수행이 끝남을 의미
주석 - // : 한 문장, /* */ : 여러 문장
#include <헤더파일> : 컴파일러의 라이브러리 폴더에서 헤더파일을 찾음
#include "헤더파일" : 현재 디렉토리에서 헤더파일을 찾음
함수는 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합
반환자료형 함수이름 (x, y)
{
함수의 내용
}
printf는 stdio.h에 정의되어 있는 함수로, 변환명세를 사용하여 형식에 맞춰 출력해주는 함수
printf("Hello World/n");
변수는 데이터를 저장하는 임시 공간(= 메모리 공간)
#include <stdio.h>
int main()
{
int width = 10;
int height = 20;
printf("사각형의 넓이 : %d", width * height); // 200
return 0;
}
#include <stdio.h>
int main()
{
double area;
int r = 5;
area = r * r * 3.14;
printf("원의 넓이 : %f", area); // 78.5
return 0;
}
숫자만 인식하는 컴퓨터는 문자를 표현하기 위해 특정 숫자와 특정 문자를 대응시키는 방법을 사용 → 아스키 코드
#include <stdio.h>
int main()
{
char ch1 = 'A';
printf("%d, %c", ch1, ch1); // 65, A
return 0;
}
상수는 변하지 않는 수이며, 변수를 선언할 때 const를 붙여줌
⚠️ 선언과 동시에 초기화 해야 함
// error 1
const float PI = 3.14;
PI = 3.141526;
// error 2
const float PI;
PI = 3.14;
scanf : 사용자로부터 데이터를 입력 받을 때 사용하는 함수
scanf("서식 문자열", &변수...);
예제
#include <stdio.h>
int main()
{
int input;
scanf("%d", &input);
printf("input : %d", input);
return 0;
}
✏️ 사용자로부터 1개의 정수를 입력 받아 입력 받은 수에 5를 곱한 결과를 출력하라.
int main()
{
int input;
scanf("%d", &input);
printf("input : %d", input * 5);
return 0;
}
✏️ 사용자로부터 알파벳 문자 하나를 입력받는다. 그리고 이에 해당하는 숫자를 출력하라. 예를 들어 'A'를 입력하면 출력 결과는 65가 되어야 한다. (참고, 문자 입력 시 서식은 %c를 사용)
#include <stdio.h>
int main()
{
char input;
scanf("%c", &input);
printf("input : %d", input);
return 0;
}