Skip to content

jjongbumeee/TIL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

44 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Today I Learned (TIL)

Since 2020.06.01 by DanielJung

์›์น™ 1 : ์ฃผ 2ํšŒ ์ด์ƒ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ด€๋ จ๋œ ํ•™์Šต์„ ์ง„ํ–‰ ํ›„ ์ž‘์„ฑ

2020.06.01 (Day 1)

  • ์ปดํŒŒ์ผ๋Ÿฌ
    LR ๊ตฌ๋ฌธ ๋ถ„์„
    LL ๊ตฌ๋ฌธ ๋ถ„์„์€ left-recursion ๋ฌธ์ œ์™€ backtracking์œผ๋กœ ์ธํ•œ ์†๋„ ๋ฌธ์ œ๋กœ ์ธํ•ด ์‹ค์ œ ์ปดํŒŒ์ผ๋Ÿฌ ์‚ฌ์šฉํ•˜๊ธฐ์—” ๋ถ€์ ์ ˆ
    ๋”ฐ๋ผ์„œ ์œ„ 2๋ฌธ์ œ๊ฐ€ ์—†๋Š” LR ํŒŒ์‹ฑ์„ ์ฃผ๋กœ ์‚ฌ์šฉ
    LR์˜ L์€ Left-to-Right๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ R์€ Rightmost derivation์„ ์ด์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
    LR ๊ตฌ๋ฌธ๋ถ„์„๋ฐฉ๋ฒ•์œผ๋กœ๋Š” SLR, CLR, LALR๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

SLR ๊ตฌ๋ฌธ๋ถ„์„ SLR ๊ตฌ๋ฌธ๋ถ„์„์€ LR(0) ํ•ญ๋ชฉ๊ณผ FOLLOW๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ์‹ฑํ‘œ ์ž‘์„ฑ ํŒŒ์‹ฑํ‘œ ์ž‘์„ฑ๋ฒ• ๋™์˜์ƒ

  1. Augmented grammar ์ƒ์„ฑ(S' -> S)
  2. LR(0) ํ•ญ๋ชฉ ๋‚˜์—ด GOTO(I0, symbol)์˜ ๊ฒฝ์šฐ I0์ง‘ํ•ฉ์—์„œ symbol์„ ์ฒ˜๋ฆฌํ•œ ๊ฒฝ์šฐ์˜ ๋‚˜์˜ค๋Š” ์ง‘ํ•ฉ์œผ๋กœ I0์—์„œ E ์ดํ›„์— dot symbol์„ ์œ„์น˜ํ•œ ํ›„ CLOSURE๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์ƒˆ๋กœ ๋‚˜์˜ค๋Š” ์ง‘ํ•ฉ์— ๋Œ€ํ•ด์„œ๋Š” In์œผ๋กœ ์ด๋ฆ„์„ ๋ถ™์—ฌ์ฃผ๊ณ , ์ƒˆ๋กœ์šด ์ง‘ํ•ฉ์ด ๋‚˜์˜ค์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  3. ๋ชจ๋“  non-Terminal symbol์— ๋Œ€ํ•ด FOLLOW๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋‚˜์—ดํ•œ๋‹ค.
  4. SLR ํŒŒ์‹ฑํ‘œ์˜ GOTOํ‘œ ๋ถ€๋ถ„์€ symbol์ด VN์ธ ๊ฒฝ์šฐ ๋ช‡๋ฒˆ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋™ํ•˜๋Š”์ง€ ํ‘œ์‹œํ•ด์ค€๋‹ค.
  5. ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ ํ–‰๋™์˜ ๊ฒฝ์šฐ
    reduce๊ฐ€ ๊ฐ€๋Šฅํ•œ(dot symbol์ด ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ) reduce์„ ํ•˜๋ฉฐ E -> T์ธ ๊ฒฝ์šฐ FOLLOW(E)์˜ ํ•ญ๋ชฉ๋“ค์— reduce์ž‘์„ฑํ•˜๋ฉฐ ๋ช‡๋ฒˆ ์ง‘ํ•ฉ์„ ํ†ตํ•ด reduce ๋˜๋Š”์ง€ ํ‘œ๊ธฐํ•œ๋‹ค.
    reduce๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ shiftํ•˜๋ฉฐ GOTO(์ƒํƒœ, VT)์˜ ์ง‘ํ•ฉ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ™์ด ๊ธฐ์žฌํ•œ๋‹ค.
    1๋ฒˆ ์ƒํƒœ์˜ $๋Š” ํ•ญ์ƒ acc์ด๋‹ค.
    FOLLOW๋Š” ํ•ด๋‹น symbol ๋‹ค์Œ์— ๋‚˜์˜ค๋Š” ๋ชจ๋“  Terminal Symbol์˜ set์ด๋‹ค.

๋‚ด์ผ๋ถ€ํ„ฐ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค!

  • MarkDown Language
    header(์ œ๋ชฉ) h1 ~ h6 '#'์œผ๋กœ ํ‘œ์‹œ (์˜ˆ์‹œ: "###" h3)
    bold ๋Š” string ์œผ๋กœ ํ‘œ์‹œ
    br๋Œ€์‹  space 2์นธ์œผ๋กœ ํ™œ์šฉ๊ฐ€๋Šฅ
    "[๋งํฌ ํ‘œ์‹œ๋  ์ œ๋ชฉ] (๋งํฌ)" ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ```๋กœ ์ฝ”๋“œ ์ข…๋ฅ˜ ๋ช…์‹œ ํ›„ ๊ฐ์‹ธ์ฃผ๊ธฐ
    ์ธ์šฉ๋ฌธ์˜ ๊ฒฝ์šฐ > ์ด์šฉ

2020.06.02 (Day 2)

  • Dijkstra Algorithm
    ์˜ค๋žœ๋งŒ์— ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ž‘๋…„์—๋Š” ํ•œ์ฐธ ์ข…๋งŒ๋ถ์„ ๋ณด๋ฉฐ ์—ฐ์Šตํ–ˆ์—ˆ๋Š”๋ฐ, ์•„๋ฌด๋Ÿฐ ๊ณต๋ถ€์—†์ด ๋ฌธ์ œ๋ฅผ ๋งž๋”ฑ๋“œ๋ฆฌ๊ฒŒ ๋˜๋‹ˆ ๋จธ๋ฆฟ์†์ด ํ•˜์–˜์กŒ๋‹ค.
    ๋ฆฌํŠธ๋จธ์Šค ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ psuedo code๋ฅผ ๋ณด๊ธฐ๋„ ํ•˜์˜€์œผ๋‚˜ ๊ธฐ์กด์˜ ์ด์šฉํ–ˆ๋˜ ์ฝ”๋“œ์™€ ๋‹ฌ๋ผ ์ž‘์„ฑํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋‹ค.
    ๋ฌผ๋ก  ๋ฌธ์ œ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด์„œ ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ๊ฐ€ ๋‚˜์˜จ๊น€์— ํ•œ๋ฒˆ ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.
vector์™€ priority_queue๋ฅผ ์ด์šฉํ•ด์•ผ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค.

#include<iostream>
#include<vector>
#include<queue>
#define INF 1e9
using namespace std;
 
int main()
{
    int V,E;
    scanf("%d %d", &V ,&E); //๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜์™€ ์—ฃ์ง€์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค. 
    int start;
    scanf("%d",&start);        //์‹œ์ž‘์ ์„ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค. 
    vector<pair<int,int> > arr[V+1];
    
    for(int i=0;i<E;i++){
        int from,to,val;
        scanf("%d %d %d", &from , &to,&val); //๊ทธ๋ž˜ํ”„ ์ƒ์˜ ์—ฃ์ง€๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค. 
        arr[from].push_back({to,val});
    }
    int dist[V+1];    //์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. 
    fill(dist,dist+V+1,INF);    //๋จผ์ € ๋ฌดํ•œ๋Œ€๋กœ ์ „๋ถ€ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผœ๋‘ก๋‹ˆ๋‹ค. 
    priority_queue<pair<int,int> > qu;     
    
    qu.push({0,start});    //์šฐ์„ ์ˆœ์œ„ ํ์— ์‹œ์ž‘์ ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. 
    dist[start]=0;    //์‹œ์ž‘์ ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. 
    
    while(!qu.empty()){
        int cost=-qu.top().first;    // cost๋Š” ๋‹ค์Œ ๋ฐฉ๋ฌธํ•  ์ ์˜ dist๊ฐ’์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. 
        int here=qu.top().second;     // here์„ ๋ฐฉ๋ฌธํ•  ์ ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค 
        
        qu.pop();
            
        for(int i=0; i<arr[here].size(); i++){
            int next=arr[here][i].first;
            int nextcost=arr[here][i].second;
            
            if(dist[next] > dist[here] + nextcost){    
                //ํ˜„์žฌ next์— ์ €์žฅ๋œ dist์˜๊ฐ’๋ณด๋‹ค ํ˜„์žฌ์˜ ์ ์„ ๊ฑฐ์ณ์„œ ๊ฐˆ ๊ฒฝ์šฐ๊ฐ€ 
                // ๊ฑฐ๋ฆฌ๊ฐ€ ๋”์งง์œผ๋ฉด ๊ฐฑ์‹ ํ•ด ์ฃผ๊ณ  ํ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. 
                dist[next]=dist[here]+nextcost;
                qu.push({-dist[next],next});
            }
        }
        
    }
    for(int i=1;i<=V;i++){
        printf("%d\n", dist[i]);
    }
}

  • ์ปดํŒŒ์ผ๋Ÿฌ
    C๋กœ ์ž‘์„ฑ๋œ first, follow ์ฝ”๋“œ๋Š” ์ฐพ์•˜์œผ๋‚˜,
    ์ด๋ฅผ C++๋กœ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ณ  ํŒŒ์ผ ์ž…์ถœ๋ ฅ๋„ ๋„ฃ์–ด์•ผํ•˜์ง€๋งŒ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค....
    ๋‚ด์ผ์€ ์ œ๋Œ€๋กœ ์ง‘์ค‘ํ•ด์„œ ์ปดํŒŒ์ผ๋Ÿฌ์—๋งŒ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด์•ผ๊ฒ ๋‹ค.

2020.06.03 (Day 3)

์˜ค๋Š˜์€ ํ•˜๋ฃจ์ข…์ผ ์ปดํŒŒ์ผ๋Ÿฌ์— ์ง‘์ค‘ํ–ˆ๋‹ค.

  • ์ปดํŒŒ์ผ๋Ÿฌ
    ํŒŒ์ผ์ž…์ถœ๋ ฅ์„ ํ†ตํ•ด ๋ฌธ๋ฒ•์„ ์ž…๋ ฅ๋ฐ›๊ณ , ์ฃผ์–ด์ง„ ๋ฌธ๋ฒ•์˜ VN์˜ First์™€ Follow๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ์ž‘์—…์„ ํ•˜์˜€๋‹ค. ๋ฌผ๋ก  First์™€ Follow๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„์€ ํž˜๋“ค์–ด github์˜ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜์˜€๋‹ค.
    ํŒŒ์ผ์ž…์ถœ๋ ฅ์€ ifstream์„ ํ†ตํ•ด ์ž‘์—…ํ•˜์˜€์œผ๋ฉฐ, getline ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.
ifstream syntax;
syntax.open("syntax.txt");
if(syntax.is_open()) {
    while(!syntax.eof()) {
        syntax.getline(char[]name, maxlength); //์ฃผ์˜ํ•  ์ ์€ name์€ charํ˜•๋งŒ ๊ฐ€๋Šฅ
    }
}

๋˜ํ•œ ๊ธฐ์กด ์ฝ”๋“œ์— ์ฒ˜๋ฆฌ๋˜์–ด์žˆ์ง€ ์•Š์€ 2๊ฐ€์ง€์˜ ๋ฌธ๋ฒ•์„ or๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฌธ๋ฒ•์„ ์ฒ˜๋ฆฌํ•˜์˜€๋‹ค.

from (ex. A ==> B || C)
to (A ==> B) & (A == > C)

์œ„ ๋ฌธ์žฅ์€ 2๊ฐœ์˜ ๋ฌธ์žฅ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ production rule์— ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
SLR parser๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ž์œผ๋กœ CLOSURE์™€ GOTO ํ•จ์ˆ˜ ๊ตฌํ˜„์ด ํ•„์š”ํ•˜๋‹ค.
์˜ค๋Š˜์€ ์ฆ๊ฐ€๋ฌธ๋ฒ• (augmented grammar)๋Š” ์™„์„ฑํ•˜์˜€๋‹ค.
ํ˜„์žฌ ํŒŒ์„œ๋Š” ์ธ๋ฑ์Šค ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ ๋ฌธ๋ฒ•์€ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ๋‹ค. ํŠนํžˆ๋‚˜ ํ„ฐ๋ฏธ๋„ ์‹ฌ๋ณผ์ด ๋‘ ๋ฌธ์ž ์ด์ƒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ํฌ๋‹ค.
์•ž์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผํ•  ๋ฌธ์ œ์ด๋‹ค.


2020.06.05 (Day 4)

  • OS / Main memory
    Memory allocation method์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ๊ทธ ์ค‘ ์•„๋ž˜ 3๊ฐ€์ง€์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์•˜๋‹ค.
  1. Contiguous Allocation
  2. Segmentation
  3. Paging

์ฃผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ๊ด€๋ จํ•ด์„œ๋Š” 2๊ฐ€์ง€ ํ•ญ๋ชฉ์„ ํ‰๊ฐ€ํ•œ๋‹ค.
Utilization(ํ™œ์šฉ๋„) & Performance(Address Translation ์†Œ์š” ์‹œ๊ฐ„)

Contiguous๋Š” ๊ฐ€์žฅ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•œ allocation policy์ด๋‹ค.
์—ฐ์†์ ์œผ๋กœ ๋ฌด์กฐ๊ฑด ํ• ๋‹นํ•ด์•ผํ•˜๋ฏ€๋กœ Internal & External fragmentation์ด ๋งค์šฐ ํฌ๋‹ค.
๋˜ํ•œ swap์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์œ ์ผํ•˜๊ฒŒ ๋›ฐ์–ด๋‚œ Performance๋„ ์ €ํ•˜๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์˜จ ๊ฒƒ์ด Segmentation์ด๋‹ค. ์ด๋Š” Logical Address Space๋ฅผ ๋ถ„ํ• ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ฒƒ์ธ๋ฐ, ์ด๋Ÿฌํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด์šฉํ•˜์ง€ ์•Š์•„ ์‚ฌ์–‘๋ฌ๋‹ค. ๋˜ํ•œ Address Translation์— ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐœ์„ ๋œ ๊ฒƒ์ด ํ˜„์žฌ์—๋„ ์“ฐ์ด๋Š” Paging ๊ธฐ๋ฒ•์ด๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๊ธฐ๋ฒ•์—๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.
Page Table์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด Memory์— 2๋ฒˆ Accessํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
์ด๋Š” TLB Cache๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•œ๋‹ค. TLB hit ratio๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋ณด์žฅ๋˜๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ 
Utilitzation์€ page table์„ hieraricial page table์„ ๊ตฌ์„ฑํ•˜์—ฌ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

  • OS / Virtual memory

Virtual Memory๋Š” ๊ธฐ์กด์— ํ”„๋กœ์„ธ์Šค์—์„œ ์š”๊ตฌํ•˜๋Š” 100%์˜ page์— frame์„ ํ• ๋‹นํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ๋ถ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ํ• ๋‹น์„ ํ•˜์—ฌ utilitzation์„ ๊ทน๋Œ€ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” LAS์™€ PAS ์‚ฌ์ด์— Virtual Address Space๋ฅผ ์ด์šฉํ•œ๋‹ค.

๋กœ๋“œ๋œ ์ด์™ธ์˜ ์˜์—ญ์€ storage device์ธ backing store์— ์ €์žฅํ•œ๋‹ค.
๋กœ๋“œ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ page๋ฅผ ์š”์ฒญํ•˜๋ฉด page fault๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ swap์˜์—ญ ๋˜ํ•œ program image์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค. ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ํ˜„์žฌ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” page๋ฅผ ๊ณจ๋ผ(๊ณ ๋ฅด๊ณ  ๊ต์ฒดํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰) page replacement๋ฅผ ์‹ค์‹œํ•œ๋‹ค.

page replacement policy๋Š” demand paging(ํŽ˜์ด์ง€๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฆ‰๊ฐ ๋กœ๋“œํ•˜๋Š”) ์‚ฌ์šฉ ์‹œ Belady's Anomaly๋ฅผ ๋ณผ ๊ฒฝ์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
(ํฌํ‚ค๊ฐ€ ์ปค์ ธ๋„ page replace๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ๋˜๋ฉด page fault ๋ฐœ์ƒ ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€)

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด LRU Approximation Algorithm์„ ์ด์šฉํ•œ๋‹ค. Enhanced Second-Chance Algorithm์ด ์ตœ์‹ ์˜ ๊ธฐ์ˆ ์ด๋‹ค.

Take ordered pair (reference, modify)

  1. (0, 0) neither recently used not modified โ€“ best page to replace
  2. (0, 1) not recently used but modified โ€“ not quite as good, must write out before replacement
  3. (1, 0) recently used but clean โ€“ probably will be used again soon
  4. (1, 1) recently used and modified โ€“ probably will be used again soon and need to write out before replacement

์œ„ ์ž‘์—…์„ ํ†ตํ•ด circular queue๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.


2020.06.07 (Day 5)

  • Data Communication ์ •๋ฆฌ
    1. Network Models

      5 ๊ณ„์ธต ์ธํ„ฐ๋„ท ๋ชจ๋ธ์—์„  Transport : TCP / Network : IP๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์ „๋ถ€ Interntet์ด๋‹ค.

      ๊ฐ ๊ณ„์ธต๋ณ„ ์—ญํ• ์„ ์‚ดํŽด๋ณด์ž

      • ๋ฌผ๋ฆฌ ๊ณ„์ธต(Physical layer) : ๊ฐœ๋ณ„ ๋น„ํŠธ๋ฅผ ์ธ์ ‘ ๋…ธ๋“œ์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• , ์„ ๋กœ์˜ ๋ฌผ๋ฆฌ์  ํŠน์„ฑ๊ณผ ์ „์†ก๋ฐฉ์‹์„ ๋‹ค๋ฃธ
      • ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต(Data Link layer) : ์•ˆ์ •์ ์ธ Next-hop deilivery ์—ญํ• ์„ ํ•จ. ๋ฐ์ดํ„ฐ๋ฅผ Frame ๋‹จ์œ„๋กœ ์ „์†กํ•˜๋Š” Framing, Physical Addressing(MAC ์ฃผ์†Œ) ๋“ฑ๋“ฑ. ํ˜„์žฌ๋Š” ์ฃผ๋กœ Ethernet์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ
      • ๋„คํŠธ์›Œํฌ ๊ณ„์ธต(Network layer) : Source-to-Destination ์ „์†ก์„ ์ฑ…์ž„. ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ๊ฐ„ ์ „์†ก๋„ ์ฑ…์ž„(Routing). ํ˜„์žฌ๋Š” ์ฃผ๋กœ IP ํ”„๋กœํ† ์ฝœ ์ด์šฉ.
      • ์ „์†ก ๊ณ„์ธต(Transport layer) : Process-to-Process delivery๋ฅผ ์ฑ…์ž„. ์ฃผ๋กœ port addressing ์ž‘์—…์— ์ด์šฉ
      • ์‘์šฉ ๊ณ„์ธต(Application layer) : ์–ด๋– ํ•œ ์„œ๋น„์Šค์˜ ์–ด๋–ค ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด ์ „์†กํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •. ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต.
    2. Signals & Transmission
      data๊ฐ€ ์ „์†ก๋˜๊ธฐ ์œ„ํ•ด์„  ์ „์ž๊ธฐ์  ์‹ ํ˜ธ๋กœ ๋ณ€ํ™˜์ด ๋˜์–ด์•ผํ•œ๋‹ค.
      ๋ฐ์ดํ„ฐ ํ†ต์‹ ์—์„œ๋Š” ์ฃผ๋กœ **์ฃผ๊ธฐ์  ์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ(periodic analog signal)๊ณผ ๋น„์ฃผ๊ธฐ์  ๋””์ง€ํ„ธ ์‹ ํ˜ธ(aperiodic digital signal)**์„ ์‚ฌ์šฉํ•œ๋‹ค.

      • Analog Signal
        Fourier transform : any composite signal => a combination of simple sine waves with different freq, phase, and amplitude
        ex) Square wave = ๋ฌดํ•œํžˆ ๋งŽ์€ Sine wave๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
        ๊ทธ๋Ÿฌ๋‚˜ medium์— ๋”ฐ๋ผ ์ผ๋ถ€ ์ฃผํŒŒ์ˆ˜๋งŒ ํ†ต๊ณผ์‹œํ‚ค๋ฉด ๋ณ€ํ˜•์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

        BandWidth : medium์ด ์ •์ƒ์ ์œผ๋กœ(์ถœ๋ ฅ์˜ half ์ด์ƒ ์†์‹ค ์—†์ด) ํ†ต๊ณผ์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋Š” ์ฃผํŒŒ์ˆ˜ ๋ฒ”์œ„ (highest - lowest)

        ๋”ฐ๋ผ์„œ Analog Signal์„ ํ™•์ธํ•  ๋•Œ๋Š” ์•„๋ž˜ 2๊ฐ€์ง€๋ฅผ ํ™•์ธํ•ด์•ผํ•จ

        1. Medium Bandwidth๊ฐ€ ์ „์†กํ•˜๋ ค๋Š” Signal์˜ Bandwidth๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€์ง€
        2. Medium์ด ํ†ต๊ณผ์‹œํ‚ค๋Š” ์ฃผํŒŒ์ˆ˜๊ฐ€ Signal์˜ ์ฃผํŒŒ์ˆ˜ ๋ฒ”์œ„์— ๋งž๋Š”์ง€
      • Digital Signal
        Analog์—์„œ์˜ period = Bit interval, freq = Bit rate
        Digital Signal์€ ๊ธฐ๋ณธ์ ์œผ๋กœ infinite frequency๋ฅผ ๊ฐ€์ง
        ๋”ฐ๋ผ์„œ Digital Signal ์›๋ณธ์„ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„  Wide-Band medium์ด ํ•„์š”ํ•˜์ง€๋งŒ ๊ฐ€๊ฒฉ์ด ๋น„์Œˆ
        Nyquist therom๊ณผ Shannon capacity์— ๋”ฐ๋ฅด๋ฉด band limited medium์—๋„ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

        Nyquist Therom
        Medium BandWidth >= (number of bps) / 2
        ๋‹จ 1๋น„ํŠธ๊ฐ€ ์•„๋‹Œ n๋น„ํŠธ๋ฅผ ์‹ ํ˜ธ ํ•˜๋‚˜์— ์‹ค์–ด ๋ณด๋‚ผ ๊ฒฝ์šฐ bps๋Š” ์ฆ๊ฐ€๊ฐ€๋Šฅ

      • Analog transmission vs. Digital transmission
        low-pass & band-pass description

        • low-pass channel : ํŠน์ • freq. 0 ์ด์ƒ f ์ดํ•˜์˜ bandwidth๋ฅผ ๊ฐ€์ง€๋Š” channel
        • band-pass channel : ํŠน์ • freq f1 ~ f2์˜ bandwidth๋ฅผ ๊ฐ€์ง€๋Š” channel

      Digital transmission์€ Digital signal์„ ์ „์†กํ•˜๋ฏ€๋กœ ์ด๋ก ์ ์œผ๋กœ 0 ~ infinity์˜ ๋Œ€์—ญํญ(bandwidth)๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ low-pass channel์ด ํ•„์š”ํ•จ

      ๋ฐ˜๋ฉด์— Analog Transmission์€ low ๋˜๋Š” band-pass์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ ๋˜ํ•œ B/W ๋Œ€์—ญ์„ ์ชผ๊ฐค ์ˆ˜ ์žˆ์Œ

      • Noiseless channel => Nyquist Therom

      Bitrate in bps = 2 * Bandwidth * log2L
      L : numbers of signal levels

      • Noisy channel => Shannon capcity

      Capacity in bps = bandwidth * log2(1+SNR)
      SNR : Powersignal / Powernoise

      Channel Capacity๋ณด๋‹ค data rate๋ฅผ ๋†’๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

    3. Transmission Impairment(์†์ƒ)

      • Attentuation(๊ฐ์‡ ) : medium์˜ ์ €ํ•ญ์œผ๋กœ ์ธํ•ด ์†์‹ค๋˜๋Š” ์—๋„ˆ์ง€ / amplifier๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ
        dB = 10log10(P2/P1)
        +์ด๋ฉด ์—๋„ˆ์ง€ ์ฆํญ, -์ด๋ฉด ์—๋„ˆ์ง€ ๊ฐ์‡  / ๋‹จ์ˆœ ๋ง์…ˆ, ๋บ„์…ˆ ๊ฐ€๋Šฅ
      • Distortion(์™œ๊ณก) : ๊ฐ๊ฐ์˜ signal์€ ์ „ํŒŒ ์ง€์—ฐ ์†๋„๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‹ ํ˜ธ๊ฐ€ ์™œ๊ณก๋  ์ˆ˜ ์žˆ์Œ
      • Noise(์žก์Œ) : ์˜จ๋„, ์ถฉ๊ฒฉ, ๋ˆ„ํ™”(crosstalk), ์ „๊ธฐ์  ์ถฉ๊ฒฉ์— ์˜ํ•ด ์‹ ํ˜ธ๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Œ
    4. Digital Transmission
      binary data => digital signal ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ Line Coding์ด๋ผ๊ณ  ํ•จ

      • Signal Level & Data Level

        • Signal Level : signal์—์„œ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„ ์ˆ˜
        • Data Level : data์—์„œ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„ ์ˆ˜
      • Pulse rate & Bit rate

        • Pulse : symbol ํ•˜๋‚˜๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„
        • pulse rate : ์ดˆ๋‹น pulse์˜ ์ „์†ก ๊ฐœ์ˆ˜
        • bit rate = pulse rate * log2L
          L : number of data levels
      • DC components : Amplitude๊ฐ€ ์ˆœ๊ฐ„์ ์œผ๋กœ 0์ด ๋˜๋Š” ์ˆœ๊ฐ„์„ ์‹ ํ˜ธ๋กœ์„œ ํ‘œํ˜„ํ•  ์ˆ˜ signal
        ์ถ”๊ฐ€ ์—๋„ˆ์ง€๋ฅผ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ์‰ฝ์ง€ ์•Š์Œ

      • Self-syncrhonization(๋น„๋™๊ธฐ)
        Self-sync

        • Unipolar encoding : 1๊ฐœ์˜ voltage level์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, dc componet ๋ฌธ์ œ์™€ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด ๋‹จ์ ์ด๋‹ค.
        • Polar encoding : 2๊ฐœ์˜ voltage level(+/-, signal level)์„ ์จ dc component๋Š” ์—†์ง€๋งŒ, ๋™๊ธฐํ™” ๋ฌธ์ œ ์กด์žฌ
          • NRZ-L : data 0์€ positive voltage, 1์€ negative voltage๋ฅผ ์†ก์ˆ˜์‹ 
            ๋ฐ˜๋ณต๋œ 0 ๋˜๋Š” 1 data๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœ์‹œํ‚จ๋‹ค.
          • NRZ-I : data 0์€ ๊ธฐ์กด ์ „์•• ์œ ์ง€, 1์€ ์ „์•• ๋ฐ˜๋Œ€๋กœ ์ „ํ™˜
            NRZ-L๋ณด๋‹ค ๋‚˜์€ ๋™๊ธฐํ™” ์„ฑ๋Šฅ
          • RZ : data์— ๋งž๋Š” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ ํ›„ 0 voltage๋กœ ํ•ญ์ƒ ์ „ํ™˜ํ•˜์—ฌ syncronization์„ ์‹ค์‹œ
            ๋‹จ, ์žฆ์€ phase ๋ณ€ํ™”๋กœ frequncy ์ฆ๊ฐ€ -> ๋งŽ์€ bandwidth ์†Œ๋ชจ
          • Manchester : RZ์—์„œ 0 voltage ๋Œ€์‹  ์ค‘๊ฐ„ voltage transition์„ ์ด์šฉํ•ด b/w ์ ˆ์•ฝ
          • Differential Manchester : Manchester ๋ฐฉ์‹์— NRZ-I ๋ฐฉ์‹์„ ํ•ฉํ•จ. data๊ฐ€ 0์ด๋ฉด transition, 1์ด๋ฉด no transition์ด๋‹ค.
        • Bipolar encoding : 3๊ฐœ์˜ Signal Level์„ ๊ฐ€์ง
          • AMI : 1์—์„œ๋งŒ signal inverse
            NRZ-L๊ณผ ๊ฐ™์€ ๋‹จ์  ์กด์žฌ
          • BnZS : ๋‹ค๋ฅด๊ฒŒ ์ธ์ฝ”๋”ฉํ•œ๋‹ค... ์ž์„ธํ•œ ์„ค๋ช…์€ ์—†์—ˆ์Œ
        • 2B1Q : 2๊ฐœ์˜ ๋น„ํŠธ, 4๊ฐœ์˜ signal level
        • MLT-3 : NRZ-I์™€ ๋™์ผํ•˜์ง€๋งŒ, 3๊ฐœ์˜ signal level ์‚ฌ์šฉ
      • Block Coding : ์ „์†ก ๋น„ํŠธ๋ฅผ ๋‚˜๋ˆ ์„œ ๋ธ”๋ก ๋‹จ์œ„๋กœ syncronization ๋ฌธ์ œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋น„ํŠธ๋กœ ๋งคํ•‘

        • 4B/5B : 4bit๋ฅผ 5bit๋กœ ์ธ์ฝ”๋”ฉ, ์•ž์—๋Š” 0์ด ์ตœ๋Œ€ 1๊ฐœ, ๋’ค์—๋Š” 0์ด ์ตœ๋Œ€ 2๊ฐœ๋งŒ ์ค‘๋ณตํ•จ์œผ๋กœ์„œ 3๊ฐœ ์ด์ƒ์˜ 0์€ ์—ฐ์†๋˜์ง€ ์•Š๋„๋ก ํ•จ
        • 8B/10B : 8bit๋ฅผ 10bit๋กœ
        • 8B/6T : 8bit๋ฅผ 3๊ฐœ์˜ signal level์„ ๊ฐ€์ง„ 6๊ฐœ์˜ signal 36๋กœ
      • Analog data๋ฅผ Digital ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” data sampling์ด ํ•„์š”

      • ์ดํ›„ ๋‚ด์šฉ์€ ๋‚ด์ผ ์ด์–ด์„œ...

2020.06.08 (Day 6)

  • data communication ์ •๋ฆฌ (cont.)

    1. digital transmission
    • sampling
      • PAM(Pulse Amplitude Modulation) : analog data์˜ ํŒŒํ˜•์„ ๊ทธ๋Œ€๋กœ digital๋กœ ๋”ฐ๋ผํ•œ ๊ฒƒ
      • PCM(Pulse Code Modulation)
        PAM => Quantization => binary encoding => line coding
        sampling rate๋Š” ์›๋ž˜ ์‹ ํ˜ธ์˜ ์ตœ๋Œ€ ์ฃผํŒŒ์ˆ˜์˜ 2๋ฐฐ ์ด์ƒ์œผ๋กœ ํ•ด์•ผํ•œ๋‹ค!
        band-pass signal์„ low-pass signal๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ sampling ํ•  ๊ฒฝ์šฐ signal bandwidth์˜ 2๋ฐฐ๋ฅผ sampling rate๋กœ ์žก์œผ๋ฉด ๋œ๋‹ค.
        ๊ฐ sample ๋‹น ํ•„์š”ํ•œ bit ์ˆ˜๋Š” ceiling(log2N)๊ฐœ ์ด๋‹ค.
        ๋”ฐ๋ผ์„œ bit rate = sampling rate * number of bits per sample
    • Transmission mode
      • Parallel : ๊ณ ์†์ด๋‚˜ ์„ ๋กœ ๋ถ€๋‹ด์ด ์ปค ๋น„์šฉ์ด ๋น„์Œˆ, ์ฃผ๋กœ ์งง์€ ๊ฑฐ๋ฆฌ์— ์ด์šฉ
      • Serial : ๋™๊ธฐ์‹œ์Šคํ…œ๊ณผ ๋น„๋™๊ธฐ์‹œ์Šคํ…œ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
        • ๋น„๋™๊ธฐ ์‹œ์Šคํ…œ์€ ์‹ ํ˜ธ์˜ ์‹œ๊ธฐ๋‚˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ. ์‹œ์ž‘๋น„ํŠธ, ์ข…๋ฃŒ๋น„ํŠธ๋กœ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋ฅผ ๊ตฌ๋ถ„ํ•ด ์ „์†ก. ์ €๋ ดํ•˜๋ฉฐ ํšจ์œจ์ ์ด์ง€๋งŒ ๋Š๋ฆฌ๋‹ค.
        • ๋™๊ธฐ ์‹œ์Šคํ…œ์€ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ๊ตฌ๋ถ„ ์—†์ด ์ „์†กํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
    1. Analog transmission
      • Terminology

        • modulation : digital/analog data -> band-pass analog signal
        • baud : signal unit / baud rate : # of signal units per second
        • carrier signal : ๊ธฐ์ค€ ์ฃผํŒŒ์ˆ˜ (+ ์œ ์ €์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ „์†ก)
      • ASK(Amplitude Shift Keying) : ๋‹จ์ˆœํžˆ ์‹ ํ˜ธ์˜ ์„ธ๊ธฐ๋ฅผ ๋ณ€์กฐํ•ด ๋ฐ์ดํ„ฐ์˜ 0/1์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•
        b/w = baud rate์™€ ๋™์ผํ•œ ๋งŒํผ ํ•„์š”(f-Nbaud/2 ~ f+Nbaud/2)
        ASK์—์„  baud rate์™€ bit rate๊ฐ€ ๋™์ผ
        ๋‹จ์ˆœํ•˜์ง€๋งŒ noise์— ์•ฝํ•จ ask_ex5 ASK full-duplex ๋ฌธ์ œ ์ฐธ๊ณ .

      • FSK(Frequency Shift Keying) : 2๊ฐœ์˜ ์ฃผํŒŒ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ฃผํŒŒ์ˆ˜์— ๊ฐ 0, 1์„ ํ• ๋‹นํ•˜์—ฌ ๋ณ€์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•
        FSK์— ํŠน๋ณ„ํžˆ ์ ํ•ฉํ•œ ์ฃผํŒŒ์ˆ˜๊ฐ€ ์กด์žฌ
        b/w = fc1 - fc2 + Nbaud(baud-rate)
        FSK์—์„œ๋„ baud rate์™€ bit rate๊ฐ€ ๋™์ผ

      • PSK(Phase Shift Keying) : signal์˜ phase์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•
        Minimum b/w = Nbaud
        PSK์˜ ๊ฒฝ์šฐ baud rate์™€ bit rate๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์„์ˆ˜๋„ ์žˆ์Œ์œผ๋กœ ์œ ์˜ (21baud to bit-PSK)

      • QAM(Quadrature Amplitude Modulation)
        : ASK + PSK ๋ฐฉ์‹
        PSK์™€ ๋™์ผํ•˜๊ฒŒ **(21baud to bit-QAM)**์œผ๋กœ ํ‘œ๊ธฐ

      • Modulation of analog signal

        1. AM : total required b/w = audio signal * 2
        2. FM : total required b/w = audio signal * 10

2020.06.18 (Day 7) : PL summary

  1. chapter 1 Preliminaries
    • Programming Domains
      • Scientific application : Fotran - ๋งŽ์€ ์ˆ˜์˜ ๋ถ€๋™์†Œ์ˆ˜์  ๊ณ„์‚ฐ๊ณผ ๋ฐฐ์—ด ํ™œ์šฉ
      • Business application : COBOL - ๋ ˆํฌํŠธ ์ž‘์„ฑ, ์‹ญ์ง„์ˆ˜์™€ ๋ฌธ์ž ์‚ฌ์šฉ
      • Artificial application : LISP - ์ˆซ์ž ์กฐ์ž‘๋ณด๋‹ค๋Š” ๊ธฐํ˜ธ๋ฅผ ์ด์šฉ, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํ™œ์šฉ
      • System programming : C - ์ง€์†์  ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™” ํ•„์š”
      • Web software : HTML, PHP, Java - ํ˜ธํ™˜์„ฑ ํ•„์š”
    • Language Evaluation criteria
      • Readability : ๊ฐ€๋…์„ฑ, ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ต์„ฑ(์ ์€ ์ˆ˜์˜ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์„ ๊ฐ€์ง€๋Š” ์ง€, ์ ์ ˆํ•œ data types๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€
      • Writability : ํ‘œํ˜„์„ฑ (๊ฐ€๋…์„ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์•ฝ๊ฐ„ ์ฃผ๊ด€์ ), ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ์ง€์›์ด ์žˆ๋Š”์ง€, ํ‘œํ˜„์ด ์–ผ๋งˆ๋‚˜ ํŽธ๋ฆฌํ•œ์ง€
      • Reliability : ์‹ ๋ขฐ์„ฑ, language๊ฐ€ typesafe ํ•œ์ง€ ์—ฌ๋ถ€๊ฐ€ ๋Œ€ํ‘œ์ , exception handling๊ณผ aliasing ์ง€์› ์—ฌ๋ถ€
      • Cost : ์ปดํŒŒ์ผ๋Ÿฌ ์‹คํ–‰ ์‹œ๊ฐ„ + ์‹คํ–‰ ์†๋„ + ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ + ... ๋‹ค์–‘ํ•œ ์‹œ๊ฐ„, ๋น„์šฉ ๊ณ„์‚ฐ
    • Language Design : ์‚ฌ๋žŒ์ด ๋ณ€ํ™”ํ•  ๋•Œ, ์ปดํ“จํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ, ํ•จ๊ป˜ ๋ณ€ํ™”ํ•œ๋‹ค.
      • ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ ์–ธ์–ด์˜ ๊ตฌ์กฐ๋Š” ํฐ ๋…ธ์ด๋งŒ ๊ตฌ์กฐ์˜ ์˜ํ–ฅ์„ ํฌ๊ฒŒ ๋ฐ›์Œ
      • ๋ช…๋ นํ˜• ์–ธ์–ด์˜ ๊ธฐ๋ฐ˜ : ๋ณ€์ˆ˜ => ๋ฉ”๋ชจ๋ฆฌ ์…€ ๋งคํ•‘, assignment statement, iteration์— ๊ฐ•ํ•จ
    • Programming methodology
      • 1950s ~ early 1960s : H/W์ธ ๊ธฐ๊ธฐ์˜ ํšจ์œจ์„ฑ์„ ์ค‘์‹œ - ์–ด์…ˆ๋ธ”๋ฆฌ์–ด
      • late 1960s : ์‚ฌ๋žŒ์˜ ํšจ์œจ์„ฑ์„ ์ ์ฐจ ์ค‘์‹œํ•˜๊ฒŒ ๋˜๋ฉฐ ๊ฐ€๋…์„ฑ, ๋” ๋‚˜์€ control structure ๋ฅผ ์›ํ•˜๊ฒŒ ๋จ. ๊ตฌ์กฐํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, top-down ๋ฐฉ์‹์˜ ๋””์ž์ธ์˜ ๋“ฑ์žฅ
      • late 1970s: data-oreiented ๋กœ ๋ณ€ํ™”๋ฅผ ์‹œ๋„ํ•˜์˜€์œผ๋‚˜ ์‹คํŒจ
      • Middle 1980s : object-oriented
        data abstraction + inheritance + polymorphism
    • language categories
      1. Imperative - ํฐ ๋…ธ์ด๋งŒ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ : C, Java, Perl, JS, C++...
      2. Functional - lambda function์„ ์ด์šฉํ•œ ๊ตฌ์กฐ : LISP, Scheme
      3. Logic - expert system ๊ฐœ๋ฐœ์— ์ด์šฉ, ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ : prolog
      4. Markup & hybrid - ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ language : JSTL, XSLT
    • Implementaion methods
      • Compilation : ์ปดํŒŒ์ผ ๋ฐฉ์‹ (์†๋„ โ†‘, ๊ฐœ๋ฐœ๊ธฐ๊ฐ„ โ†‘)
      • Pure Interpretation : ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹ (์†๋„ โ†“, ๊ฐœ๋ฐœ๊ธฐ๊ฐ„ โ†“)
      • Hybrid ๋ฐฉ์‹ : compilation + interpretation
    • Compilation : Slow translation, Fast execution
      • Load module : ์šด์˜์ฒด์ œ๋‚˜ ๊ธฐ๋Šฅ์ด ๋ฏธ๋ฏธํ•œ ๊ฒฝ์šฐ system code์™€ user code๋ฅผ ํ•œ๋ฒˆ์— loadํ•จ Program execution flow example
    • Von Neumann Bottleneck : CPU์™€ Memory ์‚ฌ์ด์˜ bottleneck ํ˜„์ƒ
    • Pure Interpretation : Easier implementation, Slower execution
      No translation, Often requires more space
    • Hybrid Implementation system : compilation + pure interpretation
    • Just-in-Time Implementation System
      Java -> bytecode ๋Š” interpretation ๋ฐฉ์‹์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๊ณ , bytecode -> machine language๋Š” ํ˜ธ์ถœ ์‹œ ์ปดํŒŒ์ผ
      1ํšŒ ์ปดํŒŒ์ผ, ์‹คํ–‰ ์‹œ ํ•ด๋‹น machine code๋Š” ์ €์žฅ(์ดํ›„์˜ ํ˜ธ์ถœ ์‹œ ์ด์šฉ)
  2. chapter 3 Syntax and Semantics
    • Syntax : expression, statement์˜ ๊ตฌ์กฐ๋‚˜ ํ˜•ํƒœ
    • Semantics : Syntax๊ฐ€ ๊ฐ€์ง€๋Š” ์‹ค์งˆ์ ์ธ ์˜๋ฏธ
    • Lexeme & Token lexeme & token

2020.06.19 (Day 8) : PL Summary(cont.)

  • BNF ๋ฌธ๋ฒ•์€ Context-Free grammar๋ฅผ ์ „๋ถ€ ํ‘œํ˜„ ๊ฐ€๋Šฅ
    LHS : non-terminal => RHS : terminal & non-terminal
    non-terminal์€ <> ์•ˆ์— ๋‘˜๋Ÿฌ์Œ“์—ฌ์„œ ํ‘œํ˜„
    ex) <ident_list> -> ident | ident, <ident_list>
    sentential form : terminal symbol๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ sentence๊ฐ€ ๋˜๊ธฐ ์ด์ „๊นŒ์ง€์˜ ๊ณผ์ •
    • ๊ฐ™์€ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฅธ parse tree๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ชจํ˜ธํ•œ(ambiguous)ํ•œ ๋ฌธ๋ฒ•
    • ๋”ฐ๋ผ์„œ ์šฐ์„ ์ˆœ์œ„(precedence)์™€ ๊ฒฐํ•ฉ๋ฒ•์น™(associativity)๋ฅผ ์ด์šฉ
    • ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ†ตํ•œ ๋ถ„๋ฆฌ๋ฐฉ๋ฒ•
      1. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์—ฐ์‚ฐ์ž๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ํ•œ๋‹ค.
      2. | ์„ ์ด์šฉํ•ด ๋ณด๋‹ค ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์žฌ ๊ธฐ์ˆ 
      3. -> ๋†’์€ ์ˆœ์œ„ ์—ฐ์‚ฐ์ž ๊ธฐ์ˆ 
  • EBNF ํ‘œ๊ธฐ๋ฒ•

    "[ ]"๊ธฐํ˜ธ๋Š” ์ƒ๋žต๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„
    "(+/-)" ์™€ ๊ฐ™์€ ๊ธฐํ˜ธ๋Š” ๊ธฐํ˜ธ๋“ค ์ค‘ ํƒํ•ด์•ผ ํ•จ
    "{ }" ๋Š” 0ํšŒ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„(์ƒ๋žต๋„ ๊ฐ€๋Šฅ) EBNF example

  1. Chapter 4 Lexical & Syntax analysis

    • Regular grammar => Regualr expression => Finite-state machine(FSM)
    • Context-free grammar => BNF => push-down automata
  2. Chapter 5 Names, Bindings, Scopes

    • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์–ธ์–ด์—์„œ์˜ ์ถ”์ƒํ™” ๋ฐฉ์‹์€ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • 6๊ฐ€์ง€ sextuple๋กœ ๋ณ€์ˆ˜์˜ ํŠน์„ฑ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. Names : ๋ณ€์ˆ˜์˜ ํŠน์„ฑ ์ค‘ ๊ทผ๋ณธ์ ์ธ ์†์„ฑ ํ•œ๊ฐ€์ง€ ์ด๋‹ค. ํ•จ์ˆ˜, ์ธ์ž์™€ ์—ฐ๊ด€๋˜์–ด์žˆ์Œ

      • ์ฃผ์š” ๋””์ž์ธ ์ด์Šˆ : Case sensitive(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„), reserved words, keywords
      • ํ˜•ํƒœ : Camel notation์„ ๋งŽ์ด ์‚ฌ์šฉ(ex. ScoreValue) ์•ž๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ
      • Case-sensitivity / Special words : ํ•„์š”๋Š” ํ•˜๋‚˜ ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ๋ฌธ์ œ
    2. Address : aliases๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค์ง€๋งŒ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ„์นญ

    3. Type : ๋ณ€์ˆ˜ ๊ฐ’์˜ ๋ฒ”์œ„์™€ ์—ฐ์‚ฐ

    4. Value : l-value ๋Š” address, r-value๋Š” value๋ฅผ ์˜๋ฏธ

    5. Lifetime

      Binding : entity์™€ attribute ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ

      • binding์ด ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ผ Static, Dynamic binding์ด ์กด์žฌ

      • ์–ธ์–ด ๋””์ž์ธ, ๊ตฌํ˜„, ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฐ”์ธ๋”ฉ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ Static binding

      • ํ”„๋กœ๊ทธ๋žจ ๋กœ๋“œ ์‹œ, ๋Ÿฐํƒ€์ž„์— ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ๊ฒƒ์„ Dynamic binding binding time

      • Static Binding
        1์‹คํ–‰(runtime) ์ด์ „์— ๋ฐ”์ธ๋”ฉ์ด ์™„๋ฃŒ๋˜๋ฉฐ, 2์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐ”์ธ๋”ฉ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ

      • Dynamic Binding
        1Compile time ์ดํ›„์— ๋ฐ”์ธ๋”ฉ๋˜๊ฑฐ๋‚˜, 2ํ”„๋กœ๊ทธ๋žจ runtime์— binding์ด ๋ณ€๊ฒฝ๋จ

      • Type binding : ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ด์ „์— ํ•„์ˆ˜์ ์œผ๋กœ data type์— ๋Œ€ํ•œ binding์ด ๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค.

        • type ์ง€์ • ๋ฐฉ๋ฒ•
          • static type binding : ์„ ์–ธ ์‹œ type์ด ์ง€์ •๋จ
            • explicit(๋ช…์‹œ์ ) ๋ฐฉ๋ฒ• : data type์„ ์ง์ ‘ ๋ช…์‹œํ•จ(ex. int, char)
            • implicit(๋ฌต์‹œ์  ๋ฐฉ๋ฒ•)
              • naming convention : type๋ณ„ ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ๊ทœ์น™์ด ์ง€์ •๋˜์–ด์žˆ์Œ
              • context : ๋ฌธ๋งฅ์„ ๋ณด๊ณ  compiler๊ฐ€ data type์„ ์œ ์ถ”
          • dynamic type binding : ํ• ๋‹น ์‹œ binding
            • ๋ณ€์ˆ˜์—๋Š” ํŠน๋ณ„ํžˆ ์ง€์ •๋œ data type์ด ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹˜
            • ์„ ์–ธ ์‹œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋งคํ•‘๋จ
            • ๋‹จ์ ์œผ๋กœ๋Š” type checking์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , H/W resource๋ฅผ ๋งŽ์ด ์ฐจ์ง€
      • Storage bindings & Lifetime

        • ์ „์ฒด์ ์ธ ์†๋„ : static < heap = stack
        • Static
          • bind storage before execution
          • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋™์•ˆ์—๋Š” ๊ณ„์† ๊ฐ™์€ ๊ณต๊ฐ„์— bound
        • Stack-dynamic
          • variable์ด declare ๋  ๋•Œ stack์— ํ• ๋‹น
          • ๋ช‡๋ช‡ ์–ธ์–ด๋Š” subprogram์˜ ์ฒ˜์Œ์ด ์•„๋‹ˆ์—ฌ๋„ declare ๊ฐ€๋Šฅ
          • ๊ฐ„ํ˜น ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋ณ€์ˆ˜ ์„ ์–ธ์ด subprogram ์ฒ˜์Œ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์˜ฌ๋ ค์„œ๋Š” ์•ˆ๋จ
          • ์žฅ์ 
            1. recursion์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (๋งค์šฐ ํฐ ์žฅ์ )
          • ๋‹จ์ 
            1. allocation๊ณผ deallocation์— overhead๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.(์†๋„ โ†“)
            2. subprogram์ด histoy sensitiveํ•˜์ง€ ๋ชปํ•˜๋‹ค.
            3. indirect addressing์œผ๋กœ ์ธํ•ด reference๊ฐ€ ๋น„ํšจ์œจ์ ์ด๋‹ค.
        • explicit heap-dynamic
          • ๋ช…์‹œ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฐ์‚ฐ์ž, ์‹œ์Šคํ…œ ์ฝœ ํ˜ธ์ถœ์„ ํ†ตํ•ด heap์˜์—ญ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ
          • ์žฅ์  : ๋™์  ๊ณต๊ฐ„ ํ• ๋‹น๊ณผ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค.
          • ๋‹จ์ 
            1. pointer์™€ reference๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ๋ฐœ์ƒ
            2. ๋ณ€์ˆ˜์˜ reference๋กœ ์ธํ•œ ๋น„์šฉ์ด ๋“ ๋‹ค.
            3. storage management๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
        • implicit heap-dynamic
          • assignment statement๋ฅผ ๋งŒ๋‚˜๋Š” ์ˆœ๊ฐ„ allocation๊ณผ deallocation์ด ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค.
          • ์ด์ „์— ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์–ด๋– ํ•œ type์ด์˜€๋Š”์ง€๋Š” ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
          • ์žฅ์  : ๊ฐ€์žฅ ๋†’์€ flexibility ์ œ๊ณต
          • ๋‹จ์ 
            1. dynamic attributes๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ runtime overhead ๋ฐœ์ƒ (์†๋„ โ†“)
            2. error detection์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (realiability โ†“)
    6. Scope

      • local variable : program unit๋‚ด์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜

      • nonlocal variable : program unit๋‚ด์—์„œ ์ฐธ์กฐํ•  ์ˆ˜๋Š” ์žˆ์œผ๋‚˜ ์™ธ๋ถ€์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜

      • Global variable : nonlocal variable์ค‘์— ํ•˜๋‚˜

      • Static scope : compile time์— nonlocal ๋ณ€์ˆ˜์˜ reference ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ

        • static scoped language
        • subprogram์ด nested๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ : ์‹คํ–‰์†๋„ โ†“, ์ œ์•ฝ ์—†์Œ
        • subprogram์ด nested๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ : ์‹คํ–‰์†๋„ โ†‘, ์ œ์•ฝ ์กด์žฌ
        • ํ˜ธ์ถœ ์Šคํƒ์ด ์•„๋‹Œ ์ฝ”๋“œ๋งŒ ๋ณด๊ณ  ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด static ancestor๋ฅผ ์ฐพ์•„ ์ฐธ์กฐํ•œ๋‹ค. static-scope ์ด ๊ทธ๋ฆผ ๊ผญ ํ™•์ธํ•˜๊ธฐ!!
        • ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ๋” ๊ฐ€๊นŒ์šด ๋ณ€์ˆ˜๊ฐ€ ์„ ํƒ๋œ๋‹ค.
        • ๋Œ€๋ถ€๋ถ„์˜ functional language๋Š” let์„ ์ด์šฉํ•ด imperative language์˜ block๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
        • C99, C++, Java, C#์€ ์„ ์–ธ ์‹œ์ ๋ถ€ํ„ฐ block์˜ ๋๊นŒ์ง€ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
        • Global scope (global variables)
          • declaration : function prototype
          • definition : attribute and storage
          • C/C++ ์—์„œ๋Š” extern์„ ์ด์šฉํ•ด ์™ธ๋ถ€์˜ ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์ด์šฉ
          • PHP ์—์„œ๋Š” ๊ทธ๋ฆผ ์ฐธ์กฐ PHP-example
          • Python ์—์„œ read๋Š” ๊ฐ€๋Šฅ, write๋Š” extern๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ global ์‚ฌ์šฉํ•ด์„œ ์„ ์–ธํ•ด์ค˜์•ผ ๊ฐ€๋Šฅ (์ „๋ฐฉ์ฐธ์กฐ ์ฃผ์˜!)
      • Static scope ๋ฐฉ์‹์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์ž˜ ์ž‘๋™ํ•˜๋‚˜, ๊ตฌํ˜„์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค.(enclosed scope)

      • Dynamic scope : nonlocal ๋ณ€์ˆ˜์˜ reference ์œ„์น˜๋ฅผ ์ฝ”๋“œ๋กœ๋Š” ์•Œ ์ˆ˜ ์—†๊ณ  ์‹คํ–‰์‹œ call-chain์„ ํ†ตํ•ด ์•Œ๊ฒŒ ๋จ(all active subprogram)

      Static-scoped language์™€ Dynamic-scoped language์˜ ์ฐจ์ด์  ๋งค์šฐ ์ค‘์š”!

      • Scope != Lifetime (ex. static variable)
      • Named Constant : 1ํšŒ storage binding๋งŒ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ (๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚˜์ง)
        • dynamic bound : expression ์ „์ฒด๊ฐ€ RHS์— ๊ฐ€๋Šฅ
        • statically bound : ์ˆซ์ž & named constant๋กœ ๊ตฌ์„ฑ๋œ RHS๊ฐ€ ๊ฐ€๋Šฅ
  3. Chapter 6. Data Types 1.data representation 2.operation

    • Primitive Data Types (๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…)
      • ๋ช‡๋ช‡์€ ํ•˜๋“œ์›จ์–ด์˜ ๋ฐ˜์˜๊ฒฐ๊ณผ์ด๋‹ค.(ex. integer types)
      • ๋‹ค๋ฅธ structered type๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
      • Integer
        • representation : H/W mapping ์ƒํƒœ(ํ‘œํ˜„๊ณผ ์ €์žฅ๋ฐฉ์‹ ๋™์ผ)
        • operation : Two's complement
      • Floating point
        • ์ง€์ˆ˜๋ถ€(exponent)์™€ ๊ฐ€์ˆ˜๋ถ€(fraction) ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์„œ ์‚ฌ์šฉ
      • String
        • pattern matching ์—ฐ์‚ฐ(Perl ์ง€์›)
        • C/C++์—์„œ๋Š” non-primitive / Java, C#, Ruby, Perl.. ๋“ฑ ๋Œ€๋ถ€๋ถ„์—์„œ primitive ํ•œ data
        • ํŠนํžˆ, Perl, JS, Ruby, PHP์—์„œ๋Š” regular expression์„ ์ง€์›
        • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ์ง€์ •
          • static : ์ •์ 
          • limited dynamic : static ๋ฐฉ์‹์ด๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณต์‚ฌ ์ž‘์—…์„ ํ†ตํ•ด ์œ ์ง€
          • dynamic : ์™„์ „ํžˆ ๋™์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ธธ์ด์— ๋Œ€ํ•œ ์ œํ•œ์ด ์ „ํ˜€ ์—†์Œ

2020.06.20 (Day 9)

  • Enumeration Types
    • ์ฃผ์š” ๋””์ž์ธ ์ด์Šˆ
      • ์„œ๋กœ ๋‹ค๋ฅธ enum type์—์„œ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š๋ƒ?
      • enum value๊ฐ€ ์ •์ˆ˜์— ๋งคํ•‘๋˜๋Š๋ƒ?
      • ์—ด๊ฑฐํ˜•์œผ๋กœ ์ž‘์„ฑํ•˜๋„๋ก ์ œํ•œ๋œ ์œ ํ˜•์ด ์žˆ๋Š๋ƒ?
      • ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์ด ๋†’์•„์ง, ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ ์ž‘์„ฑ์€ ์–ด๋ ค์›Œ์ง(๊ธธ์–ด์ง€๊ณ , ์ง€๋ฃจํ•จ)
  • Array types
    • homogeneous(๋™์ผ)ํ•œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์ ์‹œ์ผœ ๋†“์€ ํ˜•ํƒœ
    • ์ฃผ์š” ๋””์ž์ธ ์ด์Šˆ
      • array์˜ index(subscript)์— ์ ์ ˆํ•œ ํƒ€์ž…์€ ๋ฌด์—‡์ธ๊ฐ€
      • subscript expression์˜ range check๋ฅผ ์‹ค์‹œํ•˜๋Š๋ƒ
    • Array indexing
      • ๋ช‡๋ช‡ ์–ธ์–ด์—์„œ๋Š” ๊ด„ํ˜ธ(parentheses)๋ฅผ ์ด์šฉ
      • ๋Œ€๋ถ€๋ถ„์€ bracket []์„ ์ด์šฉ
      • Ada : subscript type์œผ๋กœ enumeration type์„ ์‚ฌ์šฉ
      • Java, ML, C#์€ range check ์ง„ํ–‰
      • Perl์˜ ๊ฒฝ์šฐ ๋…ํŠน
          @signs = (0, 1, 2 ,3, 4); // ์„ ์–ธ
          $signs[2]; // 3๋ฒˆ์งธ ์›์†Œ ์ ‘๊ทผ
          $signs[-2]; // $signs[3]๊ณผ ๋™์ผ
      • lower bound(์ธ๋ฑ์Šค ์‹œ์ž‘๊ฐ’)์€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ
    • Array categories
      • static array : data segment์— array ํ• ๋‹น / subscript range์™€ storage ํ• ๋‹น์ด staticํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง
      • fixed stack-dynamic array : stack segment์— ๊ณ ์ • ํฌ๊ธฐ๋กœ ํ• ๋‹น /
        subscript range๋Š” staticํ•˜๊ฒŒ, array storage allocation์€ execution time์— stack์— ํ• ๋‹น
      • fixed heap-dynamic array : heap segment์— ๊ณ ์ • ํฌ๊ธฐ๋กœ ํ• ๋‹น /
        fixed stack-dynamic array์™€ bound time์€ ๋™์ผํ•˜๋‚˜, heap์— ํ• ๋‹น
      • heap-dynamic : heap segment์— ๊ฐ€๋ณ€ ํฌ๊ธฐ๋กœ ํ• ๋‹น /
        1subscript range์™€ storage allocation ๋ชจ๋‘ execution time์— ๋ฐœ์ƒํ•˜๊ณ ,
        2์ด๋ฅผ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ์ค‘ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
        • ํ”„๋กœ๊ทธ๋žจ ์œ ์—ฐ์„ฑ์ด ๋†’์•„์ง€๋‚˜ ์†๋„๋Š” ํ• ๋‹น๊ณผ ํ•ด์ œ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜
    • JS์˜ ๊ฒฝ์šฐ array๊ฐ€ sparse ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ฐฐ์—ด ๋‚ด์—์„œ๋„ nonexist element๊ฐ€ ์กด์žฌ
    • Array initialization & operation
    • Rectangular array : ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ [N][N] array
    • jagged array : ๊ฐ๊ฐ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅธ ๋ฐฐ์—ด๋“ค์˜ ๋ฐฐ์—ด [N][M] array (N != M)
    • Row major, Column major : ํ–‰๊ณผ ์—ด ์ค‘ ์–ด๋–ค๊ฒƒ์„ ๋ฉ”๋ชจ๋ฆฌ ์ธ์ ‘ํ•˜์—ฌ ์ €์žฅํ•  ๊ฒƒ์ธ์ง€
    • ๋‹ค์ฐจ์›์˜ ๋ฐฐ์—ด์˜ ์œ„์น˜ : address of a(row์˜ lower bound, column์˜ lower bound) + ((i - 1) * n) + (j - 1) * element size
  • Associative arrays
    • (key : value) ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์„œ๊ฐ€ ์—†๋Š” data elements์˜ collection
    • Perl : %hi_temps = ("Mon" => 77, "Tue" => 79, "Wed" => 65, ...);
    $hi_temps{"Wed"} = 83;
    delete $hi_temps{"Tue"};
  • Record type : hecterogeneous(์„œ๋กœ ๋‹ค๋ฅธ) data elements๋ฅผ ๊ฐ€์ง
  • tuple types : Record type๊ณผ ๋น„์Šทํ•˜๋‚˜, element ๋ณ„ name์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
    • immutable -> ํ•œ๋ฒˆ ์„ ์–ธ ํ›„์—๋Š” ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์Œ
    • tuple์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” C์—์„œ๋Š” ๋ฐ˜ํ™˜๊ฐ’์„ 2๊ฐœ ์ฃผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์ฝ”๋”ฉํ•˜๋Š”์ง€ ์•Œ์•„๋‘˜๊ฒƒ
      1. struct๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
      2. pointer๋ฅผ ์ด์šฉํ•ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • list types : tuple๊ณผ ๋™์ผํ•˜๋‚˜ mutableํ•จ
    • Python ์—์„œ๋Š” []๋กœ List๋ฅผ ํ‘œํ˜„
    • Python list comprehension : ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ List ์—ฐ์‚ฐ
        [x * x for x in range(6) if x % 3 == 0] // result : [0, 9, 36];
    • '(A B C) ์ด๋ฉด List type (A B C)๋Š” A๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ B, C๋ผ๋Š” ์ธ์ž๋กœ ํ˜ธ์ถœ
  • Union types : ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด ์‚ฌ์šฉ
    • Free union vs. Discriminant
      • Free union : type checking ์—†์Œ -> unsafe
      • Discriminant union : type checking ์žˆ์Œ -> safe, but slow
  • Pointer(์ดˆ๊ธฐ๊ฐ’ ํ•„์š”์—†์Œ) and Reference(์ดˆ๊ธฐ๊ฐ’ ํ•„์š”) types
    • range of values : memory address + nil
    • Operation
      • assignment : set a pointer
      • dereferencing : explicit & implicit ๋ฐฉ์‹
    • problems
      1. Dangling pointers -> danger
        • ์—†๋Š” ๋ณ€์ˆ˜(์ด๋ฏธ ํ•ด์ œ๋œ)์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ

        • ํ•ด๊ฒฐ๋ฐฉ๋ฒ• dangling-pointer

          Tombstone ๋ฐฉ๋ฒ•
          - ๋ชจ๋“  pointer๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ tombstone์ด๋ผ๋Š” pointer๋ฅผ ์ฐธ์กฐ
          - ๋งŒ์•ฝ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ํ•ด์ œ๋˜์—ˆ๋‹ค๋ฉด tombstone์— RIP์„ ๋ช…์‹œํ•œ๋‹ค.
          - RIP์ฒ˜๋ฆฌ๋œ ๋ณ€์ˆ˜๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.

          Locks-and-keys ๋ฐฉ๋ฒ•
          - ๋ณ€์ˆ˜ ํ• ๋‹น ์‹œ pointer์™€ heap variable์— ๊ฐ๊ฐ key์™€ lock ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
          - ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น์ด ๋œ ๊ฒฝ์šฐ pointer์˜ key๊ฐ’๊ณผ lock ๊ฐ’์€ ๋™์ผํ•˜๋‹ค.
          - lock == key ์ธ ๊ฒฝ์šฐ์—๋งŒ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ - ๋ณ€์ˆ˜ ํ•ด์ œ ์‹œ lock ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ, ์ ‘๊ทผ์„ ์ฐจ๋‹จ

      2. Lost heap-dynamic variable
        • heap์˜์—ญ์˜ ๋™์ ํ• ๋‹น๋œ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆผ
        • memory leakage ๋ฐœ์ƒ
    • usage in C / C++
      int a = 10;
      void* p = &a;
      *p; // error, void pointer can't de-reference
      *(int *)p; //ok
  • Reference type
    • C++์—์„œ๋Š” reference ์ง€์ •ํ›„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ
    • Java ์—์„œ๋Š” ๊ฐ€๋Šฅ
    • C#์—์„œ๋Š” 2๊ฐ€์ง€ type ๊ฐ€๋Šฅ
  • Heap management
    • Reference counter
      • ๊ฐ ๋ฉ”๋ชจ๋ฆฌ์…€์— ์ž์‹ ์„ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋Š” ํฌ์ธํ„ฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅ
      • ์ด ์ˆซ์ž๊ฐ€ 0์ด ๋  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
      • ๋‹จ์  : ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ•„์š”, ์ˆ˜ํ–‰์‹œ๊ฐ„ ์ฆ๊ฐ€
      • ์žฅ์  : ์ ์ฐจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์ฆ๊ฐ€, ๋”œ๋ ˆ์ด๊ฐ€ ์—†์Œ
    • Mark-sweep markandsweep
      • pointer๋ฅผ ๋”ฐ๋ผ๊ฐ€ ๋งŒ๋‚˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ์…€ ๋ถ€๋ถ„์€ ํ•ด์ œ
      • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๋ฏ€๋กœ delay๊ฐ€ ์กด์žฌ
  • Type checking : operator์˜ operand๋กœ์„œ compatible type์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…
    • compatible type : ์–ธ์–ด ํŠน์„ฑ์œผ๋กœ์„œ operator๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•ฉ๋ฒ•์ ์ธ ์—ฐ์‚ฐ์ž์ธ์ง€ ํ™•์ธ, ์ž๋™์œผ๋กœ ํ˜•๋ณ€ํ™˜์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€
    • ์ž๋™์œผ๋กœ compatible type์œผ๋กœ ํ˜•๋ณ€ํ™˜ ๋˜๋Š” ๊ฒƒ์„ coercion์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • coercion์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ type casting์ด ํ•„์š”
    • type binding์ด ์ „๋ถ€ static ํ•œ ๊ฒฝ์šฐ type checking๋„ ์ „๋ถ€ staticํ•˜๋‹ค. dynamic์ด๋ฉด type checking๋„ dynamicํ•˜๋‹ค.
    • strongly typed language์˜ ๊ฒฝ์šฐ ๋ชจ๋“  type error๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Coercion ์ด ๋งŽ์•„์ง€๋ฉด ๋งŽ์•„์งˆ์ˆ˜๋ก strong typing์€ ์•ฝํ™”๋œ๋‹ค
    • Name type equivalence = Type์˜ Name์ด ๊ฐ™์•„์•ผ type equivalenceํ•˜๋‹ค.
      • ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ์‚ฌ์šฉ์ด ์ œํ•œ์ ์ด๋‹ค.
    • Structure type equivalence = Type์˜ Name ๋™์ผ ์œ ๋ฌด์™€ ์ƒ๊ด€์—†์ด ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•˜๋ฉด compatible type์ด๋‹ค.
      • ์ฝ”๋“œ ์ž‘์„ฑ์ด ์ž์œ ๋กญ์ง€๋งŒ, ๊ตฌํ˜„์ด ์–ด๋ ต๊ณ  ๋™์ผํ•˜๋‹ค๋Š” ๊ธฐ์ค€์ด ๋ชจํ˜ธํ•˜๋‹ค.

2020.06.21 (Day 10)

  1. Chapter 7. Expression and Assignment statements
    • Expression : ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ธฐ๋ณธ์ ์ธ ๊ณ„์‚ฐ ๋‹จ์œ„๋ฅผ ํ‘œํ˜„
      • order of operator & operand evaluation์— ๋Œ€ํ•ด ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.
      • ์šฐ์„ ์ˆœ์œ„์™€ ๊ฒฐํ•ฉ๋ฒ•์น™
      • ๋Œ€๋ถ€๋ถ„ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ณ„์‚ฐ ์šฐ์„ ์ˆœ์œ„๋Š” ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
      • ๋ช…๋ นํ˜• ์–ธ์–ด(imperative)์˜ ํ•ต์‹ฌ์€ assignment statement๋กœ ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.
        • ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด์ž ๋‹จ์ ์ด side effect(๋ถ€์ˆ˜์ ์ธ ํšจ๊ณผ) : ์ž์‹ ์˜ ์Šค์ฝ”ํ”„ ์™ธ๋ถ€์˜ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ
    • Arithmetic expression
      • ์—ฐ์‚ฐ์ž ์ˆ˜์— ๋”ฐ๋ผ Unary, Binary, Ternary operator๋กœ ๋ถ„๋ฅ˜
      • ์—ฐ์‚ฐ์ž ์œ„์น˜์— ๋”ฐ๋ผ Prefix, Infix, Postfix operator๋กœ ๋ถ„๋ฅ˜
      • Evaluation order
        • Operator
          • Precedence rule : ์ˆ˜ํ•™์ž๋“ค์˜ ์ •์˜์— ์˜ํ•ด
          • (๊ด„ํ˜ธ -> ๋‹จ์ผ ์—ฐ์‚ฐ์ž -> ์Šน์ˆ˜(power) -> ๊ณฑ์…ˆ ๋‚˜๋ˆ—์…ˆ -> ๋ง์…ˆ ๋บ„์…ˆ)
          • Associativity rule : ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•˜๋‚˜, ์Šน์ˆ˜์˜ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๊ณ„์‚ฐ
        • Operand
          • ์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ, side-effect๊ฐ€ ์žˆ๋‹ค๋ฉด evaluation ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
          • functional side-effect : ์ž์‹ ์˜ ์ธ์ž, ๋˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํ•จ์ˆ˜
          int a = 5;
          int fun1() {
              a = 17;
              return 3;
          }
          void main() {
              a = a + fun1(); //์™ผ์ชฝ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ 8, ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ 20.
          }
          • functional side-effect๋Š” ํ‘œ์ค€์ด ์—†์œผ๋ฏ€๋กœ, Implementer์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
      • Referential transparency
        • result = (fun(a) + b) / (fun(a) - c);์—์„œ temp = fun(a); ์ดํ›„ fun(a)๋ฅผ temp๋กœ ๋ฐ”๊ฟ”๋„ ๋™์ผ ํ•œ ๊ฒฝ์šฐ Referential transparency ์กด์žฌ
        • ํ•จ์ˆ˜ fun์ด side effect๊ฐ€ ์—†์–ด์•ผ ๊ฐ€๋Šฅ
        • program์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์žฅ์ 
        • Pure functional language๋Š” assignment ์—†์Œ -> side-effect ์—†์Œ -> referential transparency ๊ฐ€์ง
    • Overloaded operator
      • ํ•˜๋‚˜์˜ operator๊ฐ€ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉด operator overloaded ์ƒํƒœ
      • ex) ์ •์ˆ˜์˜ ๋ง์…ˆ(+)์—ฐ์‚ฐ๊ณผ ์‹ค์ˆ˜์˜ ๋ง์…ˆ(+)์—ฐ์‚ฐ
      • compiler์˜ error detection ๋ฐฉํ•ด์™€ ๊ฐ€๋…์„ฑ ์ €ํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
      • user-defined overloaded operator
        • ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€
        • ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ ์ €ํ•ด
    • Type conversion
      • narrowing conversion : ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ ๅคง -> ์‚ฌ์ด์ฆˆ ๅฐ, ๋ฐ์ดํ„ฐ ์œ ์‹ค
      • widening conversion : ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ ๅฐ -> ์‚ฌ์ด์ฆˆ ๅคง, ๋ฐ์ดํ„ฐ ๋ณด์กด
      • mixed mode : operand๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ type์„ ๊ฐ€์ง„ expression์„ mixed mode๋ผ๊ณ  ํ†ต์นญ
        • type conversion
          • widening conversion์˜ ๊ฒฝ์šฐ ***coercion(Implicit type conversion)***์ด ๋ฐœ์ƒ
            • program์„ ์ž‘์„ฑํ•˜๊ธฐ ํŽธ๋ฆฌํ•ด์ง
            • compiler์˜ error detection ๋Šฅ๋ ฅ ์ €ํ•˜(์‹ค์ˆ˜ ์œ ๋ฐœ ๊ฐ€๋Šฅ์„ฑ)
            • C๊ธฐ๋ฐ˜ ์–ธ์–ด์—์„œ๋Š” int๋ณด๋‹ค ์ž‘์€ type์˜ ๋ง์…ˆ์€ int๋กœ coercion ํ›„ ๊ณ„์‚ฐ
          • Explicit Type conversion (Casting in C) ๋ช…์‹œ์ 
    • Errors in expression
      • div by zero, overflow -> exception handler๋กœ ์ฒ˜๋ฆฌ

2020.06.22 (Day 11)

  1. Chapter 7. (cont.)

    • Boolean Expression
      • JS์™€ PHP์—์„œ๋Š” ==๋Š” type conversion์ดํ›„ ๊ฐ’์„ ๋น„๊ตํ•˜์ง€๋งŒ ===์€ type conversion ์—†์ด ๋น„๊ต
          "7" == 7 // true, "7"์€ intํ˜•์œผ๋กœ coerced ๋จ
          "7" === 7 // false, "==="์€ coerce ์ ์šฉํ•˜์ง€ ์•Š์Œ
      if(a < b < c) // a < b evaluation ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜(true ๋˜๋Š” false)๋˜๊ณ , ๊ทธ ๊ฐ’๊ณผ c๋ฅผ ๋น„๊ต 
    • Short circuit evaluation
      • ์ „์ฒด๋ฅผ evaluationํ•˜์ง€ ์•Š๊ณ , ์ผ๋ถ€๋ถ„๋งŒ evaluation์„ ํ•˜๋ฉด ์ „์ฒด ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
      int index = 0;
      while((index < length) && LIST[index] != value) // short-circuit evaluation ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
          index++;
      
      (a > b) || (b++ / 3); // b์˜ ๊ฐ’์€ a <= b์ธ ๊ฒฝ์šฐ๋งŒ ๋ณ€๊ฒฝ
      // short-circuit evaluation ์ƒํ™ฉ์—์„œ side effect๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋งค์šฐ ๋ถ€์ ์ ˆํ•œ ์ƒํ™ฉ 
    • Assignment statement
      • =์— assign๊ณผ comparison 2๊ฐœ์˜ ๊ธฐ๋Šฅ์„ overloadingํ•˜๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•˜๋ฏ€๋กœ == ์‚ฌ์šฉ
      • Conditional targets
        ($flag ? $total : &subtotal) = 0 // flag๊ฐ€ true์ด๋ฉด total = 0; ์•„๋‹ˆ๋ฉด subtotal = 0;
      • Compound assignment operator : a += b => a = a + b
      • Unary assignment operator : a++ or ++a
      • Assignment as an Expression : while((ch = getchar()) != EOF) {...}
        • side-effect๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค๊ฒŒ ํ•จ
        • ์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
        • ex) a = b + (c = d / b) - 1;
      • Multiple assignment : ($first, $second, $third) = (20, 30, 40);
      • Assignment in functional language
        • ์ˆœ์ˆ˜ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์—๋Š” assignment๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
        • val fruit = apples + oranges;๋Š” val ์— ๊ฐ’์„ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์ž‘์—…
        • ์œ„์™€ ๊ฐ™์ด ๋ฐ”์ธ๋”ฉํ•˜๋ฉด ๊ฐ’์„ ์ ˆ๋Œ€ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์Œ(ํ•„์š”์‹œ re-binding ํ•ด์•ผํ•จ)
  2. Chapter 8. Statement-Level Control structures

    • Control structure : statement๊ฐ„์— program flow๋ฅผ controlํ•˜๋Š” ๊ตฌ์กฐ ex) if-else, for,...
    • Selection statements
      • two-way : if - then
        • nesting selector(์ค‘์ฒฉ if๋ฌธ)์˜ ๊ฒฝ์šฐ else๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด if์— ๋งค์นญ์ด ๋œ๋‹ค.
        • Selector expression : ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์—์„œ๋Š” if๊ฐ€ expression ์—ญํ• ๋„ ํ•  ์ˆ˜ ์žˆ์Œ
      • multiple-way : switch
        • switch(control expr)์—์„œ control expr์€ ์–ด๋–ค type์„ ํ—ˆ์šฉํ•  ๊ฒƒ์ธ์ง€?
        • ํ•ด๋‹นํ•˜๋Š” case๋งŒ ์‹คํ–‰์‹œํ‚ฌ ๊ฒƒ์ธ์ง€, ๋‹ค์Œ case์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ธ์ง€?
        • C#์™€ C/C++์—์„œ์˜ ์ฐจ์ด์ 
          • switch๋ฌธ ๋‚ด์—์„œ ํ•œ๊ฐœ์˜ case(segment๋ผ๊ณ  ์นญํ•จ)๋งŒ ์‹คํ–‰ํ•ด์•ผํ•จ. ์ฆ‰, ๊ฐ case ๋งˆ๋‹ค unconditional branch(break)๋กœ ๋งˆ๋ฌด๋ฆฌ ํ•ด์•ผํ•จ
          • control expr์ด string์ด์—ฌ๋„ ์‹คํ–‰์ด ๊ฐ€๋Šฅ
        • Scheme์˜ ๊ฒฝ์šฐ COND๋ฅผ ์‚ฌ์šฉ
        (COND
            ((> x y) "x is greater than y")
            ((< x y) "y is greater than x")
            (ELSE "x and y is equal")
        )
    • Iterative statements
      • Counter-Controlled Loop, ex)for-loop
        • loop variable + (initial; terminal; stepsize)
        • C์™€ C++์˜ ์ฐจ์ด์ 
          1. terminal(control) expression์ด boolean๋„ ํ—ˆ์šฉ
          2. C++์—์„  initial expression์— ๋ณ€์ˆ˜ ์„ ์–ธ๋„ ๊ฐ€๋Šฅ
        • Java์™€ C#
          • terminal(control) expression์€ ๋ฌด์กฐ๊ฑด boolean๋งŒ ๊ฐ€๋Šฅ
        • functional language์—์„œ์˜ counter-controlled loop
          • functional language์—๋Š” assignment๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
          • ๋”ฐ๋ผ์„œ variable์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, recursive call๋กœ ๊ตฌํ˜„
      • Logically-Controlled Loop, ex)while, do-while
        • pretest(loop ์ˆ˜ํ–‰ ์ „ ์กฐ๊ฑด ๊ฒ€์‚ฌ) & posttest(loop ์ˆ˜ํ–‰ ํ›„ ์กฐ๊ฑด ๊ฒ€์‚ฌ)
        • Java๋Š” ํ•ญ์ƒ boolean ํƒ€์ž…์ด์—ฌ์•ผํ•˜๋ฉฐ, goto๋ฌธ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
      • User-Located loop control - Loop ๋„์ค‘ ์ œ์–ด(continue, break)
      • Iteration based on Data structure
        • C ex) for (p = root; p != NULL; traverse(p)) {...}์—์„œ traverse๋Š” iterator function
        • PHP์—์„œ๋Š” current(), next(), reset()์„ ์ œ๊ณตํ•œ๋‹ค.
        • C#, Java 5.0์—๋Š” foreach์‚ฌ์šฉ
      • Uncoditional branching : goto
        • ์ค‘๋ณต๋œ ๋ฐ˜๋ณต๋ฌธ์„ ํ•œ๋ฒˆ์— breakํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    • Guarded Commands
      • ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์„ ๊ฐœ๋ฐœ
      • concurrent(๋™์‹œ์„ฑ)์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, evaluation ์ง„ํ–‰์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Œ(๋ฐ”๋€Œ์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์Œ)
      • Selection Guarded Command
        if <Boolean expr> -> <statement>
        [] <Boolean expr> -> <statement> 
        ...
        [] <Boolean expr> -> <statement>
        fi
        • ๋ชจ๋“  boolean expr์€ parellelํ•˜๊ฒŒ(์ˆœ์„œ์— ์ƒ๊ด€์—†์ด) evaluation
        • ํ•˜๋‚˜๋ผ๋„ true๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ ์ฐธ์ธ statement์ค‘ randomํ•˜๊ฒŒ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰
        • ๋ชจ๋‘ false์ธ ๊ฒฝ์šฐ error ๋ฐœ์ƒ
      • Loop Guarded Command
        do <Boolean expr> -> <statement>
        [] <Boolean expr> -> <statement>
        ...
        [] <Boolean expr> -> <statement>
        od
        • ์œ„์™€ ๋™์ผํ•˜๊ฒŒ ๋ชจ๋“  expr์„ evaluateํ•จ
        • ํ•˜๋‚˜๋ผ๋„ true์ธ expr์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋Ÿฌํ•œ expr ์ค‘ randomํ•˜๊ฒŒ ์„ ํƒํ•˜์—ฌ ์‹คํ–‰
        • ์‹คํ–‰ ํ›„์—๋Š” ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ˜๋ณต
        • ๋ชจ๋“  expr์˜ evaluation result๊ฐ€ false์—ฌ์•ผ ์ข…๋ฃŒ
  3. Chapter 9. Subprograms

    • Function & Procedure
      • Procedure : return value๊ฐ€ ์—†์ด, ๋ช…๋ น์–ด์˜ ๋ฌถ์Œ์„ ๋œปํ•˜๋Š” ๋‹จ์–ด (void function)
      • Function : return value๊ฐ€ ์กด์žฌํ•˜์—ฌ ๊ฒฐ๊ณผ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ
      • subprogram = procedure + function
    • ๋ชจ๋“  subprogram์€ entry point(์ง„์ž…์ )์ด 1๊ฐœ์ด๋‹ค.
    • calling program์€ called subprogram์ด ์ข…๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ์ •์ง€ํ•ด์žˆ๋Š”๋‹ค.
    • subprogram definition & call
      • subprogram definition : void f() { ... }
      • subprogram call : f()
      • subprogram active : ํ˜ธ์ถœ๋˜์–ด ์•„์ง return ํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ค‘์ธ ์ƒํƒœ
      • Python์—์„  function definition์ด excutable(์ƒํ™ฉ์— ๋งž๊ฒŒ ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.)
      if a == 1   // a๊ฐ€ 1์ธ ๊ฒฝ์šฐ
          def fun(...) :
              ...
      else    // a๊ฐ€ 1์ด ์•„๋‹Œ ๊ฒฝ์šฐ
          def fun(...) :
              ...
      • ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ํ•„์š”ํ•œ type๊ณผ ๋ฐ˜ํ™˜ํ˜•, ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ : function declarations
      • formal parameter(ํ•จ์ˆ˜ ์ •์˜ ์‹œ) vs. actual parameter(ํ˜ธ์ถœ ์‹œ)
    • Actual/Formal Parameter corresdpondence(๋งคํ•‘)
      1. positional : ์ฒซ๋ฒˆ์งธ actual parameter๋Š” ์ฒซ๋ฒˆ์งธ formal parameter๋กœ...
        • ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ 
      2. keyword : void f(int a, int b); f(a = 1, b = 2);
        • ์ž„์˜์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”๋„ ์ƒ๊ด€์—†๊ณ , ๋งคํ•‘์ด ๋ถ„๋ช…ํ•จ
        • ๊ฐœ๋ฐœ์ž๊ฐ€ formal parameter ์ด๋ฆ„์„ ์ „๋ถ€ ์•Œ์•„์•ผ ํ•จ
    • Formal parameter default value
      • python์˜ default ๊ฐ’
      def compute_pay(income, exemption = 1, tax_rate)
      pay = compute_pay(20000.0, tax_rate = 0.15) // exemption = 1์ด ์ž๋™์œผ๋กœ ์‚ฝ์ž…
    • ๊ฐ€๋ณ€์ธ์ž ํŒŒ๋ผ๋ฏธํ„ฐ
      • ์ธ์ž์˜ ์ˆ˜๊ฐ€ ๊ณ ์ •์ด ์•„๋‹Œ, ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ex)printf
      • ์œ„์˜ default value๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์–ธ์–ด์—์„œ๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ง€์›ํ•˜์ง€ ์•Š์Œ
      • positional ๋งคํ•‘ ๋ฐฉ์‹์—์„œ๋งŒ ๊ฐ€๋ณ€์ธ์ž ์ œ๊ณต
      • C#์—์„œ๋Š” paramsํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ •์˜๊ฐ€๋Šฅ(๊ฐ™์€ data type์— ํ•œํ•ด)
    • Local referencing environments
      • subprogram์˜ local variable์„ ์ €์žฅ๊ณต๊ฐ„์„ stack-dynamic ๋˜๋Š” staticํ•˜๊ฒŒ ํ• ๋‹น
      • ๋Œ€๋ถ€๋ถ„์˜ ํ˜„์žฌ ์–ธ์–ด๋Š” stack-dynamicํ•œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ฆ
    • Parameter passing inout
      1. In mode
      2. Out mode
      3. Inout mode
    • Implementation model of "Parameter Passing"
      1. Pass(Call)-by-Value (In Mode)
        • ๋‹จ์ˆœ ๋ณต์‚ฌ(๊ฐ’ ๋˜๋Š” ํฌ์ธํ„ฐ)๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค
        • disadvantage
          • Physical move method : 2์ค‘์œผ๋กœ ์ €์žฅ๊ณต๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.(์ €์žฅ๊ณต๊ฐ„ ๋‚ญ๋น„, ๋ณต์‚ฌ์— ์ด์šฉ)
          • Access Path method : subprogram์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋„๋ก write protect๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ•˜๋ฉฐ, indirect addressing์œผ๋กœ ์ธํ•ด ์†๋„๊ฐ€ ์ €ํ•˜๋œ๋‹ค.
      2. Pass-by-Result (Out Mode)
        • Out Mode์˜ ๊ฐœ๋…์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„
        • formal parameter๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ , call ์ข…๋ฃŒ ์‹œ actual parameter๋กœ ์ „๋‹ฌ
        • potential problem
          • actual parameter๋กœ ๋™์ผํ•œ ๋ณ€์ˆ˜๋ฅผ 2๋ฒˆ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ (f(out a, out a);)๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ
          • ๋˜๋Š” f(out list[sub], sub)์ฒ˜๋Ÿผ ๋ณ€์ˆ˜๊ฐ„์˜ dependency๋ฅผ ๊ฐ€์ง„ ์ฑ„๋กœ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ out mode๋ฅผ ์ง€์ •ํ•  ์œ„์น˜๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Œ
      3. Pass-by-Value-Result (Inout Mode) : Pass-by-Value + Pass-by-Result
        • Pass-by-Value์˜ ๋‹จ์ ๊ณผ Pass-by-Result์˜ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
      4. Pass(Call)-by-Reference (Inout Mode)
        • Access path๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹
        • Passing process๊ฐ€ ํšจ์œจ์ ์ด๋‹ค
        • disadvantage
          • Slower Access ์†๋„
          • ์›ํ•˜์ง€ ์•Š๋Š” aliases๊ฐ€ ๋ฐœ์ƒํ•ด ๊ฐ€๋…์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ ์ €ํ•˜
          • ex) fun(total, total) , i = j; fun(list[i], list[j]);
      5. Pass-by-Name (Inout Mode)
        • textual substitution(๋‹จ์ˆœ ๋Œ€์ฒด)
        • C์–ธ์–ด์—์„œ๋Š” ๋งคํฌ๋กœ ํ•จ์ˆ˜๋กœ ์ด์šฉ
    • Type checking parameters : ์ผ์ • ๋ถ€๋ถ„์€ ํ•˜๊ณ  ์ผ์ • ๋ถ€๋ถ„์€ ํ•˜์ง€ ์•Š์Œ(์†๋„ ๋ฌธ์ œ๋กœ ์ธํ•ด)
    • Multidimensional array as Parameter
      • C์–ธ์–ด์—์„œ๋Š” void f(int x[][20]) {...} , void f(int **x, int xsize, int ysize)
      • Java, C#์—์„œ๋Š” ๋ฐฐ์—ด ์ž์ฒด๊ฐ€ ๊ฐ์ฒด์ž„์œผ๋กœ ๋ฐฐ์—ด๋งŒ ๋„˜๊ธฐ๋ฉด ๋จ -> more flexible
    • High-order function(subprogram์„ ์ธ์ž๋กœ ํ•˜๋Š” ํ•จ์ˆ˜)
      • subprogram๊ณผ Referencing Environment๋ฅผ ์ „์†กํ•ด์•ผํ•œ๋‹ค.
        1. Shallow binding : dynamic-scoped (call-chain์ƒ ์ƒ์œ„ nonlocal)
        2. Deep binding : static-scoped (code์ƒ enclosing environemt์˜ nonlocal)
        3. Ad hoc binding : parameter passing์„ ์•ผ๊ธฐํ•œ ํ•จ์ˆ˜์˜ environment๋ฅผ ์ด์šฉ
    • Function pointer : calling subprograms indirectly
      • C / C++
        • ์„ ์–ธ : void (*plot)(int x, int y);
        • ์ฐธ์กฐ : (*plot)(10, 20) ๋˜๋Š” plot(10, 20)
      • C#
        • delegate๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฆ‡
        public delegate int Change(int x); // delegate ์„ ์–ธ
        static int fun1 (int x) {}; // fun1 ์„ ์–ธ
        Change chgfun1 = new Change(fun1); // delegate instantiate
        chgfun1(12); // fun1(12)์™€ ๋™์ผ
        chgfun1 += fun2; // fun2 ํ•จ์ˆ˜ ์ถ”๊ฐ€
        chgfun1(20); // fun1(20)๊ณผ fun2(20) ๋‘˜ ๋‹ค ํ˜ธ์ถœ
    • Overloaded subprogram : ํ•จ์ˆ˜ ์ด๋ฆ„์€ ๋™์ผํ•˜๋‚˜, ์ธ์ž ์ˆ˜ ๋˜๋Š” type์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ
      • return type ๊ตฌ๋ถ„์—ฌ๋ถ€๋Š” implementation์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค
    • Generic subprogram
      • cf) Overloaded subprogram => ad hoc polymorphism์ด๋ผ๊ณ  ํ•จ
      • Subtype polymorphism
      • Parametric polymorphism : template programming
      template <class Type>
          Type max(Type first, Type second) {...}
      • User-Defined Overloaded operator : operator+, def __add__(self, second):

      Closure : subprogram + referencing environment

      • ์ž„์˜์˜ ์žฅ์†Œ์—์„œ ์‹คํ–‰ํ•ด๋„ ์‹คํ–‰์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ref env.๋ฅผ ํฌํ•จ
      • nested subprogram์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” static-scoped language๋Š” closure๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
      // this is JAVASCRIPT version
      function makeAdder(x) {
          return function(y) {return x + y;} // returning closure(include nonlocal variable)
      }
      ...
      var add10 = makeAdder(10);
      var add5 = makeAdder(5);
      document.write("add 10 to 20: " + add10(20));
      document.write("add 5 to 20: " + add5(20));
      // this is C# version
      static Func<int, int> makeAdder(int x) {
          return delegate(int y) {return x + y;};
      }
      • Coroutines
        • ์‹œ์ž‘์ ์ด ์—ฌ๋Ÿฌ๊ณณ์ด๋ฉฐ, ์ด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” subprogram
        • Caller์™€ Callee๊ฐ€ ๋™๋“ฑํ•œ ๊ด€๊ณ„ : symmetric control
        • coroutine์˜ call์€ resume ์ด๋ผ๊ณ  ํ•จ
        • ์ฒซ๋ฒˆ์งธ call์—๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘์ด ๋˜๋‚˜, ์ด์–ด์ง€๋Š” call์—์„œ๋Š” ์ด์ „ execution์‹œ์— ์ค‘์ง€๋ฌ๋˜ ์ฝ”๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘
        • caller์™€ callee๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋ฌดํ•œํžˆ ํ˜ธ์ถœ๋„ ๊ฐ€๋Šฅ
        • quasi-concurrent execution์„ ์ œ๊ณต : ์„œ๋กœ ๋™์‹œ์— ํ˜ธ์ถœ๋˜์–ด ๋ณด์ด์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์‹คํ–‰์€ ๋…๋ฆฝ๋˜์–ด์žˆ์œผ๋ฉฐ, ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
        • Time sharing ๋ฐฉ์‹์ด์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฝ”๋“œ๊ฐ€ parellelํ•˜๊ฒŒ ์‹คํ–‰

2020.06.23 (Day 12)

  1. Chapter 10. Implementing Subprograms
    • subprogram linkage : 1subprogram call and 2return operations
    • general semantics of calls to a subprogram
      • parameter passing methods
      • Stack-dynamic allocation of local variables
      • Save the execution status of calling program
      • Transef of control and arrange for the return
      • If subprogram nesting is supported, access to nonlocal variables
    • returns to a subprogram
      • out mode parameters must have their values returned
      • Deallocation of local variables
      • Restore the execution status
      • Return control to the caller
    • Implementing "Simple" subprogram : local & nonlocal variable ์—†์Œ, nested ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ, parameter passing๋งŒ ์กด์žฌ
      • Required storage : Status information, parameters, return address, return value for functions, temporaries => ์ฃผ๋กœ stack segment ์‚ฌ์šฉ
      • Required storage๋Š” 2๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Œ. actual code part, non-code part(data part)
      • excuting subprogram์˜ non-code part ๊ตฌ์กฐ๋ฅผ activation record๋ผ๊ณ  ํ•œ๋‹ค.
      • activation record instance๋Š” ์ด๋Ÿฌํ•œ activation record์˜ ์‹ค์ œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ด๋‹ค.
      • ARI ๊ตฌ์„ฑ : Return address, Parameter, Local variables + (Nested๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ Non-local variables)
      • ์ฃผ๋กœ Stack segment์— ํ• ๋‹น ๋ฐ ํ™œ์šฉ(recusion์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด)
    • "Typical" activation record instance : instance format์€ ๊ณ ์ •, size๋Š” ๊ฐ€๋ณ€
      • Local variables : size๊ฐ€ ๊ฐ€๋ณ€์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง, local variables ์ˆ˜์— ๋”ฐ๋ผ ARI ์‚ฌ์ด์ฆˆ๊ฐ€ ๋‹ฌ๋ผ์งˆ์ˆ˜ ์žˆ์Œ
      • Parameters : formal parameters, parameter ์ˆ˜์— ๋”ฐ๋ผ ์ด ๋˜ํ•œ ๊ฐ€๋ณ€ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง
      • Dynamic link : ํ•ด๋‹น instance๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ด์ „(Call ์‹œ์ )์— Stack์˜ top address(non-code part)๊ฐ€ ์–ด๋””์˜€๋Š”์ง€๋ฅผ ์ €์žฅ(ARI deallocation ์ดํ›„ ์–ด๋””๋กœ ๊ฐ€์•ผํ• ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ) == Environment pointer
      • Return address : code part๊ฐ€ ํ• ๋‹น ํ•ด์ œ ์ดํ›„ code-part๊ฐ€ ๋Œ์•„๊ฐˆ ์œ„์น˜๋ฅผ ์ง€์ •
    • non-code๋ถ€๋ถ„(data part)์˜ ARI ๊ทธ๋ฆฌ๊ธฐ
      • Return address, Dynamic link, parameters, local variables ์ˆœ์œผ๋กœ ๊ทธ๋ฆฌ๊ธฐ
    • Dynamic Chain : Stack์˜ dynamic link๋ฅผ ๋”ฐ๋ผ์„œ ์ƒ์„ฑ๋˜๋Š” subprogram ํ˜ธ์ถœ ์ˆœ์„œ (call-chain์ด๋ผ๊ณ ๋„ ํ•จ)
    • Local offset : local variable์€ EP์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ. ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ local offset์ด๋ผ๊ณ  ํ•จ
    • recursion์ด ์žˆ๋‹ค๋ฉด functional value ํ•ญ๋ชฉ์„ ARI format์— ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ’์„ ๊ณ„์‚ฐ
    • Nested subprogram์„ ํ—ˆ์šฉํ•˜๋Š” ์–ธ์–ด์—์„œ์˜ ARI(nonlocal variable ์ฐธ์กฐ)
      1. static scope, dynamic scope rule์— ๋”ฐ๋ผ ํ•ด๋‹นํ•˜๋Š” ARI ์ฐพ๊ธฐ
      2. ARI๋‚ด ์—์„œ ํ•ด๋‹นํ•˜๋Š” variable์˜ offset์„ ์ฐพ๊ธฐ
      • Static scoping
        • offset์€ code๋ฅผ ๋ณด๋ฉด ์ž์‹ ์˜ enclosing subprogram์„ ๋ณด๋ฉด ์ฐพ๊ธฐ ์‰ฌ์›€
        • ๋ฌธ์ œ๋Š” activation record๋ฅผ ์ฐพ๋Š” ๊ฒƒ
          • static link field๋ฅผ activation record format์— ์ถ”๊ฐ€
          • ์ž์‹ ์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ์ƒ์œ„ subprogram์„ ๊ฐ€๋ฅดํ‚ค๋„๋ก ์„ค์ •
          • ์ด๋Ÿฌํ•œ static link์˜ ์—ฐ์†์„ static chain์ด๋ผ๊ณ  ํ•จ. static chain ์„ ํƒ์ƒ‰ํ•˜๋ฉด nonlocal variable์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
          • Static depth ๋˜๋Š” chain offset์€ static scope ๊ด€์ ์—์„œ ๋ช‡ ๋ฒˆ static link๋ฅผ ๋”ฐ๋ผ๊ฐ€์•ผ ํ•ด๋‹น nonlocal variable์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐœ๋…
        • ๋”ฐ๋ผ์„œ static scope์—์„œ๋Š” (Static depth, local offset)์œผ๋กœ nonlocal variable์„ ์ฐธ์กฐ
          • ex) (2, 3)์€ static link์„ 2๋ฒˆ ๋”ฐ๋ผ๊ฐ„ ARI์˜ 3๋ฒˆ์งธ ํ•ญ๋ชฉ์ด ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” variable์ด๋‹ค.
        • example) p.29 ์ฐธ์กฐ
          โ€ป Dynamic link๋Š” ARI stack์˜ top์ฃผ์†Œ, Static link๋Š” ARI์˜ begining ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
        • Static link๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•
          • Dynamic Chain ์ „์ฒด๋ฅผ ์‚ดํŽด๋ณด๋Š” ํƒ์ƒ‰
          • nonlocal variable์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด static depth๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹ ๋„ˆ๋ฌด ์ž์„ธํžˆ ์•Œ ํ•„์š”์—†๋‹ค
        • static chain์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ๋Š๋ฆฌ๋‹ค -> C์—์„œ๋Š” nested subprogram ์ง€์›์•ˆํ•จ
      • Dynamic scoping
        • Deep Access : dynamic link๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํ•ด๋‹นํ•˜๋Š” nonlocal variable์ด ์กด์žฌํ•˜๋Š” ์ง€ ํ™•์ธ
          • Chain์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด, ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ
          • ARI์— ๋ณ€์ˆ˜์˜ ๊ฐ’ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋ฆ„๋„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
        • Shallow Access : ๋ณ€์ˆ˜ ๋ณ„ Stack์„ ์œ ์ง€ํ•ด, stack์˜ top์œผ๋กœ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ ์–ธ๋œ ๊ณณ์ด ์–ด๋”˜์ง€ ์ฐพ์•„๋ƒ„
          • ์†๋„๋Š” ๋น ๋ฅด์ง€๋งŒ, ๋„ˆ๋ฌด๋‚˜ ํฐ ์šฉ๋Ÿ‰์„ ์‚ฌ์šฉ
          • ๊ตฌํ˜„์— ์–ด๋ ค์›€์ด ์žˆ์Œ
      • blocks : ์ด๋ฆ„์ด ์—†๋Š” subprogram
        • implementation ๋ฐฉ์‹์ด subprogram์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์ง€๋งŒ ์ด๋ฆ„์ด ์—†๋‹ค.
        • ๊ทธ๋Ÿฌ๋‚˜, ARI์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ•ด์ œํ•˜๋Š”๋ฐ ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ฐ€๋…์„ฑ์€ ์ฆ๊ฐ€ํ•œ๋‹ค.

Algorithm 13. NP-Completeness

  • ํ˜„์‹ค์ ์ธ ์‹œ๊ฐ„ : ๋‹คํ•ญ์‹ ์‹œ๊ฐ„(n์˜ ๋‹คํ•ญ์‹์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”)
  • ๋น„๋‹คํ•ญ์‹ ์‹œ๊ฐ„์˜ ์˜ˆ : 2n, n!
  • YES/No ๋ฌธ์ œ์˜ ๋ฐ˜๋ณต์œผ๋กœ ์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ๋Œ€๋ถ€๋ถ„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ NP-Complete ์ด๋ก ์—์„  YES/NO๋ฅผ ์ค‘์ ์œผ๋กœ ๋‹ค๋ฃธ
  • ๋‹คํ•ญ์‹ ์‹œ๊ฐ„ ๋ณ€ํ™˜(Polynomial time reduction)
    • ๋‹ต์ด ํ•ญ์ƒ ๋™์ผํ•œ(T->T, F->F) ๋‹ค๋ฅธ ๋ฌธ์ œ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋‹คํ•ญ์‹ ์‹œ๊ฐ„
    • ์ฆ‰, ๋‘˜ ์ค‘ ์‰ฌ์šด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ๋„ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์‰ฌ์šด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ + ๋‹คํ•ญ์‹ ์‹œ๊ฐ„ ๋ณ€ํ™˜ => ์›๋ž˜ ํ’€๊ณ ์ž ํ–ˆ๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ
      1. ๋ฌธ์ œ์˜ ๋‹ต์€ ํ•ญ์ƒ ๋™์ผํ•˜๊ฒŒ ๋‚˜์™€์•ผํ•œ๋‹ค
      2. ๋‹ค๋ฅธ ๋ฌธ์ œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ๋‹คํ•ญ์‹ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
    • ์œ„ 2๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ๋‹คํ•ญ์‹ ์‹œ๊ฐ„ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • P / NP
    • P : Deterministic turing machine์—์„œ ๋‹คํ•ญ์‹ ์‹œ๊ฐ„์— ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ ์ง‘ํ•ฉ
    • NP : Non-deterministic turing machine์—์„œ ๋‹คํ•ญ์‹ ์‹œ๊ฐ„์— ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ ์ง‘ํ•ฉ
      • Yes์— ํ•ด๋‹นํ•˜๋Š” ํ•ด๋ฅผ ์ œ๊ณตํ–ˆ์„๋•Œ, ์ด๊ฒƒ์ด Yes๊ฐ€ ๋งž๋Š” ์ง€ ๊ฒ€์ฆํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋‹คํ•ญ์‹ ์‹œ๊ฐ„์ด๋ผ๋ฉด NP ๋ฌธ์ œ
    • P์˜ ๋ฌธ์ œ๋Š” ๋ชจ๋‘ Non-deterministic turing machine์—์„œ๋Š” ๋‹คํ•ญ์‹ ์‹œ๊ฐ„์•ˆ์— ํ•ด๊ฒฐ (P => NP)
    • ๊ทธ๋Ÿฌ๋‚˜ NP์˜ ๋ฌธ์ œ๊ฐ€ P๊ฐ€ ๋˜๋Š”์ง€๋Š” ๋ฐํ˜€์ง€์ง€ ์•Š์Œ (NP !=> P)
  • NP-complete / NP-hard
    • NP-hard : ๋ชจ๋“  NP๋ฌธ์ œ๊ฐ€ ๋ฌธ์ œ L๋กœ ๋‹คํ•ญ์‹ ์‹œ๊ฐ„์— ๋ณ€ํ™˜๊ฐ€๋Šฅํ•˜๋ฉด L์€ NP-hard
    • NP-complete
      • L์ด NP์ด๊ณ ,
      • L์ด NP-hard์ด๋ฉด L์€ NP-complete์ด๋‹ค.
    • NP-complete๋Š” NP-hard์˜ ํฌํ•จ๊ด€๊ณ„์ด๋‹ค.(NP-complete => NP-hard)
    • ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๊ฐ€ NP๋ผ๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— NP-hard์— ์ง‘์ค‘
    • ๋‹ค๋ฅธ NP-hard๋ฌธ์ œ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋„ NP-hard ์ •๋ฆฌ ๊ฐ€๋Šฅ
      • ์•Œ๋ ค์ง„ ์ž„์˜์˜ NP-hard ๋ฌธ์ œ A๋ฅผ L๋กœ ๋‹คํ•ญ์‹ ์‹œ๊ฐ„์— ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค
      • ๊ทธ๋ ‡๋‹ค๋ฉด L๋„ NP-hard ์ด๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ํ•ด๋ฐ€ํ† ๋‹ˆ์•ˆ ์‚ฌ์ดํด์„(๋ชจ๋“  ์ •์ ์„ ๊ฑฐ์ณ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€) TSP๋กœ ๋ณ€ํ™˜ np-hard 2
  • ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋Š” P๋ฌธ์ œ์ด์ง€๋งŒ, ์ตœ์žฅ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋Š” NP๋ฌธ์ œ์ด๋‹ค.
  • NP ์ด๋ก ์˜ ์œ ์šฉ์„ฑ
    • ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ํ’€๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ, ์ฐจ์„ ์ฑ…์ธ greedy(ํœด๋ฆฌ์Šคํ‹ฑ)์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฑ„ํƒํ•œ๋‹ค.
  • NP์™€ NP-complete, hard์˜ ๊ด€๊ณ„ relation

2020.06.24 (Day 13)

Algorithm 10. Graph algorithm

  • ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ๋ฒ•
    • ์ธ์ ‘ ํ–‰๋ ฌ : N*N ํ–‰๋ ฌ๋กœ edge์˜ ๊ฐ€์ค‘์น˜ ์ €์žฅ -> ๊ฐ€์žฅ ๋น ๋ฅด๋‚˜, ๊ณต๊ฐ„ ๋‚ญ๋น„
    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅ -> ๊ฐ€์žฅ ๊ณต๊ฐ„ ํšจ์œจ์ ์ด๋‚˜
    • ์ธ์ ‘ ๋ฐฐ์—ด -๊ฐ ์ •์ ๋งˆ๋‹ค ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜์—ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๋งํฌ๋ถ€๋ถ„์˜ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•˜๋ฉฐ ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅ
      • ๊ฐ ์ •์ ์˜ ๊ธด ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ๋„ ์ €์žฅ ๊ฐ€๋Šฅ(๊ฐ ์ •์ ์˜ ์ธ์ ‘ ์ •์  ์ˆ˜ ์ €์žฅ ์‹œ)
      • ๊ทธ๋ž˜ํ”„์˜ ๋ณ€ํ™”๊ฐ€ ์—†์–ด์•ผ ํšจ์œจ์ 
  • ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์  ๋ฐฉ๋ฌธ(traversal)
    • DFS(Depth-First-Search) => ฮ˜(|V| + |E|)
      DFS(G) {
          for each v โˆˆ V
              visied[v] = NO;
          for each v โˆˆ V
              if(visited[v] = NO) then aDFS(v); // ๋ชจ๋“  ์ •์ ์ด ๋ฐฉ๋ฌธ์ด ์•ˆ๋  ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, 
              // BFS๋„ ๋ชจ๋“  ์ •์  ๋ฐฉ๋ฌธ์ด  ์•ˆ๋  ๊ฒฝ์šฐ for๋ฌธ์œผ๋กœ ์ „์ฒด ๋ฐฉ๋ฌธ
      }
      aDFS(v) {
          visited[v] = YES;
          for each x โˆˆ L(v)
              if(visited[x] = NO) then aDFS(x);
      }
    • BFS(Breadth-First-Search)
      BFS(G, s) {
          for each v โˆˆ V - {s}
              visited[v] = NO;
          visited[s] = YES;
          enqueue(Q, s);
          while(Q โ‰  empty) {
              u = dequeue(Q);
              for each v โˆˆ L(u)
                  if(visited[v] = NO) {
                      visited[u] = YES;
                      enqueue(Q, v);
                  }
          }
      }
  • ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ(Spanning tree)
    • ๊ทธ๋ž˜ํ”„์—์„œ ํฌํ•จ๋˜๋Š” ์ •์ ๊ณผ ๊ฐ„์„ ๋“ค๋งŒ ์ด์šฉํ•ด์„œ ๋งŒ๋“  ํŠธ๋ฆฌ(์‹ธ์ดํด์ด ์—†๋Š” ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„)
    • ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ(MST) : ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ์ค‘ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ํŠธ๋ฆฌ
  • ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Prim's algorithm)
    • ํ˜„์žฌ MST ์ƒ์„ฑ์ด ์™„๋ฃŒ๋œ ์ •์  ์ง‘ํ•ฉ S์™€ V-S ์ง‘ํ•ฉ ์‚ฌ์ด์˜ ์ตœ์†Œ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ์„ ์ฐพ์•„ ํ•ด๋‹น ์ •์ ์„ S์— ํฌํ•จ
    • ํฌํ•จ๋œ ์ •์ ์—์„œ ์ธ์ ‘ํ•œ ์ •์ ๋“ค์— ๋Œ€ํ•ด(V-S์— ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ) ์ด์™„์„ ์‹ค์‹œ primWithMinheap
    • ์ˆ˜ํ–‰์‹œ๊ฐ„ ๋ถ„์„
      • Edge๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ณด๋ฉด ๋ชจ๋“  edge๋Š” 2๋ฒˆ์”ฉ ํ™•์ธ, ๋˜ํ•œ heap์„ ๊ตฌ์„ฑํ•˜๊ณ  ์—…๋ฐ์ดํŠธ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„ O(log|V|)
      • ๋”ฐ๋ผ์„œ O(2|E|log|V|) => O(|E|log|V|)
    • Spannig tree๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„ 
      • ์ด์™„๋  ๋•Œ๋งˆ๋‹ค ์ด์™„์‹œํ‚จ ์ •์ (parent)์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€
      • ๋งˆ์ง€๋ง‰์— ์ถœ๋ ฅ
  • ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(kruscal algorithm)
    • Union-find๋ฅผ ์ด์šฉํ•ด ๋ชจ๋“  ์ •์ ์„ ๊ฐ์ž์˜ ์ง‘ํ•ฉ์œผ๋กœ setํ•œ๋‹ค
    • ๊ฐ„์„ ์€ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ์ˆœ๋ถ€ํ„ฐ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค
    • ์ตœ์†Œ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ์„ popํ•˜์—ฌ, ๋‘๊ฐœ์˜ ๊ฐ„์„ ์˜ ์ •์ ์ด ๊ฐ™์€ ์ง‘ํ•ฉ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.(์‚ฌ์ดํด์ด ํ˜•์„ฑ๋˜๋Š”์ง€)
    • ๋‹ค๋ฅธ ์ง‘ํ•ฉ์— ์žˆ๋‹ค๋ฉด ๋‘ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค.
    • ๊ฐ„์„ ์ด vertex-1๊ฐœ ๋ณด๋‹ค ์ž‘์€ ๋™์•ˆ(ํŠธ๋ฆฌ๊ฐ€ ๋˜๊ธฐ ์ „์—) ๋ฐ˜๋ณต
  • ์œ„์ƒ ์ •๋ ฌ (topological sort)
    • cycle์ด ์—†๋Š” ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ(DAG) partial ordered set์„ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1 : ์ง„์ž…๊ฐ„์„ ์ด ์—†๋Š” ์ •์ ์„ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜(|V|+|E|)
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2 : DFS๋ฐฉ๋ฌธ ์ˆœ์„œ์˜ ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜(|V|+|E|)
  • ์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest path)
    • ๊ฐ„์„  ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์Œ์ˆ˜์ธ ์‹ธ์ดํด์ด ์—†์–ด์•ผ ๋ฌธ์ œ ์ •์˜ ๊ฐ€๋Šฅ

    • V์™€ U์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„  V๋ถ€ํ„ฐ U์‚ฌ์ด์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ •์ ๊ณผ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

    • ๋”ฐ๋ผ์„œ, ํŠน์ • ์ •์  U๋ถ€ํ„ฐ V์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋งŒ์„ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

    • ๋‹จ์ผ ์‹œ์ž‘์  ์ตœ๋‹จ๊ฒฝ๋กœ

      • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
      • ๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ—ˆ์šฉ
      • ์‹ธ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„(DAG)์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ : ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•
    • ๋ชจ๋“  ์Œ ์ตœ๋‹จ ๊ฒฝ๋กœ

      • ํ”Œ๋กœ์ด๋“œ-์›Œ์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

      • ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
      • ์ฐจ์ด์ ์€ ์ด์™„ ์กฐ๊ฑด์— ๊ธฐ์กด u๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ•ฉํ•˜์—ฌ ๋น„๊ตํ•˜๋Š” ๋ถ€๋ถ„
      • ํ”„๋ฆผ์˜ MST ํ™•์ธํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ prev(parent) ๊ฐ’์„ ๋‘๊ณ  ๋งˆ์ง€๋ง‰์— ์ถœ๋ ฅํ•˜๋ฉด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ
      • ์ˆ˜ํ–‰์‹œ๊ฐ„๋„ ํ”„๋ฆผ๊ณผ ๋™์ผ
    • ๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

      • |V|-1ํšŒ ๋™์ž‘์„ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•จ
      • 1ํšŒ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์‹œ์ž‘ ์ •์  r๋กœ๋ถ€ํ„ฐ 1ํšŒ์˜ ๊ฐ„์„ ์„ ๊ฑฐ์ณ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ •์ ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์žฅ
      • ์Œ์˜ ๊ฐ„์„ ๋„ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•จ
      • |V|ํšŒ ์ด์ƒ ๋ฐ˜๋ณตํ•˜์—ฌ๋„ ์ด์™„์ด ๊ณ„์‚ฐ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ๋ž˜ํ”„์— ์Œ์˜ ์‚ฌ์ดํด์ด ์กด์žฌ.
      if (d[u] + w[u, v] < d[v]) {
          d[v] = d[u] + w[u, v]
          prev[v] = u;
      }
    • ํ”Œ๋กœ์ด๋“œ-์›Œ์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

      • dijk : {v1, v2, v3, ... , vk} ์— ์†ํ•˜๋Š” ์ •์ ๋“ค๋งŒ ๊ฑฐ์ณ, vi์—์„œ vj๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ ๊ธธ์ด
      • dijk = min{dijk-1, dikk-1 + dkjk-1}
      • k ์ •์ ์„ ํฌํ•จํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ํฌํ•จํ•˜๋Š” ๊ฒฝ๋กœ ์ค‘ ์ตœ๋‹จ๊ฑฐ๋ฆฌ
    FloydWarshall(G) {
        for i = 1 to n
            for j = 1 to n
                d0ij = wij;
        for k = 1 to n
            for i = 1 to n
                for j = 1 to n
                    dkij = min{d<sub>ij</sub><sup>k-1</sup>, d<sub>ik</sub><sup>k-1</sup> + d<sub>kj</sub><sup>k-1</sup>} //์œ„์˜ min ์ฐธ์กฐ
    }
    • DAG์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ ๊ตฌํ•˜๊ธฐ
      • ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๋ฌดํ•œ์œผ๋กœ ์ €์žฅํ•ด๋†“๊ณ ,
      • ๊ทธ๋ž˜ํ”„๋ฅผ ์œ„์ƒ์ •๋ ฌํ•˜์—ฌ ์œ„์ƒ ์ •๋ ฌ ์ˆœ์„œ๋Œ€๋กœ ์ด์™„์„ ์ง„ํ–‰
      • ์‹œ์ž‘ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋จ
      • ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ์œ„์ƒ์ •๋ ฌ์ด ์ฃผ์š”ํ•จ(|V|+|E|)
    • ๊ฐ•์—ฐ๊ฒฐ์š”์†Œ ๊ตฌํ•˜๊ธฐ
      • ๊ฐ•์—ฐ๊ฒฐ์š”์†Œ : ํŠน์ • ์ •์  ์Œ ์‚ฌ์ด์— ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๊ฐ•์—ฐ๊ฒฐ ์š”์†Œ
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜
        1. ๊ทธ๋ž˜ํ”„ G์—์„œ DFS๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ •์ v์˜ ์™„๋ฃŒ์‹œ๊ฐ„ f[v]๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
        2. G์˜ ๋ชจ๋“  ๊ฐ„์„ ์˜ ๋ฐฉํ–ฅ์„ ๋ฐ˜๋Œ€๋กœ ํ•˜์—ฌ GR์„ ๋งŒ๋“ ๋‹ค.
        3. DFS(GR)์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•œ๋‹ค
        4. DFS(GR)์—์„œ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌ๋œ ํŠธ๋ฆฌ๋“ค์„ ๊ฐ ๊ฐ•์—ฐ๊ฒฐ์š”์†Œ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2020.07.24

์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „ ๊ฐ•์˜ ๋‚ด์šฉ ์ •๋ฆฌ(์ปดํ“จํ„ฐ๊ณตํ•™)

  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ
    • memory leak : ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋น„์›Œ์ค˜์•ผํ•  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋น„์šฐ์ง€ ์•Š์•„ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ
      • Mark & Sweep ๋ฐฉ์‹ : ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€ ๋ฃจํŠธ์—์‚ฌ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
      • Reference counting : ํ•œ ์š”์†Œ๊ฐ€ ๋‹ค๋ฅธ ์š”์†Œ์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ์ฐธ์กฐ๋˜์—ˆ๋Š”์ง€ ์„ธ๋Š” ๋ฐฉ๋ฒ•(0๋˜๋ฉด ํ•ด์ œ)
      • garbarge collector๋Š” ์™„๋ฒฝํ•˜์ง€ ์•Š์Œ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”)
    • managed language : ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์–ธ์–ด(Java ๋“ฑ)
    • unmanage language : ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜๋™์ ์œผ๋กœ ํ•ด์ค˜์•ผํ•˜๋Š” ์–ธ์–ด
    • ์ˆœํ™˜ ์ฐธ์กฐํ•˜์ง€ ๋ง ๊ฒƒ
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ
    • try - catch - finally์—์„œ finally๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ด๋  ๊ฒฝ์šฐ์—๋„ ์‹คํ–‰ ํ›„ ๋ฐ˜ํ™˜
  • ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„ (const, let, var)
    • var๋Š” ES6 ์ด์ „์˜ JS์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฌธ๋ฒ•, ์žฌ์„ ์–ธ ๊ฐ€๋Šฅ
    • const๋Š” ์ƒ์ˆ˜๋กœ ํ•œ๋ฒˆ ์„ ์–ธ๋˜๋ฉด ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
    • let๋Š” var๋ฅผ ๋Œ€์ฒดํ•˜์ง€๋งŒ ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€
    • const์™€ let์€ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง
      • ๋”ฐ๋ผ์„œ ๋ธ”๋ก ์™ธ๋ถ€๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€
      • ๋ธ”๋ก ์ข…๋ฃŒ ์‹œ ๋ณ€์ˆ˜ ํ• ๋‹น ํ•ด์ œ
      • ์„ ์–ธ๋˜๊ธฐ ์ด์ „ ์‚ฌ์šฉ(hoisting) ๋ถˆ๊ฐ€
    • ๋ฐ˜๋ฉด์— var๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
      • ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” ์–ด๋””๋“  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
      • ๋ณ€์ˆ˜๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š์Œ
      • hoisting์„ ํ†ตํ•ด ์„ ์–ธ๋˜๊ธฐ ์ด์ „์—๋„ ๊ฐ’ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์žฌ๊ท€ํ•จ์ˆ˜
    • ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๊ณ„์† ์ด์–ด์งˆ ๊ฒฝ์šฐ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์™€ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
    • return์‹œ์— ๋ณ„๋„์˜ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” **๊ผฌ๋ฆฌ ์žฌ๊ท€ ์ตœ์ ํ™”(Tail Recursion Optimization)**๋กœ ์„ ํ˜•์‹œ๊ฐ„ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ
  • ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋จ์„ ์˜๋ฏธ
    • ๋ฐ˜๋ฉด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ฝ”๋“œ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธ
    • ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์Šค๋ ˆ๋“œ, ํ”„๋กœ์„ธ์Šค๊ฐ€ 2๊ฐœ ์ด์ƒ์ด ๋™์‹œ์— ์‹คํ–‰๋˜์–ด์•ผ ํ•จ
    function asyncBlackBeanTimer(seconds) {
        console.log("์งœ์žฅ๋ฉด ๋ฐฐ๋‹ฌ๋จ");
        setTimeout(
            function() {    // Call-back function
                console.log("์‹์‚ฌ ์™„๋ฃŒ");
            },
            seconds*1000; //ํ•ด๋‹น ์ฝ”๋“œ ์‹คํ–‰ ํ›„
        );
        console.log("๋ฐฐ๋‹ฌ๋ถ€ ๋– ๋‚จ");
    }
    asyncBlackBeanTimer(1);
    • ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋๋‚œ ์ดํ›„์—๋Š” Call-back function์„ ํ˜ธ์ถœํ•ด ์ดํ›„ ์—…๋ฌด ์ฒ˜๋ฆฌ

    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘, ํ•˜์ง€๋งŒ JS ์—”์ง„๊ณผ Web API๊ฐ€ ๋™์‹œ์— ๋™์ž‘

    • Web API๋Š” JS์—”์ง„๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋™์‹œ์— ์—ฌ๋Ÿฌ์ž‘์—…์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ(๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ)

    • ๋”ฐ๋ผ์„œ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฝ์šฐ Web API์—์„œ ์ฒ˜๋ฆฌ ํ›„ Task-Queue๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜(์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋„๋ก) ๋ณด๋ƒ„

    • ๋น„๋™๊ธฐ ์ž‘์—…์„ Web API์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ JS์—”์ง„์€ ๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰

    • ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” Task-queue์— ๋„์ฐฉํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋“ค์„ ๋‹ค์‹œ JS ์ฒ˜๋ฆฌ ์—”์ง„์œผ๋กœ ๋ณด๋ƒ„

    • ์ฝœ๋ฐฑ ์ง€์˜ฅ

      • ๋น„๋™๊ธฐ ์ž‘์—…์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ค‘๋ณต๋  ๊ฒฝ์šฐ(DB์˜ ์ค‘๋ณต ์ ‘๊ทผ ๋“ฑ), ๋น„๋™๊ธฐ ์ž‘์—… ํ•จ์ˆ˜๊ฐ€ ๊ต‰์žฅํžˆ ๋ณต์žกํ•ด์ง
      • ํ•จ์ˆ˜ ๋‚ด์˜ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ํ˜•ํƒœ
      • ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠน์„ฑ์ƒ ๋””๋ฒ„๊น…๋„ ํž˜๋“ฆ
      • ๋”ฐ๋ผ์„œ ES6๋ถ€ํ„ฐ๋Š” Promise ๊ฐ์ฒด ์‚ฌ์šฉ (polyfill ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด๋Š” ๋™์ž‘์•ˆํ•จ)
      • ๋”ฐ๋ผ์„œ IE์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
      // ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์ž‘์„ฑ
      function ํ•™์ƒ์ •๋ณด_์กฐํšŒ(ํ•™์ƒ_ํ•™๋ฒˆ) {
          return new Promise(function (resolve, reject) {
              ajax(baseUrl + "/student-info/" + ํ•™์ƒ_ํ•™๋ฒˆ, // ์ˆ˜ํ–‰ํ•  ๋น„๋™๊ธฐ ์ž‘์—…
              function(response) {    // ์ฝœ๋ฐฑ ํ•จ์ˆ˜
                  resolve(response);
              }
              );
          });
      }
      // ํ˜ธ์ถœ
      ํ•™์ƒ์ •๋ณด_์กฐํšŒ("12345")
      .then(function (ํ•™์ƒ_์ •๋ณด) {
          //do something
          return ๊ณ ๊ต_DB_์ฃผ์†Œ_์กฐํšŒ(ํ•™์ƒ_์ฃผ๋ฏผ๋ฒˆํ˜ธ, ๊ณ ๊ต๋ช…)
      })
      .then(function(ํ•™์ƒ_์ฃผ๋ฏผ๋ฒˆํ˜ธ_AND_๊ณ ๊ต_DB_์ฃผ์†Œ) {
          return ๊ณ ๊ต์žฌํ•™์‹œ_์ˆ˜๊ฐ•์ˆ˜์—…_์กฐํšŒ(
              ํ•™์ƒ_์ฃผ๋ฏผ๋ฒˆํ˜ธ_AND_๊ณ ๊ต_DB_์ฃผ์†Œ[0],
              ํ•™์ƒ_์ฃผ๋ฏผ๋ฒˆํ˜ธ_AND_๊ณ ๊ต_DB_์ฃผ์†Œ[1]
          )
      })
      .then(function(...)) {
          //...
      }
      • ์œ„์™€ ๊ฐ™์ด ์ฒด์ด๋‹ ๋ฐฉ์‹์œผ๋กœ ์—ฐ์†๋œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌ
      • ES8์—์„œ๋Š” async/await๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋”์šฑ ์‰ฝ๊ฒŒ ํ˜ธ์ถœ
      async function ๊ณ 3_์ˆ˜ํ•™๊ต์‚ฌ_์ฐพ๊ธฐ(ํ•™์ƒ_ํ•™๋ฒˆ) { //async๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜์ž„์„ ์˜๋ฏธ
          let ํ•™์ƒ_์ •๋ณด = await ํ•™์ƒ์ •๋ณด_์กฐํšŒ(ํ•™์ƒ_ํ•™๋ฒˆ);
          // await ์‚ฌ์šฉ ์‹œ ์ฝœ๋ฐฑ์ด ๋ถˆ๋ ค์„œ ๋ฐ˜ํ™˜๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ ํ›„ ๋ฐ˜ํ™˜ ์‹œ ๋‹ค์Œ ์‹คํ–‰
          let ๊ณ ๊ณ _DB_์ฃผ์†Œ
          = await ๊ณ ๊ต_DB_์ฃผ์†Œ_์กฐํšŒ(ํ•™์ƒ_์ •๋ณด["๊ณ ๊ต๋ช…"]);
          //...
          console.log(๋‹ด๋‹น๊ต์‚ฌ);
      }

Releases

No releases published

Packages

No packages published

Languages