데이터 구조, 알고리즘, 운영체제, 네트워크 내용을
부담없는 하루 분량으로 뉴스레터를 보내드려요 🎁
|
1. 데이터 구조는 데이터를 효율적으로 사용할 수 있도록 컴퓨터에 저장하는 방식이에요. 잘 설계된 데이터 구조를 활용하면, 짧은 시간 내에 적은 리소스로 필요한 연산을 수행할 수 있어요.
2. 데이터 구조는 논리적인 개념이에요. 데이터 구조를 설계할 땐 다음 두 가지 사안을 고려해야 해요.
- 어떻게 데이터를 저장하는가?
- 어떤 연산을 수행해야 하는가?
3. 데이터 구조는 크게 단순 데이터 구조(Simple Data Structure)와 복합 데이터 구조(Compound Data Structure)로 나눌 수 있어요.
4. 단순 데이터 구조(Simple Data Structure)는 원시 자료형으로 구성되어요. 예시로는 변수, 포인터, 구조체 등이 있어요.
5. 복합 데이터 구조(Compound Data Structure)는 원시 자료형으로 구성되며 데이터 추가/삭제/탐색/정렬 등의 기능을 지원해요. 복합 데이터 구조는 다시 선형 데이터 구조(Linear Data Structure)와 비선형 데이터 구조(Non-Linear Data Structure)로 분류하는데요.
6. 선형 데이터 구조(Linear Data Structure)는 자료를 구성하는 데이터를 순차적으로 나열시킨 형태를 뜻해요. 예시로 배열, 연결리스트, 스택, 큐 등이 있어요.
7. 비선형 데이터 구조(Non-Linear Data Structure)는 하나의 데이터 뒤에 여러 개의 데이터가 존재할 수 있는 형태를 뜻해요. 예시로 트리와 그래프 등이 있어요.
8. 앞으로 선형 데이터 구조와 비선형 데이터 구조를 대표하는 데이터 구조들에 대해 하나씩 알아봅시다!
|
1. 알고리즘이란 어떠한 문제를 해결하기 위한 절차나 방법을 뜻해요. 주어진 입력을 토대로 알맞은 결과값을 만드는 과정이죠.
2. 그렇다면 효율적인 알고리즘이란 무엇일까요? 결과값이 도출될 때까지 짧은 실행 시간 내에 컴퓨터의 메모리를 적게 쓴다면 이는 효율적인 알고리즘이라고 불려요. 컴퓨터 리소스는 제한되어 있기 때문에, 빠른 시간 안에 적은 메모리로 필요한 연산을 수행하는 것이 효율적인 것이죠. 여기서 필요한 연산은 산술, 대입, 비교, 이동을 뜻해요.
3. 한 번 예시를 들어볼게요. 가령 1부터 n까지의 숫자를 더하는 코드를 짜볼게요. 둘 다 원하는 결과를 얻을 수 있어요.
[1]
int result = 0;
for (int i=1; i<=n; i++) {
result += i;
}
[2]
int result = n*(n+1)/2;
4. 시간 측면에서 바라봐볼게요. 첫 번째 방식은 총 n번의 덧셈 연산이 수행되어야 해요. 두 번째 방식은 덧셈, 곱셈, 나눗셈 총 3번의 연산이 수행되어요. n이 커질수록 첫 번째 방식이 연산이 더 많아지겠죠? n이 커질수록 두 번째 방식이 더 빨리 결과값을 도출할 것이에요.
5. 메모리 측면에서는 어떨까요? 첫 번째 방식은 result, i, n을 저장할 공간이, 두 번째 방식은 result, n을 저장할 공간이 필요하겠네요. n에 저장할 숫자가 커진다고 더 많은 메모리 공간을 할당할 필요는 없어 보여요.
6. 4번에서 살펴본 시간 관련 지표는 시간 복잡도, 5번에서 살펴본 메모리 관련 지표는 공간복잡도라는 개념과 관련이 있어요. 이에 대해선 다음 뉴스레터에서 알아볼게요 :)
|
1. 운영체제는 CPU, 메모리, 입출력 장치 등의 컴퓨터 자원을 관리하는 소프트웨어에요. 이를 통해 응용 프로그램이 실행될 수 있는 기반을 제공해요.
2. 운영체제는 커널과 시스템 프로그램으로 이루어져 있어요.
3. 커널은 운영 체제의 핵심 동작을 수행하는 프로그램이에요. 컴퓨터 하드웨어 자원을 프로세스에 할당하고, 메모리를 관리하고, 필요한 시스템 콜을 수행하는 등 직접 컴퓨터 자원들을 사용하는 역할을 담당해요.
(프로세스, 메모리, 시스템 콜 등은 다음에 같이 더 자세히 알아보도록 해요 😊)
4. 시스템 프로그램은 커널의 일부일 필요는 없지만, 프로그램 개발 및 실행을 위해 좀 더 편리한 환경을 제공하는 프로그램이에요. 셸, 컴파일러, 로더 등이 대표적이에요.
5. 이 중 셸(Shell)에 대해 조금 알아볼게요. 셸은 커널과 사용자 사이에서 사용자의 명령을 해석하고, 그 처리 결과를 출력하는 시스템 프로그램이에요. 윈도우에서는 CMD, PowerShell, 리눅스에서는 bash 등이 대표적이죠!
|
1. 인터넷은 전 세계적으로 컴퓨팅 디바이스를 상호 연결하는 컴퓨터 네트워크 시스템을 뜻해요. 컴퓨팅 디바이스는 노트북, 스마트폰, 태블릿 등 인터넷을 사용하는 기기를 말해요. 네트워크 용어로 컴퓨팅 디바이스는 엔드 시스템으로 불려요.
2. 인터넷은 커뮤니케이션 링크와 패킷 스위치로 엔드 포인트들을 연결해요. 하나의 엔드 시스템에서 다른 엔드 시스템으로 데이터를 전송할 때, 데이터를 잘게 쪼개 조각마다 헤더 바이트를 붙이는데, 이를 패킷이라고 불러요.
3. 커뮤니케이션 링크는 땅에 깔린 구리 선, 광섬유 등 데이터를 물리적으로 전송하는 물질을 뜻해요. 물질의 특성에 따라 각기 다른 데이터 전송 속도를 가져요.
4. 패킷 스위치는 패킷을 올바른 엔드 시스템으로 이동하도록, 알맞은 커뮤니케이션 링크로 데이터를 뿌려주는 역할을 해요. 오늘날 인터넷 환경에서는 라우터와 링크 레이어 스위치가 대표적인 패킷 스위치에요.
5. 이렇게 출발 엔드 시스템에서 목적지 엔드 시스템까지 패킷을 전달하며 거치는 커뮤니케이션 링크와 패킷 스위치는 네트워크의 경로/루트라고 불려요.
6. 엔드 시스템들은 ISP(Internet Service Provider)를 통해 인터넷에 접근해요. 개인이나 기업체들에 인터넷 접속 서비스를 제공하는 회사들로, 한국에서는 KT, SK브로드밴드, LG U+ 등이 있어요. ISP의 서비스를 사용하여 해상 케이블 등을 통해 세계와 연결된 인터넷을 사용할 수 있어요. 우리가 인터넷 요금을 내는 이유죠!
|
이번 컨텐츠가 도움이 되셨나요?
커피 한 잔(2000원)을 오늘의 CS에게 후원해주세요!
독자 여러분들의 후원은 컨텐츠를 만들어나가는데 큰 힘이 됩니다 💪
읽어주셔서 감사합니다! 좋은 하루 되세요 :)
|
|