의미

최근 편집: 2022년 12월 24일 (토) 18:11

언어학에서 의미(意味)란 글쓴이나 말하는 이가 나타내고자 하는 것을 말한다. 의미를 다루는 언어학의 핵심 분야가 의미론(Semantics)이며, 의미론은 사회학과 컴퓨터공학 등에 지대한 영향을 미쳤다.

오늘날 의미론에서 이해하기 쉽고 직관적인 것으로 받아들여지는 기본적 학설은 "표현 x의 의미는 그 표현을 해당 대화맥락에서 참으로 만드는 조건들의 집합"으로 규정하는 진리 조건 의미론이다. 예컨대, "비가 온다"라는 표현은 그 말을 하는 순간 청자와 화자가 실제로 비가 오는 상황을 공유한다는 조건 하에서 참이므로, "비가 온다"라는 표현은 "청자와 화자가 실제 맥락을 공유하고, 그 맥락에서 실제로 비가 오는 상황을 화자가 청자에게 표현하고 있음"이라는 의미, 또는 그에 준하는 여러 가지 조건들의 집합을 의미로 가진다. 그러나 이러한 학설로부터 생겨나는 다양한 문제점으로 인해, 진리 조건 의미론은 다양한 측면에서 비판받아 왔다.

사회이론에서 의미

사회이론과 사회철학에서 "의미"라는 개념을 어떻게 이해해야 하는지에 대해서 논쟁이 있어 왔다. 막스 베버는 『경제와 사회』에서 행위 개념을 정의하기 위해 의미 개념을 사용하였다. 베버에 따르면 행위란 다음과 같다.

  • "행위는 행동의 주체가 갖는 주관적 의미가 행동에 결합된 것이다."

여기에서 의미란 행위하는 사람의 의식이 떠올리는, 언어로 표현하기 어려운 어떤 목표와 수단에 대한 생각 자체를 말한다. 그러나 인지과학, 심리학, 신경과학의 발달에 힘입어, 인간 의식 구조가 1800년대 인식론에서 제시된 주체의 의식이 갖는 구조와 현저히 다른 것으로 밝혀지기 시작하자, 인식론에서 다루는 주체의 의식이라는 개념을 사용해 정의된 수많은 사회과학적 개념들이 타당성 위기에 놓인다.

위르겐 하버마스는 『의사소통행위이론 1』에서, 언어학의 화용론에서 핵심적인 발상을 가져와 의미 개념을 의사소통행위라는 아주 일반화된 행위를 통해 재정의한다. 반면 생물학과 사회학을 결합한 자기생산체계이론을 주장한 사회학자 니클라스 루만은 하버마스가 의미와 행위를 결부시키는 낡은 전통에 머물러있고, 의사소통행위이론은 부정확하고 협소하다고 비판했다. 루만은 생물학과 일반체계이론의 개념을 사회학에 적용하여, 행위에 독립적이고 유기적으로 활동하는 체계이론적 의미론을 제시한다. 하버마스에게 사회이론의 기본 개념이 사회적 행위인 반면, 루만에게 사회이론의 기본 개념은 의미이다.

컴퓨터과학에서 의미

컴퓨터과학에서 의미론은 프로그래밍 언어를 정의하기 위해 쓰인다. 어떤 코드의 의미를 표현하기 위해 사용되는 의미론은 다양하지만, 중요한 의미론은 작동 의미론(Operational Semantics)과 표기 의미론(Denotational Semantics)이다. 작동 의미론은 어떤 코드를 실행할 때 기계가 실제로 어떻게 작동하는지를 기술하여, 그 기술을 한 코드의 의미라고 정의한다. 그러나 작동 의미론으로 코드의 의미를 충분히 정확하게 정의하려면 아주 많은 실제 사례를 고려해야 한다. 수많은 실제 사례를 고려하더라도, 작동 의미론은 의미를 기술하는 언어가 충분히 명료하지 않다면 효과적으로 프로그래밍 언어를 정의할 수 없다. 따라서 그 대안으로 오늘날 프로그래밍 언어를 정의하기 위해서는 표기 의미론이 쓰이며, 표기 의미론이란 코드의 의미를 집합론의 쓰는 수식 표기를 이용하여 상태변화 함수로 정의하는 것이다. 이 정의를 통해 기계에 독립적으로 프로그래밍 언어의 의미구조를 정의할 수 있다.

예를 들어, 작동 의미론과 표기 의미론으로 다음 의사코드의 의미를 각각 정의해 보자.

if <condition> then <then_stmt> else <else_stmt> fi;

  • 작동 의미론을 이용한 정의: 위 코드의 의미는, "〔특정 컴퓨터 x의 어떤 프로세서와 메모리의 …… 라는 상황 하에서〕<condition>이 참일 경우 <then_stmt>를 실행하고, 거짓일 경우 <else_stmt>를 실행한다."이다. 실제로 작동 의미론을 이용해 정의하는 것은 이런 정의보다 훨씬 어려워서, 예컨대 "<condition>이 참일 경우……"라는 표현을 사용하는 것은 거의 쓸모가 없고, "<condition> 서브루틴을 수행한 후 레지스터 x의 값이 0이 아닐 경우……"라는 식의 정의를 사용한다. 그리고 작동 방식이 다른 여러 컴퓨터에 대한 각각의 정의를 명세해야 한다.
  • 표기 의미론을 이용한 정의: 위 의사코드의 의미를 반환하는 함수 M(state S, condition C, statement ts, statement es)은 다음과 같다. 편의상 모든 의미 함수 M()의 첫 번째 패러미터 상태 S는 생략하기로 한다. M : <C, ts, es> → S = { ( M(C) ≡ M(true) )∧M(ts) }∨{ ( M(C) ≡ M(false) )∧M(es) } 필자가 충분히 전문가가 아니기에 위 정의는 어색하거나 오류가 있을 수 있다. 그러나 표기 의미론의 핵심적인 내용은 전달되었다. 이러한 정의를 사용하면 시스템의 한 상태로부터 다른 상태로 전이하는 함수를 명세함으로써 정확하고 간결한 함수 정의를 제시할 수 있다.