Sad Puppy 3 'Golang' 카테고리의 글 목록 (2 Page) :: 개발자 아지트

프로그램은 무엇인가?

컴퓨터가 수행해야 될 명령과 순서를 쓴 문서이다.

글이 어떤 언어로 되어있냐에 따라 다르다.

어떤 프로그래밍 언어냐 따라 다르다.

 

컴퓨터← 글로 된 문서(프로그램)을 받는다.

 

컴퓨터→ 내가 이걸 읽을 수 있는가?

 

인간의 언어 구조를 컴퓨터로 이해한다는 것은 어렵다.

프로그램을 컴퓨터가 바로 읽을 수는 없다.

 

컴퓨터는 프로그램 언어를 0, 1로 변환해서 읽어야 한다.

 

명령어 = OP(Operater)

 

명령어에 숫자를 넣은 것은 opcode다

 

ADD 3, 4   와 같은 것을 어셈블리어라고 한다. 

 

언어를 변환시켜줄 필요가 있다. 

 

 

고수준언어를 컴퓨터 기계어로 변환하는 변환기는 컴파일러라고 한다.

 

결국 프로그램은 실행파일이라고 한다. == .exe파일

 

코딩해서 컴파일 하는 과정을 빌드(변환)이라고한다. 이렇게 하면 기계어로 바뀜

 

역변환도 가능하다.

 

해커들은 기계어만 가지고도 어떤 프로그램인지 알 수 있고, 고칠 수 있다.

그러나 굉장히 어렵다. 그러나 가능하다.


프로그램 언어란?

 

고급언어/저급언어로 나뉜다. 

 

고급언어에는 c, c++, go와 같은 컴파일 언어와 Java, C#, Python, javascript와 같은 동적 언어가 있다. 

 

c, c++, go

  • 컴파일 언어
  • 코딩→ 빌드→ 기계어
  • 먹기전에 돈까스 다 잘라놓고 먹는사람
  • 실행 속도가 빠름

 

Java, C#, Python, javascript

  • 동적 언어
  • 코딩→ 빌드→
  • 기계어가 나오지 않음
  • 먹을때 하나씩 자르면서 먹는 사람
  • 실행 속도가 좀 느리다.


C, C++, Go언어의 특징

  • 컴파일 언어
  • 프로그래밍 과정
    • 코딩→빌드(컴파일러라는 프로그래머가 코딩한 문서를 기계어로 변환함)→ 실행파일(기계어1, 0)
    • 대부분의 고수준 언어는 역변환 과정이 불가능하다.

C#, Java, Python언어의 특징 

  • 동적 언어
  • 코딩→ 빌드 필요(Java, C#)→중간 언어= 문서임→ 기계어로 변환⇒ 실행 중간에 변환을 하는 것을 동적 언어라고 한다.

이런 구분이 왜 생겨났을까?

 

컴파일 언어는 속도가 빠르다.

동적 언어는 중간 중간 변환 하기 때문에 속도가 느리다.

 

컴파일 언어가 좋은데 왜 동적 언어들이 생겨났을까?

 

컴파일 언어는 각 플랫폼 별로 다른 변환이 필요했다.

⇒ 각 프로그램 별로 실행 파일이 모두 달랐어야 했다.

⇒각 플랫폼 별로 빌드가 필요하다.

 

과거에는 굉장히 많은 CPU회사가 있었다.

 

자연어를 기계어로 변환 할 때의 어셈블리어의 각 명령어 마다 번호를 부여하게 되는데, 문제는 칩셋 제조사 마다 이 번호가 다 달랐다.

결국, 어떤 칩셋을 사용하냐에 따라 다르게 동작해야 했다.

 

인텔 CPU

  • 칩셋의 발전 과정 8086-80286-80386-80486- 펜티엄, , , , I3, I5, I7(요즘 나오는 것)

새로운 CPU가 나올때 OP코드도 추가된다.

같은 인텔 계열 칩셋이라도 어떻게 변환하냐에 따라 프로그램이 달라진다.

 

OS- 윈도우즈, Mac, Linux 등 각 OS마다 동작 방식이 다르고, 실행파일 형식도 다르고 실행하는 방법도 다르다.

 

CPU, OS에 따라 컴파일 변환 과정이 다 달랐다.

 

옛날 게임들- Windows밖에 안돼 등.. 문제가 있었다. 

이런거 해결을 위해 나온것 = 동적 언어

프로그램을 만들어 놓으면 실행주체가 어떤 프로그램인지 파악해서 그때 그때 변환 하는 것임.

 

Java 언어의 특징 

  • 코딩→ 결과 → 빌드 → .JAR
  • 플랫폼에 따라 실행 가능 하도록 알아서 변환된다.
  • 컴파일 언어에 비해서 속도가 떨어진다는 문제점이 있었다.
  • C++이 자바보다 빠르다고 말하는 사람이 많다.
  • 언어적으로 완성도가 높다.
  • 라이브러리 지원이 많다.
  • 생산성이 좋다. (C# 또한)

C, C++ 언어의 특징 

  • 사용법이 까다롭고 라이브러리가 좀 ,, 자바보다 못하다.
  • 속도는 자바와 거의 비슷하다.

 

첫 언어로 선택할만한 언어에 어떤 언어가 있는가.?

 

C언어

  • 기본, 근간, simple, 포인터

C#

  • 첫 언어로 무난하다.
  • Windows에서 잘 돌아간다.

Python

  • 언어구조 단순, 짜임새가 좋다, 언어의 완성도가 높다.
  • OOP적 측면에서 봤을때 완전 좋다.
  • 인터프리터 언어
  • 속도가 떨어진다.

Javascript

  • 웹쪽 언어
  • 자바스크립트를 첫 언어로 쓰기에는 안좋다.
  • 완성도가 떨어진다.
  • 웹쪽 쓸 때는 필수

 

해당 글은 [Tucker의 Go 언어 프로그래밍] 2장을 읽고 공부한 글입니다. 

트랜지스터(삼 석, 다리 세게 달리고 가운데가 긺. )

  • 컴퓨터의 가장 기본적인 요소임
  • 컴퓨터는 수천, 수억 개의 수많은 트랜지스터들로 만들어져 있음
  • CPU는 트랜지스터 덩어리임
  • 컴퓨터에서는 트랜지스터를 전기만 가지고 스위치의 역할을 하는 것으로 쓴다.
  • 전기적 신호로 작동함. (진짜 스위치는 물리적인 힘으로 껏다 켰다 해야함.)
  • 1 비트는 하나의 트랜지스터라고 보면 된다.

발광 다이오드= LED

  • 성질이 다른 두 개의 실리콘을 겹쳐서 N,P다이오드를 만들어서 건전지를 달면 전기가 흘러서 불이 들어옴
  • 발광 다이오드에서 좀더 발전해서 트랜지스터가 된다.

 

트랜지스터로 논리소자를 만들 수 있다.

 

BOOL 대수 - AND, OR, NOT

 

도체 - 전기가 흐르는 물질 - 구리, 철, 금, 물, 몸

부도체 - 그릇, 세라믹, 돌

 

부도체는 저항이 무한대에 가깝다.

도체는 저항이 매우 작다. = 0에 가깝다.

 

반도체는 도체로 됐다가 부도체로 됐다가 하는 애다.


트랜지스터 → 논리소자 → 계산기 → 컴퓨터

 

컴퓨터(CPU) ← 트랜지스터 ← 실리콘 ← 규소 ← 모래

 

컴퓨터를 발명해낸 사람들은 아래와 같다. 

 

튜링

  업적

  • 튜링테스트(AI를 테스트 하는 기법)
  • 튜링 기계 (상상 속의 기계)
    • 한줄씩 명령을 수행하는 기계가 있으면 연산을 수행하기 좋겠다 라는 생각을 했다. 

폰노이만

  업적

  • 우주 최강의 두뇌 소유자
  • 폰 노이만 기계
    • 전자계산기, 전자시계, 네비게이션과 컴퓨터는 차이가 있다.
    • 컴퓨터는 프로그램을 교체하면서 모든걸 다 할 수 있었다.
    • 튜링 기계랑 비슷한 기계를 만듦
    • 초창기 컴퓨터의 구조와 비슷함


컴퓨터란, 명령을 하나씩 순서대로 수행하는 기계다.

명령: Add, Sub, Div, etc,,

CPU의 각 코어는 코어마다 명령을 하나씩 수행함

 

IP(instruction point)

 

프로그램은 어떤 명령을 어떤 순서로 수행할 것인지 적어놓은 것을 말한다.

 

컴퓨터는 1, 0밖에 모르고 add 등 밖에 못한다.

 

인간이 표현하는 그림, 음악, 문자는 숫자로 표현 가능하다.

 

A=65, a=97 , , , (ASCII-255개 문자에 코드)

 

1byte = 8bit 2^8은 256임

0-255 개 만 표현할 수 있다.

 

영문자만 표현할 수는 없어서 확장으로 UNICode 2byte 를 많이 사용하고 있음.

 

이미지는 모니터의 1080*720은 가로에 1080픽셀이 있다.

 

색 → 숫자로 RGB 로 표현할 수 있음

 

점하나에 LED3개가 묶여있다. RGB(LED)

 

R - 255, G - 255, B - 255, A - 투명도

4byte숫자를 쭉 나열하면 화면을 보여줄 수 있다.

 

소리는 주파수에 따른 세기를 통해 나타낼 수 있다.

모든 숫자는 이진수로 표현할 수 있다.

 


 

하드웨어란?

비유

요리할 때 레시피가 필요하다. → 요리하는 방법이 적혀있다. ⇒ 프로그램이다.

요리 재료가 필요하다. → 마트가 필요함→ 마트에 버스타고 간다.

 

이때 마트는 하드디스크임(HDD), 버스는 진짜 버스임

 

마트에서 사와서 냉장고에 재료를 넣는다. (메모리) 마트보다 가까움

 

요리준비 끝.

 

필요한 만큼 마늘과 고기를 꺼내서 도마 위에 놓는다. = CACHE

이렇게 하는 이유는 효율적이기 때문이다.

이때, 도마는 Register 이다. (값을 딱 준비 시켜놓는 자리)

 

CPU는 요리하는 사람.

 

요리하는 도중에 마트에 가는 비효율적이고 시간이 오래 걸린다.

메모리에 가기도 그렇고 그래서 캐시를 쓴다.

 


 

컴퓨터 성능 3GHZ = 주파수

1초당 연산을 3G만큼 한다.

1초에 3 * 1024(GB) *. 1024(MB) *. 1024(KB) 만큼의 연산을 한다.

 

해당 글은 [Tucker의 Go 언어 프로그래밍] 1장을 읽고 공부한 글입니다. 

+ Recent posts