학생들이 초등학생이라고 들었어서, 최대한 쉽게 설명하는 것을 목표로 작성했습니다.
1. 프로그래밍 언어란 무엇인가?
기계어는 전류가 흐르면 1, 아니면 0 으로 인식한다.
1과 0으로만 이루어진 수 체계를 2진법이라고 하는데 컴퓨터 세계는 모든게 2진수로 이루어져있다.
0과 1로만 모든 데이터를 표현하려면 많은 고생이 필요하다!
그래서 똑똑한 프로그래머들이 많은 사람들이 사용할 수 있도록 프로그래밍 언어라는 것을 개발한 것이다.
여기서 컴퓨터 언어 즉, 1과 0으로 이루어진 기계어에 가까운 언어는 저수준 언어
우리가 사용하는 말(영어)과 가까운 언어를 고수준 언어라고 하는데 C도 고수준 언어이긴 하지만
파이썬과 자바 같은 다른 언어들과 비교했을 때는 비교적 저수준 언어로 취급한다.
파이썬과 자바도 컴퓨터와 대화하기 위해 사용되는 다른 여러가지 언어들에 속한다.
이렇게 우리는 다양한 방식으로 컴퓨터와 대화하고, 데이터를 처리할 수 있다!
C언어의 동작 방식
초등학생들이 영어를 공부하다 보면, 가끔가다 무슨 뜻인지 모를때가 있어 구글 번역기를 켜고 검색을 할 때가 많다.
구글 번역기에서 한국어를 번역기에 입력하면, 번역기는 그 내용을 읽어서 영어로 변환해주는 것을 알 수 있다.
컴퓨터도 C언어를 통해 코드를 작성하면 번역기의 역할을 하는 컴파일러라는 친구가 있는데
이 친구가 이 코드를 입력으로 받아서 기계어로 변환해준다!
자료형에 대한 설명
우리가 다룰 컴퓨터 안의 모든 데이터들을 "자료"라고 한다.
우리는 이번에 C언어를 배우면서 이런 자료들을 가공해서 출력해보는 방법에 대해 배운다.
컴퓨터가 이 자료가 어떤것인지 파악하기 위해서는 자료형이라는 개념이 필요한데 지금부터 이 자료형이란 무엇인가에 대해 설명해보겠다.
우리가 살고 있는 집을 기준으로 생각해보자!
(엄마의 잔소리를 기준으로)
엄마는 항상 책은 책꽃이에 넣고, 책을 가방에 빨리 싸고
우유는 냉장고에 넣어놓고 신발주머니에 실내화 챙기고 ....
이런식의 잔소리를 많이들 듣고는 했을 것이다
컴퓨터도 똑같다.
정수는 정수 자료형에, 실수는 실수 자료형에, 문자는 문자 자료형에 담겨야 한다
예를 들어 4라는 숫자를 저장하고 싶다, 이 숫자는 정수에 해당한다.
책은 책꽃이에 넣듯이 4라는 숫자는 정수형 자료형에 넣어야하는데
이 정수형 자료형을 C언어에서는 int라고 한다
따라서 우리는 int a = 4; 라고 코드를 작성하게 되면
(여기서 엄마는 운영체제이고 나중에 manage, unmanaged에 관한 개념은 가정부 아줌마를 등장시킬 예정입니다)
나는 일단 먼저 메모리 공간에 4라는 숫자를 넣을건데! 이 숫자는 정수형 자료형이니까 그 안에 보관해줘! 하는 의미가 된다.
엄마! 저 책을 살거구요! 이건 책장에 넣어주세요! ==
운영체제! 나 4라는 숫자를 저장하고 싶은데 이거 정수형이니까 정수형 자료형에 담아줘
자료형을 왜 지켜야하는가?
- 책을 냉장고에 넣는 사람도 있을 수 있지만, 그런 사람은 많이 없다.
- 책은 책장에 꽃아야 한다는 것이 컴퓨터와의 대화에서 그러기로 "약속"한 것이다.
- 만약 냉동고에 있는 아이스크림을 냉장고에 넣었다고 생각해보자, 엄마(OS)가 그걸 보면 한심하게 생각하겠지만 그래도 냉동고에는 넣어줄 것이다, 하지만 베스킨라빈스 아이스크림이었다고 생각해보자 맛이 섞여서 원래 맛 같지 않을 것이다(type-casting에 대해 설명)
- 근데 냉장고에 넣어야 할 우유를 아예 책장에 놨다고 비유해보자, 누가 거기에 놓을 거라고 생각이나 했겠나?
이러면 우유가 상하게 되고, 이건 엄마도 어떻게 해줄 수 없다(맞지 않는 타입을 지정하게 되면 에러가 난다)
Array에 대한 설명
자 이제 우리는 방에서 물건을 놓을때 냉장식품은 냉장고에, 책은 책장이나 책가방에, 그리고 컴퓨터는 책상 위에 등 모든 물건은 있어야 할 공간안에 놓여있어야 한다는 사실을 배웠다.
이제 배열이라는 것에 대해 설명할텐데 배열이 왜 등장했는지 다시 방으로 돌아와서 생각해보자
우리가 아침에 학교를 가게 되면 옷을 입는데, 옷을 입기 위해 우리는 자연스럽게 옷장으로 향한다.
그런데 예를 들어 옷장이 없다고 생각해보자.
그러면 상의함, 하의함, 속옷함, 양말함 등 여러가지 상자들이 놓이게 되고 알겠지만 우리의 자료형에는 그리 많은 종류가 있지 않다.
따라서 이런 옷 상자가 여러개 생기게 되고
int a = 1
int b = 3
int c= 4
int d =5
우리는 말할 때도
어! 나 상의함에 있는 와이셔츠랑!, 하의함에 있는 바지랑!, 속옷함에 있는 넥타이랑, 양말함에 있는 노랑양말 갖다줘!
라고 말해야한다.
그런데 만약 그냥 4칸 옷장이 있다면
야 그냥 1층 밑에서부터 올라오면서 와이셔츠, 바지, 넥타이, 노랑양말 꺼내와 하면 끝이다
왜 4칸 옷장을 쓸 때가 사물함 여러개를 쓸 때보다 편할까?
그 이유는 여기 저기 찾을 필요 없이 옷장에서는 그냥 한 칸을 보고나서 다음 칸을 찾으면 되기 때문이다.
그렇다, 바로 "반복되는 연속적인" 작업을 하는데는 한 공통된 속성을 가진 반복된 메모리 공간을 가지는게 편하기 때문이다.
채소 냉장고, 과일 냉장고, 닭가슴살 냉장고, 마라탕 재료 냉장고 다 따로 살바에야 그냥 같은 냉장식품을 보관할거라면
큰 냉장고를 사서, 그 안에 칸을 나누고 1층에 채소, 2층에 과일, 3층에 닭가슴살, 4층에 마라탕 재료를 넣는게 더 낫다.
그러면 컴퓨터한테 야 1층부터 4층까지 돌면서! 유통기한들 좀 출력해줘 하면 된다
Pointer에 대한 설명
Python과 Java를 배운 친구들은 이런 질문을 할것이다!
어 쌤! 저 이런거 배웠을때는 포인터 같은거 없었는뒈여~ 이런 쓸데 없는거 왜 배워요~
지금부터 설명 들어간다.
Python과 Java는 집에 가정부 선생님을 둔다
너가 책을 책장에 꽃아 달라해서 엄마가 책장에 꽃아주셨는데, 그 책을 안읽고 오랬동안 놔뒀다.
그리고 책을 계속 사서 책장에 꽃아본다고 해보자 그러면 어느순간 책이 꽉 찰거고 고민에 빠질거다
어느 책을 가져다 버려야하지?
빨래도 똑같다, 비우지 않고 계속 쌓아두다 보면 빨래통이 꽉 찰거다.
그래서 모든 메모리 공간의 내용물들은 어느 순간에 비워져야 하는데 이런거다.
집에 가정부 선생님이 있는 Java와 Python은 이런 일들을 가정부 선생님이 해주신다
Java에서는 이걸 가비지 컬렉터라고 부르는데 쓰지 않는 자료들을 청소하고 빈 공간을 만들어주는 것이다.
C는 이런 가정부 선생님이 없어서 내가 알아서 가져다 버려야한다.
내용물이 꽉차면 엄마(OS)가 와서 방 꼴이 이게 뭐냐며 혼을 내고 방을 뒤 엎을 것이다(Overflow error)
그러면 이렇게 질문할것이다? 어 쌤 그러면 C언어를 왜써요? 자바나 파이썬을 써야하는거 아니에요?
자 그러면 조금 다른 이야기를 해보자
내가 내일 친구들이랑 롯데월드에 놀러가기로 했다(여학생들은)
내가 내일 축구를 하러 친구들이랑 운동장에 간다(남학생들은)
그래서 입고 갈 운동복이나 예쁜 옷을 사려고 가정부 아줌마한테
옷이 너무 많은데 옷장 정리 좀 해주세요, 잘 안 입는 옷이 너무 많아요!
했는데 가정부 아줌마가 ??? 잘만 입는데 뭘 버려요 버릴 생각 없음 ㅎㅎ 해버리면 옷장이 꽉차서 옷 찾는 속도도 느려지고
이 옷 어디있어요? 했을때 거기 한번 잘 찾아봐요!라고 말했을때 혈압이 올라갈 것이다(거기가 그래서 어디에요....)
하지만 C는 다르다,
C는 그냥 옷장 관리도 내가하고, 방에 어떤 가구를 들일지도 내가 결정하고 언제 버릴지도 내가 결정하고 모든 것을 내가 결정한다.
물론 그렇다고 엄마 우리집 화장실 뺄래요, 엄마 옷장(필수요소) 가져다 버려주세요 하면 혼난다.(에러)
그래서 C언어가 훨씬 가볍고 빠르다. 무엇이던 남한테 맡기는 것보다 내가 어떤 물건을 어디에 두었는지 기억하고 있는게
준비할때도 빠른것이다. 엄마~ 내 옷 어디있어요? 보다 아 내 옷 여기 있으니까 내일 집어가야지 하는게 훨씬 빠르겠죠?
여기서 포인터가 등장한다.
어~ 이제부터 내 방 공간은 내가 관리할께 엄마! (C언어는 이렇게 말하는 친구다)
그러면 엄마는 믿는다 우리 아들~ 믿는다 우리 딸~ 하면서 집(전체 메모리 공간) 중 일부 공간을 떼서 내어준다
그러면 이제 우리는 여기에 각종 자료형(가구) 변수들을 배치할 수 있는데
컴퓨터 메모리 공간은 이렇게 생겼고 각 공간마다 "주소"가 존재한다
내가 이 주소부터 이 주소까지의 공간을 쓸거고 여기에는 냉장고를 둘거야(냉장식품을 둘 공간을 선언) 하는 식으로 선언하면
냉장고가 생긴다
추후 작성
'면접 준비' 카테고리의 다른 글
[면접준비] 4일차 (0) | 2023.09.10 |
---|---|
[면접준비] 3일차 (0) | 2023.09.09 |
[면접준비] 2일차 (0) | 2023.09.08 |
[면접준비] 1일차 (0) | 2023.09.07 |