Post

동적 프로그래밍 언어

이러지 않으려고 했는데

쉬운 언어 위주로 설명글을 남길 것이기 때문에 굳이 이 부분을 적어야할까..? 생각이 들었지만 역시 적어두는 편이 좋겠다고 생각이 들었습니다.
두리뭉실한 언어의 역사라는 느낌으로 슥 읽어보시면 좋을 것 같습니다.
물론 원활한 설명을 위한 거짓말이 포함됩니다.

옛날 옛날에

컴퓨터는 수많은 0, 1로 이루어져있습니다. 그것이 실제로는 전기 신호라 할지라도 숫자 세는건 참 쉽죠.
전기 신호가 들어오는 갯수를 세면 그게 곧 숫자니까요.

근데 사람들은 컴퓨터에서 문자도 출력하고 싶었습니다.

1
이번에 들어오는 전기 신호는 문자라고 치고, 신호가 65개 들어오면 그건 'A' 인걸로 하자

그렇게 사람들은 특정 숫자를 문자인셈 치는 방법으로 문자 표현할 수 있었습니다.

구분이 필요할 것 같아

이제 코딩을 할 차례입니다.
근데 우리가 65 라는 숫자를 쓰면 그게 문자 ‘A’인지, 숫자 65를 말하는지 컴퓨터가 구분할 수 없잖아요? 그래서 변수의 종류를 구분하는 방식이 탄생했습니다.

1
2
3
4
5
6
7
8
9
// 변수는 다음과 같은 방법으로 만들 수 있습니다.
// <변수의 종류> <변수 이름> = <값 지정하기>;

int Number = 65; // 65, int는 integer, 정수를 뜻합니다.
char Character = 65; // A, char는 character, 문자를 뜻합니다.
// 또는
char CharacterAs = 'A'; // char 종류는 문자로 직접 입력해도 됩니다.
// Character 도 불러오면 'A'이고
// CharacterAs 도 불러오면 'A'입니다.

이런 식으로 변수의 종류가 고정되어 있는 것을 정적 프로그래밍 언어라고 합니다.

정적 언어의 특징은 종류가 정해지고나면 값을 재지정할 때 종류를 변경할 수 없었습니다.

1
2
int Number = 65;
Number = 'A'; // 아니, 문자를 쓸 수 있는 종류가 아니야.. 오류 !!

조금 불편하긴 했지만, 코드가 제대로 동작하는지를 검토하기는 편했습니다. 종류가 정해져있다면 할 수 있는 행동이 정해진 셈이기에, 컴퓨터가 개발단계에서(굳이 프로그램을 실행하지 않더라도) 오류가 발생할 것을 미리 알 수 있었죠.

하지만 이건 컴퓨터에게 편한 것이지, 인간에게 편한 방식은 아니었습니다.

응? 종류가 다르긴 한데 어째서..

tellmewhy
세상이 발전하면서 컴퓨터 사양이 높아지고, 점점 많은 것들을 해낼 수 있게 되면서 컴퓨터는 더 복잡한 일들을 해낼 수 있게 되었습니다. 동시에 개발자들의 고충도 커져나갔습니다.
위에서 예시로 정수와 문자 두가지만 들었지만 사실 변수의 종류는 어마어마하게 많았거든요

1
2
3
4
5
6
7
8
9
byte // 최대 255 까지만 저장할 수 있는 정수
short // 최대 65536 까지만 저장할 수 있는 정수
int // 꽤 긴 숫자를 저장할 수 있는 정수
long // int보다 더 긴 숫자를 저장할 수 있는 정수
float // 소수점 아래 몇자리까지 표현할 수 있는 소수
double // 소수점 아래 더 많은 자리수를 표현할 수 있는 소수
char // 문자, 'A' 같이 문자 딱 한개를 뜻합니다.
String // 문자열, "ASDFGHJK"처럼 길이가 있는 문자입니다.
...

이것보다 더 많은 종류가 있었고 종류가 다르면 정수와 소수점이 포함된 수를 더할 수도 없었습니다.

1
아니 1 + 1.1 이 그렇게 어려운 문제야??  

네, 적어도 컴퓨터 기준에선 그랬습니다. 종류에 대한 기준은 엄격하니까요.

변수라는게 어차피 RAM에 저장된 정보일 뿐이라며?

종류가 저렇게 세분화되어있던 이유는 사양이 안좋아서였습니다.
같은 정수인데 왜 255, 65536 같은 최대치가 존재하냐구요? 255보다 높게 사용할게 아니라면 RAM에 공간을 적게 할당하기 위해서에요. RAM의 공간이 넉넉하지 않으니까요.

근데 이제는 세상 좋아져서 컴퓨터 사양이 상향 평준화가 되었고, 저 정도 작은 정보들은 막무가내로 저장해도 될 것 같았습니다.

1
var variable = 65; // 65, var는 variable, 변하기 쉽다는 뜻입니다.

변수 종류 그거 내가 알게 뭔가?
모든 종류를 대통합시킨듯한 개념이 생겼습니다.

1
2
3
4
5
6
var variable = 65;
variable = 'A';
variable = 3.141592;
variable = "String";
variable = true;
// 오류는 전혀 발생하지 않습니다

뭐 어떱니까? 어차피 RAM에 저장할 뿐인데 !

1
이제 1 + 1.1 은 2.1 입니다

이것이 제가 블로그에서 자주 다루게 될 동적 프로그래밍 언어의 모양새입니다.
사람에게 무척 편리하지만 당연히 컴퓨터에겐 조금 불친절한 언어이기에, 프로그램을 직접 돌려보기 전에 오류를 검토하는 것에 한계가 있습니다. 컴퓨터 입장에서는 이 변수로 숫자처럼 덧셈을 하며 다룰지, 문자열처럼 다룰지 알 수 없으니까요.
그리고 결과물의 동작 효율성이 상대적으로 떨어집니다. 정적 언어일 때는 “255까지만 사용하는 숫자”라는 종류가 있었지만 지금은 그런식의 구분이 없기에, 숫자를 사용하게 된다면 long에 해당하는 큰 숫자까지 쓸 수 있게 RAM에 할당합니다.

그게 자유로움이란 것 아니겠습니까

적당한 합의

자유롭긴 하지만 변수 종류가 정해져 있을 때는 편하게 써왔던 자동 완성 같은 기능을 쓸 수가 없게 되고, 코드를 수정할 때마다 프로그램을 빌드하는 등 편하긴 한데 뭔가 불편한 상황들을 마주하게 되어 지금은 필요에 따라서 변수의 종류를 정할 수 있는 방식으로 발전했습니다.

1
2
3
4
var variable = "ASDFG"; // 언제든지 변할 수 있어요
variable = 135;
var Strict:String = "ASDFG"; // 이것은 문자열인 거시에요
Strict = 135; // 문자열이 아니잖아요.. 오류 !

그래서 동적 언어를 사용하더라도 요정도 배경은 알아두시는게 좋을 것 같았어요


나눠서 쓰기엔 애매한 길이라서 긴 글이 되어버렸네요.
다음 포스트에서 다시 뵐께요 😄

This post is licensed under CC BY 4.0 by the author.