님들 코드 짤 때 의미있게 짬?

Gaegul·2020년 6월 24일
1

컴퓨터 공학 스터디 발표자료인 블로그 자료 입니다. 잘못된 정보가 있다면 댓글로 알려주세요 😊

오랜만에 블로그 글을 작성하려니 어색한 것 같다.(열심히 써야지😔) 컴퓨터 공학 스터디도 어느새 한바퀴를 다 돌았고 우리도 더욱 성장하려고 노력했다. 그 방법 중의 하나가 새로운 주제를 찾아보는 것이었다.
언젠간 언어론에 대해 공부하면 재밌을 거라 생각했고 언어론 주제에 대해 이야기 해보자고 의견을 냈다. 내가 이야기 했던 주제라 재미없게 발표하기도, 어려운 걸 발표하기도 뭣할 것 같아서 비교적 이해하기 쉬운 의미론에 대한 이야기를 하려고 한다.

문자열의 구성

우리가 프로그래밍 언어에서 사용하는 문자열을 구성하는 작은 수준의 단위를 어휘 항목이라고 한다. 그 구성요소들은 식별자, 연산자, 수치 리터럴, 특수자 이렇게 4가지로 나눌 수 있다.

식별자(identifier)는 변수나 클래스를 구분해주는 이름을 이야기한다.
연산자(operator)는 연산에 사용하는 +, -, *등을 이야기 한다.
수치 리터럴(numberic literal)은 1, 3, 5.2와 같은 숫자들을 이야기 한다.
특수자(special word)는 int, flaot와 같은 변수형을 이야기 한다.

이러한 가장 낮은 단위로 어휘 항목들을 구분할 수 있는 분류 요소를 Token이라고 한다.

단어는 문장을 만들고 문장이 모여서 언어가 된다. 이러한 문장들은 단순성을 위해 가장 낮은 수준으로 표현한다.

구문과 의미

이렇게 구성되어 있는 문장들과 언어들은 구문과 의미로 이뤄져있다.

구문은 언어가 구성되는 방법, 구조에 대한 이야기를 말한다. 우리 프로그래밍 언어에서는 문법이 구문과 같다.

의미는 문장들이 어떤 의미를 가지고 있는지에 대해 이야기하는 것을 말한다.

자, 코드로 직접 구문과 의미가 어떠한 것인지 확인해보자.

위의 코드는 선택 정렬 코드이다. 이 코드에서 구문은 함수를 선언 할 때

def selection_sort(arr):
	return

이런식으로 "함수는 def와 함수 이름, 매개변수로 정의 한다"가 프로그래밍 언어론에서의 구문이 되는 것이다.

for i in range(len(arr) - 1):
        min_idx = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]

그리고 위의 코드처럼 배열의 현재 요소보다 작은 요소를 가져와서 넣는다.로 해석하는것이 프로그래밍 언어론에서의 의미이다.

당신이 의미를 중시해야 하는 이유

미국의 언어 학자인 노엄촘스키는 이러한 말을 남겼다.
"Colorless green ideas sleep furiously."
이 문장은 문법적으로 말이 되는 올바른 문장인 동시에 의미적으로 아무 말도 안되는 문장이다. 이러한 문장을 통해 언어의 의미는 문법이 아닌 문맥에 있음을 알 수 있다.

python 코드로 표현해보자.

number = 'string'

print(nubmer * number)

이 코드는 우리의 생각대로 멀쩡하게 동작한다. 하지만 number라는 변수에 string 문자열을 할당하는게 의미적으로 옳은가? 라고 생각해보면 난 옳지 않다고 생각한다.

의미적으로 잘 전달하기 위해서 우리는 프로그래밍을 할 때 변수이름 하나하나를 신경써서 짓고, x not is 0 보다 x is not 0을 사용해서 코드를 작성한다. 언어의 의미는 문법이 아닌 문맥에 있기 때문이다.

아래 링크는 의미론에 대한 학습을 할 때 참고했던 글들입니다.

https://destiny738.tistory.com/161
https://www.slideshare.net/namhyeonuk90/pl-1
https://booolean.tistory.com/295
https://www.it-swarm.dev/ko/syntax/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4%EC%97%90%EC%84%9C-%EA%B5%AC%EB%AC%B8%EA%B3%BC-%EC%9D%98%EB%AF%B8%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C/1041123859/
https://poiemaweb.com/coding

profile
재밌는거 합니다🍀

0개의 댓글