{{위키데이터 속성 추적}}
{{파일 포맷 정보
| 이름 = 프로퍼티 리스트<br />Property List
| 확장자 = .plist
| MIME = 
| 개발 = [[애플|애플 컴퓨터]], [[그누스텝|GNUstep]],<br />[[NeXT]]
| 종류 = [[연관 배열]] 객체 [[직렬화]]
}}

'''프로퍼티 리스트'''(property list)는 [[OS X]], [[iOS]], [[NeXTSTEP]], [[그누스텝|GNUstep]] 프로그래밍 [[소프트웨어 프레임워크]] 등에 이용되는 [[객체]] [[직렬화]]를 위한 파일이다. 또한 .plist라는 [[확장자]]를 가지므로, 보통 plist 파일이라고 하는 경우가 많다.

프로퍼티 리스트 파일은 보통 사용자의 설정을 저장하는데 쓰인다. 또한, [[번들]]과 [[응용 소프트웨어|애플리케이션 소프트웨어]] 정보를 저장하기 위해서도 사용되고, 이전 [[맥 OS]]에서는 [[리소스 포크]] 정보를 저장하는 데에 사용되었다.

== 표현 방법 ==
프로퍼티 리스트의 데이터 표현은 추상적이기 때문에 다양한 방법으로 기본 파일 형식을 구현할 수 있다. 이전의 [[NeXTSTEP]]에서는 한 가지 형식을 사용했는데, [[그누스텝|GNUstep]]과 [[OS X]] 프레임워크에서 다양한 형식을 도입했다.

=== [[NeXTSTEP]] ===
[[NeXTSTEP]]에서 프로퍼티 리스트는 손으로 수정하기 쉽도록, [[인간공학|인간]] [[가독성]] 방식으로 디자인되었고, [[프로그래밍 언어]] 문법에 가깝게 [[ASCII]]로 직렬화되어있다.

문자열은 다음과 같이 표현한다.
 "plist 문자열"
바이너리 데이터는 다음과 같이 표현한다.
 &lt; ''<nowiki>[ASCII HEX 코드]</nowiki>'' &gt;
배열(Array)는 다음과 같이 표현한다.
 ( "1", "2", "3" )
딕셔너리(Dictionary) 배열은 다음과 같이 표현한다.
 {
     "key" = "value";
     ...
 }
[[NeXTSTEP]]의 프로퍼티 리스트는 NSValue(숫자, 불린 자료형 등) 객체 표현에 제한이 있다.

=== [[GNUstep]] ===
[[GNUstep]]은 [[NeXTSTEP]]에서 몇 가지 형식을 추가했다.
* NSValue ([[숫자]], [[불리언 자료형]] 등)
* NSDate (<code>&lt;*DYYYY-MM-DD HH:MM:SS timezone&gt;</code>와 같이 작성한다.)

[[GNUstep]]의 프로퍼티 리스트는 OS X를 이용하여 읽거나 작성할 수 있다.

=== [[macOS]] ===

[[macOS]]은 [[NeXTSTEP]] 형식도 다룰 수 있지만, [[애플]]은 별도로 새로운 두 가지 형식을 추가했다.

[[맥 OS X 10.0]]에서는 [[NeXTSTEP]] 형식을 사용하지 않고, 애플이 정의한 [[DTD]]의 새로운 [[XML]] 문서 형식이 발표되었다. 이 형식은 non-ASCII 문자와, NSValue 객체(일부는 일반 텍스트로 나타남.)를 저장할 수 있다.(다른 [[GNUstep]]의 [[ASCII]] 프로퍼티 리스트 형식과 달리, 애플의 [[ASCII]] 프로퍼티 리스트 형식은 지원하지 않는다.)

그러나 그 동안의 XML파일은 공간 활용에 문제가 많았기 때문에 [[맥 OS X 10.2]]에서는 [[이진 파일]] 등을 저장할 수 있는 새로운 프로퍼티 리스트를 발표하였다. [[Mac OS X 10.4]]부터는 이 형식이 기본으로 사용되었다.

프로퍼티 리스트는 [[plutil 유틸리티]]([[맥 OS X 10.2]]부터 추가된 기능)를 사용하여 구문 확인, 형식 변환에 사용할 수 있다. 또한, [[NeXTSTEP]]의 기본 유틸리티도, 자체 [[환경설정]]의 [[커맨드 라인]]에서, 환경설정값의 저장에(이전의 OS X에서도 가능) 사용되는 프로퍼티 리스트 파일을 편집하는 데 사용할 수 있다. XML 프로퍼티 리스트는 어떤 편집기에서도 편집하기 쉬우나, 애플의 [[계층]] 문서 뷰어/편집기 또한 바이너리 형식의 프로퍼티 리스트를 편집할 수 있다. 애플은 [[개발 도구]]의 일부로 [[응용 프로그램]]인 프로퍼티 리스트 에디터를 제공한다.

[[Mac OS X 10.4]]부터는 [[시스템 이벤트]] [[응용 프로그램]]을 통해 프로퍼티 리스트 파일을 읽기 위한 [[AppleScript]] [[인터페이스]]를 제공한다. [[Mac OS X 10.5]]에서는 프로퍼티 리스트의 생성, 작성, 편집을 위한 AppleScript 인터페이스를 제공한다.

XML 프로퍼티 리스트에 사용되는 Foundation 클래스와, CoreFoundation 형식, XML 태그 및 데이터 저장 형식이다:
{| class="wikitable"
!Foundation 클래스
!CoreFoundation 형식
!XML 태그
!형식
|-
| NSString
| CFString
| &lt;string&gt;
| UTF-8 인코딩 문자열
|-
| NSNumber
| CFNumber
| &lt;real&gt;, &lt;integer&gt;
| 10 진수 문자열
|-
| NSNumber
| CFBoolean
| &lt;true /&gt; 또는 &lt;false /&gt;
| 두 종류의 태그
|-
| NSDate
| CFDate
| &lt;date&gt;
| [[ISO 8601]] 형식 문자열
|-
| NSData
| CFData
| &lt;data&gt;
| [[Base64]] 인코딩 데이터
|-
| NSArray
| CFArray
| &lt;array&gt;
| child element 번호
|-
| NSDictionary
| CFDictionary
| &lt;dict&gt;
| &lt;key&gt; 태그와 plist element 관련 태그
|}

== 예제 ==
==== 냉장고 안에 코끼리 넣기 ([[Mac OS X 10.6]] 작성) ====
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>냉장고</key>
	<array>
		<string>코끼리</string>
	</array>
</dict>
</plist>
</syntaxhighlight>
Dictionary 안에 '냉장고' key를 가지고 있는 element의 0번 인덱스 에 '코끼리' 문자열 element를 가지고 있는 array의 표현 방법이다.

== 외부 링크 ==
* [http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html Manual Page For plist(5)] - 애플 개발자 홈페이지
* [http://developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/index.html#//apple_ref/doc/uid/10000048i Property List Programming Guide for Cocoa] {{웨이백|url=http://developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/index.html#//apple_ref/doc/uid/10000048i |date=20090519020941 }} - 프로퍼티 리스트 프로그래밍 가이드
* [https://web.archive.org/web/20110519164921/http://gnustep.org/resources/documentation/Developer/Base/Reference/NSPropertyList.html NSPropertyListSerialization class documentation] - GNUstep 프로젝트
* [https://web.archive.org/web/20081210064322/http://docs.sun.com/app/docs/doc/802-2112/6i63mn65o?a=view OpenStep plist API] - OpenStep plist API

{{OS X}}

[[분류:XML 기반 표준]]
[[분류:마크업 언어]]
[[분류:데이터 직렬화 포맷]]
[[분류:MacOS]]
[[분류:NeXT]]
[[분류:GNUstep]]