사전 속성
개념

속성

gabury1고친 사람 github-actions[bot]

속성은 어떤 대상에 딸린 값에 이름을 붙여, 그 대상이 어떠한지를 말해 줍니다. 대상 하나에 여러 개가 붙고, 읽는 쪽은 이름을 대서 하나씩 골라 옵니다. 태그 안에 적기도 하고 표의 열로 옮기기도 하지만 하는 일은 어느 쪽이나 같습니다.

쉽고 빠른 이해

속성은 이삿짐 상자에 붙이는 쪽지입니다. 「내용물: 그릇」 「깨짐 주의: 예」 같은 쪽지를 여러 장 붙여 두면 상자를 열지 않고도 안을 압니다.

이게 없으면 대상을 설명하는 값들을 순서로만 구별하게 됩니다. 세 번째 값이 무게라는 약속을 사람이 기억해야 하고, 중간에 하나를 끼워 넣으면 뒤가 전부 밀립니다.

돌아가는 방식은 이렇습니다.

  1. 대상에 붙일 이름을 먼저 정합니다
  2. 값을 넣을 때 이름과 값을 한 쌍으로 적습니다
  3. 읽을 때는 순서 대신 이름을 대서 찾습니다

대가가 있습니다. 이름이 값마다 같이 저장되니 저장 공간을 더 씁니다. 한번 공개한 이름은 읽는 쪽이 전부 그 이름에 기대게 되어 나중에 바꾸기 어렵습니다.

상세

속성은 이삿짐 상자에 붙이는 쪽지와 닮았습니다. 쪽지 한 장에 「무엇을」과 「얼마나」가 같이 적혀 있어서, 상자를 열지 않고도 어떻게 다뤄야 할지 압니다.

속성은 이름 하나와 값 하나를 짝지어 대상에 붙인 것입니다. 이름은 그 값이 무엇을 뜻하는지 알려 주고, 값은 그 대상에서 그 이름이 갖는 내용입니다. 책 한 권을 다룬다면 제목·언어·쪽수가 그 책의 속성입니다. 속성은 대개 대상과 한 덩이로 저장됩니다. 대상에서 떼어 내 속성만 따로 두지는 못합니다.

이 절은 차례로 봅니다. 이름으로 값을 고른다는 것이 무슨 뜻인지, 태그 안에 적는 속성과 표의 열로 옮기는 속성이 어떻게 갈리는지, 무엇을 속성으로 두고 무엇을 따로 세우는지입니다.

이름으로 고른다

속성의 값을 꺼낼 때 읽는 쪽은 저장 순서를 몰라도 됩니다. 이름만 대면 됩니다.

book.lang     // "ko"
book.pages    // 320

두 줄 다 같은 책 하나를 두고 서로 다른 이름을 댔고, 그때마다 다른 값이 나왔습니다. 값이 몇 번째에 놓였는지는 부르는 쪽의 관심사가 아닙니다.

이것이 순서로 구별하는 방식과 갈리는 대목입니다. 순서로 구별하면 중간에 값을 하나 끼워 넣을 때 뒤의 모든 번호가 바뀌고, 그 번호를 쓰던 코드가 같이 깨집니다. 이름은 그런 사정을 타지 않습니다. 새 이름을 하나 더 붙여도 이미 있던 이름들은 그대로입니다.

태그 안에 적는 속성

마크업 언어는 글 사이에 꺾쇠 기호로 표시를 끼워 넣어 어디부터 어디까지가 무엇인지 알려 주는 언어입니다. XML(Extensible Markup Language, 확장 가능 마크업 언어)과 HTML(HyperText Markup Language, 하이퍼텍스트 마크업 언어)이 그런 언어이고, 둘 다 여는 태그 안에 속성을 적습니다.

XML
<book lang="ko" pages="320">토지</book>

lang 과 pages 가 속성 이름이고 따옴표 안이 값입니다. 여는 태그부터 닫는 태그까지의 한 덩이를 요소라고 부릅니다. 태그와 태그 사이에 놓인 토지 는 속성이 아니라 그 요소가 품은 내용입니다. 같은 태그에 적혀 있어도 둘은 서로 다른 칸에 들어갑니다.

여기에는 두 가지 제약이 따라옵니다. 속성값은 글자 나열 하나라서 그 안에 또 다른 구조를 넣을 수 없습니다. 그리고 같은 이름을 한 태그에 두 번 적을 수 없습니다. 그래서 한 대상에 같은 성격의 값이 여럿 필요하면 속성이 아니라 자식 태그로 내려보냅니다.

표의 열로 옮기는 속성

데이터 모델링에서는 대상이 가진 성질을 속성이라고 부릅니다. 사람이라는 대상에 이름·생일·주소가 붙는 식입니다.

이 모형을 데이터를 표 모양으로 저장하는 관계형 데이터베이스로 옮기면 속성 하나가 표의 열 하나가 되고, 행 하나가 대상 하나가 됩니다. 프로그램 안에서는 같은 것을 필드나 프로퍼티라고 부릅니다. 부르는 이름이 셋이지만 가리키는 것은 같습니다 — 대상에 딸린, 이름이 붙은 값입니다.

어느 대상에 어떤 속성이 붙을 수 있는지를 미리 적어 둔 문서를 스키마라고 합니다. 스키마가 있으면 값을 넣기 전에 이름이 맞는지, 값의 타입이 맞는지 기계가 대신 봐 줍니다.

무엇을 속성으로 두고 무엇을 따로 세우나

속성으로 둘지 하위 대상으로 세울지는 그 값이 더 쪼개지는지를 보고 정합니다.

값이 이렇게 생겼으면 이렇게 둡니다
하나뿐이고 더 쪼갤 것이 없다 속성
그 안에 또 이름과 값이 있다 하위 대상
같은 성격으로 여러 개가 붙는다 하위 대상을 여럿

책의 쪽수는 숫자 하나로 끝나니 속성입니다. 반면 저자는 이름과 국적이 또 붙으므로 속성 한 칸에 담기지 않고 따로 세워야 합니다.

flowchart TD
    subgraph 책["책 · 대상 하나"]
        A["제목 = 토지"]
        B["언어 = ko"]
        C["쪽수 = 320"]
    end
    책 --> D["저자 · 하위 대상"]
    D --> E["이름 = 박경리"]
    D --> F["국적 = 한국"]

그림에서 상자 안에 나란히 선 셋이 속성이고, 아래로 갈라져 나간 저자가 하위 대상입니다. 하위 대상은 자기 속성을 또 갖습니다. 이 갈림을 잘못 잡으면 나중에 값 하나를 쪼개려고 대상을 다시 설계하게 됩니다.

같은 이름이 다른 분야에서도 쓰입니다. 그림을 그릴 때 도형의 모서리가 되는 점 하나에 붙는 값도, 접근 권한을 정할 때 보는 사용자의 성질도 속성이라고 부릅니다. 가리키는 것이 분야마다 달라 보여도 뜻은 하나입니다 — 대상에 딸려서 그 대상을 기술하는, 이름이 붙은 값입니다.

관련 항목

속성을 붙여 두는 그릇

요소 · 레코드 · 엔티티 · 객체 · 노드 · 테이블

속성을 가리키는 다른 이름

필드 · 열 · 프로퍼티 · 멤버 변수 · 키-값 쌍

속성을 적는 마크업과 포맷

XML · HTML · JSON · 마크업 · 태그 · DOM

속성의 이름과 타입을 미리 정하는 규칙

스키마 · 데이터 모델링 · 타입 · 제약 조건 · 정규화 · 기본 키

속성을 보고 허용 여부를 정하는 접근 제어

속성 기반 접근 제어 · 인가 · 권한 · 접근 제어 · 역할 기반 접근 제어

이 이름을 그대로 쓰는 하위 종류

속성 노드 · 정점 속성 · 속성 (클래스 파일) · 메타데이터 · 관계형 데이터베이스

다른 이름: 애트리뷰트 · attribute