맨위로가기

POD (데이터 구조)

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

1. 개요

POD(Plain Old Data Structure)는 프로그래밍 언어에서 단순한 데이터 구조를 의미한다. C++에서는 스칼라 유형 또는 특정 조건을 만족하는 클래스를 POD로 정의하며, C++ 표준 라이브러리는 `is_pod` 템플릿을 통해 POD 여부를 확인할 수 있게 했지만, C++20에서는 이 개념이 "trivial" 및 "standard-layout" 유형으로 대체되었다. Java에서는 공개 데이터 멤버만 가진 클래스, 데이터 전송 객체, 또는 캡슐화가 없는 레코드를 POD로 간주하기도 한다. PHP에서는 연관 배열과 `stdClass` 객체를, XML 및 JSON과 같은 구조적 데이터 표현도 POD로 활용될 수 있으며, 파이썬의 데이터 클래스, C의 구조체 또한 POD와 유사하게 사용된다. POD는 시스템 간 정보 교환, 외부 데이터로부터 객체 필드 값 표현 등에 유용하게 사용된다.

2. 프로그래밍 언어별 PDS

수동 데이터 구조(PDS)는 데이터 조작과 무결성을 위한 세부 로직이 시스템의 다른 부분에 명확하게 정의되어야 하는 경우에 적합하다. PDS는 주로 시스템 경계에서 발견되는데, 정보가 다른 시스템이나 영구 저장소로 이동하거나 그 반대로 이동하는 상황에서 사용된다. 이러한 경계에서는 시스템 내부의 다른 부분에서 중요한 도메인 로직이 관련성이 떨어지기 때문이다. 예를 들어, PDS는 외부 데이터로부터 객체의 필드 값을 표현하는 데 유용할 수 있다. 이는 아직 유효한 객체가 되기 위해 필요한 의미 검사나 해석이 적용되지 않은 시스템의 초기 단계에서 특히 편리하다.

2. 1. C++

C++에서 PDS(데이터 구조) 유형, 또는 Plain Old C++ Object는 스칼라 유형 또는 PDS 클래스로 정의된다.[2] PDS 클래스는 사용자 정의 복사 할당 연산자, 사용자 정의 소멸자가 없으며, PDS 자체가 아닌 비정적 데이터 멤버도 없다. 또한 PDS 클래스는 집합체(aggregate)여야 하며, 이는 사용자 선언 생성자, 개인 또는 보호된 비정적 데이터, 가상 기본 클래스[3] 및 가상 함수가 없음을 의미한다.[4] 표준은 C++에서 PDS가 어떻게 작동해야 하는지에 대한 내용을 포함한다. C++ 표준 라이브러리type_traits 라이브러리는 주어진 유형이 POD인지 여부를 판단하는 데 사용할 수 있는 is_pod라는 템플릿을 제공한다.[5] C++20에서는 "plain old data"(POD)의 개념과 그에 따른 is_pod가 더 이상 사용되지 않으며 "trivial" 및 "standard-layout" 유형의 개념으로 대체되었다.[6]

일부 컨텍스트에서 C++는 PDS 유형만 사용할 수 있도록 허용한다. 예를 들어, C++98의 union가상 함수 또는 중요하지 않은 생성자 또는 소멸자를 가진 클래스를 포함할 수 없다. 이 제한은 컴파일러가 union에 대해 어떤 생성자 또는 소멸자를 호출해야 하는지 결정할 수 없기 때문에 부과된다. PDS 유형은 PDS만 지원하는 C (프로그래밍 언어)와의 인터페이싱에도 사용할 수 있다.

2. 2. Java

자바에서는 일부 개발자들이 PDS 개념을 공개 데이터 멤버만 있고 메서드가 없는 클래스(Java Code Conventions 10.1)에 해당한다고 간주하며,[7] 이는 데이터 전송 객체와 유사하다.[8] 다른 개발자들은 메서드가 있더라도 특별한 로직 없이 게터(getter)와 세터(setter)만 가진 클래스인 일반 자바 객체(POJO)나, 이벤트 처리 없이 게터와 세터 외 추가 메서드를 구현하지 않는 JavaBeans도 PDS 개념에 포함시키기도 한다. 그러나 POJO와 JavaBeans는 캡슐화를 통해 데이터 접근을 제어하므로, 멤버를 직접 노출하는 PDS의 정의와는 차이가 있다.

한편, 2021년 자바 16 버전에 도입된 레코드(Record)는 캡슐화 없이 데이터를 얕게 불변(shallowly immutable)하게 다루는 데이터 운반체(data carrier)로 설계되었으므로 PDS로 간주될 수 있다.

2. 3. 기타 언어

PHP에서는 연관 배열과 stdClass 객체를 POD처럼 사용할 수 있다.

XML이나 JSON과 같은 다른 구조적 데이터 표현 방식도 특별한 의미 제약 없이 사용될 경우 POD와 유사하게 활용될 수 있다.

파이썬의 경우, 버전 3.7부터 도입된 `dataclass` 모듈이 있다. 이는 데이터 유효성 검사 옵션을 제공하며, 특별한 행위 없이 데이터를 담는 컨테이너 역할을 하는 데이터 클래스(dataclass)를 만드는 데 자주 사용된다. 데이터 클래스는 클래스를 만들고 데이터 값을 저장하는 편리한 방법을 제공하며, 반복적인 코드를 줄이고 코드의 가독성을 높이는 데 도움을 준다.[9]

C 언어에서는 구조체(struct)가 POD와 동일한 방식으로 사용된다.

3. PDS의 활용

POD(Plain Old Data Structure)는 데이터 조작 및 무결성에 대한 세부 로직이 다른 곳에 명확하게 표시되어야 하는 시스템의 일부에 적합하다. POD는 시스템 경계에서 자주 발견되는데, 이는 정보가 다른 시스템이나 영구 저장소로 이동하거나 그곳에서 오는 경우처럼, 시스템의 다른 부분에서 발견되는 문제 도메인 로직과 관련이 없는 경우이다. 예를 들어, POD는 유효한 객체에 필요한 의미 검사 및 해석이 아직 적용되지 않은 시스템의 일부에서 외부 데이터로부터 구성되는 객체의 필드 값을 표현하는 데 편리할 수 있다.

참조

[1] 논문 passive data structure https://xlinux.nist.[...] 2014-09-11
[2] 서적 Programming languages — C++ ISO/IEC 2003-10-15
[3] 서적 The C++ programming language Pearson Education, Inc 2013-06
[4] 웹사이트 C++ Language Note: POD Types https://web.archive.[...] Fermi National Accelerator Laboratory 2016-12-06
[5] 웹사이트 is_pod C++ Reference http://www.cplusplus[...] cplusplus.com 2016-12-06
[6] 웹사이트 P0767R1: Deprecate POD http://www.open-std.[...] 2020-01-20
[7] 웹사이트 Java Code Conventions 10.1 http://www.oracle.co[...] Oracle 2016-12-06
[8] 웹사이트 Java Language Data Structures http://www.oracle.co[...] Sun/Oracle Code Conventions 2016-12-06
[9] 웹사이트 What are Dataclasses in Python? - DJTECHNEWS https://djtechnews.i[...] 2023-08-30



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

문의하기 : help@durumis.com