2024.06.12 프로그래머스 - C언어로 프로그래밍 근간 알아보기1
C언어로 프로그래밍 근간 알아보기1
개발자는 동작 원리를 이해 해야 한다!
- 배울 내용
- 프로그래밍 기본 원리
- 겍체지향 철학의 이해
- 타입스크립트 기초
- 타입스크립트 기반의 리액트
컴파일 언어를 이해해야 하는 이유
- 모든 프로그래밍 언어의 동작원리는 같다.
- JS와 같은 스크립트 언어로는 동작원리를 이해하기 힘든 구조이다.
- 컴파일 언어는 언어 동작의 근간을 이룬다.
- 타입을 변수와 함수에 기본으로 사용해보면 TS를 더 쉽게 이해할 수 있다.
개발의 3단계 과정
- 구상
- 설계
- 구현
프로그래밍 언어란
- 언어 : 사람과 사람간의 소통(통신 수단)
- 프로그래밍 언어 : 사람과 컴퓨터 간의 소통 언어 (통신수단)
C언어로 Hello World 출력해보기
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
// int : 출력 값
// main : 함수이름
// void : 입력 값
// => 함수의 형태
int main(void)
{
// printf 는 stdio.h 헤더 파일에 내장되어 있는 함수
printf("Hello World\n");
return;
}
- C 언어의 기본 구성요소는
함수
(리액트 컴포넌트와 유사하다) - 컴파일러는 세미콜론 (
;
) 단위로 문장을 해석한다. (JS는 크게 상관없지만, 지켜주는 것이 좋다.)
변수와 자료형
- 변수란 변경이 가능한 수
- 변수에는 어떤 값이 들어갈지 예측할 수 없다.
- 변수를 사용하는 이유
- 메모리상에 올라가 있는 데이터를 식별하기 위해서
- 메모리의 주소값을 식별하기 위해서
- 주소값을 기억하는 것보다 의미있는 이름을 기억하는 것이 더 쉽다.
메모리의 영역
- 코드 영역 : 실행 명령어들을 저장
스택 영역
: 지역변수 및 매개변수 저장힙 영역
: 프로그래머가 직접 할당- 큐 메모리 라고도 한다.
- 데이터 영역 : 전역변수, static 변수 저장
변수의 저장
- 원시 타입 데이터
- 원시 타입 변수에는
값
이 저장된 콜스택 메모리의주소
값이 저장된다. - 원시 타입 변수 식별자(변수이름) 자체는 콜스택 상의 실행 컨텍스트의 Lexical 환경이라는 곳에 저장된다.
- 원시 타입 데이터 재할당 시에는 이전 메모리의 값을 바꾸는 게 아닌, 바꾸려고 하는 값이 저장된 기존의 주소를 바라보게 한다. (기존에 재할당하고자 하는 값이 이미 할당된 경우)
- 새로운 값을 재할당 할 때는, 새로운 메모리를 확보하여 재할당하는 값을 저장하고 변수가 가리키는 주소값을 교체한다.
- 주소값을 저장하는 변수를 포인터 변수라고 한다.
- 새로운 값을 재할당 할 때는, 새로운 메모리를 확보하여 재할당하는 값을 저장하고 변수가 가리키는 주소값을 교체한다.
- 원시 타입 변수에는
- 참조 타입 데이터
- 참조 타입 변수에는
메모리 힙의 주소값
이 저장된콜스택 메모리상의 값
을 가진주소
가 저장된다.- JS에서 객체의 내부 요소별 값이 같아도, 주소가 달라서 같은 값으로 비교되지 않는 이유
- 참조 타입 변수에는
가비지 컬렉터
- 더 이상
참조되지 않는
데이터는 가비지 컬렉터 (GC)에 의해 적절한 시점에 메모리에서 해제 한다.
- 더 이상
자료형
- 자료형
- 선언한 변수가 어느정도의 메모리 공간을 사용할 것인지 결정
효율적인 메모리 공간 활용을 위해
다양한 자료형이 언어별로 제공된다.
| 정수형/실수형 | 자료형 | 크기(Btye) | 데이터 표현 범위 | 유효자릿수 | | ————- | ———– | ———— | ——————————- | —————— | | 정수형 | char | 1 byte | -128 ~ +127 | | | 정수형 | short | 2 byte | -32768 ~ +32767 | | | 정수형 | int | 4 byte | -2147583648 ~ +2147483647 | | | 정수형 | long | 4 byte | -2147483648 ~ +2147483647 | | | 실수형 | float | 4 byte | -3.4 x 10^38 ~ +3.4 x 10^38 | 소수점 이하 6자리 | | 실수형 | double | 8 byte | -1.8 x 10^308 ~ +1.8 * 10^308 | 소수점 이하 16자리 | | 실수형 | long double | 10 ~ 16 byte | -1.8 * 10^308 ~ +1.8 * 10 ^ 308 | 소수점 이하 16자리 |
- 문자형
- 숫자만 인식하는 컴퓨터는 문자를 표현하기 위해 숫자와 특정 문자를 대응시키는 방법으로 문자를 인식한다.
ASCII
코드
- 숫자만 인식하는 컴퓨터는 문자를 표현하기 위해 숫자와 특정 문자를 대응시키는 방법으로 문자를 인식한다.
상수
- 상수는 변하지 않는 수를 의미한다.
- 한번 입력한 값은 변경할 수 없는것이 변수와의 차이점
- 메모리 공간에 할당된 공간이 존재하지만, 그 값을 변경할 수 없다.
- 이러한 특성으로 인해, 변수와 다르게 선언과 동시에 초기화를 진행해주어야 한다.
const
키워드로 상수를 할당 및 생성 할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main()
{
// 상수 선언
const int TEN = 10;
const double PI = 3.14;
return 0;
}
상수와 변수의 차이
- 변수는 값을 재할당 할 수 있지만, 상수는 값을 재할당 할 수 없다.
- 변수는 선언 후 나중에 초기화를 진행해도 되지만, 상수는 선언과 동시에 초기화를 진행해야 한다.
- 상수는 선언과 동시에 변경 불가능하기 때문에, 선언+ 초기화를 해야 한다.
C언어에서 사용자 입력 데이터 받기
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main()
{
int input = 0;
printf("값을 입력해주세요 : ");
scanf("%d", &input); //사용자 입력 함수 scanf
printf("입력한 값 : %d", input);
return 0;
}
사용자에게 정수 1개를 입력 받은 수에 5를 곱한 결과를 출력 해보는 코드
1 2 3 4 5 6 7 8 9 10 11
#include <stdio.h> int main() { int input = 0; printf("값을 입력해주세요, (결과는 5배수로 출력됩니다) : "); scanf("%d", &input); //사용자 입력 함수 scanf printf("입력한 값 : %d", input * 5); return 0; }
사용자로부터 알파벳 문제 하나를 입력 받고 이에 해당하는 숫자를 출력
1 2 3 4 5 6 7 8 9 10 11
#include <stdio.h> int main() { char input; printf("숫자로 변환할 문자를 입력해주세요 : "); scanf("%c", &input); printf("사용자 입력 값 : %c | 숫자 변환 값 : %d", input, input); return 0; }
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.