Skip to content

Latest commit

 

History

History
118 lines (61 loc) · 5.05 KB

프로그래밍_언어_개요.md

File metadata and controls

118 lines (61 loc) · 5.05 KB

Tucker의 Go 언어 프로그래밍 - 요약


#1 프로그래밍 언어 - 개요



초창기 프로그래밍 언어

컴퓨터가 알 수 있는 건 오직 0과 1밖에 없다. 컴퓨터는 인간의 언어를 알아듣지 못하므로 기계어가 필요하다.

이에 따른 연산 수행을 오퍼레이션 코드(Operation code), 줄여서 OP 코드라고 부르며, 초기 프로그래머들은 천공 카드에 구멍을 뚫는 방식으로 기계어를 작성해 컴퓨터에 명령을 내렸다.



어셈블리어의 등장

어셈블리어는 기계어와 1:1로 매칭되기 때문에 매우 빠르고 기계어보다 상대적으로 쉬웠지만 칩셋마다 명령을 새로 익혀야 하는 불편함이 있었다.

어셈블리어는 현재까지도 기계 장치에 직접 코딩하는 임베디드 프로그래밍에 많이 사용된다.



고수준 언어의 등장

현재 대부분의 프로그래밍 언어는 고수준 언어이며 고수준 언어는 높은 생산성, 높은 가독성, 유연한 이식성을 제공한다.

생산성 다양한 기법을 제공해 프로그램을 작성하는 시간이 기계어에 비해 덜 소요된다.
가독성 기계어에 비해 짧고 읽기 쉬울 뿐만 아니라, 오류 가능성이 낮다.
이식성 기계어에 비해 이식성이 더 좋다.

고수준 언어의 등장으로 인간 친화적으로 코드를 작성할 수 있게 됐고, 다양한 고급 기능을 활용할 수 있다.

예를 들어, 어셈블리어에 비해서 전체적인 흐름을 이해하기 쉽고 프로그램을 만들 때 필요한 코드 양이 대폭 줄어들게 됐다.



고수준 코드가 실행되기까지

어떤 프로그래밍 언어로 작성하든 컴퓨터가 명령을 실행하려면 결국 기계어로 변환되어야 한다.

고수준 언어는 기계어로 바로 변환될 수 없기 때문에 별도의 프로그램을 사용해야 한다.

즉, 기계어로 변환 과정을 컴파일이라고 부르며, 기계어로 변환해 주는 프로그램을 컴파일러라고 한다.



정적 컴파일 언어 vs 동적 컴파일 언어

미리 컴파일을 하면 -> 정적 컴파일 언어

사용할 때 컴파일 하면 -> 동적 컴파일 언어



정적 컴파일 언어

미리 기계어로 변환해두었다가 사용하는 방식의 언어를 정적 컴파일 언어라고 한다.

  • 기계어로 변환해둔 파일을 실행 파일이라고 한다.

  • 윈도우에서 .exe 파일이 미리 기계어로 변환된 실행 파일이다.

  • 실행 파일은 기계어 코드라고 볼 수 있다.

  • 실행할 때 변환 과정이 필요 없고 빠르고, 타입 에러를 컴파일 시점에서 발견할 수 있어 타입 안정성이 뛰어나다.



동적 컴파일 언어

실행 시점(runtime)에 기계어로 변환하는 방식의 언어를 동적 컴파일 언어라고 한다.

  • 동적 컴파일 언어는 실행할 때 변환하기 때문에 정적 컴파일 언어보다 더 느리게 동작한다.

  • Go 언어는 정적 컴파일이지만, Go 내부 환경 변수만 바꿔서 다양한 플랫폼에 맞도록 실행 파일을 만들 수 있다.



약 타입 언어 vs 강 타입 언어

프로그래밍 언어를 나눌 때 타입 검사를 강하게 하는 언어와 그렇지 않은 언어로 나눌 수 있다.

타입 검사를 강하게 하면 강 타입 언어(정적 타입)라고 하며 타입 약하게 하는 언어는 약 타입 언어(동적 타입 언어)라고 말한다.


서로 다른 타입 간 연산에 관대한 언어를 약 타입 언어(Weakly typed)라고 하고, 엄격한 언어를 강 타입 언어(Strongly typed)라고 한다.


약 타입 언어는 규칙에 관대해 더 편하게 코딩할 수 있는 장점이 있는 반면 예기치 못한 버그를 발생시킨다.

강 타입 언어는 사용하기는 까다롭지만 타입 검사를 언어 자체에서 해주기 때문에 타입으로 생길 수 있는 문제를 미연에 방지할 수 있다.


Go 언어는 강 타입의 정적 타입 언어입니다. Go는 타입 안정성을 중시하며 암시적 타입 변환을 지원하지 않는다. 타입 변환을 위해서는 명시적인 변환 문법을 사용해야 한다.



가비지 컬렉터 유무

가비지 컬렉터는 프로그램이 할당했던 메모리 중에서 더 이상 사용되지 않는 부분, 즉 '가비지'를 찾아내고, 이를 회수하여 메모리 자원을 효율적으로 관리하는 역할을 한다.


가비지 컬렉터가 없는 언어에서는 프로그래머가 메모리를 직접 관리한다. 이 때문에 메모리 누수(memory leak)나 잘못된 메모리 해제(double free) 같은 문제가 발생할 수 있다.


Go 언어는 효율적인 가비지 컬렉션 메커니즘을 갖추고 있으며, 성능 저하를 최소화하기 위한 여러 최적화가 이루어져 있다.