본문 바로가기

안드로이드앱 코딩_AndroidApp/안스_코틀린_쪼개기

파편000_코틀린과 컴퓨터 사이에 무슨 일이?

참고: '안스_코틀린_쪼개기' 카테고리에는 안드로이드 스튜디오와 코틀린 프로그래밍 언어를 배우면서 '기초' 와 '더파기'에서 다루지 못한 내용과 추가로 보충 설명이 필요한 내용 등 안스와 코틀린 학습 전반에 걸쳐 단편적인 주제로 글을 적을 것이다.

 

코틀린과 컴퓨터 사이에 무슨일이 일어나는가?

 

모두가 봐서 알다시피 컴퓨터는 한마디로 플라스틱, 금속 그리고 칩 부품을 조립해 놓은 것에 불과하다.

이 말은 그대로 두면 스스로 아무 일도 하지 못한다는 뜻이다. 4글자로 무용지물.

 

 

우리가 지금 배우고 있는 코틀린 같은 프로그래밍 언어로 코드를 짜서 프로그램으로 만들어야 일을 시킬 수 있다.

이렇게 하면 우리가 하기 힘들고 지루해 하는 일들 뿐만 아니라 게임 같은 즐길 수 있는 것까지 컴퓨터는 간단히 게다가 불평없이 무한 봉사를 제공해 준다. 수고비로는 전기만 먹여주면 족하다.

그러므로 코드를 짜는 작업인 프로그래밍 또는 코딩은 멋지고 폼나는 일임이 틀림없다.

 

최근에 깜짝 놀랄 만한 어마무시한 일들을 해내고 있는 AI(인공지능)도 프로그래머가 짠 프로그램에 불과하다.

그런데 시키는 일만 하던 이 프로그램이라는 것이 스스로 학습할 수 있다고 해서 우리가 지금 잔뜩 겁 먹고 있는 것이다.(무섭냐? 나도 무섭다. 하지만 지피지기면 백전불퇴다.)

 

컴퓨터 부품 중에서 핵심은 CPU (Central Processing Unit ; 중앙 처리 장치).

CPU Processor(프로세서, 처리자)라고도 부른다.

 

CPU

 

CPU는 계산 처리를 담당한다.

계산은 0 1 숫자 2개로만 한다.

우리는 숫자 10(0~9)로 계산하는 10진법(decimal system)을 사용하지만 CPU 0,1로만 계산하는 2진법(binary system)을 사용하다

그러므로 우리가 사용하는 숫자, 글자, 그림, 소리 등 모든 것을 컴퓨터는 0 1로 바꾼다.

CPU 0 1로만 계산하지만 1초에 수백만번 계산할 수 있는 능력을 가지고 있다.

 

이진수, 원시코드

 

CPU 안에는 register(레지스터)라고 장소가 있다.(cpu 이미지의 직사각형 검은 상자 모양)

register는 벌집처럼 아주 작은 상자를 묶어 놓은 것과 같다.

계산할 때 이곳을 이용해서 0 1을 순식간에 넣었다 뺐다 할 수 있다.

 

숫자(0~9)를 컴퓨터 용어로 digit(디지트)라고 한다.

그래서 2진법에서 사용하는 숫자는 이진수이므로 binary digit이라고 하고 줄여서 bit(비트)라고 한다.

 

bi는 '두 개'라는 뜻이다. 예를 들면 bicycle (자전거)는 bi (둘) + cycle (circle 원)이 합쳐진 글자인데 '동그라미가 2개'라는 뜻이다.

 

레지스터는 길이에 따라 32-bit (비트) , 64-bit (비트)가 있는데 이것은 한번에 처리할 수 있는 숫자의 크기를 나타낸다.

register라는 장소가 넓지 않기 때문에 넣을 장소가 부족하면 CPU 부근에 RAM() 이라고 하는 더 큰 상자에 넣었다가 빼곤 한다. RAM은 Random Access Memory의 약자로 '랜덤으로 접근하여 데이터를 읽고 저장할 수 있는 메모리'라는 뜻이다.

 

RAM (Random access memory)

 

우리가 코틀린 같은 프로그래밍 언어로 코드를 작성해서 프로그램을 만들어 실행하면 컴퓨터는 우리가 작성한 문자와 숫자가 무슨 뜻인지 모른다. 컴퓨터는 0 1만 알기 때문이다그래서 우리가 작성한 코드를 native code(원시 코드)라는 것으로 바꾼 후 컴퓨터가 이해하는 machine code(기계어)로 바꿔주는 프로그램이 있는데 그것을 compiler(컴파일러)라고 한다. 즉, 우리가 작성한 코드와 컴퓨터 사이에는 컴파일러라는 프로그램이 통역을 맡고 있다.

 

코틀린에서 이 컴파일러를 담당하는 것이 JVM(Java Virtual Machine ; 자바 가상 머신)이다.

코틀린 가상 머신이 아닌 이유는 코틀린이 Java(자바)라는 프로그래밍 언어의 자식이기 때문이다. 코틀린이 자바와 100% 호환(화합)되는 이유도 이 때문이다.

 

코틀린 프로그램이 실행되는 과정은 다음과 같다.

  1. bitecode라는 것을 만들어서 JVM에 넘긴다.
  2. JVM은 다시 native code(원시 코드)로 바꿔서 컴퓨터에 넘겨준다.

 

하지만 이제 코틀린도 성인이 되어 독립을 했다.

아버지(JVM)의 도움을 받기도 하지만 직접 native code(원시코드)로 처리하는 능력도 가지게 되었다.

 

Wraven...