CS TIL (20180803)

2019-02-12

.

study program : https://www.fastcampus.co.kr/dev_school_css

# 컴퓨터는 문자를 어떻게 표현하는가 & 절차지향 프로그래밍이란

  • chracter set은 문자집합이라고 하는데 예를들어 한글의 ㄱ,ㄴ,ㄷ,..등의 집합이다.

  • 문자에 관련된 용어정리

1) Coded Character set, CSS

문자와 문자에 매핑된 코드 포인트를 모아 놓은 집합

2) Code Point

문자 하나에 정수 하나를 매핑해둠

3) character encoding

문자 집합을 메모리에 저장, 통신하기 위해 부호화하는 방식

ex) 모스 부호

# 아스키코드

  • 7비트를 쓴다.

  • 0~127(128개)를 mapping해서 쓰는데 그 안에는 ‘A’ ~ ‘Z’, ‘a’ ~ ‘z’, 0 ~ 9까지의 숫자, 중괄호, 대괄호, 스페이스바, 골뱅이 등이 들어있다.

  • 한글은 포함이 안되어 있다.

# 유니코드

  • 글로벌 시대가 되면서 한글, 중국어 등을 표현하기 위한 유니코드가 등장한다.

  • 2바이트에 표현해보자 해서 만듬. 2의 16비트 즉 약 65000개를 매핑해서 그 안에 다양한 언어들을 담았다.

  • 아스키코드도 유니코드 안에 포함되어 있다.

  • BMP(basic multilingual place) : 유니코드 전체를 논리적으로 나눈 구획을 말한다. 0번(다국어 기본 평면)에서부터 16번까지 모두 17개가 있다.(전부 채워져 있지는 않고 차후 새로운 언어를 수록하기 위해 겁나 많은 공간을 만들어 놓은것이다.) 각 평면은 2의 16승 약 65000비트이다.

  • 코드 유닛은 예를들어 ‘가’를 의미하는 코드포인트를 특정방식(UTF-8이나 CD949등으로)으로 인코딩했을때 얻어지는 비트의 나열을 말한다.

  • Character Encoding Scheme(CES)(코드포인트를 메모리에 저장하는 방식)은 문자인코딩 방식을 말한다.

# 유니코드의 부호화(인코딩: 메모리에 저장하는 방법을 구현) 방식

  • 아스키 코드는 참고로 해당코드(숫자를) 이진수로 풀어서 7바이트에 그냥 넣어주면 된다.

1) UTF-8

  • 8bit 기반

  • 가변 길이 유니코드 인코딩 시스템

  • 왜쓰냐 : 유니코드를 1바이트부터 4바이트까지 가변길이로 저장을한다. 즉 아스키코드에 들어가 있는 로마문자 같은거는 1바이트로 충분히 표현가능하기 때문이다. 반면에 한글은 3바이트로 표현한다. 결론적으로 효율성을 감안을 한 방식이다.

ex) 코드 포인트를 2진수로 싹다 표현한다음에 ex) ‘가’의 인코딩과정 : ‘가’는 유니코드에서 코드포인트가 AC00이다. 이놈을 2진수로 표현하면 1010 1100 0000 0000가 되고 UTF-8 알고리즘 1110XXXX 10XXXXXX 10XXXXXX의 X 부분에 삽입한다.

2) UTF-16

  • BMP : 다국어 기본 평면 : 16 bit

  • SMP 이상 : 다국어 보충 평면~ : 32 bit

3) UTF-32

  • 32 bit에 넣는것

4) CP949

  • 자기만의 코드 포인트를 갖고 있다.

  • 윈도우 운영체제에서 쓰는 인코딩 방식이다

  • code page 949

  • 통합형 한글 코드( Unified Hangul Code)

  • 현대의 모든 한글 수용

# UTF-8 구조에서 유니코드 ‘가’의 인코딩 과정

1) 한글은 3 바이트로 인코딩

2) 0800 - FFFF ==> 1110XXXX 10XXXXXX 10XXXXXX

3) ‘가’의 유니코드 ==> U+AC00 ==> 1010 1100 0000 0000 ==> 1010 110000 000000 11101010 10110000 10000000

4) 0xEAB080 엇 컴퓨터는 리틀엔디언으로 저장하기 때문에 8080EA로 바꾸어서 저장되는 거 아닌가? UTF-8을 설계한 사람들이 리틀엔디언 과정 거치지 않고 그대로 저장하는걸로 약속함.참고로 빅엔디언으로 저장하는 것은 플스랑 엑스박스

# 반성적 프로그래밍

반성적 프로그래밍은 순차적 -> 절차지향 -> 객체지향 프로그래밍을 통해 각각의 과정에서 반성적으로 되돌아보고 보완사항을 도출하여 차후 단계에서 보완해나가는 과정

# 절차지향

  • 절차지향에서 객체지향으로 가는 과정은 프로그래밍 패러다임: 프로그래밍을 어떻게 만들고 설계하는지에 대한 시각

  • 절차지향은 “ ‘순서’지향 “이 아니라 “ ‘함수’지향 “이라고 보는게 용어풀이상 가깝다. 왜냐하면 procedure = routine = function = 함수 다 같은 말이기 때문이다. 즉 함수를 이용한 프로그램을 절차지향 프로그램이라고 한다.

  • 절차지향을 쓰는 목적은 이 프로그램은 무엇을 하는가를 쉽게 파악하기 위해서다. 즉 코드를 이해하기 쉽고 이를 통해 무슨일을 하는 프로그램인지 파악하기 쉽다. 그래서 유지보수 하는데에도 용이하다.

  • 순차적프로그램 : CPU 입장에서는 그냥 순차적으로 돌리기 때문에 따로 스텍을 쌓지 않고 CPU 입장에서는 가장 좋은 방법이다. 프로그래밍 입장에서는 다른반을 또 평균을 구할때는 그 코드 그대로 또 작성해야한다는 단점이 있다.

  • 절차지향 프로그램 : 함수단위로 코드를 작성하면 그 평균을 구하는 코드를 다시 작성할 필요없이 호출만하면 된다.

  • 절차지향 프로그램의 핵심 개념 => 추상화

  • 내부 구현(functions_file.py)함수만 따로 구현해 놓은것)과 시그니처(main.py)(인터페이스)가 나누어져 있어서 실제 사용하는 사람들은 인터페이스만 알고 있으면 프로그램을 사용할 수 있다. 다시말해 함수를 추상화하였다.