[혼공얄코] 5주차 미션

sujinzzang수진짱·2024년 8월 9일
0

혼공얄코

목록 보기
5/6

03-1 컴퓨터는 어떻게 일하나요?

CPU

  • 중앙처리장치 (Central Process Unit)
  • 컴퓨터에서 이뤄지는 모든 일을 관할. 컴퓨터의 뇌.

코어, 스레드, 클럭

  • 코어
    • CPU 중에서 가장 핵심이 되는 부품
    • 예전에는 하나의 코어를 가지고 코어의 속도를 높여가는 방식으로 발전했으나 발열 등 물리적 문제가 발생. 여러개의 코어를 탑재하는 방식을 택함
  • 스레드 (로봇의 분신술)
    • 2코어 4스레드 사양: 4코어와 같이 동작
  • 클럭
    • 코어의 속도
    • 단위: 기가헤르츠(GHz)

메모리

  • 기억 장치
  • 주 기억 장치 (메인 메모리)
    • 램(RAM)
  • 보조 기억 장치
    • 하드디스크(C 드라이브 같은거), 플래시 메모리, USB 메모리, CD롬, 플로피 디스크
  • 기억 장치 속도: 캐시, 메인 메모리, 보조 기억 장치 순
  • 휘발성 메모리와 비휘발성 메모리 (전기가 끊겼을 때 날아가면 휘발성)
    • 휘발성 메모리
      • 메인 메모리
    • 비휘발성 메모리
      • 실행 속도와 용량이 낮아 메인 메모리로 사용되지 않는다.

입출력 장치 (I/O, Input/Output)

  • 컴퓨터와 외부를 연결해주는 소통의 통로
  • 입력장치: 키보드, 마우스, 터치패드, 펜 태블릿, 웹캠, 스캐너, 마이크...
  • 출력장치: 모니터, 사운드 카드, 스피커, 프린터...
  • 입출력 둘 다 하는 장치: 터치스크린, 스캐너 기능을 갖춘 프린터...
  • 다른 기기와 정보를 주고받는 장치: 네트워크 카드, 모뎀...

프로세스, 스레드

  • 프로세스: 프로그램이 메인 메모리로 올라와 실행되고 있는 상태
    • 크롬 브라우저는 여러 탭을 열었을 때 각 탭에 프로세스가 하나씩 부여된다.
  • 여러 프로세스를 함께 처리하는 방법
    • 병렬 처리 방법: 여러 작업을 동시에 실행
      • 각 프로세스가 같은 순간에 실행되도록 하는 방법
    • 병행 처리 방법: 하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리
      • 작업을 조금씩 나누어 실행하면서 컴퓨터가 마치 여러 작업을 동시에 실행하는 것처럼 보이게 하는 처리방법
    • 컨텍스트 스위칭: 진행 순서를 바꾸는 것
    • 멀티 프로세싱: 여러개의 프로세스를 함께 진행하는 것 (병렬로 병행해서~)
  • 스레드
    • 한 프로세스 안에 하나 이상 진행될 수 있는 일의 단위
    • 한 개의 버거를 요리하는 작업이 하나의 프로세스라면 빵을 데우는 작업, 패티를 굽는 작업, 야채를 써는 작업은 스레드
    • 멀티 스레딩: 여러 스레드가 함께 실행되는 것
  • 프로세스와 스레드의 차이
    • '메인 메모리를 어떻게 함께 사용하는가'
    • 멀티 프로세싱: 각각의 프로세스는 자기 영역을 명시. 동시에 진행되는 프로세스가 많아지면 메인 메모리는 그 배수만큼 필요
    • 멀티 스레드: 서로의 공간을 구분하지 않는다. 스레드가 많아져도 메모리를 추가로 차지하지 않는다. 컨텍스트 스위칭에 드는 부담도 덜하다.
      • 같은 메모리 공간을 여러 스레드가 사용하기 때문에 그 과정에서 발생할 수 있는 오류에 대비해서 프로그래밍 해야 함!

03-2 바이트는 뭐고 자료형은 왜 쓰나요?

비트와 바이트

  • 비트(bit)
    • 2진 숫자(binary digit)의 약자. 0 또는 1
    • 컴퓨터가 다루는 데이터의 최소 단위
    • 바이너리 파일: 이진(바이너리) 숫자 형식으로 작성된 파일
      • png, jpg, mp3, 동영상 파일, 각종 프로그램 실행 파일 등
    • 16비트, 32비트: 몇 자리의 이진수로 표현할 것인가
    • 불리언, 불(boolean, bool): true, false 중 하나의 값만 가지는 자료형
    • 컴퓨터에서 데이터를 주고받을 때 데이터의 종류마다 몇 비트를 사용해서 표현할지 약속한다.
  • 바이트
    • 비트가 8개 모인 것. 1byte = 8bit(2의 8제곱, 0~255)

자료형

  • 자료형을 명시하는 이유: 어디서부터 몇 비트를 읽어야하는지 알려줘야하기 때문
  • 자료형마다 비트가 할당되어 있다
    • 정수 자료형 중 byte: 8비트, short: 16비트, int: 32비트 등

문자 인코딩, 유니코드

  • 컴퓨터는 0과 1 이진 숫자로 이루어져 있다.
  • A, B, C와 같은 문자를 표현하기 위해서는 숫자로 표기하는 약속이 필요
  • 문자열 셋: 사용자가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 숫자로 만든 것
  • 문자 인코딩: 문자열 셋을 통해 사람이 입력하는 문자를 그에 해당하는 숫자로 변환하는 것
  • 아스키 코드 (ASCII code): 0~127까지의 7비트 공간 안에 대문자와 소문자 알파벳, 스페이스와 탭, 각종 부호 값을 지정한 것.
  • 한국어를 표시하기 위한 문자열 셋 및 인코딩 방식: EUC-KR, UTF-8
    • 서로 다른 문자 인코딩을 사용하는 경우 글자가 깨져버린다~
  • 유니코드(Unicode)
    • 전 세계의 모든 문자를 포함할 수 있는 거대한 문자열 셋

03-3 프로그래밍 언어 분류

컴파일 언어, 인터프리터 언어

  • 컴파일 언어: 배포되기 전 다른 형태로 변환되는 언어
    • 실행, 배포할 때마다 컴파일 과정을 거친다
    • 프로그램에 따라 컴파일에 많은 시간 소모
    • 실행 중인 프로그램에 업데이트할 내용이 생기면 코드를 수정한 다음 전체를 다시 빌드
    • 컴파일 과정에서 오류를 미리 발견해 배포 후의 문제를 어느 정도 방지
    • 빌드 과정이 번거롭지만 한 번 배포된 후에는 빠르게 실행됨
    • 자료형 고정 (정적 타입)
  • 인터프리터 언어: 작성된 그대로 실행되는 언어
    • 프로그래밍과 배포, 오류 수정이 수월
    • 프로그램 실행 속도는 컴파일 언어에 비해 느림
    • 프로그래밍 과정에서 오류가 잘 발견되지 않음
    • 런타임 시 자료형 부여. 변수의 자료형이 바뀔 수 있음 (동적 타입)
  • 컴파일: 코드를 실행하기 전에 기계어나 다른 코드로 먼저 번역하는 것
  • 컴파일러: 소스 코드를 다른 언어나 형태로 번역해주는 프로그램
  • 런타임
    • 런타임: 프로그램이 배포된 다음 실행되는 시점
    • 런타임 오류: 프로그램 실행 중에 오류가 생기는 경우

절차지향, 객체지향 프로그래밍

  • 절차지향 프로그래밍
    • 소스 코드를 위에서부터 차례대로(순차적으로) 실행. 소스 코드의 순서 중요. 프로그램 전체가 유기적으로 연결
    • 실행 속도가 빠르다
    • 단점
      • 사소한 문제 하나만 생겨도 시스템 전체가 돌아가지 않는다
      • 소스 코드의 순서가 바뀌면 결과가 달라진다
  • 객체지향 프로그래밍
    • 코드를 작성할 때 구성 요소를 객체라는 단위로 묶어서 이들의 조합으로 프로그램을 만든다
    • 프로그램을 다수의 객체로 만들고 객체끼리 상호작용하는 방법
    • 하나의 객체가 고장이 나더라도 해당 객체만 수리하거나 교체하면 간단히 해결 가능
    • 유지보수가 쉽고, 생산성이 좋음
    • 단점
      • 설계에 많은 시간이 걸림
      • 처리 속도가 느림
      • 난이도가 높음
    • 클래스
      • 객체 지향 프로그래밍에서 각 종류의 객체가 어떤 정보를 가지고 있고, 어떤 기능을 수행할지 스펙을 정의한다.
      • 클래스: 객체의 스펙을 정의하는 명세서
    • 상속
      • 기본 속성을 물려받는 것.
      • 다른 특성은 물려받은 속성 위에 각 버튼만의 기능을 추가한다
      • 중복을 줄일 수 있음

함수형 프로그래밍

  • 변수 사용을 최소화함으로써 스파게티 코드의 오류를 줄이는 프로그래밍
  • 프로그래밍 언어가 제공하는 기능들을 사용해서 어떤 '상태 값(변수)'을 두지 않고 기능을 설계
  • 멀티 스레딩이 많이 이루어지는 환경에서 함수형 프로그래밍은 특히 유용

매니지드 언어, 언매니지드 언어

  • 매니지드 언어: 메모리를 프로그래밍 언어가 직접 관리
    • C, C++, 어셈블리어 등을 제외한 대부분의 언어
  • 언매니지드 언어: 메모리를 개발자가 직접 관리
    • C언어
    • 메모리 공간을 원하는대로 조작하여 매니지드 언어로 작성한 것보다 빠르고, 효율적으로 작동하는 프로그램을 만들 수 있다.
  • 메모리 관리: 메인 메모리를 관리하는 것

확인 문제

  1. 다음 중 틀린 것은?
    3번
  2. 알맞은 단어를 찾아 쓰시오

    보기) 스레드, 상속

  • 함수형 프로그래밍을 사용하면 스레드가 많이 사용되는 환경에서 변수 문제로부터 안전한 코드를 작성할 수 있다.
  • 객체지향 프로그래밍에서는 상속을 사용해서, 기본이 되는 부모 클래스로부터 추가 속성이나 기능이 있는 자식 클래스를 파생할 수 있다.
  1. 프로그래밍 언어와 연관이 깊은 개념
    1) 자바 - JVM
    2) C언어 - 포인터
    3) 스칼라 - 함수형 프로그래밍
    4) 자바스크립트 - 인터프리터 언어
  2. 다음중 A, B, C, D에 알맞은 언어를 보기에서 찾아 쓰시오.

    보기) 자바, 자바스크립트, C언어, C++

언매니지드 언어: C언어, C++
객체지향 언어: C++, 자바, 자바스크립트
인터프리터 언어: 자바스크립트

0개의 댓글