학습 기록/데브코스 웹 풀스택 4기

프론트엔드 기초: 프로그래밍의 개념, 변수와 상수

romi__ 2024. 10. 23. 19:47

/date 24.10.23.

 

 

 

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

- 스크립트 언어는 언어의 본질에 대해 이해하기 어렵다. 프로그래밍 언어를 처음 배울 땐 근본적인 언어부터 시작해 보는 것이 좋다.

 

 

📌 프로그래밍의 개념

- 프로그래밍은 개발자가 소프트웨어를 개발하는 과정이라고 볼 수 있다.

- 프로그래밍 언어를 컴퓨터는 해석할 수 없다. 컴퓨터는 0과 1로만 소통하기 때문에, 컴퓨터 언어는 사람과 컴퓨터 간의 통신 수단이라고 볼 수 있다. 우리가 사용하는 컴퓨터 언어를 컴퓨터가 해석할 수 있도록 해주는 과정을 컴파일이라고 볼 수 있다.

 

 

📌 C언어로 Hello World 출력하기

- C언어의 기본 구성 요소는 함수이다. (리액트의 컴포넌트와 유사)

#include <stdio.h>
//studio.h 라이브러리 가져오기

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

    return 0;
}

 

 

- C언어에서의 함수 형태

int main(void) {
	//함수의 내용
}

 

 

- 출력함수 printf: C언어의 대표적인 출력함수이다. studio.h 라이브러리에 포함되어 있다.

- C언어는 다른 언어에 비해 비교적 엄격한 문법을 갖고 있다. 명확한 코드 작성을 통해 코드의 에러를 사전에 막기 위함이다.

  • 문장 끝마다 세미콜론을 꼭 붙여야 한다. 컴파일러는 세미콜론 단위로 문장을 해석하기 때문이다.
  • 리턴값은 함수의 수행이 끝났음을 의미한다.

 

 

📌 변수와 자료형 1

- 변수란 무엇인가?

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

 

- 변수를 사용하는 이유

  • 우리가 사용할 메모리 공간에 이름을 부여한 것을 변수라고 볼 수 잇다. 메모리의 주소값을 직접 기억하기보단 이름을 기억하는 것이 인간 입장에서 효율적이기 때문에 우리는 변수를 활용한다.
  • 메모리 영역: 크게 코드 영역, 스택 영역, 힙 영역, 데이터 영역 4가지로 구분한다.
    • 코드 영역: 실행 명령어들을 저장
    • 스택 영역: 지역변수 및 매개변수 저장. 나중에 들어간 내용이 먼저 나온다 (LIFO) //반면 큐는 선입선출
    • 힙 영역: 프로그래머가 직접 할당
    • 데이터 영역: 전역변수, static 변수 저장

 

- 콜스택 메모리의 적용: 우리가 지금까지 사용한 지역변수 및 매개변수는 모두 스택 메모리를 사용한다.

 

- 콜스택, 메모리 힙의 데이터 저장 구조

  • 원시 타입 데이터
    • 일반적인, 기본 타입을 이야기한다. 스택 메모리에 그대로 저장된다.
    • 생성 방식: 데이터 값은 콜스택에 저장되고, 데이터 값이 저장된 콜스택의 주소값은 변수에 각각 저장된다.
    • 원시 타입의 재할당: 기존에 재할당할 값을 갖고 있는 메모리가 있다면 그 주소값으로 교체한다. 그럼 기존에 재할당할 값을 갖고 있던 변수를 또 다른 값으로 재할당한다면, 메모리의 값을 교체하는 것이 아니라 새로운 메모리를 확보하여 값을 저장하고 변수가 가리키는 주소값을 교체한다(포인터 구조). 더 이상 참조되지 않는 데이터는 가비지 컬렉터에 의해 적절한 시점에 메모리에서 해제한다.
  • 참조 타입 데이터(포인터): 힙 메모리에 저장되고 그 주소값을 스택 메모리에 갖는다. 배열이나 객체의 형태를 가리키는 변수일 때 사용한다.

 

 

📌 변수와 자료형 2

- 자료형이란 무엇인가?

  • 선언한 변수에 얼마 만큼의 메모리 공간을 할당할 것인지 결정하는 것 = 음식의 종류에 따라 그릇의 용도가 다른 것과 마찬가지
  • 기본 자료형: 정수형(char, short, int, long)과 실수형(float, double, long double)
  • 다양한 자료형을 제공하는 이유: 효율적인 메모리 공간을 활용하기 위해

 

- 정수형 사용하기: 정수란 0을 포함한 부호가 있는 수

#include <stdio.h>

int main()
{
    int width = 10; //데이터 타입에 대한 명시 필수
    int height = 20;
    
    printf("사각형의 넓이는 %d", width * height);

    return 0;
} //사각형의 넓이는 200

 

- 실수형 사용하기: 소수점 이하를 갖는 수

#include <stdio.h>

int main()
{
    double area;;
    int r = 5;
    
    area = r * r * 3.14;
    
    printf("원의 넓이는 %f",  area);

    return 0;
}

 

 

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

#include <stdio.h>

int main()
{
    char ch1 = 'A';
    
    printf("%d, %c",  ch1, ch1);

    return 0;
} //65, A

 

 

 

📌 상수에 관하여

- 상수란 무엇인가: 상수는 변하지 않는 수를 의미한다. 메모리 공간에 수가 존재하지만 그 값을 변경할 수 없다.

 

- const 기호: 변수 선언에 const를 붙여 주면 상수화된다. 단, 선언과 동시에 초기화해야 한다.

const int TEN = 10; //가능

const int NINE;
NINE = 9; //오류

 

 

 

📌 사용자로부터 데이터 입력

- scanf의 활용

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

#include <stdio.h>

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

    return 0;
}

 

 

- 예제 1: 사용자로부터 1개의 정수를 입력 받아 입력받은 수에 5를 곱한 결과를 출력하라.

#include <stdio.h>

int main()
{
    int input = 0;
    scanf("%d", &input);
    printf("input값에 5를 구한 값은 %d입니다.", input*5);

    return 0;
}

 

 

- 예제 2: 사용자로부터 알파벳 문자 하나를 입력받는다. 그리고 이에 해당하는 숫자를 출력하라. 예를 들어 ‘A’를 입력하면 출력 결과는 65가 되어야 한다. (참고, 문자 입력 시 서식은 %c를 사용하면 된다.)

#include <stdio.h>

int main()
{
    char input = '0';
    scanf("%c", &input);
    printf("input값에 해당하는 숫자는 %d입니다.", input);

    return 0;
}