IT 정보 로그캣/CS

코딩 공부를 시작하기 전에 알아두면 좋을 것들

지푸라기 개발자 2020. 6. 14. 22:11
반응형

코딩(혹은 프로그래밍) 공부를 하다 보면 정작 우리가 당연히 사용하는 컴퓨터에 대해서는 기본 지식인 양 넘어가는 것들이 많다. 그래서 코딩(혹은 프로그래밍) 공부를 시작하기 전에 상식으로 알아두면 좋을 것들을 간단히 정리해 보았다.

 

컴퓨터에 대해여

컴퓨터라(computer)는 이름은 계산하는 기계라는 뜻으로 "계산하다(compute)"라는 동사에서 유래되었다.(항상 이름의 뜻을 잘 알아두자!)
이렇듯 컴퓨터는 인간의 연산을 돕기 위해 컴퓨터가 발명된 것이다.

 

 

 

프로그래밍 언어

우리가 영어나 한글을 사용하듯이 컴퓨터는 0과 1로 이루어진 이진수를 언어로 사용한다. 이를 기계어라고 한다.

세상에 인간의 언어가 다양하듯이 프로그래밍 언어도 다양하고, 지금 이순간에도 새로운 프로그래밍 언어들이 만들어지고 있다. 대략적인 프로그래밍 언어의 발전 흐름을 살펴보면 다음과 같다.

  • 1세대: 기계어

  • 2세대: 어셈블리어

  • 3세대: C, 포트란, 베이직, 코볼 등

  • 4세대: 비주얼베이직, 델파이, 파워빌더 등

  • 5세대: 자바, C++, C#, ASP, PHP 등

여기서 어셈블리어는 기계어를 그나마 사람이 사용할 수 있도록 0101001 같은 숫자를 기호화 한 언어라고 볼 수 있다.

3세대 언어들은 주로 절차 지향 중심의 언어들인데 이때부터 프로그래밍 언어가 컴퓨터보다 사람에게 더 친숙하게 만들어지기 시작한다.

그래서 기계어, 어셈블리어를 저급언어(low-level), 이후의 언어들을 고급 언어(high-level)라고 한다.

4세대 언어들은 주로 데이터를 처리하기 위한 데이터베이스 관련 프로그램을 개발할 수 있는 언어들이다.(대부분 5세대 언어들에 의해 대체되고 있다.)

5세대 언어들은 객체지향 언어가 많고 또한 네트워크 관련 기능이 강화된 언어들이 많다.

최근에 많이 쓰이는 언어들은 대부분 5세대 언어라고 생각하면 된다.

 

 

 

컴퓨터는 어떻게 우리가 작성한 코드를 알아들을까

컴퓨터의 언어는 0과 1로 이루어진 기계어인데 어떻게 우리가 작성한 프로그래밍 언어(코드)를 인지하는 걸까?

위에서 언급했듯이 3세대 언어부터는 사람에 친화적인 프로그래밍 언어이기 때문에 컴퓨터가 프로그래밍 언어를 이해하기 위해서는 별도의 번역기가 필요하다.

비유하자면 컴퓨터에게 어셈블리어까지는 사투리라고 한다면 3세대 언어부터는 아예 외국어가 되는 것이다.

그렇기 때문에 코드(프로그램)가 컴퓨터에서 실행되기 위해서는 컴퓨터가 인식할 수 있는 기계어로 번역되어야 한다.

사람에 의해 작성된 코드는 번역기를 거쳐 기계어로 번역되고, 컴퓨터는 기계어로 작성된 코드들을 실행하는 방식이다.

번역하는 방법에는 크게 컴파일, 인터프리트가 있다.

컴파일

컴파일(compile)은 코드를 컴파일러(compiler)라는 것을 사용해 기계어로 번역한 다음 번역된 파일을 생성해 컴퓨터에서 실행시키는 방법이다.

여기서 컴파일러는 프로그래머에 의해 만들어진 소프트웨어이다. 

컴파일의 장점은 한번 작성된 코드가 번역되어 실행 파일이 생성되면 이후로는 다시 번역할 필요 없이 번역된 실행파일을 실행시키면 되기 때문에 시간상의 효율성이 뛰어나다.

단점으로는 특정 시스템에서 번역된 실행 파일은 다른 시스템에서는 실행되지 않는다. 예를 들어 윈도우에서 번역된 파일은 맥에서는 실행되지 않기 때문에 각각 시스템에 맞는 컴파일러를 별도로 만들어 줘야 한다. (윈도우용과 맥용 프로그램이 따로 있는 이유가 여기에 있다!)

 

 

인터프리트

인터프리트(interpret)는 인터프리터(interpreter)라는 것을 사용해 코드를 직접 한 줄씩 번역한 다음 바로 실행시키는 방법이다. 한 줄씩 번역하여 실행시키기 때문에 매번 버그가 발생할 때마다 전체를 컴파일하지 않아도 돼서 디버깅에 편리하다.

또한 인터프리터만 있으면 컴파일 방법처럼 시스템마다 별도의 컴파일러가 필요한 방식이 아니라서 이식성이 뛰어나다.

주로 스크립트 언어들이 인터프리트 방법을 사용한다.

하지만 한 줄씩 번역하고 실행시키다 보니 전체를 기계어로 번역해서 실행시키는 컴파일 방법보다는 상대적으로 시간 효율성이 떨어진다.

최근에는 컴파일과 인터프리트 방법을 모두 사용하는 하이브리드 방식을 사용하고 , 하드웨어 성능이 높아져서 예전처럼 컴파일 언어와 인터프리터 언어의 성능 차이를 사람이 체감할 정도로 크지 않다.

하이브리드 방식은 사람이 작성한 코드를 컴파일러를 사용해 중간 코드(바이트 코드)로 변환하고 이 중간 코드를 가상 머신을 통해 한 줄씩 기계어로 번역하여 즉시 실행시키는 방식이다.

 

 

 

운영체제

운영체제(OS, Operating System)는 사용자가 컴퓨터를 편리하게 사용할 수 있도록 하드웨어 자원을 관리해주는 소프트웨어이다. 초기에는 컴퓨터 제작 회사별로 각자의 운영체제를 만들어 제공하였지만, 퍼스널 컴퓨터(PC)가 등장하고 나서부터는 일관된 형태의 운영체제가 사용되고 있다.

운영체제의 종류

DOS(Disk Operating System)

일명 도스로 불리며 퍼스널 컴퓨터가 처음 개발되었을 때 사용했던 운영체제이다. DOS는 명령어를 직접 입력하여 운영체제를 사용하는 CUI(Command-line User Interface) 형태의 운영체제이다. 맥에서 터미널이나 윈도우에서 콘솔 창이 이에 해당한다.

 

Windows 계열 운영체제

우리가 모두 그 Windows 다. Windows는 마우스로 편리하게 사용할 수 있는 GUI(Graphical User Interface) 방식의 운영체제로 1985년 마이크로소프트 사는 Windows 1.0 운영체제를 처음 발표하였다.

이후 Windows 1.0 ~ 3.0, Windows 95, Windows NT(New Technology), Windows 2000, Windows XP, Windows Vista, Windows 7 ~ 10 등이 계속해서 개발되었다.

 

Mac 운영체제

1984년 미국의 애플에서 매킨토시 계열의 퍼스널 컴퓨터나 워크스테이션에서 사용할 수 있는 Mac 운영체제를 개발하였다. Mac 운영체제는 마우스를 사용하는 최초의 GUI 형태의 운영체제이다.

 

유닉스(Unix) 계열 운영체제

1969년 미국의 AT&T사의 벨 연구소에서 개발된 운영체제로 주로 중대형 컴퓨터의 운영체제로 사용되었다. 1974년 데니스 매 캘리 스테어 리치(이름도 어렵다...)가 유닉스를 C 언어로 다시 개발하였고, 서로 다른 기종의 컴퓨터에도 유닉스가 쉽게 이식되어 사용될 수 있게 되었다. 그 이후 유닉스는 발전을 거듭하여 상용 운영체제인 솔라리스와 FreeBSD 유닉스를 탄생시켰다.

 

리눅스(Linux) 운영체제

1991년 핀란드 헬싱키 대학교의 학생인 리누스 토발즈에 의해 만들어진 운영체제로 유닉스를 PC에서 사용할 수 있게 만든 운영체제이다.

리눅스는 누구나 변환하여 사용할 수 있는 오픈소스이며, 개인용 컴퓨터 운영체제 또는 서버용 운영체제로도 많이 사용된다.

리눅스는 처음부터 소스코드를 공개하여 많은 사용자들로부터 유틸리티 소프트웨어가 만들어졌고, 배포판으로는 레드햇(Red Hat), 데비안(Debian) 등이 제공되고 있다.

 

스마트폰 운영체제

스마트폰에서 사용되는 운영체제로는 구글의 안드로이드, 애플의 iOS 등이 대표적이고 그 외 심비안, 블랙베리, 윈도우폰 7, 삼성의 바다 등이 있다.

 

 

 

데이터의 표현

이진수의 표현

컴퓨터는 0과 1로 구성된 이진수를 바탕으로 모든 데이터를 표현한다.

하나의 0이나 1을 비트(bit)라고 한다. 이진수를 사용하여 상태를 표현하면 두 가지 상태만 나타낼 수 있으므로 여러 개의 비트를 모아 하나의 상태를 표현한다.

컴퓨터에 저장할 수 있는 정보의 규모를 나타내는 단위 

 

 

문자의 표현

컴퓨터에서 사용하는 문자에는 영문자, 한글, 숫자, 특수 기호 문자 등이 있다.

초기의 컴퓨터에서는 컴퓨터마다 서로 다른 문자 코드 체계를 사용하여 프로그램의 호환성이 문제가 되었다. 이러한 호환성을 해결하기 위해 표준화된 코드체계가 필요했고, 그렇게 만들어진 대표적인 코드 체계로 아스키(ASCII) 코드와 유니코드(Unicode)가 있다.

아스키코드(ASCII, Amercian Standard Code for Information Interchange)

아스키코드는 영문 알파뱃을 사용하는 대표적인 표준 코드체계로 1967년에 표준으로 제정되었다.

아스키 코드는 7비트를 사용하여 표현하는 코드 체계로 33개의 제어 문자들과 공백을 포함하는 95개의 출력 가능한 문자로 구성되어 있다.

출력 가능한 문자들은 52개의 영문 알파벳 대소문자와 10개의 숫자, 32개의 특수 문자, 하나의 공백 문자로 이루어져 있다.

아스키코드표 보기

 

유니코드(Unicode)

7비트로 구성된 아스키코드는 표현할 수 있는 개수가 정해져 있기 때문에 세계의 다양한 문자들을 표현할 수 없었다.

그래서 1991년 유니코드가 개발이 시작되었고, 전 세계 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 애플, HP, IBM, Sun, MS, 오라클 등과 같은 업체들이 모여 표준으로 제정하였다.

유니코드는 사용 중인 운영체제, 프로그램 언어와 상관없이 문자마다 고유한 값을 제공하는 새로운 개념의 코드체계이다. 모든 문자들이 16비트로 표현하므로 최대 65,536개의 문자들을 표현할 수 있다.

 

 

숫자의 표현

프로그램에서 숫자 데이터는 연산의 대상이 되는 데이터들을 의미한다.

컴퓨터에서는 정수와 실수의 표현이 가능하다.

정수의 표현

대부분의 언어에서 정수를 나타내기 위해서 32비트(4바이트) 크기의 공간을 사용하고, 정수에서는 양수와 음수를 표현할 수 있어야 하기 때문에 32비트 중에서 최상위 비트를 부호 비트로 사용한다. 부호 비트가 0이면 양수, 1이면 음수를 타나 낸다.

첫 번째 비트가 부호를 나타내고 있으므로, 실제 정수를 나타낼 수 있는 비트수는 31비트로 표현해야 한다.

그래서 정수의 범위는 -2의 31승 (-2,147,483,648) ~ 2의 31승 (2,147,483,647)까지이다. 

정확한 값이 중요하기보단 대략 정수 10자리 정도까지 표현이 가능하다고 알아두면 되겠다.

참고로 음수는 2의 보수법으로 만들어진다. 

 

실수의 표현

컴퓨터는 실수를 표현하기 위해 부동 소수점(floating-point) 표기법을 사용한다. 부동 소수점 표현 방식은 소수점의 위치를 고정시켜 표현하는 방식이다.

컴퓨터는 실수를 저장하기 위해 부호 비트(1비트), 지수 비트(실제 소수점의 위치를 지수승으로 표현한 것), 가수 비트(실수의 유효 자릿수들을 부호화된 고정 소수점으로 표현한 것) 형식을 사용한다.

 

 

 

 

 

* 해당 포스팅은 처음 시작하는 프로그래밍을 참고하였습니다.

 

반응형