진수와 진법변환 프로그래밍기초


∴ 진법



∴ 진법변환의 필요성
  • 컴퓨터는 기본적으로 0과 1로 표현됩니다.
    실제 컴퓨터 메모리에 저장되는 데이터는 01000101 과 같은 형태로 저장됩니다.
    위와같이 0과 1로 표한하는 진법 방식을 2진법이라 합니다.

  • 프로그래머는 메모리에 데이터가 어떤식으로 저장되어 있는지 알아야 할 필요성이 있습니다.
    하지만, 프로그램 내부에서는 010001010과 같은 2진법으로 표현되어 있어 읽기가 쉽지 않기 때문에 우리가 사용하는 10진법이나 주소체계에서 사용되는 16진법 등으로 변환해서 이해하는 것 입니다.

  • 데이터의 이해에도 좋고 데이터를 저장하고 사용할 때도 많은 이점을 가지고 있습니다. 
    컴퓨터는 10진법이 아닌 0과 1로 된 2의 n승으로 증가하는 법칙을 가진 진법을 좋아합니다.

  • 메모리에 저장되는 단위는 최소 단위가 1비트씩 바이트 단위로, 8개의 비트로 이루어져 있는 단위를 좋아합니다. 
    0과 1로 이루어진 숫자가 8개 존재하는 것이죠.

  • 8진법의 경우 4개로 표현가능하고 16진법으로 푷현하면 2개의 숫자료 표현이 가능

  • 결국 프로그래머가 편하게 내부데이터를 표한하기 위해 진법변환을 사용하는 이유|

∴ 기수법
  • 기호를 사용하여 수를 나타내는 방법
    로마식(Ⅰ,Ⅳ,Ⅹ), 중국식(一,十,萬) , 인도식(1, 123, 222)
  • 현재 많이 사용되는 기수법은 인도식 기수법

∴ 진법과 진수
  • 진법 : 기수법에서 각 자리수의 범위가 몇인지 나타내는 단위
    수를 표한하기 위해 사용되는 숫자의 갯수

  • 진수 : 진법으로 만들어진 수
    8진법의 경우 : 0~7까지 8개의 숫자로 표현되는 진법
    진수는 8진법으로 표현된 수를 8진수

  • 10진법 : 0~9까지 10개의 숫자료 표현된 수
    273과 같은 10진법으로 표시된 이백 칠십 삼 을 10진수 273이라 합니다.

  • 컴퓨터의 경위 2진법으로 표현하고 많이 사용되는 진법으로는 2진법, 8진법, 10진법, 16진법이 있습니다.
    보통 진법의 구분의 경우 1(2), 1(8), 1(10), 1(16) 과 같은 형태로 진법을 표시합니다.

∴ 진법변환
  • 기존에 표현되던 진법의 진수를 다른 진법으로 바꾸는 방법
  • 주로 사용되는 진법변환에 사용되는 공식
    N이라는 진수에서 M이라는 진수로 바꾸는 방법을 수식으로 표현하면 
    각각의 자리를 아래의 공식을 이용해 10진법으로 변환한다.
  • 위의 수식으로 변환된 수를 M으로 나눈다.
    나머지를 제외한 후 다시 몫을 M으로 나눈다.
    이 과정을 반복하여 몫이 M보다 작어지면 마지막 몫의 자리의 수와
    나머지들을 모두 아래에서부터 나열하여 쓰면 변환이 완료됩니다. 

  • 예를 들어 1101(2)를 16진법으로 변환하는 방법
    2진법은 N, 16진법은 M

  • 첫번째 자리
    1 * 2^(1-1) = 1 * 2^0 (모든 자리의 0승은 1)
    1 * 1 = 1
    두번째 자리
    0 * 2^(2-1) = 0 * 2^1
    0 * 2 = 0
    세번째 자리
    1 * 2^(3-1) = 1 * 2^2
    1 * 4 = 4
    네번째 자리
    1 * 2^(4-1) = 1 * 2^3
    1 * 8 = 8
    위의 숫자를 모두 더하면
    1+0+4+8 = 13
    10진법 13으로 변환

  • 변환된 수(13)을 M 즉, 16진수로 나누면 된다.ㅣ
    16진수 10=>A / 11=>B / 12=>C / 13 => D / 14=>E / 15=>F 로 표현
    10진수와의 차이를 두기 위해 사용합니다.

  • 13을 16으로 나누면 몫은 0 나머지가 13
    몫이 16보다 작으므로 나머지를 사용하게 됩니다.
    2진수 1101을 16진수로 표현하면 마지막 몫의 자리 0과 13을 변환한 D를 사용
    "0D"가 됩니다.

∴ 2진수 = > 10진수
  • 1001 1110(2) 를 변환해보겠습니다.

  • 공식을 대입하여 10진수로 변환(모든수의 0승은 0)
    1001 1110(2) 뒤에서 시작
    1번째 : 0 * 2(0) = 0 * 0 = 0
    2번째 : 1 * 2(1) = 1 * 2 = 2
    3번째 : 1 * 2(2) = 1 * 4 = 4
    4번째 : 1 * 2(3) = 1 * 8 = 8
    5번째 : 1 * 2(4) = 1 * 16 = 16
    6번째 : 0 * 2(5) = 0 * 32 = 0
    7번째 : 0 * 2(6) = 0 * 64 = 0
    8번째 : 1 * 2(7) = 1 * 128 = 128
    0+2+4+8+16+0+0+128 = 158

  • 2진수 1001 1110은 10진수 158이 됩니다.
    (검산 : 10진수를 다시 2진수로 바꿔어 보면 됩니다.)

  • 검산
    158 / 2 = 79 ... 0
    79 / 2 = 39 ... 1
    39 / 2 = 19 ... 1
    19 / 2 = 9 ... 1
    9 / 2 = 4 ... 1
    4 / 2 = 2 ... 0
    2 / 2 = 1 ... 0
    마지막의 몫부터 차례대로 읽으면
    1001 1110(2) 가 됩니다.
∴ 2진수 = > 8진수
  • 1001 1110(2) 을 10진수로 바꾸게 되면 158이 됩니다.
    바꾼 수 158을 계속 8로 나누어보도록 하겠습니다.

  • 158 / 8 = 19 ... 6
    19 / 8 = 2 ... 3
    몫이 8 보다 작기 때문에 마지막 자리의 몫과 나머지 3,6을 사용
    1001 1110(2) => 236(8)
∴ 2진수 = > 16진수
  • 1001 1110(2) 는 10진수 158입니다.
    158을 M진수=>16으로 나누어 사용한다.

  • 158 / 16 = 9 ... 14
    몫이 16보다 작은 9 와 나머지 9를 이용하여 사용합니다.
    1001 1110(2) => 9E(16)
∴ 8진수 = > 2진수
  • 검산을 위해 1001 1110(2)를 사용하겠습니다.
    10진수 158을 8진수로 표현하면 236(8)
    10진수로 변환하면 158이 되는지 부터 확인합니다.

  • 10진수로
    1번째 : 6 * 8(0) = 6 * 1 = 6

    2번째 : 3 * 8(1) = 3 * 8 = 24
    3번째 : 2 * 8(2) = 2 * 64 = 128
    6+24+128 = 158
    제대로 변환이 된 것이 확인되었습니다. 

  • M진수 2로 나누면 2진수가 표현 된다.
    158 / 2 = 79 ... 0
    79 / 2 = 39 ... 1
    39 / 2 = 19 ... 1
    19 / 2 = 9 ... 1
    9 / 2 = 4 ... 1
    4 / 2 = 2 ... 0
    2 / 2 = 1 ... 0
    몫이 1이고 2보다 작으므로 마지막 몫과 나머지를 사용한다.
    1001 1110(2) 처음의 2진수가 되었습니다.
    만약 갯수가 8개 보다 부족할 경우 앞에 0을 붙여서 사용합니다.

∴ 8진수 = > 10진수
  • 위에 했던것과 같이 인용하여 236(8)을 변환하면 아래와 같습니다.

  • 10진수
    1번째 : 6 * 8(0) = 6 * 1 = 6

    2번째 : 3 * 8(1) = 3 * 8 = 24
    3번째 : 2 * 8(2) = 2 * 64 = 128
    6+24+128 = 158

∴ 8진수 = > 16진수
  • 8진수에서 10진수변환과 10진수에서 16진수 위에 했으므로 각설하고
    혼자 연습해 보시길 바랍니다.
∴ 10진수의 진법변환
  • 어떠한 진법이던 아래의 공식을 대입하면 10진수로 변환이 완료
  • 10 진수 400 을 16진수와 2진수로 표현하는 방법도 간단합니다.
    400 / 16 = 25 ... 0
    25 / 16 = 1 ... 9
    190(16)
    1 * 16^2<256> + 9 * 16^1<16> + 0 * 16^0<1> = 256 + 144 + 0 = 400 

∴ 10진수의 변환 중 실수 2진수로의 변
  • 소수형태의 값을 2진수로 변환하는 방법
    해당 값의 2를 곱해서 결과 값이 1을 넘으면 0, 결과값이 1이 나오면 1을 취하고 변환을 완료
    위의 글을 무한반복입니다.

  • 예제 : 8.45 를 10진수로 표현된 소수를 2진수로 변환
    소수 부분 0.45에 대한 2진수 변환

    01차 : 0.45 * 2 = 0.9 .... 0 (1을 넘지않아 0을 취함)
    02차 : 0.90 * 2 = 1.8 .... 0 (1을 넘지않아 0을 취함)
    03차 : 0.80 * 2 = 1.6 ... 1 (1을 넘어 1을 취하고 결과에서 1을 뺀다.)
    04차 : 0.60 * 2 = 1.2 ... 1 (1을 넘어 1을 취하고 결과에서 1을 뺀다.)

    05차 : 0.20 * 2 = 0.4 ... 0 (1을 넘지않아 0을 취함)
    06차 : 0.40 * 2 = 0.8 ... 0 (1을 넘지않아 0을 취함)
    07차 : 0.80 * 2 = 1.6 ... 1 (1을 넘어 1을 취하고 결과에서 1을 뺀다.)
    08차 : 0.60 * 2 = 1.2 ... 1
     (1을 넘어 1을 취하고 결과에서 1을 뺀다.)

    09차 : 0.20 * 2 = 0.4 ... 0 (1을 넘지않아 0을 취함)
    10차 : 0.40 * 2 = 0.8 ... 0 (1을 넘지않아 0을 취함)
    11차 : 0.80 * 2 = 1.6 ... 1 (1을 넘어 1을 취하고 결과에서 1을 뺀다.)
    12차 : 0.60 * 2 = 1.2 ... 1
     (1을 넘어 1을 취하고 결과에서 1을 뺀다.)

  • 0.45 => 0011 0011 0011 이런식을 반복.
    8 => 1000(2)
∴ 16진수의 변환
  • 16진수에서 10진수로 표현가능한 수는 0 ~ 15
    10진수 10과 16진수의 10이 같이 표현되어서 10부터는 A~F까지의 문자로 표기
    2진수로 표현할 때 역시 4자리 단위로 (Nibble<니블>) 표기

  • 끊어서 16진수 하나가 매칭되는 것을 알 수 있다.
    1byte를 표현하기 위해 8비트이면 16진수 2개 FE 이렇게 표현이 가능.
    예를 들면, 메모리 주소에서 많이 쓰이는 0x31fe3f1ac 는 16진수
    즉, 메모리 체계에서 주소는 16진수로 관리된다. 16진수 8개 이면 32비트를 표현할 수 있습니다.
∴ 16진수의 변환
  • 10진수 <=> 16진수로 하는것은 위에서 언급했으니 제외하고
    2진수 <=> 16진수를 해보도록 합니다.

  • 기존에 사용하던 수 158(10) 을 사용!!!! 
    158 을 16진수로 표기하면 9E(16)
    9E(16) 을 10진수로 변환

  • 1번째 자리 : 15 * 16(0) = 14 * 1 = 14
    2번째 자리 : 9 * 16(1) = 9 * 16 = 144
    14 + 144 = 158

  • 1001 1110(2) 16진수로 볂환시 간단한 방법
    4자리 니블(Nibble) 단위로 조개서 10진수로 한 후 16진수로 변환

    1110 => 0 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 14 => E
    1001 => 1 * 1 + 0 * 2 + 0 * 4 + 1 * 8 = 9

    9E(16)로 변환이 완료 되었습니다.

  • 이 글을 보시는 여러분들도 여러 숫자를 가지고 재미난 진법변환 해보시기 바랍니다!!!!

보수 프로그래밍기초

∴ 보수
  • 정의
    기수 n의 보수란 주어진 수치의 각 자리의 값을 n-1에서 감산 하고 그결과의 최하위의 자리에 1을 가산하여 구하는 수치
    10진수의 100까지의 수로 생각할 때 25라는 수치의 보수는 다음과 같다.
    1의 쪽에서 세면 25번째의 수이지만, 100에서 반대로 세어 가면 75번째의 수가 된다. 이와 같이 반대로 세어 가는 수가 보수이다. 계산하여 구하면 25의 각 자리의 수치를 n-1(=99)에서 감산하면 74로 되어 최하값의 자리에 1을 더하면 75가 된다.

  • 컴퓨터로 감산을 할 경우 실제로 보수를 사용한 가산( 보수가산 )을 하고 있다.
∴ 보수의 필요성
  • 위의 내용에서 보다 싶이 보수가산 즉, 컴퓨터에서 음수의 연산을 양수로 바꾸어 계산하기 위해서 사용한다.
    컴퓨터는 기본적으로 음수의 연산이 없기에 덧셈을 이용하여 연산을 처리해야 한다. 
    그렇기 때문에 보수를 사용하는 것이다.

∴ 1의 보수
  • 1의 보수는 주어진 2진수의 각각의 비트를 반전 연산하여 나타낸 것이 1의 보수이다.
  • 10진수 8을 2진수로 표현할 경우 0000 1000(2) 와 같이 표현 되는데 여기서 1의 보수 형태는 다음과 같다
    1111 0111(2) 이 값이 된다 
∴ 2의 보수
  • 2의 보수를 구하는 방법은 2진수로 표현된 수의 1의 보수를 취한 후 최하위 자리에 1을 더해준 값이 됩니다.
    이와 같이 표현한 것이 해당 2진수의 음수의 형태가 된니다.

  • 10진수 8에 대한 2진수는 0000 1000(2) 1의 보수 형태는 1111 0111(2)이 됩니다.
    위 1의 보수에 최하위 자리에 1을 더하면
       1111 0111
    +  0000 0001
    ------------
       1111 1000 <- 2진수 0000 1000에 대한 음수가 됩니다.

    2개의 수를 더해 0이 되면 0의 보수 즉, 음수가 됩니다. 

       0000 1000
    +  1111 1000
    ------------
      1 0000 0000

    현재 표현하는 자리 수는 8자리 이기 때문에 0000 0000 이 되는 것입니다.

  • 음수가 맞는지 검산하는 작업은 음수로 표현된 수를 역순으로 계산하면 된다.

컴퓨터 주소와 메모리 프로그래밍기초

∴ 중앙처리장치 (CPU: Central Processing Unit)
  • 메모리에 저장된 프로그램과 데이터를 이용한실제 작업을 수행하는 회로장치
  • 즉, 사람들이 CPU라고 부르는 장치이다.
  • CPU내부에는 자료버스와 제어버스로 구분된다.
∴ 버스
  • 버스 : 컴퓨터의 내부나 외부의 각 장치와의 정보나 신호를 주고 받는데 사용되도록 구성된 전기적 통로 
  • 자료버스 (Data Bus) 
    - 연산장치와 레지스터 사이의 시그널을 전달하는 통로
  • 제어버스 (Control Bus) 
    - 각 장치로 제어 신호를 전달하기 뒤한 통로
∴ CPU 구성요소 
  • 버스 연산장치
    - 산술과 논리 등을 처리 담당하는 장치
  • 제어장치
    - 연산장치에 필요한 작업을 연속적으로 신호를 처리
    - 연산장치와 레지스터가 명령을 수행하게하는 장치
    - 해독기와 제어기로 구성된다. (자세한건 나중에 한번 알아보도록 합시다)

  • 레지스터
    - CPU내부에서 처리되는 연산을 잠시 저장하기 위한 임시기억장소로 한정
    - 프로그래밍에서 레지스터 변수에 해당
∴ 주기억장치
  • CPU가 직접 접근하여 데이터를 처리할 수 있는 기억장치
  • 입출력에 필요한 자료를 기억하거나 작업을 처리한 중간 결과를 기억하는 공간
  • ROM : 읽기전용으로 쓰기는 불가능한 영역 <Read Only, Don't Write>
  • RAM(SRAM/DRAM) : 자유로운 읽고 쓰기가 가능한 영역 <Read/Write>
∴ 보조기억장치
  • 주기억 장치를 제외한 모든 기억장치
  • 자기테이프, 자기디스크, 하드디스크(HDD), USB, 플로피 디스크
  • 익히 할고 있고 사용하는 저장장치들이 해당된다.
∴ 메모리 관리
  • C/C++에서는 일반적으로 메모리의 할당과 해제가 존재합니다.
    그렇지만 Java에선 할당의 개념은 있지만 해제의 기능은 없습니다.
    C#은 아예 할당과 해제의 개념조차 존재하지 않습니다.
    가비지 컬렉터라는 사용이 끝난 메모리를 해제해주는 것이 존재하기 때문입니다.
  • 메모리 관리가 꼭 필요한 이유는 컴퓨터마나 사용되는 메모리 주소가 한정되어 있기 때문입니다.
    32비트라면 약 43억개(2의32승)정도 됩니다. 64비트는 2의 64승
∴ 메모리 주소
  • 32비트 운영체제에서 메모리 공간의 주소는 4바이트의 메모리 공간을 가지고 있다.
  • 메모리 공간(크기) = 집의 크기 혹은 평수
  • 메모리 주소 = 우리가 사는 집 주소
  • 메모리 공간의 값 = 우리 즉, 집에 사는 사람
∴ 메모리 단위
  • 워드 : 컴퓨터 연산처리의 기본단위 ( 32비트에선 4바이트 / 64비트에선 8바이트 )
  • 비트(bit) => 컴퓨터 메모리의 최소단위 0,1로 표현 (2진수)
  • 니블(nibble) => 4bit가 1 니블
  • 바이트 => 8bit 가 1바이트
  • KB(킬로바이트) => 1024개의 바이트
  • MB(메가바이트) => 1024개의 킬로바이트
  • GB(기가바이트) => 1024개의 메가바이트
  • TB(테라바이트) => 1024개의 기가바이트
  • PB(페타바이트) => 1024개의 테라바이트
  • EB(엑사바이트) => 1024개의 페사바이트
  • ZB(제타바이트) => 1024개의 엑사바이트
  • YB(요타바이트) => 1024개의 제타바이트




프로그래밍과 프로그래밍 언어 프로그래밍기초


∴ 프로그래밍이란 무엇일까?
  • 주어진 문제에 대해 '프로그래밍 도구' 를 이용해서 컴퓨터가 효율적으로 수행 하기 위해서 논리와 순서에 맞게
    처리할 명령들이 나열된 명령들의 집합을 만드는 것이다.
∴ 프로그래밍 도구???!
  • 프로그래밍 언어도 프로그래밍 도구가 될 수 있습니다 ( C/C++/JAVA/Python )
    자료구조/알고리즘/수학원리/물리 등 도 프로그래밍 도구가 될 수 있습니다.
    컴파일러( Visual Studio ), 이클립스 등과 같은 툴 또한 마찬가지입니다.

  • 즉, 적절한 도구를 효율적으로 잘 사용해야 프로그래밍을 잘 할 수 있다는 뜻이 됩니다.
    위에서와 같이 효율적인 수행을 위해서는 알고리즘의 이론에 부합되는 내용입니다. 

  • 메모장으로도 소스를 작성할 수는 있지만 빌드도 대신 해주는 Visual Studio 와 같은 도구(툴)를 이용하는 것이
    개발시간의 단축을 불러옵니다. 
    일일이 기계어로 번역하는 그런 번거로운일이 하고 싶은 분들은 메모장으로 프로그래밍을 하시면 됩니다. 
∴ 프로그래밍 언어의 필요성!!!!
  • 컴퓨터는 0과 1을 사랑하는 녀석입니다. 관리하는 모든 데이터들은 숫자로 이루어져 있습니다.
    사람이 일일이 모든 언어를 숫자로 읽어주는 일을 하는 것은 바보나 하는일이 되는겁니다.

  • 우리가 사용하는 언어를 문법에 맞추어 사용하여 상대방이 알아듣기 쉽게 처리하는 것처럼 컴퓨터와의
    대화 또한 마찬가지가 됩니다. 그걸 위해 프로그래밍 언어를 사용하는 것이죠.

  • 컴파일러를 사용해 컴퓨터가 알아듣기 쉽게 처리해주는 것이죠. 외국의 책을 번역해주거나 하는 번역가의 일을 
    컴파일러가 대신 처리하여 컴파일(번역)을 하게 됩니다.

  • 언어의 구분은 크게 2가지로 나뉩니다.
    저급 언어 : 컴퓨터가 바로 처리 가능한 언어( 즉, 한국인이 미국인과 대화를 위해 영어를 쓰는 것이죠 )
    가장 대표적으로 기계어와 어셈블리어가 있습니다.
     - 기계어 : 0과 1의 2진수로만 구성
     - 어셈블리어 : 기계어 명령에 알파벳을 기호를 부여하여 컴퓨터의 행동을 제어

    고급 언어 : 사람이 사용하기 편리한 언어 (즉, 통역을 하는 사람을 통해서 영어를 대신 전달 하게 됩니다. )
    고급 언어의 종류는 다양합니다. 
     - COBOL, FORTRAN, ALGOL, C, C++, C#, JAVA, BASIC 등등
∴ 컴파일러와 인터프리터
  • 컴파일러 ( Compiler )
    고급언어로 쓰여진 코드를 컴퓨터에서 즉시 실행 될 수 있는 형태의 목적 프로그램으러 바꾸어 주는 번역 프로그램
    (C, C++, JAVA 등)

  • 인터프리터 ( Interpreter )
    코드를 한꺼 번에 기계어로 변환시키는 컴파일러와 다르게 한 줄씩(혹은 한 단계씩) 기계어로 해석하여 실행하는
    '언어처리 프로그램' 입니다.
    단계별로 테스트와 수정을 하며 진행하는 대화형언어( BASIC, HTML ) 에 적합하지만 실행 시간이 많이 소요되는
    아쉬운 점도 있습니다.

  • 컴파일러의 빌드 과정은 다음과 같습니다. 
    1. 소스코드 작성
     - 사람이 작성한 고급언어 형태의 소스코드 작성
    2. 컴파일
     - 목적파일( *.obj ) 생성
    3. 링크
     - 라이브러리, 다른 목적파일과 연결
    4. 실행파일 생성
     - 실행파일 ( *.exe ) 생성

프로그래밍 기초 언어 프로그래밍기초

∴ 컴퓨터란 무엇인가?
  • 연산식이나 논리적 언어로 표현된 계산을 풀어주는 기계, 일종의 계산기
  • 주된 기능에는 입력, 제어, 기억, 연산, 출력이 있다.
  • 내부적으로 모두 숫자를 다루는 기계이며 시키는 일 밖에 하지 못한다
∴ 주된 기능
  1. 입력기능
    프로그램 내부로 읽어 들이는 기능으로 입력 장치를 이용해서 입력을 받는다 ( 키보드 / 마우스 )
  2. 제어기능
    프로그램의 명령을 하나의 단위로 읽고 해석하여 다른 장치를 통제하는 기능 ( 중앙처리장치의 제어부에서 담당 )
  3. 기억기능
    입력 장치로 읽어들인 데이터 및 처리결과를 기억하는 기능 중장처리 장치의 주기억 장치(CPU, RAM)와 보조기억장치(HDD, SSD등) 이 이에 속한다.
  4. 연산기능
    기억된 프로그램이나 데이터를 가져와 연산(논리, 산술 관계 등)을 하는 기능 ( CPU의 연산부에서 처리 )
  5. 출력기능
    처리가 완료된 내용이나 연산결과 등을 여러 출력장치(모니터, 스피커, 프린터 등) 에 의해 수강하는 기능
∴ 프로그램과 프로그래머의 관계
  • 프로그램 : 주어진 문제를 풀기 위한 명령들의 집합
  • 프로그래머 : 주어진 문제를 풀기 위한 명령들을 논리에 맞게 번역하여 컴퓨터가 수행하기 위한 집합을 만드는 사람
즉, 프로그램을 만드는 사람을 '프로그래머' 라고 한다.
한마디로 이야기 하면 프로그래머는 번역가인 셈이다. 사람이 쓰는 말을 컴퓨터가 알아듣는 말로 번역 해 주는 사람.

∴ 컴파일과 컴파일러
  • 컴파일이란?
    원시언어( 프로그래머가 작성한 소스형태 ) 된 프로그램으로 부터 목적언어로 프로그램을 생성하는 과정 
    즉, 고수준 언어 ( 사람에게 편한 언어 ) 에서 저수준 언어 ( 기계가 편한 언어 ) 로 변역하는 과정이다.
  • 컴파일러
    컴파일을 대신 수행해주는 툴 ( 번역기 ) 을 모두 컴파일러라 한다.
    크게 컴파일러와 인터프리터로 구분

∴ 빌드 ( Build ) 와 디버그 ( Debug )
  • 빌드
    원시 소스 코드를 컴퓨터에서 독립적으로 수행 할 수 있는 가공물로 변환하는 과정.
  • 디버그
    프로그램의 명령 수행 중 발생하는 예겨하지 못한 에러를 찾아내서 수정하거나 작성된 프로그램이 정상적인 수행
    을 하는가 검사하는 과정 ( 버그(벌레) 를 잡는 과정이라 하여 Debug 라고 한다 )


1 2 3 4 5 6 7 8 9 10