Industry Foundation Classes

**Industry Foundation Classes**(**IFC**)는 건축, 빌딩, 건설 산업 데이터(ABCII)를 설명하기 위한 CAD 데이터 교환 데이터 스키마이다. IFC 파일 형식은 ISO 10303-21 표준을 기반으로 하며 ABCII의 정의는 기본 EXPRESS를 사용하여 문서화된다.

이것은 단일 공급업체나 공급업체 그룹이 통제하지 않는 플랫폼 독립적인 공개 데이터 스키마 사양이다. buildingSMART(이전의 국제 상호운용성 연합, IAI)가 건축, 공학 및 건설(AEC) 산업에서의 상호운용성을 촉진하기 위해 개발한 데이터 모델을 가진 객체 기반 데이터 스키마이며, 빌딩 정보 모델링(BIM) 기반 프로젝트에서 일반적으로 사용되는 협업 형식이다. IFC 모델 사양은 공개되어 있으며 이용 가능하다. ISO에 등록되어 있으며 공식 국제 표준 ISO 16739-1:2024이다.

상호운용성에 중점을 둔 덕분에 2010년 덴마크 정부는 공공 지원 건축 프로젝트에 IFC 형식의 사용을 의무화했다. 2017년 핀란드 국영 시설 관리 회사 Senate Properties는 모든 프로젝트에서 IFC 호환 소프트웨어와 BIM 사용을 요구하기 시작했다. 또한 노르웨이 정부, 보건 및 국방 클라이언트 조직은 모든 프로젝트에서 IFC BIM 사용을 요구하며, 많은 지자체, 개인 클라이언트, 계약자 및 설계자들도 IFC BIM을 사업에 통합했다. 건설 분야에서 IFC 데이터 스키마의 인기는 주로 형상 교환 목적으로 계속 증가했다.

## 역사

IFC 이니셔티브는 1994년 오토데스크가 통합 애플리케이션 개발을 지원할 C++ 클래스 세트 개발에 대한 자문을 위해 업계 컨소시엄을 구성하면서 시작되었다. 12개의 미국 회사가 이 컨소시엄에 참여했다. 이 회사들에는 AT&T, HOK 건축가, 하니웰, 캐리어, 티쉬만 및 버틀러 매뉴팩처링이 포함되었다. 처음에는 상호운용성 산업 연합으로 명명되었던 이 연합은 1995년 9월에 모든 이해관계자에게 회원 자격을 개방하고 1997년에 국제 상호운용성 연합으로 이름을 변경했다. 새로운 연합은 AEC 빌딩 수명 주기에 대응하는 중립적인 AEC 제품 모델로서 Industry Foundation Class(IFC)를 출판하는 것을 목표로 비영리 산업 주도 조직으로 재편성되었다. 2005년에 추가적인 이름 변경이 있었으며, IFC 사양은 현재 buildingSMART에 의해 개발 및 유지 관리되고 있다.

## IFC 사양
다음 IFC 사양 버전이 사용 가능하다

* IFC4.3 Add2 (2024)
* IFC4.2 (2019-04): 철회됨
* IFC4.1 (2018-86): 철회됨
* IFC4 Add2 TC1 (2017)
* IFC4 Add2 (2016)
* IFC4 Add1 (2015)
* IFC4 (2013년 3월)
* ifcXML2x3 (2007년 6월)
* IFC2x3 (2006년 2월)
* ifcXML2 for IFC2x2 add1 (RC2)
* IFC2x2 Addendum 1 (2004년 7월)
* ifcXML2 for IFC2x2 (RC1)
* IFC 2x2
* IFC 2x Addendum 1
* ifcXML1 for IFC2x and IFC2x Addendum 1
* IFC 2x
* IFC 2.0 (1999년 3월)
* IFC 1.5.1 (1998년 9월)
* IFC 1.5 (1997년 11월)
* IFC 1.0 (1996년 6월)

## 파일 형식

IFC는 동일한 기본 데이터를 다양한 인코딩으로 지원하는 여러 파일 형식을 정의한다.
* IFC-SPF는 ISO 10303-21("STEP-File")에 의해 정의된 텍스트 형식으로, 각 줄은 일반적으로 단일 객체 레코드로 구성되며 파일 확장자는 ".ifc"이다. 이것은 가장 널리 사용되는 IFC 형식으로, 크기가 작으면서도 읽기 쉬운 텍스트라는 장점이 있다.
* IFC-XML은 ISO 10303-28("STEP-XML")에 의해 정의된 XML 형식으로, 파일 확장자는 ".ifcXML"이다. 이 형식은 XML 도구와의 상호운용성 및 부분 빌딩 모델 교환에 적합하다. 일반적인 빌딩 모델의 크기가 크기 때문에 이 형식은 실제로는 덜 일반적이다.
* IFC-ZIP은 임베디드 IFC-SPF 파일 또는 IFC-XML 파일로 구성된 ZIP 압축 형식이며 파일 확장자는 ".ifcZIP"이다.
* IFC-Turtle (간결한 RDF 트리플 언어)은 RDF를 사용하고 ifcOWL 온톨로지에서 표현되는 텍스트 기반 시맨틱 데이터 형식이다.
* IFC-RDF는 RDF를 사용하고 ifcOWL 온톨로지에서 표현되는 XML 기반 시맨틱 데이터 형식이다.
* ifcJSON은 웹 애플리케이션에서 자주 사용되는 현대적인 형식인 JSON을 사용한다.
* ifcHDF는 HDF를 사용하며 HDF에서 STEP 데이터 표현을 위한 ISO 10303-26 표준을 기반으로 한다.

IFC-SPF는 ASCII 형식으로, 사람이 읽을 수 있지만 파일 크기 팽창, 파일을 처음부터 끝까지 순차적으로 읽어야 함, 파일 중간 추출 불가능, 파일 구문 분석 속도 느림, 정의가 비계층적이라는 일반적인 ASCII 파일 문제점을 겪는다. ifcXML 및 ifcZIP 외에도 최신 데이터 형식에는 RDF/XML 또는 터틀(ifcOWL 온톨로지 사용), ifcJSON (자바스크립트 객체 표기법, 널리 사용 가능) 및 ifcHDF5 (계층적 데이터 형식 v5, 바이너리)가 포함된다. 2020년에 buildingSmart는 두 가지 JSON 프로젝트를 진행 중이었다: ifcJSON v4(EXPRESS 기반 IFC v4의 직접 매핑)와 ifcJSON v5, 그리고 IFC를 바이너리 형식으로 전환하는 연구 프로젝트.

## 아키텍처
IFC는 EXPRESS 기반의 엔티티-관계 모델을 정의하며, 객체 기반 상속 계층 구조로 구성된 수백 개의 엔티티를 포함한다. 엔티티의 예로는 IfcWall과 같은 빌딩 요소, IfcExtrudedAreaSolid와 같은 형상, IfcCartesianPoint와 같은 기본 구조가 있다.

가장 추상적인 수준에서 IFC는 모든 엔티티를 루트 엔티티와 비루트 엔티티로 나눈다. 루트 엔티티는 IfcRoot에서 파생되며, 이름, 설명 및 개정 제어 속성과 함께 ID(GUID) 개념을 갖는다. 비루트 엔티티는 ID를 갖지 않으며, 인스턴스는 루트 인스턴스에서 직접 또는 간접적으로 참조될 때만 존재한다. IfcRoot는 세 가지 추상 개념으로 세분된다: 객체 정의, 관계 및 속성 집합:
*IfcObjectDefinition은 유형 및 유형의 실제 객체 발생을 캡처한다.
*IfcRelationship은 객체 간의 관계를 캡처한다.
*IfcPropertyDefinition은 객체에 대한 동적으로 확장 가능한 속성을 캡처한다.

### IfcObjectDefinition
IfcObjectDefinition은 객체 발생과 객체 유형으로 나뉜다. IfcObject는 일련 번호와 물리적 배치를 갖는 제품 설치와 같은 객체 발생을 캡처한다. IfcTypeObject는 특정 모델 번호와 공통 모양을 갖는 제품 유형과 같은 유형 정의(또는 템플릿)를 캡처한다. 발생 및 유형은 배우("누가"), 제어("왜"), 그룹("무엇을"), 제품("어디에"), 프로세스("언제"), 자원("어떻게")의 여섯 가지 기본 개념으로 더 세분된다.
* IfcActor는 사람 또는 조직을 나타낸다.
* IfcControl은 작업 주문과 같이 시간, 비용 또는 범위를 제어하는 규칙을 나타낸다.
* IfcGroup은 전기 회로와 같이 특정 목적을 위한 객체 모음을 나타낸다.
* IfcProduct는 물리적 빌딩 요소 및 공간 위치와 같은 공간에서의 발생을 나타낸다.
* IfcProcess는 작업, 이벤트 및 절차와 같은 시간에서의 발생을 나타낸다.
* IfcResource는 재료, 노동 및 장비와 같이 제한된 가용성을 가진 무언가의 사용을 나타낸다.

### IfcRelationship
IfcRelationship은 객체 간의 관계를 캡처한다. 기본 관계 유형은 구성, 할당, 연결, 연관 및 정의의 다섯 가지이다.
* IfcRelDecomposes는 빌딩을 층과 방으로 나누거나 벽을 스터드와 외벽으로 나누는 것과 같이 배타적 포함을 갖는 전체-부분 관계를 캡처한다.
* IfcRelAssigns는 노동 자원을 작업에 할당하거나 작업을 빌딩 요소에 할당하는 것과 같이 한 객체가 다른 객체의 서비스를 사용하는 할당 관계를 캡처한다.
* IfcRelConnects는 바닥 슬래브가 보에 연결되거나 파이프가 싱크에 연결되는 것과 같이 객체 간의 연결성을 나타낸다.
* IfcRelAssociates는 객체가 정의된 외부 IFC 라이브러리 파일과 같이 객체에 대한 외부 참조를 나타낸다.
* IfcRelDefines는 파이프 세그먼트가 특정 유형이라는 것과 같은 인스턴스-오브 관계를 나타낸다.

### IfcPropertyDefinition
IfcPropertyDefinition은 동적으로 확장 가능한 속성 집합을 캡처한다. 속성 집합은 하나 이상의 속성을 포함하며, 이는 단일 값(예: 문자열, 숫자, 단위 측정), 제한된 값(최소값 및 최대값 포함), 열거형, 값 목록, 값 테이블 또는 데이터 구조일 수 있다. IFC는 특정 유형에 대해 수백 개의 속성 집합을 정의하지만, 사용자 정의 속성 집합은 애플리케이션 공급업체 또는 최종 사용자가 정의할 수 있다.
* IfcPropertySet은 객체 발생 또는 객체 유형에 첨부된 속성 집합을 나타낸다.
* IfcPropertySetTemplate [IFC2x4]는 속성 및 해당 데이터 유형의 정의를 캡처한다.

### 제품
IfcProduct는 모든 물리적 객체의 기본 클래스이며 공간 요소, 물리적 요소, 구조 분석 항목 및 기타 개념으로 세분된다. 제품은 관련 재료, 형상 표현 및 공간 내 배치를 가질 수 있다. 공간 요소에는 IfcSite, IfcBuilding, IfcBuildingStorey 및 IfcSpace가 포함된다. 물리적 빌딩 요소에는 IfcWall, IfcBeam, IfcDoor, IfcWindow, IfcStair 등이 포함된다. 분배 요소(HVAC, 전기, 배관)는 요소가 다양한 서비스에 대한 특정 연결을 가질 수 있는 포트 개념을 가지며, 시스템을 형성하기 위해 케이블, 파이프 또는 덕트를 사용하여 연결된다. 벽에 문이나 창문으로 채워지는 개구부가 있는 것과 같은 빌딩 요소에는 다양한 연결 관계가 사용된다.

재료는 제품 전체에 대해 정의될 수도 있고, 지정된 부분에 대한 층, 프로필 또는 구성 요소로 정의될 수도 있다.
* IfcMaterial은 선택적 속성(예: 기계적, 열적) 및 스타일(예: 색상, 질감)을 가진 특정 재료를 나타낸다.
* IfcMaterialLayerSet은 각 층이 지정된 두께의 재료를 나타내는 층 목록을 캡처한다.
* IfcMaterialProfileSet [IFC2x4]은 각 프로필이 지정된 단면의 재료를 나타내는 프로필 집합을 캡처한다.
* IfcMaterialConstituentSet [IFC2x4]은 각 구성 요소가 명명된 형상 측면에서 사용되는 재료를 나타내는 구성 요소 집합을 캡처한다.

표현은 명시적 3D 형상에 대해 정의될 수 있으며, 선택적으로 매개변수 제약 조건으로 정의될 수 있다. 각 표현은 잘 알려진 이름을 가진 IfcShapeRepresentation으로 식별된다.
* 'Body'는 B-rep, NURBS, Constructive Solid Geometry (CSG) 또는 스윕 프로파일로 표현될 수 있는 3D 형상을 나타낸다. 이는 직접 정의되거나 다른 표현에 재료 정의를 적용하여 파생될 수 있다.
* 'Axis'는 재료 프로필 또는 층이 정렬되는 선형 요소(예: 벽, 보, 파이프)의 경로를 나타낸다.
* 'FootPrint'는 재료 층이 경계가 되는 평면 요소(예: 슬래브, 계단)의 경계를 나타낸다.
* 'Profile'은 재료 구성 요소가 경계가 되는 개구부 요소(예: 문, 창문)의 측면 프로필을 나타낸다.
* 'SurveyPoints'는 등고선을 설명하기 위한 표면 요소(예: 부지)의 점 집합을 나타낸다.

배치는 위치, 수직 각도 및 수평 각도를 나타낼 수 있다.
* IfcLocalPlacement는 포함하는 요소 계층 구조에 대한 상대적인 배치를 나타낸다.
* IfcGridPlacement는 사용자 정의 축을 가진 그리드에 대한 상대적인 배치를 나타낸다.

수량은 총 면적, 총 부피, 총 중량, 순 중량 등과 같은 산출 목적으로 정의될 수 있다. IFC는 각 요소 유형에 특정한 다양한 수량과 형상 및 관계에 따른 계산 방법을 정의한다.

### 프로세스
IfcProcess는 프로세스의 기본 클래스이며 작업, 이벤트 및 절차로 세분된다. 프로세스는 기간을 가질 수 있으며 특정 시간 기간에 발생하도록 예약될 수 있다. 프로세스는 선행 작업이 완료된 후 후속 작업이 시작되도록 주요 경로법에 따라 순서가 지정될 수 있다. 프로세스는 요약 집계를 위해 하위 프로세스로 중첩될 수 있다. 프로세스는 수행된 작업으로 생성된 출력을 나타내는 제품에 할당될 수 있다.

### 자원
IfcResource는 자원의 기본 클래스이며 재료, 노동, 장비, 하청 계약, 인력 등으로 세분된다. 자원은 다양한 비용과 가용성 일정을 가질 수 있다. 자원은 세분화된 할당을 위해 하위 자원으로 중첩될 수 있다. 자원은 자원을 대신하여 수행되는 작업을 나타내는 프로세스에 할당될 수 있다.

### 맥락
IfcProject는 전체 프로젝트를 캡슐화하고 프로젝트 이름, 설명, 기본 단위, 통화, 좌표계 및 기타 컨텍스트 정보를 나타낸다. 유효한 IFC 파일은 항상 정확히 하나의 IfcProject 인스턴스를 포함해야 하며, 모든 다른 객체는 직간접적으로 이와 관련된다. 프로젝트는 특정 용도에 따라 여러 건물, 여러 참여자 및 여러 단계를 포함할 수 있다.

프로젝트별 정보 외에도 IfcProject는 제품 유형과 같이 공유 정의를 가져올 수 있는 외부 프로젝트를 참조할 수도 있다. 각 외부 프로젝트는 IfcProjectLibrary [IFC2x4]와 IfcRelAssociatesLibrary 및 IfcLibraryInformation을 사용하여 가져온 프로젝트 라이브러리의 특정 개정을 식별한다.

프로젝트는 개정 관리를 지원하며, 모든 IfcRoot 기반 엔티티는 고유 식별자를 가지며 추가, 수정, 삭제 또는 변경 없음으로 표시될 수 있다. 이러한 기능은 여러 IFC 파일을 결정적으로 병합할 수 있게 하여 사람의 개입 없이 데이터 무결성을 보장한다.

## 같이 보기
* aecXML
* 정보 전달 사양
* BIM 협업 형식
* 그린 빌딩 XML (gbXML)
* BIM 소프트웨어 목록

## 각주

## 외부 링크
# IFC로 모델 공유: 벡터웍스 아키텍트 사용자를 위한 소개
# 벤틀리의 IFC 입장 문서 
#DDS IFC 인증 DDS용 IFC
# IFC 파일 분석기 소프트웨어 - IFC 파일에서 스프레드시트 생성

분류:건축시공
분류:산업 컴퓨팅