개발자가 되기 위해서 반드시 컴퓨터 공학 학위를 취득하거나 CS 공부를 하지 않아도 괜찮습니다. 실제로 주변을 보면 비전공자인 개발자가 많은 것 같습니다.
하지만 개발을 하면서 에러가 발생했을 때, 빠르게 문제해결을 하기 위해서는 CS 지식이 절대적으로 도움이 된다고 생각이 됩니다. 매일 같이 에디터에 작성하는 코드들이 어떻게 컴퓨터에서 동작하는지 원리를 알아야 좋은 코드(?)를 작성 할 수 있다고 생각합니다.
또한 컴퓨터 구조를 알고 있을때 성능, 용량, 비용 문제를 고려하며 개발을 할 수 있습니다.
컴퓨터가 이해하는 정보는 0과 1로 이루어진 이진수(binary)입니다. 이진수는 컴퓨터가 처리할 수 있는 데이터의 가장 기본적인 형태입니다. 이진수를 조작하여 컴퓨터가 원하는 작업을 수행하게 됩니다.
컴퓨터에는 네가지 핵심 부품이 있습니다.
비트(bit)는 0과 1을 나타내는 정보단위입니다. 컴퓨터에서 처리하는 정보의 최소표현단위로 2진법 1자리를 표현하는 정보량의 최소단위입니다. 비트는 바이트(Byte)와 함께 사용되며, 8비트가 1바이트입니다.
1byte = 8bit
1kB = 1,000byte
1MB = 1,000kB
1GB = 1,000MB
1TB = 1,000GB
이진법은 0과 1 두 개의 숫자로 수를 표현하는 방법입니다.
십육진법은 한 자릿수에 16개의 숫자를 사용하는 방법입니다. 이진법으로 나타낸 경우보다 자릿수의 경우의 수가 많은 대신 숫자 자체를 단축시킬 수 있어서 컴퓨터에서는 이진법과 더불어 많이 사용하는 진법입니다.
십육진법은 4비트의 이진수로 나타낼 수 있습니다. 이 것을 니블 (nibble) 이라고 합니다. 예를 들어 D는 1101로 나타낼 수 있습니다.
아스키는 영문 알파벳을 사용하는 문자 인코딩입니다. 7비트 문자 인코딩 체계로, 128개의 문자를 표현할 수 있습니다.
아스키는 영문 만 인코딩 할 수 있기 떄문에 각 나라의 언어에 맞는 인코딩 체계가 필요하여 여러 인코딩 방식이 나왔습니다.
하지만 언어별로 인코딩해야하는 수고로움이 있었기 때문에 통일된 표준 인코딩 방식인 유니코드가 등장했습니다.
유니코드는 전 세계의 모든 문자를 표현하기 위한 국제 표준 문자 인코딩 체계입니다.
우리가 작성하는 코드는 모두 인간이 읽을 수 있는 명령어입니다.
컴퓨터는 인간이 읽을 수 있는 코드를 읽을 수 없습니다. 0과 1로 표현된 명령어만 읽을 수 있기 때문에 변환하는 작업이 필요합니다.
C, C++, Java, Python 과 같이 사람을 위한 언어를 고급 언어라고 하고 반대로 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 합니다.
저급 언어에는 두가지 종류가 있습니다. 기계어와 어셈블리어입니다. 기계어는 컴퓨터가 이해할 수 있는 0과 1로 이루어진 언어입니다. 기계어는 사람이 이해하기 어렵기 때문에 어셈블리어가 탄생하게 되었습니다. 사람이 읽기 편한 형태로 번역한 언어가 어셈블리어 입니다.
10110000 01100001
는 어셈블리어로 옮겨쓴다면 mov al, 061h
이다.고급 언어는 결국 저급 언어로 변환이 되어 실행되는데, 이 때 변환되는 방식은 컴파일 방식과 인터프리트 방식이 있다.
명령어는 연산코드와 오퍼랜드로 구성되어 있습니다. 명령어가 수행하는 연산을 연산코드라고 하고 연산 코드가 연산에 사용하는 데이터의 위치가 오퍼랜드입니다.
예시) mov al, 061h
mov가 연산코드이고 al, 061h가 오퍼랜드가 된다.
프로그램이 실행되려면 반드시 메모리
에 저장되어 있어야 합니다.
1101
-> 모든 0과 1을 뒤집기 -> 0010
-> 1을 더한다. -> 0011
스택과 큐는 자료구조의 종류 이며 스택은 LIFO (last in first out)이고, 큐는 FIFO (first in first out)이다.
스택은 막혀 있는 통과 같은 저장공간에 데이터를 차례로 저장했다가 필요할 때 마지막에 넣은 데이터부터 꺼내는 구조이다.
큐는 먼저 들어온 데이터가 먼저 나가는 구조이다.
이 글은 한빛미디어의 혼공학습단 활동을 하며 적는 글입니다. 혼자 공부하는 컴퓨터 구조+운영체제 책을 참고하여 작성되었습니다.
혼공시리즈: https://hongong.hanbit.co.kr/
if you can do it, we can do it!