본문 바로가기

프로그래머스 풀스택 데브코스/데브코스 TIL

웹 풀사이클 데브코스 TIL 43일차

새로운 스프린트

새로운 스프린트에서는 컴파일 언어의 대표주자인 C언어에 대해 학습하고, 객체지향의 원리에 대해서 학습한후 타입스크립트와 리액트에 대해서 학습하게된다.

컴파일 언어

  • 모든 프로그래밍 언어의 동작 원리는 거의 같다.
  • 스크립트 언어는 컴퓨터 내부 동작원리를 이해하기 힘들다.
  • C언어의 동작 원리들은 다른 프로그래밍 언어들의 동작 근간을 이룬다.
  • 타입스크립트 학습에도 도움이 된다.

프로그래밍

  • 프로그램 개발자가 소프트웨어를 개발하는 과정
  • 구상 - 설계 - 구현 순서로 이어진다.

설계 - 원시코드 작성 - 컴파일 - 링크

  • 설계: 머리속으로 구상한 것을 기록하는 것
  • 원시코드 작성: 머리속으로 구상 한 것을 코드로 만듬
  • 컴파일: 소스코드를 이진코드로 변환
  • 링크: 라이브러리등의 링크를 걸어주어 실행파일로 만드는 과정
  • 빌드: 컴파일과 링크를 통합한 개념

C언어로 Hello World 출력하기

#include <stdio.h>

int main()
{
    printf("Hello World");

    return 0;
}

c언어의 특징

  • 엄격한 문법: 문장의 끝 세미콜론을 반드시 찍어주어야 한다.
  • return 0 : 함수가 끝남

변수

변수란 변경이 가능한 수를 의미
변수에는 어떤 값이 들어갈 지 예측할 수 없다.

  • 변수를 사용하는 이유: 메모리 상에 데이터가 올라가있는데 메모리의 주소값을 사람이 일일히 기억할 수 없음, 의미있는 이름을 기억하는 것이 쉽다. 우리가 사용할 메모리 공간에 이름을 부여한 것이 변수이다.

메모리 영역

메모리에는 코드, 스택, 힙 데이터 4가지 영역이 있다.

스택: 스택은 데이터가 들어오면 바닥에 깔리고 빠져나갈 때는 마지막에 들어온 순서로 빠져나간다. FILO.
큐: 큐는 데이터 파이프이다. 먼저 들어온 것이 먼저 빠져 나간다. FIFO.

우리가 지금까지 사용한 지역변수 및 배개변수는 모두 스택 메모리를 사용한다. 함수가 끝나면 스택에 할당된 메모리가 위에서부터 소멸된다.
Heap 메모리는 사용자가 필요한 만큼의 메모리를 동적 할당할 때 사용한다. 참조 데이터에서 주로 사용.

스택과 힙은 같이 어우러져서 유기적으로 사용된다.

  • 원시타입 데이터: 콜스택 메모리의 주소값이 저장
  • 참조타입 데이터: 메모리 힙의 주소값이 저장(배열, 객체, 함수)

스택 변수에서 원시타입은 그대로 값을 스택에 저장하지만 참조 데이터는 메모리 힙에 있는 참조 데이터의 주소를 스택변수에서 가지고 있는다. 직접 참조 데이터를 가지지 않는다.

원시타입 재할당

int a = 20;
int b = 30;
a = 20;

원시타입 재할당을 하는 경우에는 메모리에 저장된 값 자체를 교체하는 것이 아니라, 새로운 메모리를 확보하고 변수 a 가 가리키는 주소값을 교체해준다. 주소값을 저장하는 변수를 포인터 변수라고 한다. 더이상 참조되지 않게된 메모리는 가비지 컬렉터에 의해 적절한 시점에서 메모리에서 해제된다.

자료형

선언한 변수가 얼마만큼의 메모리 공간을 할당할 것인지 결정
정수형, 실수형등의 자료형이 있음
다양한 자료형을 제공하는 이유? 효율적인 메모리 공간 활용을 위해서

정수형

int main()
{
    int width = 10;
    int height = 20;

    printf("사각형의 넓이는 %d", width * height);
    return 0;
}
//사각형의 넓이는 200

실수형

int main()
{
    double area;
    int r = 5;

    area = r*r*3.14;

    printf("원의 넓이는 %f",area);
    return 0;
}
//원의 넓이는 78.500000

문자형

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


int main()
{
   char ch1 = 'A';

   printf("정수로는 %d, 문자로는 %c", ch1, ch1);
    return 0;
}
// 정수로는 65, 문자로는 A

상수

변하지 않는 수. 메모리 공간에 수가 존재하지만 그 값을 변경할 수 없다. const를 붙여주면 상수화된다. 단 선언과 동시에 초기화해야 한다.

int main()
{
    const int TEN = 10;
    TEN = 20;

    return 0;
}
//main.c:14:9: error: assignment of read-only variable ‘TEN’

만약 선언과 동시에 초기화를 해주지 않으면 상수에는 아무 의미없는 쓰레기 값이 들어가 있다.

사용자의 데이터 입력

scanf("서식 문자열", &변수);

int main()
{
 int input = 0;
 scanf("%d", &input);
 printf("input : %d\n", input);

 return 0;
}
//12
//input : 12

& 기호는 주소연산자이다.

후기

프로그래밍에 대한 기본적인 지식과 C언어 변수, 타입, 출력, 입력에 대해서 학습하였다.

키워드: 프로그래머스 데브코스, 국비지원교육, 코딩부트캠프