[혼공컴운]1주차_Chap01~03 정리

임지·2025년 1월 8일
0

혼공컴운

목록 보기
1/6

1. 컴퓨터가 이해하는 정보

컴퓨터는 0과 1로 이루어진 정보인 데이터명령어를 이해한다.

  • 데이터
    숫자, 문자, 이미지, 동영상 등의 정적인 정보
  • 명령어
    컴퓨터가 어떻게 동작해야하는가에 대한 정보

2. 컴퓨터의 4가지 핵심 부품

컴퓨터가 공통으로 가지는 핵심 부품 4가지

  • CPU, 메모리 (메인 보드 내)
  • 보조기억장치, 입출력장치 (메인 보드 외부)

CPU

CPU는 컴퓨터의 두뇌로, 명령어를 읽어들이고 해석한뒤 명령어에 따른 실행 결과를 반환한다.

  • CPU의 내부구성요소 3가지

    ALU
    이름 그대로 산술논리와 관련된 연산을 실행한다. 쉽게 말해 계산기라고 할 수 있다.
    레지스터
    레지스터는 CPU의 임시저장장치이다. 레지스터는 CPU 내에 여러 개 있다.
    제어장치
    제어신호를 내보내는 장치이다. 제어신호는 각 컴퓨터 부품에 보내는 전기신호인데, 제어신호를 통해 명령어를 실행한다.

메모리

메모리는 주기억장치라고도하며, 현재 실행되는 프로그램의 데이터와 명령어를 저장한다.

어떠한 프로그램이 실행되기 위해서는 메모리에 데이터와 명령어가 저장되어있어야한다.

  • 주소
    CPU는 메모리 내에 있는 데이터에 접근할 때, 해당 데이터의 주소를 통해 접근한다.

보조기억장치

메모리는 가격이 비싸고, 전원이 꺼지면 저장된 내용을 모두 잃는다는 단점이 있다. 보조기억장치는 메모리보다 크기가 크고, 전원이 꺼져도 저장된 내용을 잃지 않는다.
보조기억장치의 예로는 하드디스크, SSD, USB, DVD 등이 있다.

메모리는 현재 실행되고 있는 프로그램을 저장하고, 보조기억장치는 삭제되면 안 되는, 보관할 프로그램을 저장한다.

입출력장치

입출력장치는 컴퓨터 외부에 연결되어 컴퓨터와 정보를 주고받는 장치이다.
마이크, 모니터, 키보드 등이 입출력장치에 해당한다.

시스템버스

  • 버스
    메인 보드 내부에서 정보를 전달하는 통로

  • 시스템버스
    메인보드 내에는 여러가지의 버스 중, 컴퓨터 핵심 부품을 연결하는 가장 주된 버스

시스템 버스는 어떠한 정보가 흐르는가에 따라 주소버스, 데이터버스, 제어버스로 나뉜다.

지금까지 설명한 컴퓨터구조를 그림으로 그리면 다음과 같다.


3. 0과 1로 숫자를 표현하기

정보 단위

  • 1bit : 가장 작은 단위의 정보 단위. 0이나 1을 저장한다.
  • 1byte : 8bit
  • 1KB : 1000byte
  • 1MB : 1000KB
  • 1GB : 1000MB
  • 1TB : 1000GB

4. 0과 1로 문자를 표현하기

유니코드와 UTF-8

아스키 코드는 0~127개의 문자만 표현할 수 있고, 영어만 적을 수 있다는 단점이 있었다. 또한 한글 인코딩을 위한 EUC-KR도 모든 한글을 표현할 수 없다는 한계가 있다.

  • 유니코드
    모든 언어를 표현할 수 있는 문자집합
    유니코드 문자 집합에서는 16진수로 각 글자를 표현
  • UTF-8
    유니코드를 인코딩하는 방법은 여러가지가 있는데, 그 중 대표적인 방법

5. 컴파일러와 인터프리터

사람이 읽을 수 있는 고급언어를 기계가 이해하는 저급언어(기계어, 어셈블리어) 로 번역하는 방법은 컴파일 방법과 인터프리트 방법이 있다.

컴파일러

  • 컴파일
    소스코드를 통째로 읽고, 이를 저급언어로 번역한 목적코드를 반환하는 방법. 컴파일 도중 오류가 발견되면 소스코드가 모두 실행되지 않는다.
  • 속도
    한 번 컴파일하면 목적코드를 재사용하면 되어서 유용하고, 인터프리터에 비해 속도도 빠르다.

인터프리터

  • 인터프리트
    소스코드를 한 줄씩 읽고, 이를 저급언어인 바이트코드로 반환한다. 인터프리트 도중 오류가 발견되어도, 오류 발생 직전 코드는 실행된다.
  • 속도
    한 줄씩 읽어야하므로 컴파일러에 비해 속도가 느리다.

6. 명령어의 구조

하나의 명령어는 연산코드(동작), 오퍼랜드(동작의 대상, 피연산자)으로 나뉜다. 오퍼랜드는 아예 없을 수도 있고, 여러 개 있을 수도 있다.

주소 지정 방식

오퍼랜드에 데이터를 직접 담을 수도 있지만, 보통은 메모리나 레지스터의 주소값을 담는다.

메모리에 접근

  • 즉시 주소 지정 방식
    오퍼랜드에 데이터를 직접 담는 방법. 데이터를 오퍼랜드 크기만큼밖에 표현할 수 없다는 단점이 있다.
  • 직접 주소 지정 방식
    오퍼랜드에 메모리의 유효주소를 명시하는 방법. 유효주소를 오퍼랜드 크기만큼밖에 표현할 수 없다는 한계가 있다.
  • 간접 주소 지정 방식
    오퍼랜드에 메모리의 유효주소를 명시하되, 해당 유효주소가 메모리의 다른 위치에 있는 유효주소를 가리킨다. 즉, 메모리 접근을 2번 한다.

레지스터에 접근

  • 레지스터 주소 지정 방식
    오퍼랜드에 레지스터의 유효주소를 명시하는 방법. 레지스터는 CPU내에 있으므로 메모리에 접근할 때보다 속도가 빠르다.
  • 레지스터 간접 주소 지정 방식
    오퍼랜드에 레지스터의 유효주소를 명시하고, 해당 유효주소는 메모리의 유효주소를 가리킨다.

숙제 인증

기본 숙제

51p 3번
프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.
65p 3번
이진수 1101을 2의 보수 표현법으로 표현하면 0011이다.

추가 숙제

  • 스택
    후입선출, Last In First Out을 줄여서 LIFO라고도 한다.
    • push : 스택의 가장 꼭대기에 값을 저장한다.
    • pop : 스택의 가장 꼭대기 값을 삭제하고 반환한다.
    • peek : 스택의 가장 꼭대기 값을 삭제하지 않고 반환한다.

스택은 프로그래머스의 '같은 숫자는 싫어' 문제를 통해 구현해보았다.

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        Stack<Integer> stack = new Stack<>(); // 스택 선언
        stack.push(arr[0]); // 가장 첫 번째 값을 넣고 시작

        for(int i=1; i<arr.length; i++){
            if(stack.peek() != arr[i]){
                stack.push(arr[i]);
            }
        }

        answer = new int[stack.size()];
        int i = answer.length - 1; // 인덱스값

        while(!stack.isEmpty()){
            answer[i] = stack.pop();
            i--;
        }

        return answer;
    }
}

  • 선입선출, First In First Out을 줄여서 FIFO라고도 한다.
    큐의 Rear(뒷쪽)에서는 Enqueue(삽입), Front(앞쪽)에서는 Dequeue(삭제)가 일어난다.
    • add : 큐에 값을 추가한다. 실패하면 예외처리한다.
    • offer : 큐에 값을 추가한다. 실패하면 false를 리턴한다.
    • remove : 큐에 가장 먼저 들어간 값을 제거한다. 실패하면 예외처리한다.
    • poll : 큐에 가장 먼저 들어간 값을 제거한다. 실패하면 false를 리턴한다.
    • peek : 큐에 가장 먼저 들어간 값을 리턴한다. (삭제X) 실패하면 null을 리턴한다.

큐를 이용한 문제는 추후에 풀어볼 예정이다.
파이팅~

0개의 댓글

관련 채용 정보