Study 14

[컴퓨터 구조] | 고급 언어를 저급 언어로 변환하는 컴파일, 인터프리트

프로그래밍 언어는 어떻게 명령어가 되어 실행될까? 그리고 명령어는 어떻게 이루어져 있을까? 고급 언어 VS 저급 언어 개발자들은 Java, Python, JavaScript와 같은 프로그래밍 언어로 코드를 작성한다. 그렇다면 컴퓨터는 이 언어들을 이해할 수 있을까? 답은 '아니'다! 프로그래밍 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어이며, 이렇게 사람을 위한 언어를 고급 언어라 하고, 반대로 컴퓨터가 이해하고 실행할 수 있는 언어를 저급 언어라고 한다. 저급 언어는 명령어로 이루어져 있으며 기계어와 어셈블리어로 나뉜다. 기계어: 0과 1의 명령어 비트로 이루어진 명령어 모음으로 구성된 저급 언어이다. 이진수와 십육진수로 표현된다. 어셈블리어: 기계어를 읽기 편한 형태로 번역한 저급 언어이다. ..

[컴퓨터 구조] | 데이터를 0과 1로 표현하기

컴퓨터는 0과 1로 모든 정보를 표현하며, 0과 1로 표현된 정보만 이해할 수 있다. 나는 컴퓨터를 사용하면서 한 번도 0과 1로만 사용해 본 적이 없다. 하지만 컴퓨터는 0과 1로 된 정보만 이해할 수 있다고 한다. 그러면 컴퓨터는 내가 0과 1을 제외하여 표현한 정보들을 어떻게 이해할 수 있는 걸까? 정보 단위 0과 1을 나타내는 가장 작은 정보 단위를 비트라고 한다. 1비트는 (0), (1)로 두 가지 정보를 표현할 수 있다. 그러면 2비트는 몇 가지 정보를 표현할 수 있을까? (0, 0) (0, 1), (1, 0), (1, 1)로 네 가지 정보를 표현할 수 있다. 이렇게 n비트는 2의 n승 개의 정보를 표현할 수 있다. 프로그램의 크기가 커질수록 비트의 크기는 커지는데, 큰 크기를 표현하기 어려우..

알고리즘[Algorithm] | 최대공약수를 계산하기 위한 유클리드 호제법

유클리드 호제법 2개의 자연수의 최대공약수를 구하는 알고리즘이다. 호제법은 두 수가 서로의 수를 나누어 원하는 수를 얻는 알고리즘을 나타낸다고 하는데, 2개의 자연수 A, B(A > B)에 대해 A를 B로 나눈 나머지를 R이라고 하면 A, B의 최대공약수는 B, R의 최대공약수와 같다. 따라서 B를 R로 나눈 나머지 C를 구하고, 다시 R을 C로 나눈 나머지를 구하는 과정을 반복해서 나머지가 0이 되었을 때 나누는 수가 A, B의 최대공약수가 된다. 위키백과에서 위 설명을 읽었을 때 이해가 완벽하게 되지 않았고.. 어렵다는 생각이 들었는데 예시를 보니 생각보다 간단했다! 위키백과의 예시를 직접 한 단계씩 직접 작성하고 출력해 보면서 이해를 했다. 243, 135의 최대공약수를 찾는다고 할 때 구하는 순서..

Study/Algorithm 2023.06.19

[컴퓨터 구조] | 컴퓨터 구조를 공부하는 이유와 컴퓨터의 구성 요소

혼자만 사용하는 프로그램을 만들 땐 성능, 용량, 비용 문제를 깊게 생각하지 않았다. 하지만 취업을 하게되면 많은 사람이 사용하는 서비스를 개발하게 되고 이러한 프로그램은 성능, 용량, 비용 문제가 중요하게 고려된다. 혼자 개발할 땐 입력과 출력에만 집중을 했지만, 더 나아가 컴퓨터 구조를 이해한다면 이러한 부분을 고려하며 개발할 수 있게 될 것을 기대하며 공부를 시작해보려고 한다. 컴퓨터가 이해하는 정보에는 데이터와 명령어가 있다. 이 때 데이터란 숫자, 문자, 이미지, 동영상과 같은 정적인 정보를 가리킨다. 명령어는 이러한 데이터를 움직이고 컴퓨터를 작동시키는 정보이다. 즉, 데이터는 명령어 없이는 아무것도 할 수 없는 정보 덩어리일 뿐이다. 그래서 컴퓨터를 한 마디로 정의하면 명령어를 처리하는 기계..

알고리즘[Algorithm] | DFS & BFS

DFS/BFS를 알아가기 전에.. 탐색은 많은 양의 데이터 중 원하는 데이터를 찾는 과정이며 DFS/BFS가 이 알고리즘에 속한다. DFS/BFS를 풀기 위해서 알아야 할 몇 가지 자료구조를 먼저 알아보려고 한다. 여기서 자료구조란 데이터를 표현, 관리, 처리하기 위한 구조이다. 자료구조 중에서 스택과 큐가 가장 기초적인 개념으로 자리잡고 있다. 스택(Stack) 나중에 들어온 데이터가 먼저 삭제되는 후입선출 구조의 자료구조이다. 예전 블로그에서 실행 컨텍스트에 대해 개념을 정리하면서 스택/큐 개념도 함께 정리했는데, 당시 그렸던 그림을 첨부한다. 그림처럼 후입 선출임을 알 수 있다. 이를 코드로 구현하려면 입력은 리스트의 가장 뒤쪽에 데이터를 삽입하는 append(), 출력은 리스트의 가장 뒤쪽에 있는..

Study/Algorithm 2023.06.05