[혼공학습단 9기] 혼공얄코: 5주차

오늘은·2023년 2월 12일
0

혼공학습단

목록 보기
10/14

기본미션

Ch.03 (03-3) 확인 문제 풀고 인증

선택미션

절차지향/객체지향/함수형 프로그래밍 특징 정리

Chapter 03. 개발자의 길로 들어서기: 프로그래밍 용어 알기

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

CPU

컴퓨터에 주어진 일을 처리하는 주체. 다른 요소와 정보를 주고받으며 컴퓨터에서 일어나는 모든 일을 관할한다.

코어, 스레드, 클럭

코어: CPU 내 가장 핵심이 되는 부품으로 과거에는 하나의 CPU 내 코어가 1개 뿐으로 속도를 높혀가는 식의 발전을 이뤘으나 발열등의 문제로 여러개의 코어를 탑재하는 멀티코어로 발전.
스레드: 코어 1개에 스레드를 늘리면 여러개의 코어가 탑재된 것처럼 하는 기술
클럭: 코어의 속도를 의미하며 기가헤르츠 (GHz) 단위를 사용한다.

메모리

데이터를 처리하기 위한 임시 또는 영구적인 공간으로 기억 장치라고도 부른다.
(주 기억 장치, 보조 기억 장치가 있음)

  • 보조 기억 장치 용량이 크면 파일 및 프로그램 저장량이 커지게 된다.
  • 자주 사용하는 데이터를 미리 꺼내두는 공간을 메모리 라고 부른다.

휘발성 메모리 & 비휘발성 메모리

전기가 통해야만 값이 저장되는 것을 휘발성 메모리,
전기가 통하지 않아도 값이 계속 유지되는 것을 비휘발성 메모리 라고 부른다.
비휘발성 메모리는 실행 속도와 용량이 상대적으로 휘발성 메모리에 비해 떨어진다.

입출력 장치

I/O (Input/Output) 라고도 부르며 사람 혹은 다른 컴퓨터와 소통하는 장치를 의미

프로세스, 스레드

프로세스: 프로그램이 메인 메모리로 이동해 실행되는 상태. 실행 명령이 발생하면 CPU는 보조 기억 장치에서 메인 메모리로 데이터를 이동하여 작업을 시작한다.

여러 프로세스를 동시에 처리하는 방법
1. 병렬 처리: 여러 작업을 동시에 실행하여 2개 이상의 코어가 각기 다른 명령을 실행하여 프로세스가 같은 순간에 실행된다.
2. 병행 처리: 하나의 코어가 여러 프로세스를 순회하며 조금씩 처리. 조금씩 나눠 실행하며 동시에 여러 작업을 처리하는 것처럼 보이게 함.

컨텍스트 스위칭: 진행 순서를 바꾸는 것.
멀티 프로세싱: 여러개의 프로세스를 함께 진행하여 프로세스를 병렬로 분담하여 각 작업을 처리하는 것.
스레드: 한 프로세스 내 진행 가능한 일의 단위.
여러 스레드를 함께 실행할 수 있는 것을 멀티 스레딩 이라 부른다.

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

비트와 바이트

비트: 2진숫자의 약자 (Binary digit) 0 또는 1의 값을 갖는다.
기계가 전기신호로 작동하기 때문에 on/off 상태를 의미하기 위해 사용한다.
실행 파일의 32비트 / 64비트는 비트의 개수를 의미한다.

프로그래밍에서 true/false를 의미하는 값을 불리언 자료형이라 한다.
1비트로는 2개의 값, 2비트는 4의 값, 3비트는 8개의 값을 사용하여 2의 지수만큼 늘어난다.
바이트: 비트 8개를 1 바이트라고 할 수 있다.

자료형

프로그래밍 언어에서 데이터 형식(자료형)을 명시하게 된다. (파이썬, 자바스크립트 제외)
자료형마다 차지하는 비트 개수가 다르기 때문.

데이터마다 8비트가 아닌 7비트를 사용하고 -1 처리하는 이유?
정수 자료형은 음수와 양수 모두 처리해야하며 0도 양수에 포함되기 때문.

적절한 자료형 사용으로 공간 부족 및 낭비를 방지해야한다.

문자 인코딩, 유니코드

문자열 셋: 사용자가 입력한 문자나 기호를 컴퓨터가 사용할 수 있는 수로 변환
문자 인코딩: 문자열 셋을 통해 해당하는 숫자로 변환하는 것

아스키 코드: 0~127까지의 7비트 공간에 값을 저장하는 것. ➡ 알파벳은 충분히 사용할 수 있었으나 비영어권 국가에서는 표현할 수 없었다.

각국의 언어를 표시하기 위한 방식을 개발하였으나 다른 문자 인코딩을 사용시 글자가 깨지는 현상이 발생 ➡ 유니코드를 통해 전세계 언어를 모두 사용할 수 있는 것.

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

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

컴파일: 실행 전 기계나 다른 코드로 번역하는 과정
컴파일러: 소스코드를 다른언어로 번역해주는 프로그램
인터프리터 언어: 컴파일 과정이 없이 한줄씩 바로 번역하는 언어

컴파일 언어와 인터프리터 언어 비교

언어장점단점
컴파일 언어컴파일과정에서 오류 발생 여부를 확인 가능, 컴파일 이후에는 빠르게 실행 가능컴파일 과정에 추가 시간 발생, 수정사항 발생시마다 다시 컴파일
인터프리터 언어바로 번역하여 빠르게 처리 가능실제 가동 시간은 느림, 오류를 잘 발견하지 못함 ➡ IDE로 보완

특징
컴파일 언어: 변수마다 자료형을 고정. (정적 타입) 타입에 맞지 않다면 에러 발생.
인터프리터 언어: 런타임시 자료형이 부여되어 변경 가능 (동적 타입)

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

절차지향 프로그래밍: 소스코드를 순차적으로 실행하여 순서를 중요시 여기며 프로그램이 유기적으로 연결되어있다.

속도가 빠르지만 문제 발생시 시스템 전체가 돌아가지 않으며 순서가 지정되어 코드 순서가 바뀌면 결과가 달라지기도 한다.

객체지향 프로그래밍: 객체 단위로 묶어 객체를 모아 프로그램을 만드는 프로그램. 객체간의 상호작용으로 작동한다.

객체 단위로 작동되어 객체에 오류가 발생하여도 객체만 해결하면 되기 때문에 유지보수, 생산성에 유리하다.

난이도가 상대적으로 높으며 설계에 많은 식나이 걸리며 처리 속도가 절차지향보다 느리다는 단점이 있다.

클래스 객체 내 정보와 기능을 정의하는 명세서
상속 속성을 물려받고 기능을 추가하여 중복을 줄이는 과정

함수형 프로그래밍

변수 사용을 최소화 하여 오류를 줄이는 프로그래밍. 프로그래밍 언어에서 제공하는 기능을 통해 오류 소지없이 기능을 수행하도록 한다.

함수형 프로그래밍은 외부의 값을 두지 않고 연쇄적으로 기능을 통해 결과를 연산할 수 있어 멀티 스레딩이 많아지는 환경에서는 유용히 사용할 수 있다.

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

매니지드 언어: 메모리를 프로그래밍 언어가 직접 관리
언매니지드 언어: 메모리를 개발자가 직접 관리

메모리 관리로 사용하는 데이터만 메인 메모리에 올려두어 저장공간을 관리하는 것.

profile
게으르지만 기록은 하고싶어!

0개의 댓글