/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;
}
'학습 기록 > 데브코스 웹 풀스택 4기' 카테고리의 다른 글
프론트엔드: 객체 지향 프로그래밍 (1) | 2024.10.26 |
---|---|
프론트엔드 기초: 연산자, 분기, 반복, 함수 (0) | 2024.10.24 |
프론트엔드 기초: JavaScript (1) (0) | 2024.10.21 |
백엔드 프로젝트: API 설계해보기 (0) | 2024.09.30 |
백엔드 심화: DB 실습, 시간 타입 (3) | 2024.09.12 |