맨위로가기

명목적 자료형 체계

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

명목적 자료형 체계는 두 변수의 자료형 이름이 동일하게 명시된 경우에만 호환된다고 판단하는 방식이다. C 언어의 struct 자료형처럼 멤버가 동일하더라도 이름이 다르면 호환되지 않는다. 명목적 서브타이핑은 한 자료형이 다른 자료형의 서브타입이 되기 위해 명시적으로 선언되어야 하며, C++, C#, 자바, 코틀린 등에서 사용된다. 명목적 자료형 체계는 자료형 안전성을 높이지만, 구조적 타이핑에 비해 유연성은 떨어진다.

2. 명목적 타이핑

명목적 타이핑에서 두 변수는 같은 이름의 자료형으로 선언된 경우에만 서로 호환된다. 예를 들어, C에서 서로 다른 이름의 `struct` 자료형은 완전히 같은 멤버를 갖고 있더라도 서로 호환될 수 없다.

하지만 C는 `typedef`를 이용해 이미 존재하는 자료형의 별칭을 선언할 수 있다. 이는 그저 문법적 요소일 뿐, 자료형 체크를 위해 별칭과 원래 이름을 구분하지는 않는다. 이 기능은 자료형 안전성에 문제를 일으킬 수 있다. 예를 들어, 하나의 `int` 자료형이 두 개의 의미적으로 다른 방식으로 사용되는 경우가 있다. 하스켈에서는 `type`을 이용해 C처럼 별칭을 선언할 수 있으며, `newtype` 선언을 통해 새로운, 구분되는, 존재하는 자료형의 동형사상을 만들 수 있다.[2]

3. 명목적 서브타이핑

명목적 서브타이핑에서는 한 자료형이 다른 자료형의 서브타입이 되기 위해 명시적으로 선언되어야만 서브타입으로 인정된다. 명목적 자료형 언어들은 대체로 서브타입이 구조적 호환성을 갖도록 강제하지만, 에펠은 호환되지 않는 서브타입 선언도 허용한다. 구조적으로 호환되더라도 명시적으로 서브타입으로 선언되지 않은 자료형은 서브타입으로 인정되지 않는다.

C++, C#, 자바, 코틀린, 오브젝티브-C, Delphi, Swift, Julia, Rust는 주로 명목적 타이핑과 명목적 서브타이핑을 사용한다.

자바C#과 같은 일부 명목적 서브타입 언어에서는 `final` (자바) 또는 `sealed` (C#) 키워드를 사용하여 클래스에 대한 추가적인 서브타이핑을 막을 수 있다.

4. 비교

명목적 타이핑은 자료형 간 예상치 못한 호환성으로 인해 자료형 안전성이 저해되는 것을 방지하지만, 유연성은 떨어진다. 예를 들어 명목적 타이핑에서는 하위 자료형을 수정하지 않고는 새로운 상위 자료형을 만들 수 없다.[1] 이는 구조적 자료형 체계보다 자료형 안전성이 높지만, 유연성이 낮아 기존 하위 형식을 수정하지 않고는 새로운 상위 형식을 만들 수 없다는 단점이 있다.[2]

참조

[1] 웹사이트 Haskell 2010 Report: Declarations and Bindings: User-Defined Datatypes https://web.archive.[...] 2015-06-02
[2] 웹인용 Haskell 2010 Report: Declarations and Bindings: User-Defined Datatypes https://www.haskell.[...] 2018-10-16



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com