You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
공학자들은 개념을 대체할 수 있는 좀 더 세련돼 보이는 용어를 수학으로부터 차용해 왔다.
그것은 바로 타입(type) 이다.
타입의 정의 = 개념의 정의(완전히 동일하다)
타입은 공통점을 기반으로 객체들을 묶기 위한 틀이다. 타입은 개념과 마찬가지로 심볼, 내연, 외연을 이용해 서술할 수 있으며 타입에 속하는 객체 역시 타입의 인스턴스라고 한다.
타입은 개념과 동일하다. 따라서 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다.
어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다. 타입의 인스턴스는 타입을 구성하는 외연인 객체 집합의 일원이 된다.
물론 타입에 관한 이야기가 이렇게 쉽다면 개발자들의 삶은 좀 더 편하고 윤택했을 것이다.
안타깝게도 타입이 근본적으로 개념과 동일하다고 하더라도 컴퓨터 내부로 들어오는 순간 좀 더 기계적인 의미로 윤색될 수밖에 없다.
그리고 기계적인 의미는 종종 개발자들의 머리를 혼란스럽게 만든다.
데이터 타입
컴퓨터가 어떤 작업을 수행하기 위해서는 작업에 필요한 데이터를 메모리 안으로 불러들여야 한다.
메모리에 불러들여진 데이터들은 무수히 많은 0과 1로 치장되어 메모리에 저장된다.
실제로 메모리를 들여다 보면 그 안에는 끝없이 펼쳐진 0과 1의 행렬만이 존재한다. 메모리의 세상에는 타입이라는 질서가 존재하지 않는다.
실제로 ‘타입이 없다(Untyped)’는 말은 메모리 안의 데이터를 다룰 수 있는 단 하나의 타입만이 존재한다는 것을 의미한다.
타입이 없는 체계 안에서 모든 데이터는 일련의 비트열(bit string)로 구성된다.
메모리 내부의 비트열을 직접 들여다 보면서 메모리 안에 들어 있는 값이 어떤 의미인지 말할 수 있는 사람은 아무도 없다.
어떤 메모리 조각에 들어 있는 값의 의미는 그 값을 가져다 자신의 용도에 맞게 사용하는 외부의 해석가에 의해 결정된다.
우리가 애플리케이션이라고 부르는 프로그램이 바로 그런 해석가의 일종이다.
애플리케이션 안에서 타입이 없는 메모리 내부의 값을 다루다 보면 수많은 오해와 시행착오에 부딪히게 된다.
메모리 안에 저장된 ‘10010001’이라는 값은 숫자인가, 문자인가, 아니면 특정한 메모리 상의 주소인가?
타입 없는 무질서가 초래한 혼돈의 세상에 질려버린 사람들은 급기야 메모리 안의 데이터에 특정한 의미를 부여하기 시작했다.
사람들은 자신이 다뤄야 하는 데이터의 용도와 행동에 따라 그것들을 분류했다.
어떤 데이터에 다른 데이터를 더하거나 빼거나 나누거나 곱할 수 있다면 그 데이터를 숫자형으로 분류했다. 데이터가 여러 문자로 구성돼 있고 다른 문자와 연결될 수 있다면 그 데이터를 문자열형으로 분류했다. 데이터를 이용해 어떤 사실에 대한 참/거짓을 이야기할 수 있다면 그 데이터는 논리형으로 분류 했다.
컴퓨터 안에 살아가는 데이터를 목적에 따라 분류하기 시작하면서 프로그래밍 언어 안에는 서서히 타입 시스템(type system)이 자라나기 시작했다. 타입 시스템의 목적은 메모리 안의 모든 데이터가 비트열로 보임으로써 야기되는 혼란을 방지하는 것이다.
타입 시스템은 메모리 안에 저장된 0과 1에 대해 수행 가능한 작업과 불가능한 작업을 구분함으로써 데이터가 잘못 사용되는 것을 방지한다.
결과적으로 타입 시스템의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것이다.
지금까지 이야기한 내용을 통해 타입에 관련된 두 가지 중요한 사실을 알 수 있다 [Cardelli 1985].
첫째, 타입은 데이터가 어떻게 사용되느냐에 관한 것이다. 숫자형 데이터가 숫자형인 이유는 데이터를 더하거나 빼거나 곱하거나 나눌 수 있기 때문이다. 어떤 데이터가 문자열형인 이유는 두 데이터를 연결해 새로운 문자열을 만들 수 있고 데이터에 포함된 문자의 길이를 알 수 있기 때문이다. 따라서 데이터가 어떤 타입에 속하는지를 결정하는 것은 데이터에 적용할 수 있는 작업이다. 일반적으로 데이터를 이용해 수행할 수 있는 작업을 연산자(operator)라고 한다.
예를 들어 숫자형 데이터에 적용할 수 있는 +, -, *, / 등의 기호는 산술 연산자의 일종이다.
여기서 중요한 것은 연산자의 종류가 아니라 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정한다는 점이다.
둘째, 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰 진다. 데이터 타입의 표현은 연산 작업을 수행하기에 가장 효과적인 형태가 선택되며, 개발자는 해당 데이터 타입의 표현 방식을 몰라도 데이터를 사용하는 데 지장이 없다.
개발자는 해당 데이터 타입을 사용하기 위해 단지 데이터 타입에 적용할 수 있는 연산 자만 알고 있으면 된다. 따라서 숫자형 데이터에 적용할 수 있는 산술 연산자를 알고 있다면 메모리 내부에 숫자가 어떤 방식으로 저장되는지를 모르더라도 숫자형 데이터를 사용할 수 있다.
이 책에서는 프로그래밍 언어 관점에서 데이터 타입을 다음과 같이 정의한다.
데이터 타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이 터다. 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.
The text was updated successfully, but these errors were encountered:
타입
타입은 개념이다
공학자들은 개념을 대체할 수 있는 좀 더 세련돼 보이는 용어를 수학으로부터 차용해 왔다.
그것은 바로 타입(type) 이다.
타입의 정의 = 개념의 정의(완전히 동일하다)
타입은 공통점을 기반으로 객체들을 묶기 위한 틀이다. 타입은 개념과 마찬가지로 심볼, 내연, 외연을 이용해 서술할 수 있으며 타입에 속하는 객체 역시 타입의 인스턴스라고 한다.
타입은 개념과 동일하다. 따라서 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다.
어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다. 타입의 인스턴스는 타입을 구성하는 외연인 객체 집합의 일원이 된다.
물론 타입에 관한 이야기가 이렇게 쉽다면 개발자들의 삶은 좀 더 편하고 윤택했을 것이다.
안타깝게도 타입이 근본적으로 개념과 동일하다고 하더라도 컴퓨터 내부로 들어오는 순간 좀 더 기계적인 의미로 윤색될 수밖에 없다.
그리고 기계적인 의미는 종종 개발자들의 머리를 혼란스럽게 만든다.
데이터 타입
컴퓨터가 어떤 작업을 수행하기 위해서는 작업에 필요한 데이터를 메모리 안으로 불러들여야 한다.
메모리에 불러들여진 데이터들은 무수히 많은 0과 1로 치장되어 메모리에 저장된다.
실제로 메모리를 들여다 보면 그 안에는 끝없이 펼쳐진 0과 1의 행렬만이 존재한다. 메모리의 세상에는 타입이라는 질서가 존재하지 않는다.
실제로 ‘타입이 없다(Untyped)’는 말은 메모리 안의 데이터를 다룰 수 있는 단 하나의 타입만이 존재한다는 것을 의미한다.
타입이 없는 체계 안에서 모든 데이터는 일련의 비트열(bit string)로 구성된다.
메모리 내부의 비트열을 직접 들여다 보면서 메모리 안에 들어 있는 값이 어떤 의미인지 말할 수 있는 사람은 아무도 없다.
어떤 메모리 조각에 들어 있는 값의 의미는 그 값을 가져다 자신의 용도에 맞게 사용하는 외부의 해석가에 의해 결정된다.
우리가 애플리케이션이라고 부르는 프로그램이 바로 그런 해석가의 일종이다.
애플리케이션 안에서 타입이 없는 메모리 내부의 값을 다루다 보면 수많은 오해와 시행착오에 부딪히게 된다.
메모리 안에 저장된 ‘10010001’이라는 값은 숫자인가, 문자인가, 아니면 특정한 메모리 상의 주소인가?
타입 없는 무질서가 초래한 혼돈의 세상에 질려버린 사람들은 급기야 메모리 안의 데이터에 특정한 의미를 부여하기 시작했다.
사람들은 자신이 다뤄야 하는 데이터의 용도와 행동에 따라 그것들을 분류했다.
어떤 데이터에 다른 데이터를 더하거나 빼거나 나누거나 곱할 수 있다면 그 데이터를 숫자형으로 분류했다. 데이터가 여러 문자로 구성돼 있고 다른 문자와 연결될 수 있다면 그 데이터를 문자열형으로 분류했다. 데이터를 이용해 어떤 사실에 대한 참/거짓을 이야기할 수 있다면 그 데이터는 논리형으로 분류 했다.
컴퓨터 안에 살아가는 데이터를 목적에 따라 분류하기 시작하면서 프로그래밍 언어 안에는 서서히 타입 시스템(type system)이 자라나기 시작했다. 타입 시스템의 목적은 메모리 안의 모든 데이터가 비트열로 보임으로써 야기되는 혼란을 방지하는 것이다.
타입 시스템은 메모리 안에 저장된 0과 1에 대해 수행 가능한 작업과 불가능한 작업을 구분함으로써 데이터가 잘못 사용되는 것을 방지한다.
결과적으로 타입 시스템의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것이다.
지금까지 이야기한 내용을 통해 타입에 관련된 두 가지 중요한 사실을 알 수 있다 [Cardelli 1985].
첫째, 타입은 데이터가 어떻게 사용되느냐에 관한 것이다. 숫자형 데이터가 숫자형인 이유는 데이터를 더하거나 빼거나 곱하거나 나눌 수 있기 때문이다. 어떤 데이터가 문자열형인 이유는 두 데이터를 연결해 새로운 문자열을 만들 수 있고 데이터에 포함된 문자의 길이를 알 수 있기 때문이다. 따라서 데이터가 어떤 타입에 속하는지를 결정하는 것은 데이터에 적용할 수 있는 작업이다. 일반적으로 데이터를 이용해 수행할 수 있는 작업을 연산자(operator)라고 한다.
예를 들어 숫자형 데이터에 적용할 수 있는 +, -, *, / 등의 기호는 산술 연산자의 일종이다.
여기서 중요한 것은 연산자의 종류가 아니라 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정한다는 점이다.
둘째, 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰 진다. 데이터 타입의 표현은 연산 작업을 수행하기에 가장 효과적인 형태가 선택되며, 개발자는 해당 데이터 타입의 표현 방식을 몰라도 데이터를 사용하는 데 지장이 없다.
개발자는 해당 데이터 타입을 사용하기 위해 단지 데이터 타입에 적용할 수 있는 연산 자만 알고 있으면 된다. 따라서 숫자형 데이터에 적용할 수 있는 산술 연산자를 알고 있다면 메모리 내부에 숫자가 어떤 방식으로 저장되는지를 모르더라도 숫자형 데이터를 사용할 수 있다.
이 책에서는 프로그래밍 언어 관점에서 데이터 타입을 다음과 같이 정의한다.
데이터 타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이 터다. 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.
The text was updated successfully, but these errors were encountered: