속성 (컴퓨터 과학)

컴퓨팅 분야에서 **속성**()이란 객체, 요소, 또는 파일의 성질이다. 속성은 또한 이들의 인스턴스(instance)에 주어진 특정 값을 지정하거나 나타내는 데에도 쓰인다.

속성은 메타데이터로 간주하는 것이 더 정확하다. 속성은 일반적으로 성질의 성질이다.

그러나 실제 사용될 때 속성(attribute)이란 용어는 논의되는 기술에 따라 성질(property)과 동일하게 간주되기도 한다.

오브젝트의 속성은 보통 이름과 값으로 구성된다. 요소의 속성은 타입과 클래스 이름으로, 파일의 속성은 이름과 확장자로 구성되어 있다.
* 이름을 가진 각각의 속성들은 연산(operation)이라고 불리는 연관 규칙들을 가지고 있다. 문자를 더할 수는 없으며 정수 배열을 이미지 오브젝트로 조작 또는 가공할 수 없다. 또한 텍스트를 부동소수점 형태로 가공할 수 없다.
* 오브젝트 정의는 자료형을 부과함으로써 확장될 수 있다. 표현형(representation format), 기본값(default value), 적법한 실행(규칙들) 그리고 제약조건들(0으로 나누는 것은 용납되지 않는다!)은 모두 잠재적으로 속성을 정의하는데 포함되며, 반대로 그 오브젝트 타입의 속성이라고 일컬어질 수도 있을 것이다.
JPEG 파일은 PNG나 BMP 파일들과 그래픽 데이터 형식이라는 점에서는 유사하다. 하지만 같은 연산에 의해 디코딩되지 않으며, 타입된 정수에 적용되는 규칙에 의해 연산 가능한 부동소수점도 아니다.

예를 들어 컴퓨터 그래픽에서 선 오브젝트는 굵기(실수), 색상(갈색이나 녹색과 같이 RGB 또는 특정 색 모델에 정의된 값), 대시선 등과 같은 속성을 가진다. 원 오브젝트는 이와 비슷한 속성에 원점이나 지름 등의 추가 속성으로 규정될 수 있을 것이다.

## 속성의 활용
### C#
C# 프로그래밍 언어에서 속성은 어셈블리(assemblies), 멤버, 그리고 타입과 같은 코드 블럭이나 필드(field)에 첨부된 메타데이터이며, 자바에서의 어노테이션(annotation)과 동일하다. 속성은 컴파일러(compiler)에서, 그리고 프로그램적으로는 리플렉션(reflection)을 이용하여 접근가능하다.

C# 언어 사용자들은 속성이 크로스커팅 개념(cross-cutting concern)과 여러 기계적 또는 플랫폼 용도를 해결하기 위해 사용되는 많은 예들을 볼 수 있을 것이다. 이러한 예는 이것들이 속성의 유일한 용도라는 잘못된 인상을 낳는다. 속성을 이용해 ***abstract***, ***sealed***, or ***public***와 같이 확장시키는 것이 가능하다.

속성을 메타데이터로서 특별하게 이용하는 것은 개발자들의 몫이며, 특정 응용 프로그램, 클래스 그리고 멤버에 종속되지 않는 다양한 범위의 정보들을 다룰 수 있다. 주어진 속성을 성질로 노출시켜 더 큰 응용 프레임워크에서 사용할 것인지 결정하는 것은 개발자의 몫이다.

속성은 ***System.Attribute***으로부터 파생되는 클래스의 형태로 구현된다.그것은 종종 COM 상호 운용, 원격 조정, 직렬화와 같은 CLR 서비스에 의해 사용되며, 실행시간에 쿼리될 수 있다.

다음 예제에서는 속성이 C#에서 정의되는 방법을 보여준다:

```csharp
[Obsolete("Use class C1 instead", IsError = true)]  // causes compiler message saying
public class C {...}                                // that C is obsolete

public class ObsoleteAttribute: Attribute {         // class name ends with "Attribute"
  public string Message{ get; }                     // but can be used as "Obsolete"
  public bool IsError{ get; set; }
  public ObsoleteAttribute() {...}
  public ObsoleteAttribute(string msg) {...}
  public ObsoleteAttribute(string msg, bool error) {...}}

[Obsolete]
[Obsolete("This is obsolete")]
[Obsolete("This is obsolete", false)]
[Obsolete("This is obsolete", IsError = false)]
```


위 타입 문자열의 첫 번째 매개 변수와 같은 위치 매개 변수는 속성 생성자의 매개 변수이다. 예시의 Boolean 매개 변수와 같이 매개 변수에 이름이 있는 경우는 속성의 성질이며 상수 값을 가져야 한다.

속성은 메타 데이터를 정의하는 XML 문서와 대조되어야 하지만, 컴파일된 어셈블리에 포함되어 있지 않으므로 프로그래밍 방식으로 액세스 할 수 없다.

### 다중값 데이터베이스
SQL과 관계된 많은 포스트 관계형(post relational) 또는 다중값 데이터베이스 시스템(multi-valued databases system)에서 테이블은 파일이고, 행은 항목이며, 열은 속성이다. 데이터베이스와 코드 모두에서 속성이 값과 하위 값을 가질 수 있도록 규정될 수 있다는 점을 감안하더라도, 속성은 성질이나 변수와 동일하다.
이러한 데이터베이스의 첫 번째는 Pick 운영 체제이다. 현재 운영되는 두 플랫폼은 Rocket U2’s Universe와 InterSystems’ Caché이다.

### XML
XML에서 속성은 시작-태그나 빈 요소-태그 안에 이름/값으로 구성된 마크업을 생성하는 것이다. HTML이나 XML과 같은 마크업 언어들은 데이터와 데이터의 포맷을 설명하기 위해 속성을 사용한다.
(여기서부터 무시) 값을 성질(요소)에 할당하는 XML의 과정은 좋은 예이다. 명심해야 할 것은 요소값은 요소 그 자체에서가 아니라 (분리된) 종료 태그 이전에 발견된다는 것이다. 요소 그 자체는 여러 개의 속성 값 집합을 가질 수 있다. (`NAME = "IAMAPROPERTY"`).

만약 불확실한 요소가 또 다른 개체(`CUSTOMER`라고 부름)의 성질(`CUSTOMER_NAME`)로 간주된다면 그 요소는 0 또는 더 많은 특성(성질)을 가질 수 있다.(`CUSTOMER_NAME`는 `TYPE = "KINDOFTEXT"`에 속함.)

## 같이 보기
* 파일 특성
* 확장 파일 속성 (Extended file attributes)
* 필드 (Field)
* 자바 애너테이션

분류:컴퓨터 데이터