본문 바로가기
타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js)/TIL

데브코스 11주차 Day1 - 컴파일, 변수와 메모리영역 with C

by 슈크림 붕어빵 2024. 1. 25.

 

강사님: 이창현 강사님

타입스크립트를 왜 쓸까요?
1. 심심해서
2. 부모님의 권유료
3. 유교적인 관습때문에

차차 알아가볼 것이다.

 

 

 

컴퓨터가 해석하는 방식

1. 컴파일 언어- 코드 전체를 한번에 해석해서 실행할 수 있는 파일로 변환 (ex - c)

2. 인터프리터 언어 - 코드를 한 라인씩 해석하면서 실행 (ex - js)

 

왜 컴파일 기반 언어를 이해해야하는가?

스크립트 언어로는 동작 원리를 이해하기 힘든 구조인다. => c언어를 통해 동작 원리를 이해해볼 것이다.

 

 

프로그래밍 과정

 

1. 설계

머리속으로 구상한 것을 기록하는 것

요리의 레시피를 만드는 작업

 

2. 원시코드 작성

머리속으로 구상한 것을 기록하는것

요리의 레시피대로 요리하는 과정

 

3. 컴파일

원시코드는 사람이 이해하는 언어이지 컴퓨터 언어가 아님

컴파일은 소스코드를 이진코드로 변환하는 과정, 즉, 컴퓨터가 이해할 수 있는 언어로 변환

 

4. 링크 

실행파일을 만드는 과정

 

c언어의 이해

문장의 끝 세미콜론

  • 컴파일 언어는 문장을 마칠 때 반드시 세미콜론이 필요
  • 컴파일러는 세미콜론 단위로 문장을 해석하기 때문
  • ( 자바스크립트는 한 줄씩 해석하기 때문에 세미콜론이 없어도 괜찮았던 것 )

리턴값

  • 함수의 수행이 끝남의미

 

변수란 무엇인가?

  • 변수란 변경이 가능한 수를 의미한다.
  • 변수에는 어떤 값이 들어갈 지 예측할 수 없다.
  • 수많은 메모리의 주소값을 기억하기 힘들다.=> 메모리 공간에 기억하기 쉬운 이름 부여 : 변수

 

메모리영역

 

스택영역 예시

void test(int a){
    char b='a';
    int c = 2;
    double d = 4.04
}

 

  • 매개변수와 지역변수는 스택 영역을 사용한다.
  • 즉, 이 함수 실행을 마치면 소멸이 되는데 a,b,c,d 순으로 스택에 쌓인다. 스택메모리이므로 d,c,b,a 순으로 소멸된다.

 

힙영역 예시 + 콜스택과 메모리힙의 이해

  • 힙 영역은 주로 사용자가 필요한 만큼의 영역을 동적으로 할당할 때 많이 사용한다.
    • 원시타입 데이터 (ex - 정수 실수 문자)
      • 변수 a에는 10이 저장된 콜스택 메모리의 주소값이 저장
      • 변수 식별자 a 자체는 콜스택 상의 실행 컨텍스트의 렉시컬 환경이라는 곳에 저장된다.
    • 참조타입 데이터 (다른 메모리를 참조함 ex - 배열 객체 함수..)
      • 메모리 힙의 주소값이 저장된 콜스택의 주소값은 각각 b,c,d에 저장된다.

  • 즉, 하나의 값을 나타내는 변수(원시 타입)는 callstack에 바로 저장되고, 배열이나 객체등(참조 타입) 무엇인가를 가리키는 변수는 주소가 저장된다.

  • 위처럼 10이었던 a의 값을 20으로 바꾸면 해당 메모리 값을 바꾸는 것이 아니라 해당 주소로 교체한다.
  • b의 값을 30으로 바꾸면 가리키고 있던 메모리 값을 바꾸는 것이 아닌 새로운 메모리를 확보해 30을 저장하고 주소를 교체한다.
  • 그 후 가비지콜렉터가 사용하지 않는 값 10은 어느 시점에 해제된다.

 

자료형

선언한 변수가 얼만큼의 메모리 공간을 할당할 것인지 결정

 

정수형

  • char 1byte
  • short 2byte
  • int 4byte
  • long 4byte

 

실수형

  • float 4byte
  • double 8byte
  • long double 10~16byte

다양한 자료형을 제공하는 이유? => 효율적인 메모리 공간을 위해

헐 근데 왜 int랑 long은 같은 메모리공간을 차지하는데 담을 수 있는 수가 다르지

 

문자형 사용하기

숫자만 인식하는 컴퓨터는 문자를 표현하기 위해 특정 숫자와 특정 문자를 대응시키는 방법을 사용한다. 아스키 코드라는 표준에 의거한다.

int main() {
    char a ='a';
    printf("%d %c",a,a);
    return 0;
}

=> 97 a

 

상수

  • const를 이용한다. 
  • 처음에 값을 설정해주어야하고 바꿀 수 없다.
const int Ten;

=> 선언 시 값을 넣어주지 않으면 쓰레기값이 들어간다.

 

 

사진 출처: https://charming-kyu.tistory.com/19