-
[프언] #01. Introduction2023-2학기/프로그래밍언어 2023. 9. 2. 19:42
Syntax와 Semantics
"Programming Language(프로그래밍 언어)란 무엇인가요?"
가장 간단한 답변으로는, "C, Javascript, Phython 등 프로그래밍을 위한 언어" 정도가 있겠네요. 그렇게 저희에게 도움이 되는 답변은 아닙니다. "OO이란 무엇인가요?"라는 질문에 대답하는 가장 일반적인 방법은 OO이 무엇으로 이루어져 있는지에 대해서 말해보는 겁니다. "자동차란 무엇인가요?"라고 묻는다면 바퀴 4개, 벽면, 지붕 이런 것들에 대해 이야기하는 것처럼요.
이런 방식으로 프로그래밍 언어에 대해 접근해 보겠습니다. "Programming Language는 무엇으로 이루어져 있나요?"라고 묻는다면, 프로그래밍 언어는 Syntax와 Semantics로 이루어져 있다고 대답할 수 있겠습니다.
Syntax와 Semantics, 저는 이 두 단어를 들어만 봤지 정확히 뭘 의미하는지는 전혀 모르고 있었습니다. 간단하게 Syntax는 언어의 문법과 구조에 관련된 요소를 의미합니다. 코드를 작성했을 때 이 코드의 문법 자체가 맞았는지, 틀렸는지에 관련되어 있습니다. 반면 Semantics는 언어의 실제 의미와 관련된 요소라고 생각하면 됩니다.
감이 잘 안 오실 텐데, 예시를 한번 보겠습니다.
x = x + 4;
C++에서 위와 같은 코드를 작성했다고 생각해 봅시다. 이 코드의 마지막에 세미콜론(;)을 써야 한다는 것, 등호(=) 왼쪽과 오른쪽에 변수를 작성한다는 것처럼 C++의 문법과 관련된 부분은 전부 Syntax에 해당합니다. 그리고 이 코드는 다들 아시다시피 변수 x에 저장된 값에 4를 더해준다는 의미를 가지고 있는데, 이것은 Semantics에 해당한다고 생각하시면 됩니다. 프로그래밍 언어를 사람에 비유하자면 Syntax는 그 사람의 외모나 형태, Semantics는 그 사람의 생각을 의미한다고 볼 수 있겠네요.
Ecosystem
아까 "Programming Language는 무엇으로 이루어져 있나요?"라는 질문에 Syntax와 Semantics라고 답했었죠. 사실 이것은 좁은 의미에서의 대답이고 더 넓은 의미에서 생각해 보면 프로그래밍 언어는 정말 다양한 요소로 구성되어 있습니다.
프로그래머들에게 중요한 또 다른 요소는 바로 Ecosystem인데요. 생태계라는 의미를 가진 영어단어죠. Programming Language의 Ecosytem이라고 하면 이 언어에 포함된 모든 것들, 그러니까 개발자들과 이 언어를 사용하는 회사, 써드파티 라이브러리 등 모든 것들이 포함됩니다.
써드파티 라이브러리(Third-Party Library)가 뭔가요?
라이브러리(Library)라는 용어 자체에 대해 먼저 설명을 드리겠습니다. 우리는 일상생활에서 무언가에 대한 지식이 필요할 때, 도서관에 가서 원하는 책을 찾고 그 책에서 원하는 정보를 얻곤 합니다. 프로그래밍에서도 똑같습니다. 라이브러리는 특정 기능들을 하는 코드를 모아놓은 것입니다. 특정 기능을 하는 코드가 필요하다면, 라이브러리에서 그 기능을 하는 코드를 찾아서 편하게 사용할 수 있습니다.
써드파티 라이브러리라고 하면, 해당 언어를 만든 사람 이외의 사람이 만들어둔 라이브러리를 의미합니다. 많은 사람들이 사용하는 언어일수록 사람들이 라이브러리에 만들어둔 코드들이 풍부할 테고, 그러면 개발자 입장에서는 자기가 원하는 프로그램을 만들기 위해 다양한 코드들을 찾아 사용할 수 있을 테니 훨씬 더 편하겠죠? 이것이 프로그래머들에게 Ecosystem이 중요한 이유입니다.
라이브러리에 대해 더 자세히 알고 싶으시면 이 글을 읽어보시는 것을 추천드립니다. 개인적으로 설명이 잘 되어있어서 이해가 잘 됐습니다.마무리
이렇게 프로그래밍 언어를 구성하는 요소들에 대해 간단히 살펴보았는데요. 이제 이 카테고리의 글들이 대략 무슨 내용일지 감을 잡으셨을 겁니다. 많은 프로그래밍 언어를 배우는 것이 목적이 아니라 여러 프로그래밍 언어들이 공통적으로 가지고 있는 특징들을 배워서, 앞으로 새로운 언어를 만나게 되더라도 그 언어를 좀 더 쉽게 습득할 수 있는 능력을 배우는 것이 목표입니다.
감사합니다.
이 글은 컴퓨터공학과 학부생이 개인 공부 목적으로 작성한 글이므로, 부정확하거나 틀린 내용이 있을 수 있으니 참고용으로만 봐주시면 좋겠습니다. 레퍼런스 및 글에 대한 기본적인 정보는 이 글을 참고해 주세요.
'2023-2학기 > 프로그래밍언어' 카테고리의 다른 글
[프언] #05. Expressions (0) 2023.09.25 [프언] #04. Functional Programming (2) 2023.09.24 [프언] #03. Inductive Definitions (0) 2023.09.09 [프언] #02. Programming in Scala (3) 2023.09.09 [프언] #00. Course Information (0) 2023.08.31