# 가이드

# 퍼블리싱 가이드라인

## <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">1. 퍼블리싱 포인트</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":596,"335559991":596}"> </span>

<div class="SCXW113170034 BCX0" id="bkmrk-"></div>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">퍼블리싱 포인트</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">란 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">런타임에서 </span><span class="NormalTextRun SCXW113170034 BCX0">디자이너 및 퍼블리셔가 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">개인화 할 수 있도</span><span class="NormalTextRun SCXW113170034 BCX0">록</span><span class="NormalTextRun SCXW113170034 BCX0"> 의도된 </span><span class="NormalTextRun SCXW113170034 BCX0">스타일링 </span><span class="NormalTextRun SCXW113170034 BCX0">지점</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">들을 의미합니다.</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">에서는 이러한 스타일링이 의도된 단위들을 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">라고</span><span class="NormalTextRun SCXW113170034 BCX0"> 부르며,</span> <span class="NormalTextRun SCXW113170034 BCX0">스크립트 및 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 통해 접근</span><span class="NormalTextRun SCXW113170034 BCX0">하고 수정할</span><span class="NormalTextRun SCXW113170034 BCX0"> 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">1.1. 스타일러</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">의</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2"> 유형</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":679,"335559991":679}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">퍼블리싱 포인트들은 스크립트로는 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 객체 형태로,</span> <span class="NormalTextRun SCXW113170034 BCX0">퍼블리셔 측면으로는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 형태로 공급되며,</span> <span class="NormalTextRun SCXW113170034 BCX0">크게 두</span> <span class="NormalTextRun SCXW113170034 BCX0">가지 형태로 공급됩니다</span><span class="NormalTextRun SCXW113170034 BCX0">:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<div class="OutlineElement Ltr SCXW113170034 BCX0" id="bkmrk-%EC%8A%A4%ED%83%80%EC%9D%BC%EB%9F%AC-%EC%85%80%EB%A0%89%ED%84%B0-%EC%9C%A0%ED%98%95%C2%A0-%EC%84%A4%EB%AA%85%C2%A0-%EC%98%88%EC%8B%9C%C2%A0"><div class="TableContainer Ltr SCXW113170034 BCX0"><div aria-hidden="true" class="WACAltTextDescribedBy SCXW113170034 BCX0" id="bkmrk--1"></div><table aria-rowcount="3" border="1" class="Table Ltr TableWordWrap SCXW113170034 BCX0" data-tablelook="1184" data-tablestyle="MsoTableGrid" dir="ltr"><thead><tr aria-rowindex="1" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstRow FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span> <span class="NormalTextRun SCXW113170034 BCX0">유형</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow SCXW113170034 BCX0" data-celllook="0" role="columnheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">설명</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow LastCol SCXW113170034 BCX0" data-celllook="0" role="columnheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">예시</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></thead><tbody class="SCXW113170034 BCX0"><tr aria-rowindex="2" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤 타입 </span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">클래스 </span><span class="NormalTextRun SCXW113170034 BCX0">셀렉터</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">(</span><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SCXW113170034 BCX0">)</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">최외곽</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">요소를 </span><span class="NormalTextRun SCXW113170034 BCX0">스타일링 하기</span><span class="NormalTextRun SCXW113170034 BCX0"> 위해 공급됩니다.</span></span>

`<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"><span style="color: rgb(224, 62, 45);">cl</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">타입명</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> </span><span class="NormalTextRun SCXW113170034 BCX0">형태로 제공됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이하 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">로</span><span class="NormalTextRun SCXW113170034 BCX0"> 지칭합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0"><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">radiobutton</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="3" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol LastRow SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">내부 요소</span><span class="NormalTextRun SCXW113170034 BCX0"> 타입</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">클래스 </span><span class="NormalTextRun SCXW113170034 BCX0">셀렉터</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">(</span><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SCXW113170034 BCX0">)</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastRow SCXW113170034 BCX0" data-celllook="0"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤을 구성하는 내부 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">요소를 </span><span class="NormalTextRun SCXW113170034 BCX0">스타일링</span><span class="NormalTextRun SCXW113170034 BCX0"> 하기 위해 공급됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

`<span style="color: rgb(224, 62, 45);"><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">c</span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">l</span><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">타입명</span></span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" style="color: rgb(22, 145, 121);" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span><span class="NormalTextRun SCXW113170034 BCX0"> 이름</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 형</span><span class="NormalTextRun SCXW113170034 BCX0">태로 공급됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이하 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">로</span><span class="NormalTextRun SCXW113170034 BCX0"> 지칭합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol LastRow SCXW113170034 BCX0" data-celllook="0"><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">radiobutton</span><span class="NormalTextRun SCXW113170034 BCX0">-item</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></tbody></table>

</div></div>### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">1.2. 기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">스타일러</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":679,"335559991":679}"> </span>

**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">및 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span> <span class="NormalTextRun SCXW113170034 BCX0">클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">는</span><span class="NormalTextRun SCXW113170034 BCX0"> 컨트롤 자체의 스타일</span> <span class="NormalTextRun SCXW113170034 BCX0">요소를 퍼블리싱 하기 위해 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">공급되며</span> <span class="NormalTextRun SCXW113170034 BCX0">아래와 같은 형태로 제공됩니다:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

`<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">cl</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">타입명</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":2,"335551620":2}"> </span>`

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">예를 들어 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">버튼</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 경우 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">button</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 경우 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">radiobutton</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 통하여</span><span class="NormalTextRun SCXW113170034 BCX0"> 퍼블리싱 할 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">1.3. 서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">스타일러</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":679,"335559991":679}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">일부</span><span class="NormalTextRun SCXW113170034 BCX0"> 컨트롤은 내부 영역별로 컨트롤 자체와는 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">별도의 스타일링 규칙</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 가져야 할 필요</span><span class="NormalTextRun SCXW113170034 BCX0">를 가진 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">시각적 요소</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">들이</span> <span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">존재합니다</span><span class="NormalTextRun SCXW113170034 BCX0">.</span> <span class="NormalTextRun SCXW113170034 BCX0">예를 들어 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">은 각 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">아이템</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">들에 대해 별도의 스타일링이 필요합니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">이 때,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">아이템</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">처럼,</span> </span><span style="text-decoration: underline;"><span class="TextRun Underlined SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정</span><span class="NormalTextRun SCXW113170034 BCX0"> 컨트롤 내부</span><span class="NormalTextRun SCXW113170034 BCX0">에서 존재하는 </span><span class="NormalTextRun SCXW113170034 BCX0">스타일링 단위</span></span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">를 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">라고</span><span class="NormalTextRun SCXW113170034 BCX0"> 합니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">각 </span><span class="NormalTextRun SCXW113170034 BCX0">컨트롤들은 시각적</span><span class="NormalTextRun SCXW113170034 BCX0"> 구조의</span><span class="NormalTextRun SCXW113170034 BCX0"> 복잡도에 따라 여러 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 제공할 수도 있으며,</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR">**<span class="NormalTextRun SCXW113170034 BCX0">기본 </span>**<span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">**스타일러**</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 하나만 </span><span class="NormalTextRun SCXW113170034 BCX0">제공할 수도 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">기본스타일러: 컨트롤 외곽 자체의 스타일링을 담당하는 스타일러. 루트 스타일러로도 언급됩니다.</span></span></span>

#### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준" data-ccp-parastyle-defn="{"ObjectId":"64ca3a11-22d6-59be-8cf6-fc1e5148da58|1","ClassId":1073872969,"Properties":[201342446,"1",201342448,"1",201342449,"1",469777841,"맑은 고딕",469777842,"굴림",469777843,"맑은 고딕",469777844,"맑은 고딕",201341986,"1",469769226,"맑은 고딕,굴림",268442635,"22",469775450,"굵은 표준",201340122,"2",134234082,"true",134233614,"true",469778129,"ae",335572020,"1",134224900,"true",335559685,"892",335559991,"892",469775498,"Normal",469778324,"Normal"]}">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">스타일러</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준"> 및 </span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">스타일러들에</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준"> 대한 정보 얻기</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559685":892,"335559991":892}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">각 컨트롤 </span><span class="NormalTextRun SCXW113170034 BCX0">별로 사용 가능한 기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span><span class="NormalTextRun SCXW113170034 BCX0"> 및 서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러의</span><span class="NormalTextRun SCXW113170034 BCX0"> 클래스 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">명칭들은 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0"> 스튜디오</span> </span><span style="color: rgb(132, 63, 161);"><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">도움말 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">&gt; eXBuilder6 &gt; </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">앱 개발 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">&gt; </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">&gt; UI </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤</span></span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">에서 퍼블리싱 하고자 하는 컨트롤을 선택한 뒤,</span><span class="NormalTextRun SCXW113170034 BCX0"> “</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">스타일 구성요소</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">” </span><span class="NormalTextRun SCXW113170034 BCX0">항목에서 확인하실 수 있습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">다음의 예시는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">아코디언</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의</span><span class="NormalTextRun SCXW113170034 BCX0"> “</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">스타일 구성요소</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">” </span><span class="NormalTextRun SCXW113170034 BCX0">입니다</span><span class="NormalTextRun SCXW113170034 BCX0">:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

<span class="SCXW113170034 BCX0"><span class="WACImageContainer NoPadding BlobObject SCXW113170034 BCX0" role="presentation">![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/embedded-image-qjjqbwfx.png)</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":2,"335551620":2}"> </span>

#### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">자바 스크립트로 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">스타일러</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준"> 접근</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559685":0,"335559731":0,"335559991":892}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">자바 스크립트로</span><span class="NormalTextRun SCXW113170034 BCX0">는 컨트롤의 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"><span style="color: rgb(132, 63, 161);">style</span> </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">속성을 통해 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">에</span> <span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">접근 할</span><span class="NormalTextRun SCXW113170034 BCX0"> 수 있으며,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">들은</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">의</span> <span class="NormalTextRun SCXW113170034 BCX0">멤버 </span><span class="NormalTextRun SCXW113170034 BCX0">속성</span><span class="NormalTextRun SCXW113170034 BCX0"> 형태</span><span class="NormalTextRun SCXW113170034 BCX0">로서 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">접근 할</span><span class="NormalTextRun SCXW113170034 BCX0"> 수 있습니다:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

```javascript
var radioButton = new cpr.controls.RadioButton(); 

// 기본 스타일러 조작 
radioButton.style.css("color", "red"); 
 
// item 서브 스타일러 조작  
radioButton.style.item.css("color", "red"); 
```

#### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">C</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">SS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">로 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준">스타일러</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="굵은 표준"> 접근</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559685":0,"335559731":0,"335559991":892}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러들은</span> <span class="NormalTextRun SCXW113170034 BCX0">다음과 같은</span><span class="NormalTextRun SCXW113170034 BCX0"> 형식의</span><span class="NormalTextRun SCXW113170034 BCX0"> 클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 공급합니다</span><span class="NormalTextRun SCXW113170034 BCX0">:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

` <span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" style="color: rgb(224, 62, 45);" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">소속 컨트롤 타입 클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span><span class="NormalTextRun SCXW113170034 BCX0"> 명칭</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":2,"335551620":2}"> </span>`

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">예를 들어 라디오 버튼의 아이템은 다음과 같은 클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터가</span><span class="NormalTextRun SCXW113170034 BCX0"> 제공됩니다</span><span class="NormalTextRun SCXW113170034 BCX0">:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

` <span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">cl</span><span class="NormalTextRun SCXW113170034 BCX0">-</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">radiobutton</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">-</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">item</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":2,"335551620":2}"> </span>`

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">예시</span><span class="NormalTextRun SCXW113170034 BCX0">(</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">myRadio</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">는 커스텀 클래스 명칭으로 가정</span><span class="NormalTextRun SCXW113170034 BCX0">)</span><span class="NormalTextRun SCXW113170034 BCX0">:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

```css
.cl-radiobutton.myRadio { 

  // 기본 스타일러 
  color: red; 
  .cl-radiobutton-item { 

    // item 서브 스타일러 
    color: red; 
  } 
} 
```

## <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}">2. </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">eXBuilder6 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">렌</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">더링의 이해</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":596,"335559991":596}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">2.1. e</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">XBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">의 </span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">렌</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">더링 구조</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">e</span><span class="NormalTextRun SCXW113170034 BCX0">XBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 중요한 임무 중 하나는</span><span class="NormalTextRun SCXW113170034 BCX0">,</span> <span class="NormalTextRun SCXW113170034 BCX0">높은</span><span class="NormalTextRun SCXW113170034 BCX0"> 추상성을 갖는 </span><span class="NormalTextRun SCXW113170034 BCX0">비즈니스 </span><span class="NormalTextRun SCXW113170034 BCX0">컨트롤을 </span><span class="NormalTextRun SCXW113170034 BCX0">표현하는</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 개발자의 요청에 따라 효율적으로 합성하고</span> <span class="NormalTextRun SCXW113170034 BCX0">그 콘텐츠 관리(</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">Manipulate)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">하는 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">하는</span><span class="NormalTextRun SCXW113170034 BCX0"> 것입니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">예를 들어 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">Grid </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤은 개발자가 제공한 데이터를 바탕으로 </span><span class="NormalTextRun SCXW113170034 BCX0">많은</span><span class="NormalTextRun SCXW113170034 BCX0"> 셀을 만들고 효율적으로 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">콘텐츠를 관리합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">또한 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">플랫폼은 컨트롤들 및 데이터의 상태를 감시하며,</span> <span class="NormalTextRun SCXW113170034 BCX0">변경이 일어날 때마다</span> <span class="NormalTextRun SCXW113170034 BCX0">동적으로 </span><span class="NormalTextRun SCXW113170034 BCX0">가장 적절한 시점에 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">재합성</span><span class="NormalTextRun SCXW113170034 BCX0"> 합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">따라서,</span> <span class="NormalTextRun SCXW113170034 BCX0">특정 시점의 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 상태를 관측한 결과</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 바탕으로 퍼블리싱을 수행하면 안 됩니다.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">은 애플리케이션이 실행되는 동안 역동적으로 변경될 수 </span><span class="NormalTextRun SCXW113170034 BCX0">있기 때문입니다</span><span class="NormalTextRun SCXW113170034 BCX0">.</span><span class="NormalTextRun SCXW113170034 BCX0"> </span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">단, 쉘 컨트롤 및 HTMLSnippet등, 개발자가 직접 DOM 콘텐츠를 통제하는 경우, DOM 형상을 대상으로 하는 퍼블리싱을 수행 할 수 있습니다.</span></span></span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">e</span><span class="NormalTextRun SCXW113170034 BCX0">XBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 런타임이 업데이트</span> <span class="NormalTextRun SCXW113170034 BCX0">되면서,</span> <span class="NormalTextRun SCXW113170034 BCX0">다음의 이유에 따라 컨트롤의 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">구조는 변경될 수 있습니다:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

<div class="SCXW113170034 BCX0" id="bkmrk-%EC%84%B1%EB%8A%A5-%ED%96%A5%EC%83%81%C2%A0-%EA%B8%B0%EB%8A%A5-%EC%B6%94%EA%B0%80%C2%A0-%EC%A0%91%EA%B7%BC%EC%84%B1-%ED%96%A5%EC%83%81"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">성능 향상</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}">기능 추가</span>
- <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}">접근성 향상</span>

</div></div>### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">2.2. 논리적 스타일링 구조</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이러한 환경 내에서 </span><span class="NormalTextRun SCXW113170034 BCX0">안전한 퍼블리싱이 </span><span class="NormalTextRun SCXW113170034 BCX0">이루어지려</span><span class="NormalTextRun SCXW113170034 BCX0">면</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 대상으로</span><span class="NormalTextRun SCXW113170034 BCX0"> 하는</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터를</span><span class="NormalTextRun SCXW113170034 BCX0"> 작성하는 대신,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">가 제공하는</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 및 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤의 논리적 구성요소</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">들을 대상으로 하는 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터를</span> <span class="NormalTextRun SCXW113170034 BCX0">사</span><span class="NormalTextRun SCXW113170034 BCX0">용하여야 하며,</span> <span class="NormalTextRun SCXW113170034 BCX0">이들</span><span class="NormalTextRun SCXW113170034 BCX0">을</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 및 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">라고</span><span class="NormalTextRun SCXW113170034 BCX0"> 부릅니다.</span><span class="NormalTextRun SCXW113170034 BCX0"> </span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">각 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 및 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 사이의 </span><span class="NormalTextRun SCXW113170034 BCX0">관계 및 구조는</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">애플리케이션이 수행되는 동안</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이나 혹은 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">e</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">XBuilder</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">버전</span><span class="NormalTextRun SCXW113170034 BCX0"> 업데이트</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 등이 이뤄지더라도 </span><span class="NormalTextRun SCXW113170034 BCX0">변경되지 않습니다.</span></span> <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이</span><span class="NormalTextRun SCXW113170034 BCX0">렇게 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">**항상성**</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이 보장되는 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">스타일링 단위</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 사이의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">관계 </span><span class="NormalTextRun SCXW113170034 BCX0">구조</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">를</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">논리적 스타일링 구조</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라고 합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">항상성: 고객의 요청에 기인한 기능 추가 등에 의해 기존 스타일링에 영향을 주지 않는 논리적 스타일링 구조의 추가가 존재할 수는 있습니다.</span></span></span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">다음은 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">API </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">계약 상 합법적인 라디오 버튼의 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">구조 변경의 예시를 나타냅니다:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<div class="OutlineElement Ltr SCXW113170034 BCX0" id="bkmrk-%EB%B3%80%EA%B2%BD-%EC%A0%84%C2%A0-%EB%B3%80%EA%B2%BD-%ED%9B%84%C2%A0-%C2%A0-%C2%A0-%C2%A0-it"><div class="TableContainer Ltr SCXW113170034 BCX0"><div aria-hidden="true" class="WACAltTextDescribedBy SCXW113170034 BCX0" id="bkmrk--2"></div><table aria-rowcount="3" border="1" class="Table Ltr TableWordWrap SCXW113170034 BCX0" data-tablelook="1184" data-tablestyle="MsoTableGrid" dir="ltr"><thead><tr aria-rowindex="1" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstRow FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">변경 전</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow LastCol SCXW113170034 BCX0" data-celllook="0" role="columnheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">변경 후</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></thead><tbody class="SCXW113170034 BCX0"><tr aria-rowindex="2" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="SCXW113170034 BCX0"><span class="WACImageContainer NoPadding BlobObject SCXW113170034 BCX0" role="presentation">![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/embedded-image-ep5hoq2q.png)</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0"><span class="SCXW113170034 BCX0"><span class="WACImageContainer NoPadding BlobObject SCXW113170034 BCX0" role="presentation">![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/embedded-image-te7pjaft.png)</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="3" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol LastRow SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol LastRow SCXW113170034 BCX0" data-celllook="0"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">item</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 태그 명이 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">li</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">에서 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">div</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 변경되었고,</span> <span class="NormalTextRun SCXW113170034 BCX0">부모 노드가 추가되었습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></tbody></table>

</div></div><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">위의 예시에서 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">**라디오 버튼**의</span></span> <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">구조는 변경되었으나,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">자체의 스타일은 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"><span style="color: rgb(132, 63, 161);">.cl-</span></span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" style="color: rgb(132, 63, 161);">radiobutton</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이 결정하며,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">아이템</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 스타일은 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"><span style="color: rgb(132, 63, 161);">.cl-</span></span><span style="color: rgb(132, 63, 161);"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">radiobutton</span><span class="NormalTextRun SCXW113170034 BCX0">-item</span></span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이 결정한다는 사실과,</span> <span class="NormalTextRun SCXW113170034 BCX0">이들</span><span class="NormalTextRun SCXW113170034 BCX0">이</span><span class="NormalTextRun SCXW113170034 BCX0"> 부모 자식 관계라는 </span><span class="NormalTextRun SCXW113170034 BCX0">사실에는</span><span class="NormalTextRun SCXW113170034 BCX0"> 변동이 없습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

## <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}">3. </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">레이아웃 시스템</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">과의 호환성</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":596,"335559991":596}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">e</span><span class="NormalTextRun SCXW113170034 BCX0">XBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">는 화면에 표기된 컨트롤들을 렌더링 할 때,</span> <span class="NormalTextRun SCXW113170034 BCX0">부모의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 시스템</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">과 자식의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨스트레인트</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 정보를 조합하여,</span> <span class="NormalTextRun SCXW113170034 BCX0">그 위치 및 크기를 스크립트로 결정하고,</span> <span class="NormalTextRun SCXW113170034 BCX0">그 결과물을</span><span class="NormalTextRun SCXW113170034 BCX0"> 표준 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">HTML/CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">형태로 반영합니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">또한 레이아웃 조건 및 컨트롤들의 상태에 따라 결과물의 양상은 크게 변경될 수 있습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">예를 들어 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">TabFolder</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" style="color: rgb(132, 63, 161);">headerPosition</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">값에 따라,</span> <span class="NormalTextRun SCXW113170034 BCX0">탭 폴더의 헤더 위치</span><span class="NormalTextRun SCXW113170034 BCX0">와 연관된</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 순서</span> <span class="NormalTextRun SCXW113170034 BCX0">등이 변경될 수 있습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">또다른 예시로는 개발자가 동적으로 레이아웃 시스템을 변경한 경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">전체 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 구조가 변경될 수도 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}">레이아웃 및 컨스트레인트: 모든 레이아웃은 해당 체계 내에서 자식을 배치하는 방법을 설명하는 컨스트레인트 모델을 갖습니다. 예를 들어 폼 레이아웃의 경우 컨트롤을 배치할 행 및 열의 정보가 컨스트레인트가 됩니다.</span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">따라서 퍼블리셔는</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">가 동적으로 결정하는</span> </span><span style="text-decoration: underline;">**<span class="TextRun Underlined SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 시스템</span></span>**<span class="TextRun Underlined SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">에 영향을 줄 수 있는 </span></span><span class="TextRun Underlined SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 </span><span class="NormalTextRun SCXW113170034 BCX0">속성</span></span><span class="TextRun Underlined SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">들</span></span><span class="TextRun Underlined SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">에</span><span class="NormalTextRun SCXW113170034 BCX0"> 대해 </span><span class="NormalTextRun SCXW113170034 BCX0">스타일링을</span><span class="NormalTextRun SCXW113170034 BCX0"> 수행해서는 아니됩니다.</span></span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">이 규칙을 준수하기 위하여 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">또는</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> LESS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">파일은 다음의 속성을 </span><span class="NormalTextRun SCXW113170034 BCX0">지정하는 구문을 </span><span class="NormalTextRun SCXW113170034 BCX0">포함해서는 아니됩니다.</span></span> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}">레이아웃 속성들: 레이아웃 시스템이 상황에 따라 동적으로 합성하여 만들어내는 CSS 속성들.</span></span>

<div class="OutlineElement Ltr SCXW113170034 BCX0" id="bkmrk-%EC%86%8D%EC%84%B1%C2%A0-%EC%9D%B4%EC%9C%A0%C2%A0-display%C2%A0-dom"><div class="TableContainer Ltr SCXW113170034 BCX0"><div aria-hidden="true" class="WACAltTextDescribedBy SCXW113170034 BCX0" id="bkmrk--3"></div><table aria-rowcount="9" border="1" class="Table Ltr TableWordWrap SCXW113170034 BCX0" data-tablelook="1184" data-tablestyle="MsoTableGrid" dir="ltr" style="width: 100%;"><thead><tr aria-rowindex="1" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstRow FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">속성</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow LastCol SCXW113170034 BCX0" data-celllook="0" role="columnheader" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이유</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></thead><tbody class="SCXW113170034 BCX0"><tr aria-rowindex="2" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">d</span><span class="NormalTextRun SCXW113170034 BCX0">isplay</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 규칙 및 가시성에 영향을 미칩니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">예를 들어 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">display</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">none</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">으로</span><span class="NormalTextRun SCXW113170034 BCX0"> 강제로 지정한 경우,</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">control.visible</span><span class="NormalTextRun SCXW113170034 BCX0"> = true</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 프로그래밍 하여도 화면에 표시되지 않게 됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="3" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">p</span><span class="NormalTextRun SCXW113170034 BCX0">osition</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 규칙에 영향을 미쳐,</span> <span class="NormalTextRun SCXW113170034 BCX0">내부 좌표계 전체에 왜곡을 가져오게 됩니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">모든 컨트롤들은 부모의 레이아웃 시스템에</span> <span class="NormalTextRun SCXW113170034 BCX0">따라 적절한 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">position </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">속성을 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">부여 받게</span><span class="NormalTextRun SCXW113170034 BCX0"> 됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="4" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">l</span><span class="NormalTextRun SCXW113170034 BCX0">eft</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">위치및</span><span class="NormalTextRun SCXW113170034 BCX0"> 크기는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 시스템 및 개발자가 입력한 레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨스트레인트에</span><span class="NormalTextRun SCXW113170034 BCX0"> 의해 결정됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="5" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">t</span><span class="NormalTextRun SCXW113170034 BCX0">op</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">위치및</span><span class="NormalTextRun SCXW113170034 BCX0"> 크기는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 시스템 및 개발자가 입력한 레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨스트레인트에</span><span class="NormalTextRun SCXW113170034 BCX0"> 의해 결정됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="6" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">right</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">위치및</span><span class="NormalTextRun SCXW113170034 BCX0"> 크기는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 시스템 및 개발자가 입력한 레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨스트레인트에</span><span class="NormalTextRun SCXW113170034 BCX0"> 의해 결정됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="7" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">bottom</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">위치및</span><span class="NormalTextRun SCXW113170034 BCX0"> 크기는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 시스템 및 개발자가 입력한 레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨스트레인트에</span><span class="NormalTextRun SCXW113170034 BCX0"> 의해 결정됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="8" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">width</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">,</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">min-width</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">위치및</span><span class="NormalTextRun SCXW113170034 BCX0"> 크기는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 시스템 및 개발자가 입력한 레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨스트레인트에</span><span class="NormalTextRun SCXW113170034 BCX0"> 의해 결정됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="9" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol LastRow SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 11.0843%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">h</span><span class="NormalTextRun SCXW113170034 BCX0">eight</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">,</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">min-height</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol LastRow SCXW113170034 BCX0" data-celllook="0" style="width: 88.8919%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">위치및</span><span class="NormalTextRun SCXW113170034 BCX0"> 크기는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 레이아웃 시스템 및 개발자가 입력한 레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨스트레인트에</span><span class="NormalTextRun SCXW113170034 BCX0"> 의해 결정됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></tbody></table>

</div></div>## <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}">4. </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">U</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">DC</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">의 활용</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">만약 필요로 하는 레이아웃</span><span class="NormalTextRun SCXW113170034 BCX0">이나 동작을</span><span class="NormalTextRun SCXW113170034 BCX0"> 갖춘 컨트롤이 없는 경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">안전한 퍼블리싱 구조를 갖는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">UDC </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨트롤을 작성할 수 있습니다.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> UDC</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 컨트롤 작성을 통해</span> <span class="NormalTextRun SCXW113170034 BCX0">원하는 형태대로 레이아웃을 중첩하고,</span> <span class="NormalTextRun SCXW113170034 BCX0">직접 스타일 클래스 명칭을 추가하여,</span> <span class="NormalTextRun SCXW113170034 BCX0">항상성을 보장받는 논리적 스타일링 구조를 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">확보할</span><span class="NormalTextRun SCXW113170034 BCX0"> 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">스튜디오의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">eXBuilder</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">예제 마법사</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">에서,</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> `“presentation-example”`</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 선택하고 예제 프로젝트를 만들어 </span><span class="NormalTextRun SCXW113170034 BCX0">일부 </span><span class="NormalTextRun SCXW113170034 BCX0">참고</span><span class="NormalTextRun SCXW113170034 BCX0">할 만한 </span><span class="NormalTextRun SCXW113170034 BCX0">예제</span><span class="NormalTextRun SCXW113170034 BCX0">들을</span><span class="NormalTextRun SCXW113170034 BCX0"> 확인할 수 있습니다</span><span class="NormalTextRun SCXW113170034 BCX0">:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<div class="SCXW113170034 BCX0" id="bkmrk-examples%2Fcustom-radi"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">examples/custom-radio/CustomRadio</span><span class="NormalTextRun SCXW113170034 BCX0">.clx</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">우측에 추가 버튼을 갖는 라디오 버튼 예시</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="SCXW113170034 BCX0"><span class="WACImageContainer NoPadding BlobObject SCXW113170034 BCX0" role="presentation">![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/embedded-image-hebqbip7.png)</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">examples/custom-</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">tabfolder</span><span class="NormalTextRun SCXW113170034 BCX0">-header/CustomTabHeaderExample</span><span class="NormalTextRun SCXW113170034 BCX0">.clx</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">탭 폴더 헤더를 별도로 만들어 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">TabFolder</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">와 연동하는 예시</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="SCXW113170034 BCX0"><span class="WACImageContainer NoPadding BlobObject SCXW113170034 BCX0" role="presentation">![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/embedded-image-za2pzbgr.png)</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">examples/custom-toggle-button/CustomToggle</span><span class="NormalTextRun SCXW113170034 BCX0">.clx</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">슬라이더를 이용한 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">토글</span><span class="NormalTextRun SCXW113170034 BCX0"> 버튼 예시</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
    </span><span class="SCXW113170034 BCX0"><span class="WACImageContainer NoPadding BlobObject SCXW113170034 BCX0" role="presentation">![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/embedded-image-v8va0idi.png)</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div></div>## <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">5. 스타일링 </span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">지침</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":596,"335559991":596}"> </span>

<div class="SCXW113170034 BCX0" id="bkmrk-%EC%8A%A4%ED%83%80%EC%9D%BC%EB%A7%81-%EC%A7%80%EC%B9%A8%C2%A0"></div><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">안전하</span><span class="NormalTextRun SCXW113170034 BCX0">게</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">지속</span> <span class="NormalTextRun SCXW113170034 BCX0">가능한 퍼블리싱</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 위하여,</span> <span class="NormalTextRun SCXW113170034 BCX0">퍼블리싱은 다음 지침을 준수하여야 합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">지속</span> <span class="NormalTextRun SCXW113170034 BCX0">가능한 퍼블리싱: 런타임을 업데이트 하더라도 항상성을 보장받는 안전한 퍼블리싱</span></span></span>

<div class="OutlineElement Ltr SCXW113170034 BCX0" id="bkmrk-%EB%B2%88%ED%98%B8%C2%A0-%EA%B7%9C%EC%B9%99%C2%A0-%EC%9D%B4%EC%9C%A0%C2%A0-1%C2%A0-css%EC%9D%98-"><div class="TableContainer Ltr SCXW113170034 BCX0"><div aria-hidden="true" class="WACAltTextDescribedBy SCXW113170034 BCX0" id="bkmrk--4"></div><table aria-rowcount="7" border="1" class="Table Ltr TableWordWrap SCXW113170034 BCX0" data-tablelook="1184" data-tablestyle="MsoTableGrid" dir="ltr" style="width: 100%;"><thead><tr aria-rowindex="1" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstRow FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 6.79059%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">번호</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow SCXW113170034 BCX0" data-celllook="0" role="columnheader" style="width: 25.5021%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">규칙</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow LastCol SCXW113170034 BCX0" data-celllook="0" role="columnheader" style="width: 67.6835%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이유</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></thead><tbody class="SCXW113170034 BCX0"><tr aria-rowindex="2" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 6.79059%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">1</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 25.5021%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">C</span><span class="NormalTextRun SCXW113170034 BCX0">SS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SCXW113170034 BCX0"> 콤비네이션은</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">기본 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">의</span><span class="NormalTextRun SCXW113170034 BCX0"> 클래스 명 및 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">사용자 지정 클래스 명</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 조합으로 이루어져야 합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 67.6835%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">비 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">API </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">요소를 통한 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터는</span><span class="NormalTextRun SCXW113170034 BCX0"> 버전 호환성이 보증되지 않습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="3" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 6.79059%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">2</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 25.5021%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">차일드</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컴비네이터</span><span class="NormalTextRun SCXW113170034 BCX0">(</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">&gt;)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 사용해서는 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">안됩니다</span><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 67.6835%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">2장에서 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">언급된</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">것처럼</span><span class="NormalTextRun SCXW113170034 BCX0">,</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">런타임 업데이트가 논리적 스타일링의 구조는 변경하지 않으나,</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 직계 자손 구조 및 태그</span> <span class="NormalTextRun SCXW113170034 BCX0">명 등은 변경될 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="4" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 6.79059%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">3</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 25.5021%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃</span><span class="NormalTextRun SCXW113170034 BCX0"> 시스템 및 컨트롤 내부 레이아웃</span><span class="NormalTextRun SCXW113170034 BCX0">에 영향을 주는 속성을 지정하지 마십시오.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 67.6835%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">3장에서 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">언급된</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">것처럼</span><span class="NormalTextRun SCXW113170034 BCX0">,</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">레이아웃과 관련한 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">속성들은 런타임이 자동으로 만들어 내므로,</span> <span class="NormalTextRun SCXW113170034 BCX0">이들과 충돌을 일으킬 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="5" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 6.79059%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">4</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 25.5021%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 관측한 결과를 바탕으로 퍼블리싱을 수행하지 마십시오.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 67.6835%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">D</span><span class="NormalTextRun SCXW113170034 BCX0">OM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">은 애플리케이션이 수행되는 동안 계속해서 바뀌게 됩니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">예를 들어 컨트롤의 특정</span> <span class="NormalTextRun SCXW113170034 BCX0">속성이 변경되면,</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">구조 전체가 완전히 변경될 수도 있습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">따라서,</span> <span class="NormalTextRun SCXW113170034 BCX0">반드시 </span><span class="NormalTextRun SCXW113170034 BCX0">논리적인 스타일링 구조에 따라 퍼블리싱을 수행하여 주십시오.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="6" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 6.79059%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">5</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 25.5021%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">e</span><span class="NormalTextRun SCXW113170034 BCX0">XBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">가 제공하는 컨트롤이 원하는 스타일링 요소를 통제하는 속성을 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">갖고 있다면</span><span class="NormalTextRun SCXW113170034 BCX0">,</span> <span class="NormalTextRun SCXW113170034 BCX0">그것을 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 지정하지 마십시오.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 67.6835%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">예를 들어 라디오 버튼의 경우 </span><span class="NormalTextRun SCXW113170034 BCX0">각 아이템 사이의 간격을 결정하는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">itemSpacing</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">속성을 제공합니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼이 배치되는 규칙이나 부모의 상황에 따라,</span> <span class="NormalTextRun SCXW113170034 BCX0">이 값을 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">DOM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">에</span><span class="NormalTextRun SCXW113170034 BCX0"> 반영하는 스타일 형태는 크게 변할 수 있습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">따라서 특정한 한 유형의 상태에만 의존하여,</span> <span class="NormalTextRun SCXW113170034 BCX0">컨트롤이 제공하는 기능을 우회하여 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 구현하여서는 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">안됩니다</span><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">스타일 요소처럼 보이지만,</span> <span class="NormalTextRun SCXW113170034 BCX0">컨트롤이 관련 속성을 제공하는 </span><span class="NormalTextRun SCXW113170034 BCX0">경우는,</span> <span class="NormalTextRun SCXW113170034 BCX0">다양한 문맥에서 </span><span class="NormalTextRun SCXW113170034 BCX0">정상적인 동작을 보증하기 위하여 불가피한 경우에만 제공됩니다. </span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="7" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol LastRow SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 6.79059%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">6</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastRow SCXW113170034 BCX0" data-celllook="0" style="width: 25.5021%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 시스템이 여백과 정렬과 관련한 속성들을 제공하는 경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">해당 속성을 이용하고 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 지정하지 마십시오.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol LastRow SCXW113170034 BCX0" data-celllook="0" style="width: 67.6835%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 시스템은 설정에 따라,</span> <span class="NormalTextRun SCXW113170034 BCX0">동적으로 하위 노드 구조에 많은 변화가 있을 수 있으므로,</span> <span class="NormalTextRun SCXW113170034 BCX0">이를 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 안전하게 통제하기 어렵습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></tbody></table>

</div></div>## <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}">6. </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">예외 사항</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":596,"335559991":596}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">6.1. 아이콘 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">스타일러</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":679,"335559991":679}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">각 컨트롤들이 제공하는 다수의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러들</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 중 그 이름이 </span><span class="NormalTextRun SCXW113170034 BCX0" style="color: rgb(132, 63, 161);">“</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">icon</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" style="color: rgb(132, 63, 161);">”</span> <span class="NormalTextRun SCXW113170034 BCX0">혹은 </span><span class="NormalTextRun SCXW113170034 BCX0" style="color: rgb(132, 63, 161);">“</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">expander</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"><span style="color: rgb(132, 63, 161);">”</span> </span><span class="NormalTextRun SCXW113170034 BCX0">등으</span><span class="NormalTextRun SCXW113170034 BCX0">로 끝나는 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">들은</span><span class="NormalTextRun SCXW113170034 BCX0"> 아이콘 또는 이미지를 표시하기 위한 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">서브 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 입니다. 이들 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">스타일러</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">는</span><span class="NormalTextRun SCXW113170034 BCX0"> 이미지 및 아이콘의 크기를 변경하기 위하여,</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"><span style="color: rgb(132, 63, 161);">width</span> </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">및 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">height </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">속성의 변경을 </span><span class="NormalTextRun SCXW113170034 BCX0">별도로</span><span class="NormalTextRun SCXW113170034 BCX0"> 허용합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">다음의 예시는 스크립트로 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 아이콘의 크기를 변경하는 방법을 보여줍니다:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

```css
radioButton.style.icon.css({ 
  "width" : "20px", 
  "height" : "20px" 
}); 
```

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">C</span><span class="NormalTextRun SCXW113170034 BCX0">SS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 같은 작업을 수행하는 예시입니다</span><span class="NormalTextRun SCXW113170034 BCX0">(</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">my-radio</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">는 사용자 정의 클래스 명</span><span class="NormalTextRun SCXW113170034 BCX0">)</span><span class="NormalTextRun SCXW113170034 BCX0">:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

```css
.cl-radiobutton.my-radio { 
  .cl-radiobutton-item { 
    .cl-radiobutton-icon { 
      width: 20px; 
      height: 20px; 
    } 
  } 
} 
```

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">6.2. 커스텀 스크롤 바</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">커스텀 스크롤 바를 사용하</span><span class="NormalTextRun SCXW113170034 BCX0">거나 사용할 예정인</span> <span class="NormalTextRun SCXW113170034 BCX0">경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">그룹 컨트롤의 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">`<span style="color: rgb(132, 63, 161);">padding</span>` </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">속성을 사용하지 마십시오.</span> <span class="NormalTextRun SCXW113170034 BCX0">커스텀 스크롤바는 그룹의 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">padding</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 이용하여 콘텐트 영역을 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">축소 시키고</span><span class="NormalTextRun SCXW113170034 BCX0"> 스크롤바를 표시합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

## <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">7. 유틸리티 슈도 클래스</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">e</span><span class="NormalTextRun SCXW113170034 BCX0">XBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">는 논리적인 첫번째</span> <span class="NormalTextRun SCXW113170034 BCX0">행과 마지막 행,</span> <span class="NormalTextRun SCXW113170034 BCX0">그리고 첫번째 열과 마지막 열에 대한 클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터를</span><span class="NormalTextRun SCXW113170034 BCX0"> 공급합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<div class="OutlineElement Ltr SCXW113170034 BCX0" id="bkmrk-%EC%85%80%EB%A0%89%ED%84%B0%C2%A0-%EC%84%A4%EB%AA%85%C2%A0-%EC%A0%81%EC%9A%A9-%EB%8C%80%EC%83%81%C2%A0-.cl-"><div class="TableContainer Ltr SCXW113170034 BCX0"><div aria-hidden="true" class="WACAltTextDescribedBy SCXW113170034 BCX0" id="bkmrk--5"></div><table aria-rowcount="9" border="1" class="Table Ltr TableWordWrap SCXW113170034 BCX0" data-tablelook="1184" data-tablestyle="MsoTableGrid" dir="ltr" style="width: 100%; height: 1124.6px;"><thead><tr aria-rowindex="1" class="TableRow SCXW113170034 BCX0" role="row" style="height: 29.6px;"><td class="FirstRow FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 29.6px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow SCXW113170034 BCX0" data-celllook="0" role="columnheader" style="width: 43.6126%; height: 29.6px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">설명</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow LastCol SCXW113170034 BCX0" data-celllook="0" role="columnheader" style="width: 41.8255%; height: 29.6px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">적용 대상</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></thead><tbody class="SCXW113170034 BCX0"><tr aria-rowindex="2" class="TableRow SCXW113170034 BCX0" role="row" style="height: 230.85px;"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 230.85px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-</span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">first-row</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 230.85px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정 레이아웃 내 첫번째 행에 배치된 자식 컨트롤이나,</span> <span class="NormalTextRun SCXW113170034 BCX0">컨트롤 내의 첫번째 행에 배치된 아이템에 적용됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 230.85px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼의 첫번째 행에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">체크 박스 그룹의 첫번째 행에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">버티컬</span><span class="NormalTextRun SCXW113170034 BCX0"> 레이아웃이 적용된 컨테이너에 부착된 첫번째 자식</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃이 적용된 컨테이너에 부착된 첫번째 행에 존재하는 자식 컨트롤들</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div></div></td></tr><tr aria-rowindex="3" class="TableRow SCXW113170034 BCX0" role="row" style="height: 230.85px;"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 230.85px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-last-row</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 230.85px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정 레이아웃 내 마지막 행에 배치된 자식 컨트롤이나,</span> <span class="NormalTextRun SCXW113170034 BCX0">컨트롤 내의 마지막 행에 배치된 아이템에 적용됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 230.85px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼의 마지막 행에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">체크 박스 그룹의 마지막 행에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">버티컬</span><span class="NormalTextRun SCXW113170034 BCX0"> 레이아웃이 적용된 컨테이너에 부착된 첫번째 자식</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃이 적용된 컨테이너에 부착된 첫번째 행에 존재하는 자식 컨트롤들</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div></div></td></tr><tr aria-rowindex="4" class="TableRow SCXW113170034 BCX0" role="row" style="height: 178px;"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 178px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-</span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">first-column</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 178px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정 레이아웃 내 첫번째 열에 배치된 자식 컨트롤이나,</span> <span class="NormalTextRun SCXW113170034 BCX0">컨트롤 내의 첫번째 열에 배치된 아이템에 적용됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 178px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼의 첫번째 열에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">체크 박스 그룹의 첫번째 열에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃이 적용된 컨테이너에 부착된 첫번째 열에 존재하는 자식 컨트롤들</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div></div></td></tr><tr aria-rowindex="5" class="TableRow SCXW113170034 BCX0" role="row" style="height: 178px;"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 178px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-last-row</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 178px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정 레이아웃 내 마지막 열에 배치된 자식 컨트롤이나,</span> <span class="NormalTextRun SCXW113170034 BCX0">컨트롤 내의 마지막 열에 배치된 아이템에 적용됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 178px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">라디오 버튼의 마지막 열에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">체크 박스 그룹의 마지막 열에 배치된 아이템</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃이 적용된 컨테이너에 부착된 마지막 열에 존재하는 자식 컨트롤들</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div></div></td></tr><tr aria-rowindex="6" class="TableRow SCXW113170034 BCX0" role="row" style="height: 125.15px;"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 125.15px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-odd-row</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-even-row</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 125.15px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 및 그리드에서 홀수 행 및 짝수 행에 위치하는 컨트롤에 적용됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 125.15px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">그리드의 행</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃이 배치된 컨트롤</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div></div></td></tr><tr aria-rowindex="7" class="TableRow SCXW113170034 BCX0" role="row" style="height: 89.1px;"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 89.1px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-odd-column</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-even-column</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 89.1px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃에서 홀수 열 및 짝수 열에 위치하는 컨트롤에 적용됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 89.1px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃에 배치된 컨트롤</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div><div class="ListContainerWrapper SCXW113170034 BCX0">  
</div></div></td></tr><tr aria-rowindex="8" class="TableRow SCXW113170034 BCX0" role="row" style="height: 53.05px;"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 53.05px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-nth-of-row-n</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 53.05px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내에서 몇 번째 행에 대한 요소인지를 나타냅니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 53.05px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div></div></td></tr><tr aria-rowindex="9" class="TableRow SCXW113170034 BCX0" role="row" style="height: 10px;"><td class="FirstCol LastRow SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 14.538%; height: 10px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-nth-of-column-n</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastRow SCXW113170034 BCX0" data-celllook="0" style="width: 43.6126%; height: 10px;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내에서 몇 번째 열에 대한 요소인지를 나타냅니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol LastRow SCXW113170034 BCX0" data-celllook="0" style="width: 41.8255%; height: 10px;"><div class="TableCellContent SCXW113170034 BCX0"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 내 구분선</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>

</div></div></td></tr></tbody></table>

</div></div>## <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">8. 권고 사항</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":596,"335559991":596}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">8.1. before / after </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">슈도 클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">셀렉터</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2"> 사용 주의</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":679,"335559991":679}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US">`<span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">:before</span>` </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">및 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">:after</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">와 같은 증강 슈도 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터는</span><span class="NormalTextRun SCXW113170034 BCX0"> 실제로 브라우저를 실행하여 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">D</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">OM</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">을 구성한 후에만 증강 적용이 가능하기 때문에,</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">e</span><span class="NormalTextRun SCXW113170034 BCX0">XBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 스튜디오는 이들에 대해 디자인 시점</span><span class="NormalTextRun SCXW113170034 BCX0">의 사전 </span><span class="NormalTextRun SCXW113170034 BCX0">렌더링을 제공하지 않습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">단순한 콘텐츠 삽입의 경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">개발자가 큰 혼란을 겪지 않겠지만,</span> <span class="NormalTextRun SCXW113170034 BCX0">레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">변형등을</span><span class="NormalTextRun SCXW113170034 BCX0"> 목적으로 이러한 증강 슈도 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터를</span><span class="NormalTextRun SCXW113170034 BCX0"> 사용하는 경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">개발자들은 화면의 디자인 결과물을 예측하는데 어려움을 겪을 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">8.2. 불가피한 레이아웃 수정</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":679,"335559991":679}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">불가피하게 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">position</span></span>` <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">혹은 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">`<span style="color: rgb(132, 63, 161);">display</span>` </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">및 기타 크기 및 위치 관련 속성을 반드시 변경해야 하는 경우,</span> </span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(132, 63, 161);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">!important</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">키워드를 이용하여야 합니다.</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">eXBuilder6</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">는 </span><span class="NormalTextRun SCXW113170034 BCX0">개발자나 퍼블리셔의 </span><span class="NormalTextRun SCXW113170034 BCX0">실수로 중요한 레이아웃 속성이 변형되는 것을 막기 위하여,</span> <span class="NormalTextRun SCXW113170034 BCX0">관련 속성을 변경하는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">API</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">요청을 차단(`자바 스크립트로 스타일러 객체의 css() 메서드를 통해 조작한 경우.`)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">하며,</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> CSS</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">로 그 값이 덮어씌워지는 것을 방지하기 위하여 인라인 속성으로 렌더링하기 때문입니다.</span><span class="NormalTextRun SCXW113170034 BCX0"> </span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}">!important: 그 속성을 강제로 덮어 써야 한다면, 그것이 API 보증 계약 외의 행위임을 쉽게 인지하기 하기 위하여.</span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이러한 스타일링은 </span><span class="NormalTextRun SCXW113170034 BCX0">현재 버전의 </span><span class="NormalTextRun SCXW113170034 BCX0">런타임에서 정</span><span class="NormalTextRun SCXW113170034 BCX0">상</span><span class="NormalTextRun SCXW113170034 BCX0">적으로 작동하</span><span class="NormalTextRun SCXW113170034 BCX0">는 것처럼 보이</span><span class="NormalTextRun SCXW113170034 BCX0">더라도, 디자인 편집기 등에서의 정상적인 렌더링</span><span class="NormalTextRun SCXW113170034 BCX0"> 및 </span><span class="NormalTextRun SCXW113170034 BCX0">향후 버전의</span><span class="NormalTextRun SCXW113170034 BCX0"> 런타임</span><span class="NormalTextRun SCXW113170034 BCX0">에서의</span><span class="NormalTextRun SCXW113170034 BCX0"> 정상 작동</span><span class="NormalTextRun SCXW113170034 BCX0">이</span><span class="NormalTextRun SCXW113170034 BCX0"> 보증되지 않습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">8.3. 디자인 편집</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">기와의 불일치</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">일반적으로 </span><span class="NormalTextRun SCXW113170034 BCX0">디자인 편집기가 의도한 퍼블리싱 결과물을 보여주지 못한다면,</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">API </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">표준 계약 범위 이외의 </span><span class="NormalTextRun SCXW113170034 BCX0">요소</span><span class="NormalTextRun SCXW113170034 BCX0">를 통</span><span class="NormalTextRun SCXW113170034 BCX0">한</span><span class="NormalTextRun SCXW113170034 BCX0"> 퍼블리싱</span><span class="NormalTextRun SCXW113170034 BCX0">이 이루어졌</span><span class="NormalTextRun SCXW113170034 BCX0">을</span><span class="NormalTextRun SCXW113170034 BCX0"> 가능성이 높습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">단순히 편집기가 미리 보여주지</span><span class="NormalTextRun SCXW113170034 BCX0"> 못하는 문제에 그칠 수도 있으나,</span> <span class="NormalTextRun SCXW113170034 BCX0">그</span><span class="NormalTextRun SCXW113170034 BCX0"> 이상의 문제를 추후에 야기할 수</span><span class="NormalTextRun SCXW113170034 BCX0">도</span><span class="NormalTextRun SCXW113170034 BCX0"> 있으므로,</span> <span class="NormalTextRun SCXW113170034 BCX0">반드시 전문가의 확인이 필요합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

## <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">9. 확장</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1"> 퍼블리싱 포인트</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이 장에서는 표준 퍼블리싱이 제공되지 않아 기획 의도 및 특수한 퍼블리싱 의도를 구현할 수 없는 경우를 대비한</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">확장</span><span class="NormalTextRun SCXW113170034 BCX0"> 퍼블리싱 포인트</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">들을 다룹니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">확장</span><span class="NormalTextRun SCXW113170034 BCX0"> 퍼블리싱 포인트들은 런타임 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">작동성</span><span class="NormalTextRun SCXW113170034 BCX0"> 및 **버전 호환성**</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이 제공되지만 디자인 편집기에서는 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">적용 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">되지</span> <span class="NormalTextRun SCXW113170034 BCX0">않습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}">버전 호환성: 기능 개선등의 목적으로 변경되는 경우, 마이그레이션 가이드라인과 함께 변동이 존재할 수 있습니다.</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">9.1. 레이아웃 시스템 관련</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">9.1. 레이아웃 시스템 관련</span></span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨테이너(그룹)</span> <span class="NormalTextRun SCXW113170034 BCX0">내 레이아웃 및 자식 컨트롤들의 레이아웃 특성에 대한 퍼블리싱 방법을 기술합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨테이너는 일반적으로 다음과 같은 구조를 갖습니다:</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<div class="SCXW113170034 BCX0" id="bkmrk-.cl-container-%E2%80%93-%EA%B7%B8%EB%A3%B9-%EC%BB%A8"><div class="ListContainerWrapper SCXW113170034 BCX0">- <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-container </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">–</span> <span class="NormalTextRun SCXW113170034 BCX0">그룹 컨트롤</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
    
    
    - <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">cl-layout</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">.cl</span><span class="NormalTextRun SCXW113170034 BCX0">-scrollbar</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">–</span> <span class="NormalTextRun SCXW113170034 BCX0">레이아웃 루트</span><span class="NormalTextRun SCXW113170034 BCX0"> </span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
        
        
        - <span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" style="color: rgb(224, 62, 45);" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"><span style="color: rgb(224, 62, 45);">cl-layout-content</span> </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">–</span> <span class="NormalTextRun SCXW113170034 BCX0">레이아웃 내 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨텐트</span><span class="NormalTextRun SCXW113170034 BCX0"> 팬</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
            
            
            - <span style="color: rgb(224, 62, 45);"><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-layout-wrap</span></span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"> <span class="NormalTextRun SCXW113170034 BCX0">–</span> <span class="NormalTextRun SCXW113170034 BCX0">자식 컨트롤에 레이아웃 특성을 적용하기 위한 래퍼</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335559795":0}"> </span>
                
                
                - <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-control </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">–</span> <span class="NormalTextRun SCXW113170034 BCX0">자식 컨트롤</span></span>

</div></div>> <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"><span style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 굴림; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA;"><span lang="EN-US" style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 굴림; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA;">.cl-scrollbar: </span>레이아웃이 스크롤 가능하도록 설정된 경우에만 이 클래스가 부여됩니다<span lang="EN-US">.</span></span></span></span>
> 
> <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"><span style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 굴림; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA;">.cl-layout-wrap: 래퍼 노드 없이 레이아웃 특성 적용이 가능한 레이아웃에서 이 노드는 생략됩니다<span lang="EN-US">.</span></span></span></span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">붉게 표시된 부분은 레이아웃이 설정된 형태에 따라 존재</span> <span class="NormalTextRun SCXW113170034 BCX0">유무가 결정됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

##### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃과 관련된 </span><span class="NormalTextRun SCXW113170034 BCX0">클래스 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SCXW113170034 BCX0"> 목</span><span class="NormalTextRun SCXW113170034 BCX0">록</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<div class="OutlineElement Ltr SCXW113170034 BCX0" id="bkmrk-%EC%85%80%EB%A0%89%ED%84%B0%C2%A0-%EC%84%A4%EB%AA%85%C2%A0-%EC%A0%81%EC%9A%A9-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83%C2%A0-.c"><div class="TableContainer Ltr SCXW113170034 BCX0"><div aria-hidden="true" class="WACAltTextDescribedBy SCXW113170034 BCX0" id="bkmrk--6"></div><table aria-rowcount="6" border="1" class="Table Ltr TableWordWrap SCXW113170034 BCX0" data-tablelook="1184" data-tablestyle="MsoTableGrid" dir="ltr" style="width: 108.095%;"><thead><tr aria-rowindex="1" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstRow FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 17.7565%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow SCXW113170034 BCX0" data-celllook="0" role="columnheader" style="width: 66.3713%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">설명</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow LastCol SCXW113170034 BCX0" data-celllook="0" role="columnheader" style="width: 15.8484%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">적용 레이아웃</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></thead><tbody class="SCXW113170034 BCX0"><tr aria-rowindex="2" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 17.7565%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-</span><span class="NormalTextRun SCXW113170034 BCX0">layout,</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-scroll</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 66.3713%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정 </span><span class="NormalTextRun SCXW113170034 BCX0">컨테이너의 레이아웃 시스템이 사용하는 루트 팬을 얻습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">해당 레이아웃이 스크롤을 허용하도록 설정되어 있는 경우,</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">c</span><span class="NormalTextRun SCXW113170034 BCX0">l-scroll </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">클래스를 동시에 보유합니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 15.8484%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">모든 레이아웃</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="3" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 17.7565%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl</span><span class="NormalTextRun SCXW113170034 BCX0">-layout-content</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 66.3713%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 시스템 내에서 스크롤 되는 전체 영역을 나타내는 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨텐트</span><span class="NormalTextRun SCXW113170034 BCX0"> 팬을 얻을 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 15.8484%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">Vertical, Flow</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="4" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 17.7565%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-layout-wrap</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 66.3713%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정 컨트롤이 레이아웃에 포함되기 위해 특수한 노드에 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">래핑되었다면</span><span class="NormalTextRun SCXW113170034 BCX0">,</span> <span class="NormalTextRun SCXW113170034 BCX0">이 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터를</span><span class="NormalTextRun SCXW113170034 BCX0"> 통해 얻을 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 15.8484%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">V</span><span class="NormalTextRun SCXW113170034 BCX0">ertical, Flow</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="5" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 17.7565%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-layout-margin,</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-layout-margin-top</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW113170034 BCX0"><span class="SCXW113170034 BCX0"> </span>  
</span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-layout-margin-bottom</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="SCXW113170034 BCX0" data-celllook="0" style="width: 66.3713%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">특정 레이아웃의 마진 관련 속성으로 공간을 확보하기 위한 노드가 만들어졌다면,</span> <span class="NormalTextRun SCXW113170034 BCX0">이 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터로</span><span class="NormalTextRun SCXW113170034 BCX0"> 선택할 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0" style="width: 15.8484%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">V</span><span class="NormalTextRun SCXW113170034 BCX0">ertical, Flow</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="6" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol LastRow SCXW113170034 BCX0" data-celllook="0" role="rowheader" style="width: 17.7565%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-form-placeholder</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastRow SCXW113170034 BCX0" data-celllook="0" style="width: 66.3713%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼 레이아웃 사용시,</span> <span class="NormalTextRun SCXW113170034 BCX0">픽셀 기반의 자동 높이나 너비가 사용된 구획이 있는 경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">최소 크기를 보장하기 위해 만들어진 노드들을 선택할 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol LastRow SCXW113170034 BCX0" data-celllook="0" style="width: 15.8484%;"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">F</span><span class="NormalTextRun SCXW113170034 BCX0">orm </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></tbody></table>

</div></div>### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">9.2. 차일드</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">셀렉터</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0" data-ccp-parastyle="heading 2">컴비네이터</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">9</span><span class="NormalTextRun SCXW113170034 BCX0">.1</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">에서 언급된 것 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">처럼</span><span class="NormalTextRun SCXW113170034 BCX0">,</span> <span class="NormalTextRun SCXW113170034 BCX0">레이아웃 마다</span> <span class="NormalTextRun SCXW113170034 BCX0">자식 컨트롤을 렌더링 하기 위해 만들어 내는 노드의 형태가 각기 다를 수 있습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">그러므로</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">차일드</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컴비네이터</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">(&gt;)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 사용할 때 주의가 필요합니다.</span><span class="NormalTextRun SCXW113170034 BCX0"> </span></span> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">예를 들어 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">container.group</span><span class="NormalTextRun SCXW113170034 BCX0">-a > .cl-layout > .cl-control</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">은 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">group-a</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 클래스를 가진 컨테이너의 레이아웃이 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">XY</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이거나 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">폼</span> <span class="NormalTextRun SCXW113170034 BCX0">레이아웃</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">으로 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">구성 되어</span><span class="NormalTextRun SCXW113170034 BCX0"> 있을 때에는 모든 자식 컨트롤의 노드를 선택하게 되지만,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컨텐트</span><span class="NormalTextRun SCXW113170034 BCX0"> 노드</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">(</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">`.cl-layout-content`)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">나</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> **레이아웃 래퍼 노드**</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">(</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">`.cl-layout-wrap`)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 필요로 하는 레이아웃</span></span><span class="TextRun Footnote BlobObject DragDrop SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="Superscript SCXW113170034 BCX0" data-fontsize="11">(`버티컬 레이아웃이나 플로우 레이아웃 등`)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">으로</span><span class="NormalTextRun SCXW113170034 BCX0"> 구성되어 있을 때는 자식 컨트롤 노드를 선택할 수 없게 됩니다.</span></span> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">이 문제를 해결하려면,</span> <span class="NormalTextRun SCXW113170034 BCX0">그룹의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">childCombinatorClass</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 속성을 사용하십시오:</span></span> <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="SCXW113170034 BCX0"><span class="WACImageContainer NoPadding BlobObject SCXW113170034 BCX0" role="presentation">![스크린샷이(가) 표시된 사진

자동 생성된 설명](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/embedded-image-1yekysa8.png)</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

<span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">차일드</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컴비네이터</span><span class="NormalTextRun SCXW113170034 BCX0"> 클래스</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">를 지정하면,</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">직계 자식 컨트롤</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 및 직계 해당 컨트롤을 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">감싸는 의</span> </span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">레이아웃 래퍼 노드</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">직계 부모 노드</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">에 지정한 클래스</span> <span class="NormalTextRun SCXW113170034 BCX0">명이 클래스</span> <span class="NormalTextRun SCXW113170034 BCX0">명으로 추가됩니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">위의 예시에서는 </span><span class="NormalTextRun SCXW113170034 BCX0">“</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">xzone</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">”</span><span class="NormalTextRun SCXW113170034 BCX0"> 이라는 값을 주었고,</span> <span class="NormalTextRun SCXW113170034 BCX0">이제 </span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="none" lang="EN-US" style="color: rgb(224, 62, 45);" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">xzone</span><span class="NormalTextRun SCXW113170034 BCX0"> > .cl-control</span></span>`<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SCXW113170034 BCX0"> 룰을 이용하여 부모 그룹의 레이아웃 구성이나 설정과 무관하게 항상</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">childCombinatorClass</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 값이 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">“</span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">xzone</span><span class="NormalTextRun SCXW113170034 BCX0">”</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">인 </span><span class="NormalTextRun SCXW113170034 BCX0">그룹</span><span class="NormalTextRun SCXW113170034 BCX0">들</span><span class="NormalTextRun SCXW113170034 BCX0">의 직계 자식 컨트롤을 선택할 수 있게 됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">차일드</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컴비네이터</span><span class="NormalTextRun SCXW113170034 BCX0"> 클래스는 직계 자식 컨트롤을 선택하기 위한 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span><span class="NormalTextRun SCXW113170034 BCX0"> 사용하기 의도되었기 때문에,</span> <span class="NormalTextRun SCXW113170034 BCX0">해당 클래스 이름만을 대상으로 하는 룰 블록을 작성해서는 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">안됩니다</span><span class="NormalTextRun SCXW113170034 BCX0">. 예를 들어 아래와 같이 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">차일드</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">컴비네티엍</span><span class="NormalTextRun SCXW113170034 BCX0"> 클래스 이름인 "</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">xzone"</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">자체를 대상으로 하는 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">룰셋을</span><span class="NormalTextRun SCXW113170034 BCX0"> 작성하는 것은 이 가이드라인에 </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">위배 됩니다</span><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"> </span>

```css
.xzone { 
  /* 차일드 컴비네이터 클래스 자체를 대상으로  
     룰 블록을 작성하여서는 아니됩니다. */ 
  
  color : red; 
} 

/* 아래와 같이 차일드 컴비네이터 클래스 이름은 
반드시 직계 자식을 선택하는 
차일드 컴비네이터와 조함하여 사용해야 합니다. */ 
.xzone > .cl-control { 
  color: red; 
} 
```

## <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">9.3. 기타 확장 퍼블리싱 포인트</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<div class="OutlineElement Ltr SCXW113170034 BCX0" id="bkmrk-%EC%85%80%EB%A0%89%ED%84%B0%C2%A0-%EC%84%A4%EB%AA%85%C2%A0-.cl-aside%C2%A0-"><div class="TableContainer Ltr SCXW113170034 BCX0"><table aria-rowcount="3" border="1" class="Table Ltr TableWordWrap SCXW113170034 BCX0" data-tablelook="1184" data-tablestyle="MsoTableGrid" dir="ltr"><thead><tr aria-rowindex="1" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstRow FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">셀렉터</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="FirstRow LastCol SCXW113170034 BCX0" data-celllook="0" role="columnheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">설명</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></thead><tbody class="SCXW113170034 BCX0"><tr aria-rowindex="2" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">.</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">cl-aside</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol SCXW113170034 BCX0" data-celllook="0"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">컨테이너</span><span class="NormalTextRun SCXW113170034 BCX0">(그룹)</span><span class="NormalTextRun SCXW113170034 BCX0"> 내에서 컨트롤을 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">플롯시키는</span> </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">API</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 사용했을 때,</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">플로팅</span><span class="NormalTextRun SCXW113170034 BCX0"> 영역을 담당하는 레이어 노드를 얻을 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr><tr aria-rowindex="3" class="TableRow SCXW113170034 BCX0" role="row"><td class="FirstCol LastRow SCXW113170034 BCX0" data-celllook="0" role="rowheader"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0">.cl-global-aside</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td><td class="LastCol LastRow SCXW113170034 BCX0" data-celllook="0"><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">다이얼로그,</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">콤보박스의</span> <span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">드랍다운</span><span class="NormalTextRun SCXW113170034 BCX0"> 선택 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">상자등</span><span class="NormalTextRun SCXW113170034 BCX0">,</span> <span class="NormalTextRun SCXW113170034 BCX0">전역적으로 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">플로팅되는</span><span class="NormalTextRun SCXW113170034 BCX0"> 영역을 담당하는 레이어 노드를 얻을 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

</td></tr></tbody></table>

</div></div>## <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1">10. 제한 보증</span><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 1"> 및 퍼블리싱 포인트 추가 요청</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true,"335559685":596,"335559991":596}"> </span>

### <span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">10.1. 퍼블리싱 포인트 추가 요청</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">적절한 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">**퍼블리싱 포인트**(`적합한 서브 스타일러 및 서브 스타일러 셀렉터`)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0"> 또는 </span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">**컨트롤 개인화 포인트**(`컨트롤의 동작이나 형태를 구체적으로 지시하는 속성`)</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">의 부재로 인해 </span><span class="NormalTextRun SCXW113170034 BCX0">의도한 </span><span class="NormalTextRun SCXW113170034 BCX0">퍼블리싱</span><span class="NormalTextRun SCXW113170034 BCX0">의 구현이</span><span class="NormalTextRun SCXW113170034 BCX0"> 불가</span><span class="NormalTextRun SCXW113170034 BCX0">능</span><span class="NormalTextRun SCXW113170034 BCX0">한 </span><span class="NormalTextRun SCXW113170034 BCX0">경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">이러한 </span><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">확장점</span><span class="NormalTextRun SCXW113170034 BCX0"> 추가</span><span class="NormalTextRun SCXW113170034 BCX0">를</span> <span class="NormalTextRun SCXW113170034 BCX0">토마토 시스템에 요청할 수 있습니다.</span> <span class="NormalTextRun SCXW113170034 BCX0">토마토 시스템은 요청된 확장점의 타당성에 따라 </span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">퍼블리싱 포인트</span></span>**<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">를 추가하거나 개선할 수 있습니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{}"> </span>

### <span class="EOP SCXW113170034 BCX0" data-ccp-props="{}">10.2. </span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0" data-ccp-parastyle="heading 2">가이드라인 위반 및 귀책 사유</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"134245418":true}"> </span>

<span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">불가피하게 스타일링 </span></span><span class="TextRun Underlined SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">가이드라인을 위반</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SCXW113170034 BCX0">한 경우,</span> <span class="NormalTextRun SCXW113170034 BCX0">클라이언트는</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="EN-US" xml:lang="EN-US"><span class="NormalTextRun SCXW113170034 BCX0"> eXBuilder6</span></span><span class="TextRun SCXW113170034 BCX0" data-contrast="auto" lang="KO-KR" xml:lang="KO-KR"><span class="NormalTextRun SpellingErrorV2Themed SCXW113170034 BCX0">를</span><span class="NormalTextRun SCXW113170034 BCX0"> 업데이트 할 때마다 이를 검수하여야 </span><span class="NormalTextRun SCXW113170034 BCX0">하여야 하며,</span> <span class="NormalTextRun SCXW113170034 BCX0">이로 인한</span> <span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">문제</span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0">들은</span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113170034 BCX0"> 클라이언트의</span><span class="NormalTextRun SCXW113170034 BCX0"> 귀책사유로 취급됩니다.</span></span><span class="EOP SCXW113170034 BCX0" data-ccp-props="{"335551550":6,"335551620":6}"></span>

# 웹 접근성 적용 가이드

## 1. 개요

본 가이드는 웹 접근성 평가지표를 준수하는 웹 응용프로그램을 개발하기 위해 eXbuilder6에서 지원하는 기능들을 설명합니다. 웹 접근성 평가지표는 2017 년 정보접근성 지킴이 및 멘토 양성교육의 교재를 근거로 하고 있으며 가이드 내용은 지속적으로 보완 및 수정될 수 있습니다.

## 2. 지표 별 적용가이드

### 2.1. 적절한 대체 텍스트 제공

(적절한 대체 텍스트 제공) 텍스트 아닌 콘텐츠는 그 의미나 용도를 이해할 수 있도록 대체 텍스트를 제공하고 있다.

준수기준 : 의미 있는 텍스트가 아닌 콘텐츠에 그 의미나 용도를 동등하게 인식할 수 있는 적절한 대체 텍스트를 제공해야 한다.

주의사항 : 컨트롤 속성의 tooltip 으로 표현되는 title 속성은 대체텍스트로 인정되지 않으며 title 속성의 값이 alt 속성과 동일한 내용일 경우 스크린리더에 의해 내용이 중복으로 인식되어 사용자에게 불편을 주게 되므로 alt 와 tooltip 속성은 구분해서 사용해야 한다.

#### 2.1.1. 텍스트 아닌 콘텐츠에 대한 대체 텍스트 제공 

**1) 시각적으로 인지가 가능한 이미지 텍스트에 이미지와 동등한 정보를 alt 속성을 통해 제공한다**

- 이미지 컨트롤의 alt 속성을 사용하여 대체 텍스트를 제공한다

&lt;그림 1. 이미지 컨트롤의 alt 속성&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/9ecimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/9ecimage.png)

- <span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">alt </span><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">속성 사용 시 다음과 같은 결과가 나타난다</span>

&lt;소스 1. alt 속성 사용 결과&gt;

```xml
<img style="width: 100%; height: 100%; display:block" data-ndid="a5b925f3-879d-9618-20f9-
6ee7b143ba95" alt="도움말" src="img/bullet_help.png"> 
```

**2) 이미지맵의 img, area 요소에 alt 미정의 오류인 경우**

\[3.6.1.1 이미지맵 처리\] 예제 참조

**3) longdesc 파일이 없는 경우**

- longdesc 속성은 미지원

**4) 의미 있는 이미지가 배경이미지로 제공되었으나 대체 콘텐츠가 제공되지 않은 경우**

- 정보를 담고 있는 의미 있는 이미지에 해당 이미지의 정보를 alt 속성을 통해 설정할 수 있다.

<p class="callout danger">배경 이미지에는 alt 속성이 사용 불가합니다. eXbuilder6에 맞춰 작성이 필요합니다.</p>

\[3.1.1.1 대체 텍스트 처리\] 예제 참조

<span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">&lt;그림 2. 의미 있는 이미지&gt;   
</span></span>

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/1d2image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/1d2image.png)

- <span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"> 의미 있는 이미지에 대체 텍스트를 제공한 결과를 확인할 수 있다 </span></span>

<span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"> </span></span><span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">&lt;소스 2. 기호에 대한 대체 콘텐츠&gt;   
</span></span>

```xml
<img style="width: 100%; height: 100%; display:block" data-ndid="db9b281b-fb2e-bb29-e4bd0f5ca6485061" 
  alt="펼치기" src="images/btn_grid_add.gif"> 
 
<img style="width: 100%; height: 100%; display:block" data-ndid="83fea303-7c13-acf6-4d329efe01811891" 
  alt="접기" src="images/btn_grid_delete.gif"> 
```

**<span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">5) 특수문자 또는 기호 등으로 상승/하락, 상한/하한, 더보기 등의 정보를 제공하거나 ASCII 심벌 기호를 이용하여 얼굴 형상을 표현하거나, 한글 자음 또는 모음을 나열하여 감정을 표현하는 문자 이모티콘을 심벌 또는 문자로만 나열하여 제공한 경우</span></span>**

- <span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">alt 속성을 이용하여 순위 정보 또는 주가의 상승 및 하락에 대한 내용을 나타낼 수 있다 Alt 속성은 &lt;img&gt;요소에만 사용 가능합니다. eXbuilder6에 맞춰 변경해야 합니다. 하단 소스는 &lt;img&gt;의 대체텍스트 제공 방법을 나타냅니다.</span></span>

<span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">\[3.1.1.1 대체 텍스트 처리\] 예제 참조</span></span>

&lt;소스 3. alt 에서의 특수기호 사용&gt;

```xml
<img style="width:100%; height:100%; display:block" data-ndid="8665ff9d-768d-cc3-70657213ae193645" 
  alt="상한↑" src="img/expand.png"> 
```

**<span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">6) 이미지 요소에 IR 기법 제공시 display:none 또는 visibility:hidden 속성을 사용한 경우 </span></span>**

- <span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">display: none 이나 visibility:hidden 을 사용하지 않고 포지셔닝 기법으로 접근성 있게 대체 텍스트를 제공할 수 있다</span></span>
- overflow : hidden 과 이미지 요소의 위치를 변경하여 해결이 가능하다

<span lang="EN-US"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">&lt;그림 3. IR 기법 제공을 위한 이미지 컨트롤 배치&gt; </span></span>

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/QfQimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/QfQimage.png)

&lt;그림 4. 이미지 컨트롤 앵커&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/JS1image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/JS1image.png)

&lt;그림 5. 포지셔닝 기법 사용&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/xQZimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/xQZimage.png)

- 앵커와 overflow 속성을 지정하여 화면에서 벗어나 사용자에게 보이지 않지만 다음과 같은 결과를 확인할 수 있다

&lt;소스 4. overflow:hidden 지정 결과&gt;

```xml
<div class="cl-control cl-image" 
  style="overflow:hidden;position:absolute;top:74px;left:300px;width:217px;height:259px" 
  data-ndid="93d46457-de49-df13-e497-3b1314e8fa50" role="img" tabindex="-1" 
  id="uuid-2a17266b-b77b-3155-c0e1-8a8a57461e36" ariadisabled="false">
  
<img style="width:100%;height:100%;display:block" data-ndid="723e4612ecb6-4ab0-0ee3-146487e85406"
  alt="" title="" src="theme/images/character.png"></div> 
```

#### 2.1.2. 텍스트 아닌 콘텐츠에 대한 대체 텍스트를 적절하게 제공 

<p class="callout info"> 대체텍스트를 제공하는 aria-label 속성이 무분별하게 사용되면 스크린리더 사용시 콘텐츠 탐색에 오류를 야기할 수 있다. </p>

- 의미없이 제공되는 aria-label=”” 과 title=”” 같이 빈 값으로 제공되는 속성은 스크린리더에 혼란을 줄 수 있기 때문에 eXbuilder6는 빈 값으로 설정된 tooltip이나 fieldLabel 속성은 aria-label이나 title속성으로 생성하지 않는다.

  
**1) 대체텍스트의 정보가 불충분하게 제공된 경우, 대체텍스트가 오타 또는 업데이트가 되지 않은 경우, 조직도, 도식 이미지, 차트 등 복잡한 이미지의 대체 텍스트는 단순 텍스트 제공 이상의 상호 관계, 수식, 흐름 등 충분한 설명을 제공해야 함**

\[3.1.1.1 대체 텍스트 처리\] 예제 참조

**2) 장식 또는 꾸밈의 목적으로 제공된 의미 없는 이미지(또는 배경이미지)에 대체텍스트를 제공한 경우, 이미지맵의 img 요소에 대체텍스트가 빈 값(alt=””) 또는 잘못 제공된 경우**

- 의미없이 제공되는 alt=”” 과 같이 빈 값으로 제공되는 속성은 스크린리더에 혼란을 줄 수 있기 때문에 이미지컨트롤의 alt 속성을 빈 값으로 설정한 경우 이미지컨트롤은 alt 속성을 생성하지 않는다 의미가 없는 이미지는 alt=””로 대체텍스트 속성을 제공해야합니다.

**3) longdesc 연결되지 않는 경우**

- longdesc 속성은 미지원

**4) QR 코드, CCTV 등 실시간 영상 등에 대한 대체 텍스트는 콘텐츠의 용도나 목적을 알 수 있도록 제공**

- QR 코드를 이미지 컨트롤을 통해 나타내고 이미지 컨트롤의 alt, tooltip 속성을 통해 대체 텍스트를 제공할 수 있다   
    Title 속성으로는 대체텍스트가 인정되지 않습니다.

  
&lt;그림 6. 이미지에 표시된 QR 코드&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/2Jyimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/2Jyimage.png)

- alt 속성에 URL을 입력하여 대체텍스트를 제공할 수 있다

&lt;소스 5. QR 코드의 URL 입력&gt;

```xml
<img style="width:100%; height:100%; display:block" data-ndid="7192b9e6-6558-8304-dfc3-0d642bb4bbae"
  alt="http://m.site.naver.com/0q16M" title="http://m.site.naver.com/0q16M" src="img/QRCodeImg.jpg">
```

- HTML 스니펫 컨트롤을 사용하여 QR 코드 이미지에 사용한 목적이나 용도를 대체 텍스트로 제공하고 이동할 수 있는 링크도 제공할 수 있다

&lt;소스 6. HTML 스니펫으로 대체텍스트 제공&gt;

```xml
<a href = "http://m.site.naver.com/0q16M"> 
     <img src="img/QRCodeImg.jpg" alt="토마토시스템바로가기 QR 코드"> 
</a> 
```

\[3.6.1.2 &lt;a&gt; 태그 처리\] 예제 참조

**5) 자동 가입 방지 이미지(CAPTCHA)에 대하여 대체 텍스트를 빈 값이나 동등한 텍스트 정보로 제공하지 않은 경우 음성 등의 대체 수단을 제공해야 함**

- 이미지 컨트롤의 src를 CAPTCHA를 제공하는 서버 URL로 설정하면 이미지 컨트롤 내에서 CAPTCHA이미지를 표현할 수 있다.
- 추가로 음성듣기 버튼을 제공하여 대체 수단을 제공할 수 있다.

&lt;그림 7. 자동 가입 방지 이미지 대체텍스트 제공&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/Cjiimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/Cjiimage.png)

#### 2.1.3. 사용자가 등록한 텍스트가 아닌 콘텐츠에 대해 관리자가 대체 텍스트 등록을 유도하는 안내 또는 대체 수단 입력 기능을 제공 

- 사용자가 업로드한 이미지 파일을 화면에 출력하는 경우 대체 텍스트 값을 업로드하는 파일과 함께 입력 받아 화면에 출력할 때 alt에 값을 바인딩하여 표현할 수 있다

\[3.1.1.2 바인딩\] 예제 참조

#### 2.1.4. 기타 

**1) alt 와 title 값을 동일하게 제공한 경우**

- alt 속성에는 대체텍스트를 작성하고, tooltip 속성에는 부가 설명을 작성할 수 있다   
    (alt 와 tooltip 이 동일한 내용인 경우 리더에서 같은 내용이 두 번 읽히기 때문에 유의해야 한다)

\[3.1.1.1 대체 텍스트 처리\] 예제 참조

**2) 썸네일로 사용되는 단순 이미지가 해당 텍스트와 함께 링크에 포함될 경우 alt 중복설명 제공된 경우, 링크를 포함하며 텍스트 없이 단독으로 제공되는 이미지에 &lt;a title=”설명”&gt;은 제공되고 있으나 이미지의 alt를 빈 값으로 제공한 경우**

\[3.6.1.2 &lt;a&gt; 태그 처리\] 예제 참조

**3) 플래쉬로 제작된 콘텐츠의 대체텍스트**

- 해당 없음

### 2.2. 자막 제공

(자막 제공) 멀티미디어 콘텐츠에는 자막, 원고 또는 수화를 제공해야 한다.

준수기준 : 영상, 음성 등 멀티미디어 콘텐츠를 동등하게 인식할 수 있는 자막, 원고 또는 수화를 제공해야 한다

#### 2.2.1. 멀티미디어 콘텐츠에 자막, 원고, 수화 중 하나 이상의 대체 수단을 제공 

**1) 멀티미디어 콘텐츠에 대한 대체수단을 제공하지 않은 경우**

- 디자인 편집기에 비디오 컨트롤을 이용하여 멀티미디어 콘텐츠를 배치할 수 있다

&lt;그림 8. src 속성 지정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/hGqimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/hGqimage.png)

위의 속성을 지정하면 다음과 같은 결과가 나타난다.

&lt;소스 7. 비디오의 src 속성 설정&gt;

```xml
<video class="cl-media" style="width:100%; height:100%" data-ndid="bec07beb-af23-c164-
74ba-7064db111783" src="clx/2019/R-34/data/testVideo.mp4" tabindex="0"></video>
```

- 읽을 수 있는 자막은 아웃풋컨트롤과 혼합된 UDC를 개발하여 표시할 수 있다.
- 비디오 컨트롤과 혼합하여 사용하는 아웃풋 컨트롤에 ariaLive 속성을 사용하여 자막을 실시간으로 인식할 수 있다.
- 별도의 버튼(자막 표시/숨김)을 사용하여 자막 표시상태를 수정할 수 있게 한다.
- 자막이 표시되지 않을 경우 아웃풋 컨트롤의 ariaLive속성을 none(default)로 설정한다.(aria-live : 실시간으로 내용을 갱신하여 스크린리더에서 음성 피드백으로 알립니다. 값으로 polite, assertive, off(default)를 설정할 수 있으며 갱신하는 내용의 중요도에 따라 선택합니다.)

&lt;그림 9. 리더로 읽을 수 있는 자막 컨트롤&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/4DBimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/4DBimage.png)

**2) 음성이 없는 동영상(시각적 정보만 제공)에 대체수단이 없는 경우(ppt, 슬라이드쇼, 동영상 등)**

- 비디오컨트롤 또는 HTML 오브젝트를 이용한 UDC를 개발하여 제공할 수 있다

**3) 배경음만 재생되는 단순 동영상에 대체수단이 없는 경우**

- 영상의 설명을 요약하여 아웃풋 컨트롤 또는 HTML 스니펫 컨트롤로 제공할 수 있다

**4) 파일로 제공되는 영상, 음성 콘텐츠에 대체수단이 제공되지 않은 경우**

\[3.6.1.2 &lt;a&gt; 태그 처리\] 예제 참조

#### 2.2.2. 멀티미디어 콘텐츠에 대한 대체 수단의 내용을 적절하게 제공 

**1) 멀티미디어 콘텐츠의 내용을 일부 누락하거나 요약하여 제공하여서는 안됨, 멀티미디어 콘텐츠에 대한 대체 수단 제공 방식이 적절하지 않은 경우 오류**

- 영상의 설명을 요약하여 아웃풋 컨트롤 또는 HTML 스니펫 컨트롤로 제공할 수 있다

#### 2.2.3. 사용자가 등록한 멀티미디어 콘텐츠에 대해 관리자가 대체 수단 등록을 유도하는 안내 또는 대체 수단 입력 기능을 제공 

**1) 멀티미디어 콘텐츠에 대한 대체 수단 제공 방식이 적절하지 않은 경우 오류**

- 해당 없음

### 2.3. 색에 무관한 콘텐츠 인식 

(색에 무관한 콘텐츠 인식) 콘텐츠는 색에 관계없이 인식될 수 있어야 한다.

준수기준 : 색을 배제하여도 인식할 수 있는 콘텐츠를 제공해야 한다

- 쉘 컨트롤을 통해 차트를 제공할 때 차트의 표현은 색상에만 의존하지 않고 무늬 등을 통해 구분할 수 있도록 제공되어야 한다

### 2.4. 명확한 지시 사항 제공 

(명확한 지시 사항 제공) 지시사항은 모양, 크기, 위치, 방향, 색, 소리 등에 관계없이 인식될 수 있어야 한다.

준수기준 : 지시 사항 정보를 특정 감각에 의존하지 않고 다양한 감각을 통해 용도나 목적을 이해할 수 있도록 제공해야 한다

#### 2.4.1. 색, 크기, 모양, 방향 등 지시사항을 시각정보 외에 별도 안내 내용과 함께 제공 

- 아웃풋 컨트롤을 배치하여 value 속성을 통해 지시사항에 대해 상세하게 작성할 수 있다

\[3.3.1 입력 계열 컨트롤의 레이블 활용 가이드\] 참조

#### 2.4.2. 소리 등 지시사항을 청각정보 외에 별도 안내내용과 함께 제공 

\[2.4.1 색, 크기, 모양, 뱡향 등 지시사항을 시각정보 외에 별도 안내 내용과 함께 제공\] 참조

### 2.5. 텍스트 콘텐츠의 명도 대비 

(텍스트 콘텐츠의 명도 대비) 텍스트 콘텐츠와 배경 간의 명도 대비는 4.5 대 1 이상이어야 한다.

준수기준 : 내비게이션(메뉴) 및 본문 콘텐츠에서 텍스트의 명도 대비가 4:5:1 이상 이거나, 18pt 또는 굵은 14pt 이상에서 3:1 이상이어야 한다

#### 2.5.1. 일반 텍스트 또는 이미지 텍스트의 명도 대비는 3:1 

- 콘텐츠의 명도는 Properties의 ‘스타일’ 탭에서 색상을 수정하여 대비를 만족할 수 있도록 할 수 있다

### 2.6. 자동 재생 금지 

(자동 재생 금지) 자동으로 소리가 재생되지 않아야 한다.

준수기준 : 배경음 사용하지 않았거나 3 초 이내 또는 바로 정지 할 수 있는 배경음 콘텐츠를 사용해야 한다

- 자동으로 재생되는 경우, 비디오 컨트롤의 displayControl 속성을 true 로 설정하면 재생을 멈추거나 소리를 끌 수 있는 기능을 표시할 수 있다

&lt;그림 10. 비디오 컨트롤의 조작 기능 표시&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/aGpimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/aGpimage.png)

### 2.7. 콘텐츠 간의 구분 

(콘텐츠 간의 구분) 이웃한 콘텐츠는 구분될 수 있어야 한다.

준수기준 : 이웃한 콘텐츠가 테두리, 구분선, 서로 다른 무늬 등을 이용하여 시각적으로 구분되도록 제공되어야 한다

#### 2.7.1. 이웃한 콘텐츠를 테두리를 이용하여 구분 

- 이웃한 콘텐츠를 아래 1 가지 방법 이상으로 구분하지 않은 경우 테두리를 이용하여 구분

1. 1. 컨트롤의 보더 스타일을 이용하여 구분함
    2. 콘텐츠 사이에 시각적인 구분선을 삽입하여 구분함
    3. 서로 다른 무늬를 이용하여 구분함
    4. 콘텐츠 배경색 간의 명도대비(채도)를 달리하여 구분함
    5. 줄 간격 및 글자 간격을 조절하여 구분함
    6. 기타 콘텐츠를 시각적으로 구분할 수 있는 방법 등을 이용하여 구분함

**1) 이웃한 콘텐츠는 서로 같은 수준의 콘텐츠로 저 시력 사용자도 구분할 수 있을 정도로 구분해주는 것을 권장, 테두리, 구분 선, 콘텐츠 배경 색 간의 명도 대비, 기타 시각적으로 구분할 때 구분을 위한 색과 배경색의 명도 대비가 4.5:1 이상이 되도록 하는 것을 권장**

- 각 컨트롤의 Properties의 ‘스타일’ 탭에서 ‘border’, ‘background-color’ 등의 속성을 수정하여 구분할 수 있다
- 폼 레이아웃의 구분선을 설정할 경우, Properties의 ‘레이아웃’ 탭에서 설정할 수 있다

&lt;그림 11. 폼레이아웃과 HTML 스니펫 컨트롤의 border 스타일&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/bPlimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/bPlimage.png)

- 폼레이아웃을 선택한 뒤 Properties의 ‘레이아웃’ 탭에서 구분선의 스타일을 설정할 수 있다
- 컨트롤의 border는 ‘스타일’ 탭의 border 속성에서 설정할 수 있다

&lt;그림 12. 폼 레이아웃 구분선 스타일 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/05vimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/05vimage.png)

### 2.8. 키보드 사용 보장 

(키보드 사용 보장) 모든 기능은 키보드만으로도 사용할 수 있어야 한다.

준수기준 : 모든 기능이 키보드로 접근 및 운용 가능하도록 제공되어야 한다

#### 2.8.1. 마우스로 제어할 수 있는 요소를 키보드로 제어 가능 

**1) 마우스 이벤트만 적용된 경우**

- eXbuilder6의 컨트롤은 마우스 이벤트와 대응되는 키보드 이벤트를 제공한다

 &lt;표 1. 컨트롤의 마우스, 키보드, 포커스 이벤트&gt;

<table border="0" cellpadding="0" cellspacing="0" class="TableGrid" id="bkmrk-%EC%BB%A8%ED%8A%B8%EB%A1%A4-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B9%84%EA%B3%A0-%C2%A0-%EB%A7%88%EC%9A%B0%EC%8A%A4-%ED%82%A4%EB%B3%B4%EB%93%9C" style="width: 802px; margin-left: 1.1pt; border-collapse: collapse; height: 1109.38px;" width="595"><tbody><tr style="height: 24.8625px;"><td style="width: 169.25px; border-top: 1pt solid black; border-right: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-bottom: none; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 24.8625px;" valign="bottom" width="121">**<span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'; color: black; mso-color-alt: windowtext;">컨트롤 </span>**

</td><td colspan="3" style="width: 307.8px; border-top: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; border-image: initial; border-left: none; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 24.8625px;" valign="top" width="163">**<span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'; color: black; mso-color-alt: windowtext;">이벤트 </span>**

</td><td style="width: 358.8px; border-top: 1pt solid black; border-left: none; border-bottom: none; border-right: 1pt solid black; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 24.8625px;" valign="bottom" width="311">**<span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'; color: black; mso-color-alt: windowtext;">비고 </span>**

</td></tr><tr style="height: 26.2px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 26.2px;" valign="top" width="121"><span lang="EN-US" style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi;"> </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 26.2px;" valign="top" width="54">**<span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'; color: black; mso-color-alt: windowtext;">마우스 </span>**

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 26.2px;" valign="top" width="54">**<span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'; color: black; mso-color-alt: windowtext;">키보드 </span>**

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 26.2px;" valign="top" width="54">**<span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕'; color: black; mso-color-alt: windowtext;">포커스 </span>**

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; background: rgb(217, 217, 217); padding: 0cm 1.9pt 0cm 5.35pt; height: 26.2px;" valign="top" width="311"><span lang="EN-US" style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi;"> </span>

</td></tr><tr style="height: 115.925px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 115.925px;" width="121"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">HTML </span><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">스니펫 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 115.925px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 115.925px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 115.925px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 115.925px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">HTML </span><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">스니펫은 포커스를 가지지 않으나 내부 태그 요소는 포커스를 가질 수 있음<span lang="EN-US">. </span></span>

<span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">단<span lang="EN-US"> tabIndex </span>속성을 통한 임의 포커스 순서 제어는 지원하지 않고 태그의 순서대로만 포커스가 이동함<span lang="EN-US">. </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">HTML </span><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">오브젝트 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">MDI </span><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">폴더 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">헤더영역이 포커스를 가짐</span><span style="font-size: 10.5pt; mso-bidi-font-size: 11.0pt; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"> </span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">탭 폴더 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">헤더영역이 포커스를 가짐 </span>

</td></tr><tr style="height: 46.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.8625px;" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">그룹 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.8625px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.8625px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.8625px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.8625px;" valign="top" width="311"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">그룹은 포커스를 가지지 못하나 포함한 컨트롤은 포커스를 가질 수 있음 </span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">그리드 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">아웃풋 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">tabIndex</span><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">를 지정하면 포커스를 받을 수 있음 </span>

</td></tr><tr style="height: 44.4px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 44.4px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">인풋박스 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 44.4px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 44.4px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 44.4px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 44.4px;" width="311"><span lang="EN-US" style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">buttonFocusable </span><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">속성값이<span lang="EN-US"> true(</span>기본값<span lang="EN-US"> false)</span>인 경우 삭제 버튼도 포커스를 받을 수 있음</span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">넘버에디터 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">데이트인풋 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">마스크에디터 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">텍스트에리어 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 45.4px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 45.4px;" valign="top" width="121"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">서치인풋</span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 45.4px;" width="54"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">○</span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 45.4px;" width="54"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">○</span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 45.4px;" width="54"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">○</span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 45.4px;" width="311"><span lang="EN-US" style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">buttonFocusable </span><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">속성값이<span lang="EN-US"> true(</span>기본값<span lang="EN-US"> false)</span>인 경우 검색<span lang="EN-US">, </span>삭제 버튼도 포커스를 받을 수 있음</span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">리스트박스 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">링크드리스트박스 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">콤보박스 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">링크드콤보박스 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">체크박스 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">체크박스그룹 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 46.725px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.725px;" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">임베디드앱 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.725px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.725px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.725px;" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 46.725px;" valign="top" width="311"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">임베디드앱은 포커스를 가지지 못하나 포함한 컨트롤은 포커스를 가질 수 있음 </span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">임베디드페이지 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">다이얼로그</span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" width="54"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">○</span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" width="54"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">○</span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" width="54"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">○</span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" width="311"><span style="mso-ascii-font-family: '맑은 고딕'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: '맑은 고딕'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-bidi-font-style: italic;">다이얼로그 타이틀과 닫기 버튼도 포커스를 받을 수 있음</span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">이미지 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">버튼 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">라디오버튼 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">메뉴 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">트리 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">네비게이션바 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">캘린더 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">쉘 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">슬라이더 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">알림 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">아코디언 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">아코디언의 헤더영역이 포커스를 가짐 </span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">파일업로드 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">파일인풋 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.6625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">페이지인덱서 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.6625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr><tr style="height: 23.8625px;"><td style="width: 169.25px; border-right: 1pt solid black; border-bottom: 1pt solid black; border-left: 1pt solid black; border-image: initial; border-top: none; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="121"><span style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">프로그레스 </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">○ </span>

</td><td style="width: 102.6px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="54"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';">X </span>

</td><td style="width: 358.8px; border-top: none; border-left: none; border-bottom: 1pt solid black; border-right: 1pt solid black; padding: 0cm 1.9pt 0cm 5.35pt; height: 23.8625px;" valign="top" width="311"><span lang="EN-US" style="mso-hansi-font-family: '맑은 고딕'; mso-bidi-font-family: '맑은 고딕';"><span style="mso-spacerun: yes;"> </span></span>

</td></tr></tbody></table>

- mouseover 이벤트에 자바스크립트를 적용한 경우 대응될 수 있는 키보드 이벤트인 focus를 함께 적용한다

**2) 이미지 또는 초점을 받을 수 없는 요소에 onClick 이벤트가 적용된 경우, 이미지 또는 초점을 받을 수 없는 요소에 마우스 이벤트만 적용되어서는 안된다**

\[3.2.4 onclick 이벤트 및 onkeydown 이벤트\] 예제 참조

**3) a 요소에 href 속성이 제공되지 않아 키보드 접근 및 초점이 표시되지 않는 경우**

- href 가 포함된 a 요소를 HTML 스니펫 컨트롤 혹은 임베디드 페이지를 통하여 제공할 수 있다
- HTML 스니펫 컨트롤의 value 속성에 a 태그를 작성한 후 tab 키를 통해 초점을 이동할 수 있다

&lt;소스 8. 임베디드 페이지에 표시할 HTML - src&gt;

```xml

<html>
<head>
<meta charset="UTF8">
<title>토마토시스템</title>
</head>
<body>
    <a href="http://tomatosystem.co.kr/solution/#">토마토시스템</a>
</body>
</html>
```

&lt;그림 13. 임베디드 페이지로 a 태그 구현&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/VPDimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/VPDimage.png)

&lt;그림 14. 임베디드 페이지 구현 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/AY6image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/AY6image.png)**4) 키보드 포커스가 필요한 플래쉬 콘텐츠의 wmode를 transparent, oqaque 로 제공하는 경우**

- HTML 오브젝트 혹은 임베디드 페이지를 통해 플래쉬를 제공할 수 있다

&lt;그림 15. HTML 오브젝트로 플래쉬 구현&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/WiLimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/WiLimage.png)

이때, 플래쉬 콘텐츠의 wmode 속성을 transparent, oqaque 로 설정하지 않는다

&lt;소스 9. wmode의 transparent, oqaque 오류 예시&gt;

```xml
<object type="application/x-shockwave-flash" data="../img/aq8275.swf" width="100%" height="auto"> 
     <param name="movie" value="../img/aq8275.swf" /> 
     <param name='wmode' value='transparent' /> 
     <param name='allowScriptAccess' value='always' /> </object> 
```

**5) 키보드 포커스가 필요 없는 플래쉬 콘텐츠의 wmode를 window 로 제공하는 경우**

- 플래쉬의 wmode 속성을 window 로 제공하지 않는다

&lt;소스 10. wmode의 window 오류 예시&gt;

```xml
<object type="application/x-shockwave-flash" data="../img/aq8275.swf" width="100%" height="auto"> 
     <param name="movie" value="../img/aq8275.swf" /> 
     <param name='wmode' value='transparent' /> 
     <param name='allowScriptAccess' value='always' /> </object> 
```

**6) 스크롤 되는 콘텐츠는 키보드로도 이용할 수 있어야 함**

- 스크롤이 있는 컨트롤에 포커스가 있는 상태일 때 방향키를 사용하여 스크롤의 위치를 변경할 수 있다

\[3.2.1. 초점 제어\] 예제 참조

&lt;그림 16. vertical-layout 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/SSyimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/SSyimage.png)

&lt;그림 17. vertical-layout 설정 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/GKQimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/GKQimage.png)&lt;그림 18. 그리드 컨트롤의 스크롤&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/1JZimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/1JZimage.png)

- 그리드 컨트롤은 화살표 키를 사용하여 행 이동을 통해 스크롤을 이동할 수 있다 7) select에 onChange를 사용하여 select option 값을 선택하는 것만으로 페이지가 새롭게 변경되는 경우

\[3.2.3 컨트롤의 내부 이동 단축키\] 예제 참조

- 콤보박스의 selection-change 이벤트에 페이지가 새롭게 변경되도록 구현하는 것이 아니라, select에서 값 선택 후 버튼 컨트롤을 통해 이동될 수 있도록 구현한다
- 버튼 컨트롤을 클릭하면 하단의 임베디드 페이지 컨트롤을 통해 페이지가 이동할 수 있다

&lt;그림 19. 페이지 이동을 위한 컨트롤 배치&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/pD3image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/pD3image.png)

&lt;소스 11. 버튼 클릭했을 때 페이지 이동 이벤트&gt;

```javascript
/* 
 * "이동" 버튼에서 click 이벤트 발생 시 호출. 
 * 사용자가 컨트롤을 클릭할 때 발생하는 이벤트. 
 */
function onBtn1Click( /* cpr.events.CMouseEvent */ e) {
  /**  
  * @type cpr.controls.Button 
  */
  var btn1 = e.control;
  var ep = app.lookup("ep1");
  
  ep.src = "http://www.tomatosystem.co.kr";
}
```

위의 내용을 실행하면 다음과 같은 결과를 확인할 수 있다.

<div id="bkmrk--20"></div>&lt;그림 20. 페이지 이동 결과&gt;

<div id="bkmrk--19"></div>[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/dFNimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/dFNimage.png)

#### 2.8.2. 기타 

**1) 반복영역 건너뛰기 링크에 키보드 접근이 불가능한 경우**

- 디자인 특성상 건너뛰기 링크를 보이지 않도록 구현하는 경우에도 키보드 접근에 의해 초점을 받으면 건너뛰기 링크가 표시되어야 하므로 CSS를 사용하여 구현 가능하다

&lt;소스 12. 건너뛰기 링크 구현 예시&gt;

```xml
<a href="http://tomatosystem.co.kr/solution/#" 
  style="display: block; overflow: hidden; height: 1px; width: 1px; margin:0 -1px -1px 0;
  font-size:0; lineheight:0">토마토시스템</a>
```

 \[3.4.1 네비게이션바 컨트롤을 이용한 반복영역 건너뛰기\] 예제 참조

**2) onFocus=”this.blur();” 사용 오류**

- focus 이벤트에 app.lookup(ControlId).blur() API 를 사용하지 않는다

**3) 스크립트 사용으로 인한 키보드 함정에 빠진 경우**

- 메뉴를 제공하는 네비게이션 바는 키보드 방향키로 메뉴 간 이동을 제공하고 탭 키는 다른 컨트롤로 초점을 이동시켜 초점 이동이 메뉴에 갇히는 것을 방지한다

\[3.2.1 초점 제어\] 예제 참조

### 2.9. 초점 이동 

(초점 이동) 키보드에 의한 초점은 논리적으로 이동해야 하며 시각적으로 구별할 수 있어야 한다. 준수기준 : 운용 가능한 개체(링크, 버튼, 서식 등)들에 키보드로 접근 시 초점을 인지할 수 있고 논리적 순서로 이동되어야 한다

#### 2.9.1. 초점의 이동 순서를 논리적이고 일관성 있게 제공 

**1) 초점의 이동순서(문서구조)가 논리적이지 않으며 일관성이 없는 경우**

- 키보드의 접근 순서를 논리적 순서로 제공해야 하기 때문에 tabindex를 지정할 때 순차적으로 지정할 수 있도록 한다

<p class="callout info">tabindex는 팔레트 뷰의 도구(Tab Index)를 사용하면 편리하게 지정이 가능하다</p>

- 복합적인 구조를 가진 UI에서 tabIndex의 지정은 자칫 의도치 않게 논리적 모순이 발생할 수 있기 때문에 tabIndex 를 통한 초점 이동 보다는 컨트롤의 생성 순서를 조절하여 자동으로 초점이 이동 될 수 있도록 지정하는 것을 권장한다

<p class="callout info">UDC 로 구현된 컨트롤 내부의 tabIndex 와 UDC를 포함하는 외부 App의 tabIndex간의 모순 </p>

\[2.8.1 마우스로 제어할 수 있는 요소를 키보드로 제어 가능\] 참조

**2) 초점의 이동순서(로그인, 검색 등 기능을 담고 있는 콘텐츠)가 논리적이지 않으며 일관성이 없는 경우**

\[3.2.1 초점 제어\] 예제 참조

**3) 초점의 이동순서(제목과 콘텐츠가 분리됨)가 논리적이지 않으며 일관성이 없는 경우**

- Outline 뷰에서 컨트롤의 생성 순서를 논리적인 초점 이동 순서에 맞게 지정한다

\[3.2.1 초점 제어\] 예제 참조

**4) Tab 컨텐츠에서 제목과 내용이 display:none, block 으로 구분 되었을 때 초점이동이 논리적이지 않은 경우**

- TabFolder, MDIFolder 컨트롤의 TabItem 생성시, TabItem의 순서대로 초점이동이 가능하다 
    - 탭컨트롤은 좌/우 방향키로 탭버튼 간에 이동되고 선택된 탭아이템에서 탭키를 통해 탭 내부 컨텐츠로 이동한다
- 아코디언은 키보드 탭키를 통해 선형화된 순서로 초점이 이동한다 
    - 아코디언 타이틀 A -&gt; 아코디언 A 의 내부 컨텐츠 -&gt; 아코디언 타이틀 B -&gt; 아코디언 B 의 내부 컨텐츠
- 아코디언은 상/하 방향키를 통해 아코디언 타이틀 간의 초점이동이 가능하다

\[3.2.3 컨트롤의 내부 이동 단축키\] 예제 참조

&lt;그림 21. TabFolder 컨트롤의 TabItem 초점 이동&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/lBjimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/lBjimage.png)

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/g4pimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/g4pimage.png)

**5) 페이지 로딩 시 제공되는 화면을 가리는 레이어 팝업 또는 모달창**

<div id="bkmrk---app.opendialog%28%29%EB%A5%BC-">- app.openDialog()를 통하여 화면 전체를 가리는 다이얼로그(팝업)을 여는 경우 닫기 버튼을 별도로 두어 다이얼로그를 닫을 수 있도록 구현한다
- 다이얼로그를 닫을 수 있도록 1) 다이얼로그 Prop에서 headerClose를 true 로 설정한다. 2) 다이얼로그에서 headerClose 를 false 로 설정하였을 경우에는 다이얼로그를 닫을 수 있는 컨트롤을 추가하고, 다이얼로그를 닫을 수 있도록 app.close() 스크립트를 추가한다
- 다이얼로그를 열었을 때 다이얼로그 내 초점이동이 가능하도록 dialog.focus() 스크립트를 추가한다.

</div>&lt;소스 13. 다이얼로그 닫기 예제(1)&gt;

<div id="bkmrk--24"></div>```javascript
app.openDialog("appURI", { width: 400, height: 300, headerClose: true }, function(dialog) {
  dialog.ready(function(dialogApp) {
  //필요한 경우, 다이얼로그의 앱이 초기화 된 후, 앱 속성을 전달하십시오.
  });
  }).then(function(returnValue) {
  ;
});
```

<div id="bkmrk--25"></div>&lt;소스 14. 다이얼로그 닫기 예제(2)&gt;

```javascript
/* 
 * "Button" 버튼에서 click 이벤트 발생 시 호출. 
 * 사용자가 컨트롤을 클릭할 때 발생하는 이벤트. 
 */
function onButtonClick( /* cpr.events.CMouseEvent */ e) {
  /**  
  * @type cpr.controls.Button 
  */
  var button = e.control;
  app.close();
}
```

<div id="bkmrk-%2F%2A%C2%A0-1"></div><div id="bkmrk---%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%EB%98%90%EB%8A%94-%EA%B7%B8%EB%A6%AC%EB%93%9C-%ED%95%84%ED%84%B0-%EB%8B%A4%EC%9D%B4">- 다이얼로그 또는 그리드 필터 다이얼로그 열기 시 닫았을 경우, 열기 전 컨트롤에 초점이 이동할 수 있도록 구현한다

</div>&lt;소스 15. 팝업 닫기 후 초점 이동 예제&gt;

<div id="bkmrk--26"></div>```javascript
app.openDialog("appURI", {width : 400, height : 300, headerClose : true}, function(dialog){
  dialog.addEventListener("close", function(e){
  button.focus();
  });
});
```

<div id="bkmrk--27"></div>&lt;소스 16. 그리드 필터 팝업 닫기 후 초점 이동 예제&gt;

<div id="bkmrk--28"></div>```javascript
/*
 * 그리드에서 filterdialog-close 이벤트 발생 시 호출.
 * 필터팝업을 닫을때 발생하는 이벤트.
 */ 
function onGrdFilterdialogClose(/* cpr.events.CGridEvent */ e) {
  app.lookup("btnOpen").focus();
}
```

<div id="bkmrk-%2F%2A"></div>\[3.2.2 다이얼로그\] 예제 참조

**6) tabindex 속성을 이용하여 키보드 포커스의 순서를 강제로 변경하여 논리적인 순서가 순차적이지 않을 경우, 스크립트 사용으로 인한 비 논리적 이동 및 함정은 오류**

<div id="bkmrk-%C2%A0-6"> [3.2.1 초점 제어] 예제 참조 </div>#### 2.9.2. 초점 또는 키보드의 위치를 나타내는 요소를 시각적으로 표시 

**1) onFocus=”this.blur();” 사용 오류**

<div id="bkmrk---foucs-%EC%9D%B4%EB%B2%A4%ED%8A%B8%EC%97%90-blur%28%29-">- foucs 이벤트에 blur() API를 사용할 경우 초점이 강제로 사라지기 때문에 해당 스크립트 작성을 하지 않도록 한다

</div>**2) hideFocus 적용 시, outline:0, none 적용 시**

<div id="bkmrk---css%EB%A5%BC-%EC%88%98%EC%A0%95%ED%95%98%EC%97%AC-%EC%B4%88%EC%A0%90%EC%9D%98-%EB%9D%BC%EC%9D%B8%EC%9D%84-">- CSS를 수정하여 초점의 라인을 없애는 것이 아니라 초점이 시각적으로 표시될 수 있도록 한다
- 컨트롤의 초점 점선라인을 없애는 속성을 사용하지 않도록 한다

</div> &lt;소스 17. outline:0, none 오류 예제&gt;

<div id="bkmrk--29"></div>```javascript
.cl-checkbox.cl-focus .cl-checkbox-icon { 
  outline : none; 
} 
```

<div id="bkmrk--30"></div>**4) &lt;a&gt; 요소에 포함된 엘리먼트에 float, display, position 등의 속성이 적용된 경우**

<div id="bkmrk---html%EC%9D%84-%EC%9E%91%EC%84%B1%ED%95%98%EC%97%AC-html-%EC%8A%A4%EB%8B%88">- HTML을 작성하여 HTML 스니펫 또는 임베디드 페이지 컨트롤을 이용할 경우에는 &lt;a&gt; 요소에 float, display, position 등의 속성을 적용하지 않는다

</div>#### 2.9.3. 텍스트 등 운용할 수 있는 요소에 초점을 제공 

<div id="bkmrk---%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%98%90%EB%8A%94-%EC%B4%88%EC%A0%90%EC%9D%84-%EB%B0%9B%EC%9D%84-%EC%88%98-%EC%97%86%EB%8A%94">- 이미지 또는 초점을 받을 수 없는 요소에 자바스크립트 이벤트를 사용하여 특정 기능을 수행하도록 제공한 경우 마우스를 사용할 수 없는 환경에서 키보드만으로 해당 요소를 실행하는 것이 불가능하기 때문에 초점을 받을 수 있는 요소 혹은 컨트롤을 사용하여 제공하는 것을 권장한다

</div><div id="bkmrk-%C2%A0-13">[3.2.4 onclick 이벤트 및 onkeydown 이벤트] 예제 참조 </div>#### 2.9.4. 키보드 접근이 가능하여 초점을 제공 

**1) 이미지 또는 초점을 받을 수 없는 요소에 마우스 이벤트만 적용되어 있는 경우**

- 이미지 또는 초점을 받을 수 없는 컨트롤에 마우스 이벤트만 적용했을 경우에는 키보드 접근시에도 동일한 기능을 실행할 수 있도록 제공한다

ex) mouseenter 이벤트 제공 시 focus 이벤트도 함께 제공하거나 mouseleave 이벤트 제공 시 blur 이벤트도 함께 제공한다

\[3.2.4 onclick 이벤트 및 onkeydown 이벤트\] 예제 참조

**2) a 요소에 href 속성이 제공되지 않아 초점이 확인되지 않는 경우**

<div id="bkmrk---html-%EC%8A%A4%EB%8B%88%ED%8E%AB-%ED%98%B9%EC%9D%80-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-%ED%8E%98">- HTML 스니펫 혹은 임베디드 페이지 컨트롤을 이용하여 &lt;a&gt; 요소를 사용할 때는 반드시 href 속성을 제공하여 키보드 접근 및 초점이 표시될 수 있도록 한다

</div>### 2.10. 조작 가능 

(조작 가능) 사용자 입력 및 컨트롤은 조작 가능하도록 제공되어야 한다.

준수기준 : 웹 페이지에서 제공하는 모든 이웃한 컨트롤들은 개별적으로 선택하고 사용할 수 있도록 대각선 길이가 6.0mm 이상의 크기와 컨트롤의 안쪽 여백이 1 픽셀 이상을 갖도록 제공되어야 한다

#### 2.10.1. 컨트롤의 크기가 대각선으로 6.0mm 이상으로 제공 

- 컨트롤의 크기가 대각선으로 6.0mm 미만이 되지 않도록 컨트롤의 크기를 조정한다. 컨트롤 크기 조정은 Properties 뷰의 레이아웃에서 변경할 수 있다

&lt;그림 22. 컨트롤 크기 변경&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/uETimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/uETimage.png)

- 통상적으로 라디오 버튼 사이즈보다 작은 경우 오류로 분류된다

#### 2.10.2. 링크, 사용자 입력, 기타 컨트롤의 테두리 안쪽으로 1 픽셀 이상의 여백을 제공

- 링크, 사용자 입력, 기타 컨트롤의 테두리 안쪽으로 1 픽셀 이상의 여백을 주어 간섭이 없도록 제공해야 한다

### 2.11. 응답 시간 조절 

 (응답 시간 조절) 시간 제한이 있는 콘텐츠는 응답 시간을 조절할 수 있어야 한다. 준수기준 : 시간 제한이 있는 콘텐츠의 응답 시간을 조절할 수 있어야 한다

#### 2.11.1. 시간 제한이 있는 콘텐츠를 제어할 수 있는 수단을 제공 

**1) 로그아웃, 인증 요청 등 시간제한이 있는 콘텐츠에 남은 시간을 알려주지 않거나 제어할 수 있는 수단을 제공하지 않은 경우**

- 사용자가 로그인 후 제한 시간 또는 남은 시간을 알려줄 수 있도록 로딩 화면을 제공할 수 있다

&lt;그림 23. 로그인 후 잔여 세션시간&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/GUXimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/GUXimage.png)

**2) 페이지가 전환될 경우 이를 제어할 수 있는 수단을 제공하지 않은 경우**

- 페이지 내에 수동으로 갱신할 수 있는 버튼을 배치하거나 해당 페이지가 일정시간 이후 자동으로 갱신된다는 것을 알려 스스로 자동 갱신을 제어할 수 있도록 정지 또는 연장 수단을 제공한다

**3) 제한 시간이 있는 콘텐츠의 경우 해당 내용을 확인할 수 있는 수단 제공**

- 알림컨트롤은 불특정 하게 시스템이 사용자에게 알림 메시지를 출력할 수 있도록 제공하는 컨트롤이다.
- 알림메시지는 기본(default), 성공(success), 정보(info), 경고(warning), 위험(danger)의 타입을 가지며 정해진 시간(delay) 만큼 보인 후 화면에서 사라진다.
- 일정 시간이 지난 후 사라지는 알림메시지의 경우 사라진 알림 내용을 확인할 수 있는 알림방을 제공하거나 닫기 버튼을 제공하여 사용자가 임의로 메시지를 닫기 전까지 메시지를 화면에 유지시켜야 한다

<p class="callout info">알림방이란, 지난 알림 내용을 리스트 형태로 확인할 수 있는 영역을 뜻한다   
</p>

&lt;그림 24. 닫기 버튼을 제공하는 알림컨트롤&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/A0bimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/A0bimage.png)

- 알림컨트롤의 delay 속성을 충분히 설정하고 close 속성을 true 로 설정하면 각 알림메시지에는 닫기 버튼이 보여지고 닫기 버튼을 클릭하기 전까지 메시지를 유지시킬 수 있다

&lt;소스 18. 닫기 버튼을 제공하는 알림컨트롤&gt;

```javascript
 /*  
 * Body에서 init 이벤트 발생 시 호출.  
 * 앱이 최초 구성될 때 발생하는 이벤트 입니다.  
 */
function onBodyInit( /* cpr.events.CEvent */ e) {
    var notifier = new cpr.controls.Notifier("noti");
    notifier.close = true;
    notifier.delay = 9999999999;
    notifier.addEventListener("notify", function(e) {
        var noti = e.control; // 알림메시지가 출력되었을 때 메시지에 포커스 주기   
        setTimeout(function() {
            noti.focusItem(e.item);
        }, 1000);
    });
    app.getContainer().addChild(notifier, {
        "top": "20px",
        "right": "20px",
        "width": "300px",
        "height": "30px"
    });
}
```

&lt;그림 25. 알림방제공&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/BWuimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/BWuimage.png)

- 일정시간 후 알림메시지가 자동으로 사라지도록 알림컨트롤을 사용하는 경우 위와 같이 전체 알림메시지를 볼 수 있는 알림방을 제공해야 한다
- 알림방은 알림메시지가 보일 때 메시지 목록을 Array에 저장하고 있다가 알림방 목록 출력 이벤트가 발생했을 때 Array에 있는 내용을 출력하는 방식으로 구현이 가능하다

#### 2.11.2. 제한 시간을 해제 또는 연장하는 방법에 충분한 시간을 제공 

- 시간제한에 대한 연장은 연장수단에 도달하기까지 걸리는 부분에 대한 시간의 10 배로 제공해야 한다
- 현행에서는 시간제한에 대한 연장 또는 정지 방법에 대한 안내는 최소 20 초 이상 남아있는 상태에서 제공해야 웹 접근성을 준수한 것으로 본다

### 2.12. 정지 기능 제공 

(정지 기능 제공) 자동으로 변경되는 콘텐츠는 움직임을 제어할 수 있어야 한다. 준수기준 : 자동으로 변경되는 콘텐츠를 제어할 수 있도록 제공하여야 한다

#### 2.12.1. 시간에 따라 자동으로 변경되는 콘텐츠에 정지, 이전, 다음 기능을 제공 

- 자동으로 갱신되는 정보의 경우 정지 기능을 사용하여 충분한 시간을 보내고 정보를 이해할 수 있도록 제공해야 한다

&lt;그림 26. 자동으로 갱신되는 배너&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/GXuimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/GXuimage.png)

<div id="bkmrk---tab-%ED%82%A4%EB%A5%BC-%ED%86%B5%ED%95%B4-%EC%9D%B4%EB%8F%99-%EB%98%90%EB%8A%94-%EC%9E%AC%EC%83%9D">- tab 키를 통해 이동 또는 재생/정지 버튼에 포커스를 맞출 수 있으며, 엔터키를 눌러 동작할 수 있다

</div> &lt;소스 19. 시간에 따라 자동 변경되는 예시&gt;

<div id="bkmrk--36"></div>```javascript
/* 
 * Body에서 load 이벤트 발생 시 호출. 
 * 앱이 최초 구성된후 최초 랜더링 직후에 발생하는 이벤트입니다. 
 */
function onBodyLoad(e) {
  //일정 시간마다 색을 변경할 수 있도록 타이머를 설정한다. 
  setInterval(function() {
    var grp = app.lookup("grp");
    //다음 색상이 없으면 처음 색상으로 표시한다.   
    var ds = app.lookup("ds1");
    if (ds.getRowCount() == colorIdx) {
      colorIdx = 0;
    }
    var color = ds.getValue(colorIdx, "color");
    grp.style.css({
    "background-color": color
    });    
    colorIdx++;
  }, 3000);
}
```

&lt;소스 20. 마우스 포인터 진입 시 자동 변경 정지 예시&gt;

<div id="bkmrk--37"></div>```javascript
/* 
 * 그룹에서 mouseenter 이벤트 발생 시 호출. 
 * 마우스 포인터가 컨트롤 위에 진입할 때 발생하는 이벤트. 
 */
function onGrpMouseenter(e) {
  var grp = e.control;
  //타이머를 중지한다. 
  clearInterval(changeColor);
}
```

#### 2.12.2. 시간에 따라 자동으로 변경되는 콘텐츠를 키보드로 제어 가능 

<div id="bkmrk-%5B2.12.1-%EC%8B%9C%EA%B0%84%EC%97%90-%EB%94%B0%EB%9D%BC-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-">[2.12.1 시간에 따라 자동으로 변경되는 콘텐츠에 정지, 이전, 다음 기능을 제공] 참조 </div>### 2.13. 깜빡임과 번쩍임 사용 제한 

(깜빡임과 번쩍임 사용 제한) 초당 3~50 회 주기로 깜빡이거나 번쩍이는 콘텐츠를 제공하지 않아야 한다.

준수기준 : 초당 3~50 회 주기로 깜빡이거나 번쩍이는 콘텐츠를 제공하지 않았거나, 회피할 수 있는 방법을 사전에 알리고 제공하여야 한다

<div id="bkmrk-%C2%A0%EA%B9%9C%EB%B9%A1%EC%9E%84%EC%9D%98-%EC%A3%BC%EA%B8%B0%EC%99%80-%ED%81%AC%EA%B8%B0%2C-%EB%B3%80%ED%99%94%EC%9D%98-%EC%A0%95%EB%8F%84">- 깜빡임의 주기와 크기, 변화의 정도에 따라 사용자에게 피로감 혹은 발작이나 졸도 등을 유발할 수 있기 때문에 해당 콘텐츠는 제공하지 않아야 한다
- 깜빡임 혹은 번쩍임을 중단할 수 있는 수단만 제공하는 것뿐만 아니라 이 사항에 대해 미리 알려 중단 또는 회피할 수 있도록 해야 한다

</div><div id="bkmrk--38"></div>### 2.14. 반복 영역 건너뛰기 

<div id="bkmrk-%28%EB%B0%98%EB%B3%B5-%EC%98%81%EC%97%AD-%EA%B1%B4%EB%84%88%EB%9B%B0%EA%B8%B0%29-%EC%BD%98%ED%85%90%EC%B8%A0%EC%9D%98-%EB%B0%98%EB%B3%B5">(반복 영역 건너뛰기) 콘텐츠의 반복되는 영역은 건너뛸 수 있어야 한다. 준수기준 : 반복되는 영역을 건너뛸 수 있는 링크를 제공하여야 한다 </div>####  2.14.1. 건너뛰기 링크를 제공 

<div id="bkmrk-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%88%EB%8B%A4-%EB%B0%98%EB%B3%B5%EB%90%98%EB%8A%94-%EB%8C%80%EB%A9%94%EB%89%B4%EB%A5%BC-%EA%B1%B4%EB%84%88%EB%9B%B0%EC%96%B4">- 페이지마다 반복되는 대메뉴를 건너뛰어 본문의 중요 콘텐츠로 이동할 수 있도록 반복영역 건너뛰기 링크를 제공해야 한다
- 네비게이션 바를 통해 직접 원하는 페이지로 이동하는 화면을 구현할 수 있다

</div> \[3.4.1 네비게이션바 컨트롤을 이용한 반복영역 건너뛰기\] 예제 참조

####  2.14.2. 건너뛰기 링크의 제공 방법을 적절하게 제공 

**1) 키보드 운용 시 화면에 보이지 않게 제공된 경우**

<div id="bkmrk-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8A%B9%EC%84%B1%EC%83%81-%EA%B1%B4%EB%84%88%EB%9B%B0%EA%B8%B0-%EB%A7%81%ED%81%AC%EB%A5%BC-%EB%B3%B4%EC%9D%B4%EC%A7%80-1">- 디자인 특성상 건너뛰기 링크를 보이지 않도록 구현하더라도 초점을 받으면 건너뛰기 링크가 표시되도록 구현한다

</div> \[2.8.2 기타\] 참조

 **2) 건너뛰기 링크에 키보드 접근이 불가능한 경우**

<div id="bkmrk-%EA%B1%B4%EB%84%88%EB%9B%B0%EA%B8%B0%EB%8A%94-%ED%82%A4%EB%B3%B4%EB%93%9C-%EC%A0%91%EA%B7%BC%EC%9D%B4-%EA%B0%80%EB%8A%A5%ED%95%98%EB%8F%84%EB%A1%9D-">- 건너뛰기는 키보드 접근이 가능하도록 구현해야 한다
- eXbuilder6 에서의 a 태그는 임베디드 페이지, HTML 스니펫 컨트롤로 구현한다
- HTML에서 a 태그의 focus에 스타일을 준다

</div> &lt;소스 21. 초점 스타일 변경 예시&gt;

```css
a:focus{ 
  //포커스 CSS 작성 
} 
```

**3) 건너뛰기 링크에 키보드 접근이 불가능한 경우(display:none 또는 visibility:hidden; 속성이 사용된 경우)**

<div id="bkmrk-display%3Anone-%ED%98%B9%EC%9D%80-visi">- display:none 혹은 visibility : hidden 속성을 사용하면 키보드에 접근이 불가능하기 때문에 포지셔닝 기법을 사용하여 구현한다

</div> \[2.1.1 텍스트 아닌 콘텐츠에 대한 대체 텍스트 제공\] 참조

 &lt;그림 27. 포지셔닝 기법 사용 – 컨트롤 위치 변경&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/umMimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/umMimage.png)

&lt;그림 28. 포지셔닝 기법 사용 – overflow: hidden&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/xAwimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/xAwimage.png)

**4) 건너뛰기 링크를 제공했으나 부적절하게 제공된 경우, 건너뛰기 링크를 제공했으나 href 값 연결 등이 잘못되어 동작하지 않는 경우**

- 링크의 연결 값이 올바르지 않은 경우 해당 기능이 동작하지 않으므로 연결 값을 올바르게 수정한다

**5) 건너뛰기 링크를 제공했으나 건너뛰는(도착) 위치가 부적절하게 지정된 경우**

- 정상적으로 건너뛰기 링크를 이용할 수 있도록 건너뛰기 링크의 목적지를 올바르게 지정한다

&lt;소스 22. 포커스 이동&gt;

```javascript
app.lookup(ControlId).focus(); 
```

**6) 건너뛰기 링크를 제공하여 화면 스크롤은 되나 실제 키보드 초점은 이동되지 않는 경우**

- 건너뛰기 링크는 화면 뿐만 아니라 초점도 함께 다음 영역의 첫번째 항목으로 지정해야 한다
- eXbuiler6 에서는 포커스가 이동할 경우 자동으로 스크롤도 함께 이동된다

**7) 건너뛰기 링크가 페이지의 상단에 제공되지 않은 경우**

- 건너뛰기 링크는 반복 영역이 있는 모든 페이지의 상단의 일정한 곳에 제공해야 한다

**8) 반복 영역을 건너뛰는 링크 본문 바로가기 등 외에 사용자 운용을 돕기 위한 추가 기능을 제공하였으나 제공 방법이 부적절한 경우**

- 모양, 크기, 위치 방향, 색, 소리 등 시각적인 표시에만 그치지 않고 명시적으로 지시 사항을 제공해야 한다

Ex) →(위치방향)만 표시하는 게 아니라 “우측 메뉴 바로가기”와 같은 명확한 지시 사항도 함께 제공해야 한다

\[2.4.1 색, 크기, 모양, 방향 등 지시사항을 시각정보 외에 별도 안내 내용과 함께 제공\] 참조

### 2.15. 제목 제공 

(제목 제공) 페이지, 프레임, 콘텐츠 블록에는 적절한 제목을 제공해야 한다. 준수기준 : 페이지, 프레임, 콘텐츠 블록에 적절한 제목을 제공하여야 한다

#### 2.15.1. 페이지에 제목을 제공 

- 페이지의 제목은 해당 내용을 이해할 수 있도록 적절한 제목을 제공해야 한다
- 페이지의 제목은 App의 title 속성을 변경하여 표시할 수 있다

&lt;그림 29. 페이지에 제목 표시&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/KBlimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/KBlimage.png)

&lt;그림 30. 페이지 제목 표시 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/3Sdimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/3Sdimage.png)

#### 2.15.2. 페이지에 제목을 적절하게 제공 

**1) 페이지 내용과 다른 제목을 제공한 경우, 분류가 더 가능한데 상위 범주로 제목을 제공한 경우, 동일 페이지 제목이 존재하는 경우**

- 페이지의 제목을 좀 더 상세하게 분류할 수 있다면 상위 범주를 제목으로 하기보다는 내용을 명확하게 이해할 수 있는 제목으로 제공해야 한다

**2) 문서타이틀에 특수문자가 2개 이상 반복된 경우**

- 연속된 특수기호 사용시 스크린리더에서 불필요한 음성을 반복해 출력하므로 시각적으로 장식하기 위한 특수문자는 제공하지 않도록 한다

#### 2.15.3. 프레임 요소에 제목을 제공 

- 프레임도 요소의 내용을 이해할 수 있도록 제목을 제공해야 한다
- 내용이 없는 프레임(아이프레임)에도 “빈 프레임”, “내용 없음”과 같이 title을 제공해야 한다
- iframe 이 display: none으로 되어 있는 경우 title 속성을 미제공하면 오류로 인식한다
- 임베디드페이지는 내부적으로 iframe을 사용하기 때문에 임베디드페이지를 사용할 때는 반드시 tooltip 속성을 작성하여야 한다

\[3.3.2 임베디드 페이지 컨트롤의 타이틀 입력\] 참조

#### 2.15.4. 프레임 요소의 제목을 적절하게 제공 

- 프레임 요소에 title을 제공할 때는 간결하게 목적이나 용도를 알 수 있도록 해야 한다

Ex) “메인메뉴”, “참고문서” 등으로 설정하는 것은 적절하나 “top 프레임”, “main 프레임” 등은 목적이나 용도를 알 수 없기 때문에 부적절하다

\[3.3.2 임베디드 페이지 컨트롤의 타이틀 입력\] 참조

#### 2.15.5. 콘텐츠 블록에 제목을 제공 

**1) 콘텐츠 블록에 h1 ~ h6을 사용하여 제목을 제공하지 않은 경우(콘텐츠 블록의 헤딩이 전혀 제공되지 않는 경우)**

- HTML 스니펫 혹은 임베디드 페이지를 통해 h1 ~ h6 요소를 사용할 수 있다

**2) 콘텐츠 블록 제목에 display: none 또는 visibility: hidden을 적용한 경우**

- 건너뛰기 링크와 동일하게 display: none 또는 visibility: hidden을 사용할 경우 스크린리더에서 접근하지 못하는 문제가 발생하므로 해당 속성을 사용하지 않는다

####  2.15.6. 콘텐츠 블록에 제목을 적절하게 제공 

- HTML 스니펫 혹은 임베디드 페이지를 통해 h1 ~ h6 요소를 사용할 수 있다

**1) 콘텐츠 블록 제목에 잘못된 내용을 제공하고 있는 경우**

- 콘텐츠 블록 제목은 그 내용을 이해할 수 있도록 제공한다

**2) 일관성 있게 &lt;hn&gt;으로 제공되지 않은 경우(&lt;hn&gt;으로 제공된 내용이 중간에 p, span, strong 등 &lt;hn&gt;이 아닌 태그로 제공되는 경우)**

- 콘텐츠 블록 제목은 헤딩 요소(h1 ~ h6)를 사용하여 제공해야 한다

**3) 콘텐츠 블록 제목의 선형화가 맞지 않을 경우**

- 콘텐츠 구조를 이해할 수 있도록 콘텐츠 블록 제목은 논리적인 순서로 선형화가 되어야 한다

 Ex) 상위 제목 단계 없이 하위 제목 단계만 있어서는 안 된다

- &lt;hn&gt;의 순서가 잘못된 경우 오류로 볼 수 없어 수정 권장 사항이다

\[3.6.1.3 Heading Tag 의 활용\] 예제 참조

### 2.16. 적절한 링크 텍스트 

(적절한 링크 텍스트) 링크 텍스트는 용도나 목적을 이해할 수 있도록 제공해야 한다.   
준수기준 : 링크 텍스트의 용도나 목적을 이해할 수 있도록 제공하여야 한다

#### 2.16.1. 목적이나 용도를 알기 어려운 링크 텍스트를 제공 

**1) 빈 링크 제공**

- 스크린리더를 이용하여 웹 페이지를 탐색하는 사용자의 경우 빈 링크 제공 시 해당 링크의 목적이나 용도를 이해하기 어렵기 때문에 빈 링크로 표시하지 않는다 
    - 빈 링크로 표현되지 않도록 하거나 사용하지 않는 링크인 경우에는 삭제한다

**2) 빈 링크에 title 속성만 제공한 경우**

- 빈 링크 제공과 마찬가지로 빈 링크에 title 속성만 제공할 경우 해당 링크의 목적이나 용도를 이해하기 어렵기 때문에 빈 링크로 표현되지 않도록 하거나 사용하지 않는 링크는 삭제한다.

**3) 의미 있는 이미지를 배경으로 제공하고 링크를 빈 값으로 제공한 경우**

- 의미 있는 배경이미지에는 IR 기법으로 대체텍스트를 제공해서 링크의 목적을 알 수 있도록 해야 한다

**4) 독립적 링크를 포함하는 텍스트 이미지의 alt 가 잘못 제공되었거나 빈 값으로 제공된 경우**

- 링크의 목적이나 용도를 쉽게 이해할 수 있도록 이미지의 alt 값을 올바르게 제공해야 한다.

\[2.1.1 텍스트 아닌 콘텐츠에 대한 대체 텍스트 제공\] 참조

**5) 링크 내 이미지가 의미를 가지고 있으나 대체 텍스트를 제공하지 않은 경우(alt 미제공)**

- 링크의 목적이나 용도를 쉽게 이해할 수 있도록 이미지의 alt 값을 올바르게 제공해야 한다

\[2.1.1 텍스트 아닌 콘텐츠에 대한 대체 텍스트 제공\] 참조

**6) 목적이나 용도를 알기 어려운 링크 텍스트를 제공한 경우**

- 목적이나 용도를 이해하기 어려운 단순 동작의 내용만을 담은 링크 텍스트로 제공하면 직관적으로 해당 파일의 성격이 무엇인지 이해하기 어렵기 때문에 title 속성을 지정하여 마우스 사용자는 툴팁으로, 스크린리더 사용자는 title을 읽어 좀 더 명확하게 파일의 성격을 구분할 수 있도록 제공해야 한다
- title 속성은 eXbuilder6의 각 컨트롤의 tooltip 속성으로 제어가 가능하다

**7) 링크 텍스트를 단순히 URL 경로로만 제공한 경우**

- URL 경로에 링크를 걸지 않고 “메일보내기”와 같은 버튼으로 제공하는 것을 권장한다

**8) 링크의 정보를 이미지의 요소에서 알리는 경우**

- 링크 정보는 이미지 요소에 제공하지 않고 a 요소에 title 로 정보를 제공하는 것을 권장한다

Ex) &lt;a href=”URL”&gt;&lt;img src=”url/img.gif” alt=”이미지” title=”새창열림”&gt;&lt;/a&gt;보다는 &lt;a href=”URL” title=”새창열림”&gt;&lt;img src=”url/img.gif” alt=”이미지”&gt;&lt;/a&gt;

**9) “~를 하려면 여기를 누르세요”와 같이 방향지시로 링크 목적을 안내한 경우**

- 어떠한 기능을 하는 링크인지는 클릭을 해서 해당 링크 페이지로 이동하기 전까지는 알 수 없기 때문에 링크텍스트는 직관적이고 의미 있게 구성해야 한다 
    - 링크텍스트는 사용자가 링크의 용도나 목적을 명확히 알 수 있도록 수정한다

### 2.17. 기본 언어 표시 

(기본 언어 표시) 주로 상아는 언어를 명시해야 한다.

준수기준 : 기본 언어 표시 속성을 사용하여 언어를 명시하여야 한다

#### 2.17.1. 문서 타입에 맞는 기본 언어를 명시 

- HTML 문서의 lang 속성을 정의하여 기본 언어의 표현은 eXbuilder6 설정파일을 통해 정의가 가능하다

\[3.5.1 exbuilder.json 의 html-lang 속성을 이용한 기본 언어 설정\] 예제 참조

#### 2.17.2. 문서 타입에 맞는 기본 언어를 적절하게 명시 

- 각 컨트롤의 lang 속성은 미지원

### 2.18. 사용자 요구에 따른 실행 

(사용자 요구에 따른 실행) 사용자가 의도하지 않은 기능(새 창, 초점 변화 등)은 실행되지 않아야 한다.

준수기준 : 사용자가 의도하지 않은 기능이 실행되지 않도록 해야 한다

#### 2.18.1. 사용자가 실행하지 않은 상황에서 예측하지 않은 새 창이 열리는 경우 

- tooltip 속성을 이용하여 새 창이 열릴 것이라고 미리 정보를 제공할 수 있다

&lt;그림 31. tooltip 속성 수정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/IfMimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/IfMimage.png)

페이지 시작 시, 새 창 또는 화면을 가리는 레이어 팝업을 제공

- 페이지 로딩 시 제공되는 화면을 가리는 레이어 팝업 또는 모달창은 반복 영역 건너뛰기 보다 앞서서 초점이 접근될 수 있도록 구현되어야 한다

\[3.2.2 다이얼로그\] 예제 참조

#### 2.18.3. 사용자가 의도하지 않은 초점 변화나 기능 동작으로 불편을 주는 경우 

**1) 초점이 갑자기 사라지지 않도록 지원**

- onfocus = blur(); 기능을 제거함으로써 초점을 잃지 않도록 할 수 있다

&lt;소스 23. blur() 기능 제거필요&gt;

```xml
<a href="#" onfocus="blur();>test 링크</a> 
```

**2) 팝업창에서 ‘다시 보지 않기’ 등의 확인란 선택으로 자동 서식이 제출되어, 팝업이 사라지는 경우**

- 확인, 닫기 버튼 등을 제공하여 갑자기 팝업이 사라지는 것을 사용자가 인지할 수 있도록 한다

\[2.18.2 웹 페이지 시작 시, 새 창 또는 화면을 가리는 레이어 팝업을 제공\] 참조

**3) 요소박스에서 데이터 입력 시, 다음 영역으로 자동 이동하는 경우**

- input 태그에서 입력을 완료했을 경우, keyup 이벤트를 삭제함으로써 다음 영역에 자동으로 포커스가 이동하지 않도록 수정할 수 있다

**4) Dropdownlistbox에서 키보드로 옵션 선택 시, 링크가 이동되는 경우**

- 선택한 옵션으로 이동하는 버튼을 추가하여 옵션 선택 후 버튼 클릭을 통해 이동할 수 있도록 지원할 수 있다

\[3.2.3 컨트롤의 내부 이동 단축키\] 예제 참조

&lt;그림 32. 선택한 옵션으로 링크를 이동할 수 있는 버튼 추가&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/kkVimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/kkVimage.png)

### 2.19. 콘텐츠의 선형화 

(콘텐츠의 선형 구조) 콘텐츠는 논리적인 순서로 제공해야 한다. 준수기준 : 콘텐츠의 순서가 논리적으로 선형화 되어 제공되어야 한다

#### 2.19.1. 콘텐츠의 순서가 논리적으로 제공되어 계층 구조를 이해할 수 있도록 제공 

**1) \[제목-내용\] 콘텐츠 목록의 배치가 분리되어 이해가 불가능한 경우**

- 각 탭 페이지 상단에 표현하는 페이지의 타이틀을 제공하여 이해를 쉽게 할 수 있다

&lt;그림 33. 탭 폴더, MDI 폴더의 탭 아이템 이름 지정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/h0cimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/h0cimage.png)

**2) 기능적인(로그인, 검색 등) 항목의 순서가 논리적이지 않게 제공한 경우**

- 스튜디오의 Outline View를 통해 컨트롤의 논리적인 순서를 조절할 수 있고, 이 순서는 포커스의 이동 순서와 동일하게 제공된다

\[3.2.1 초점 제어\] 예제 참조

**3) 사용방법 안내 정보를 콘텐츠 이전에 제공하지 않은 경우**

- 아웃풋 컨트롤을 사용하여 안내 정보를 작성하여 제공할 수 있다.

### 2.20. 표의 구성 

(표의 구성) 표는 이해하기 쉽게 구성해야 한다.

준수기준 : 표를 이해할 수 있도록 정보를 제공한 경우 준수한 것으로 인정

- 그리드 컨트롤을 table 태그가 아닌 div 태그로 제공되어 caption과 summary를 별도로 지원하지 않음
- 캘린더 컨트롤은 내부적으로 table 태그를 사용하며 table 태그를 사용하지 않는 방법으로 적용될 예정임

### 2.21. 레이블 제공 

(레이블 제공) 입력 서식에는 대응하는 레이블을 제공해야 한다. 준수기준 : 입력 서식에 대응하는 레이블을 제공하여야 한다.

- 레이블 제공 시 기능정보를 추가제공하는 것이 권장된다.
- eXbuilder6의 컨트롤은 fieldLabel 속성을 제공하고 이 속성은 aria-label 로 표현되어 레이블 제공수단으로 사용된다.

#### 2.21.1. 그리드

그리드에서 제공하는 레이블은 헤더 셀의 text와 그리드 셀value이 함께 제공되어야 한다.

따라서 그리드 셀에 배치되어 있는 컨트롤의 fieldLabel 속성은 헤더 셀의text를 작성한다.

\[3.3.1 입력 계열 컨트롤의 레이블 활용 가이드\] 예제 참조

### 2.22. 오류 정정 

(오류 정정) 입력 오류를 정정할 수 있는 방법을 제공해야 한다. 준수기준 : 입력 오류를 정정할 수 있는 방법을 제공하여야 한다

- 오류 발생 시, 아웃풋 컨트롤에 발생원인에 대한 내용을 제공하고 해당 입력 서식으로 초점을 맞춰 오류를 정정할 수 있도록 제공할 수 있다

&lt;그림 34. 오류 메시지와 오류가 발생한 서식에 맞춰진 초점&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/3fAimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/3fAimage.png)

- 오류 발생 시, 입력한 내용을 삭제하지 않고, 오류가 발생한 지점에 초점을 맞추어 오류만 수정할 수 있도록 제공할 수 있다
- 포커스 아웃 시 입력된 내용이 부적절하다고 하여도 내용을 초기화하지 않도록 하거나 사전에 입력 가능한 형식에 대한 정보를 제공하여야 한다. 이 정보는 입력 컨트롤의 tooltip 속성에 설정하여 제공이 가능하다.

  
&lt;그림 35. 입력 가능한 형식 정보 제공 예시&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/PYximage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/PYximage.png)

### 2.23. 마크업 오류 방지 

(마크업 오류 방지) 마크업 언어의 요소는 열고 닫음, 중첩 관계 및 속성 선언에 오류가 없어야 한다.

준수기준 : 마크업 언어 요소의 열고 닫음, 중첩 관계 및 속성 선언에 오류 없이 제공하여야 한다

- HTML 스니펫 컨트롤과 HTML 페이지 컨트롤을 제외한 모든 컨트롤의 마크업 오류는 툴에서 보증한다

\[3.6.1 HTML 스니펫 컨트롤의 활용\] 예제 참조

#### 2.23.1. 태그의 열고 닫음 오류 

- HTML 오브젝트 또는 HTML 스니펫 컨트롤을 사용하여 작성된 HTML 태그는 시작 태그와 종료 태그 형식을 맞추어 제공되어야 한다

&lt;소스 24. div 태그의 열고 닫음&gt;

```xml
<div><img src="./common/images/common/head01.jpg" alt=""></div> 
```

#### 2.23.2. 태그의 중첩 오류 

- HTML 오브젝트 또는 HTML 스니펫 컨트롤을 사용하여 시작 태그와 종료 태그의 위치가 다른 태그와 중첩되지 않도록 제공되어야 한다

&lt;소스 25. 태그의 포함관계&gt;

```xml
<div> 
  <h2>웹 접근성 준수</h2> 
</div>
```

#### 2.23.3. 중복 선언된 속성 오류, id 값 중복 사용 오류 

- Window &gt; Preferences &gt; eXbuilder6 &gt; ID 정책 을 통해 컨트롤의 ID 접두어를 설정할 수 있다.
- 설정 후 Id 속성을 지정 시, 중복이 되지 않도록 제공할 수 있다
- 스튜디오에서 각 컨트롤 별 속성 뷰에서 설정된 Id 는 App 의 범위에서 관리하는 논리적인 ID 로 app.lookup 등의 메소드를 통해 접근할 수 있고 실제 HTML 로 그려질 때는 전체 HTML 범위에서 ID 가 중복되지 않도록 설정된 Id 와 매핑되는 uuid 가 생성되어 설정되다
- 각 컨트롤의 ID는 App 내에서 유일성이 보장되도록 설정한다

&lt;그림 36. eXbuilder6 의 ID 정책&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/caJimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/caJimage.png)

#### 2.23.4. 웹 표준 문법에 맞지 않는 경우 

- 임베디드 페이지, HTML 오브젝트 또는 HTML 스니펫 컨트롤을 사용하여 임의의 HTML 태그를 삽입할 경우 삽입되는 태그는 웹 표준 문법에 맞게 작성되어야 한다
- 사용자에 의해 만들어진 임의 태그를 삽입하는 경우가 아닌 eXbuilder6에 의해 자동으로 만들어지는 모든 태그는 웹 표준 문법에 맞도록 툴에서 보장한다

### 2.24. 웹 애플리케이션 자체 접근성 

(웹 애플리케이션 접근성 준수) 콘텐츠에 포함된 웹 애플리케이션은 접근성이 있어야 한다. 준수기준 : 웹 애플리케이션의 자체 접근성을 준수하였거나 대체 콘텐츠를 제공한 경우 준수한 것으로 인정

- 접근성이 어려운 웹 애플리케이션(플래시, 기타 모듈 등)의 콘텐츠는 자체적인 접근성을 확보할 수 있는 HTML 버전으로 제공한다
- “HTML 오브젝트” 컨트롤을 이용하여 PDF 뷰어 등과 같은 컨텐츠 뷰어 기능을 제공할 때는 PDF 문서를 다운로드 받을 수 있는 링크를 별도로 제공해야 한다. 또한 제공되는 문서는 스크린리더 사용자가 PDF를 읽을 수 있도록 이미지 기반 문서(스캔 등을 이용하여 이미지 파일로 제작한 문서)가 아닌 텍스트 기반 문서로 제공되어야 한다

<p class="callout info">문서가 텍스트 기반임을 확인할 수 있는 가장 쉬운 방법은 텍스트를 마우스로 드래그하여 텍스트 선택이 가능한지 확인하고 이렇게 선택된 텍스트를 복사/붙여넣기 하여 텍스트 편집기로 붙여 넣었을 때 온전한 텍스트가 붙여 넣기 되는 것을 확인하는 것이다. </p>

- 스크린리더 중 “센스리더”를 사용 시, 그리드 컨트롤을 위해 가상 커서를 해제하여 이용하라는 안내문구를 제공해야 한다. 가상 커서를 해제함으로써 그리드의 필수적인 정보만 제공받을 수 있다

## 3. 적용 예제 

### 3.1. 대체 텍스트 처리 

#### 3.1.1. 이미지 컨트롤 

- 이미지 컨트롤을 디자인 탭에 배치한 후 대체 텍스트를 설정한다

##### 3.1.1.1. 대체 텍스트 처리 

- 이미지 컨트롤을 배치한 후 Properties 탭의 alt 속성과 tooltip 속성을 지정하여 대체 텍스트를 처리할 수 있다(alt는 이미지에 대한 설명이며 tooltip 과 중복된 내용은 피해야 한다)
- 대체텍스트의 설명이 부족한 경우 속성을 더블 클릭하여 수정할 수 있다

&lt;그림 37. 이미지 컨트롤 alt 속성 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/VW7image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/VW7image.png)

위의 속성을 입력하면 다음과 같은 결과가 나타난다.

&lt;소스 26. alt 속성과 tooltip 속성 적용 결과&gt;

```xml
<img style="width:100%; height:100%; display:block" 
  data-ndid="f817e1ee-a70d-f7c7-d589-f1960b5cab9c" alt="도움말" 
  title="해당 이미지를 누르면 eXbuilder6에 대한 도움말을 확인할 수 있습니다. 
  eXbuilder6의 컨텐츠는 도움말 구성, 소개, 개발환경, 라이선스, 튜토리얼, 스튜디오 구성, 
  프로젝트, 앱 개발, 고급기능, 외부연동, API Reference의 내용을 살펴볼 수 있습니다."
  src="theme/images/tomatosystem.png">
```

- tooltip 속성으로 제공한 대체텍스트는 브라우저에서 title 속성으로 확인할 수 있다

관련항목: 2.1. 적절한 대체 텍스트 제공 – 1, 2, 4

##### 3.1.1.2. 바인딩 

- 사용자가 대체 텍스트 등록을 할 수 있도록 alt 와 tooltip 속성을 바인딩 할 수 있다
- 콤보 박스 컨트롤에서 변경할 속성을 선택한 뒤, 인풋 박스 컨트롤에 텍스트를 입력한다 
    - 작성한 후, ‘적용’ 버튼을 누르면 스크립트를 통해 대체 텍스트의 내용을 수정할 수 있다

&lt;그림 38. 데이터 바인딩 화면&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/1Lrimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/1Lrimage.png)

&lt;소스 27. 사용자가 직접 alt, title 속성 설정&gt;

<div id="bkmrk--51"></div>```javascript
/*  
 * "적용" 버튼에서 click 이벤트 발생 시 호출.  
 * 사용자가 컨트롤을 클릭할 때 발생하는 이벤트.  
 */
function onBtn1Click( /* cpr.events.CMouseEvent */ e) {
  /** 
  * @type cpr.controls.Button
  */ 
  var btn1 = e.control;
  var img = app.lookup("logo");
  var val = app.lookup("cmb").value;
  var inpt = app.lookup("ipb").value;
    
  if (val == "title") {
  img.tooltip = inpt;
  } else if (val == "alt") {
  img.alt = inpt;
  }
    
  app.lookup("ipb1").value = "";
  app.lookup("grp1").redraw();
}
```

관련 항목 : 2.1. 적절한 대체 텍스트 제공 – 3

#### 3.1.2. 임베디드페이지 

<div id="bkmrk-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EC%9D%84-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%83%AD%EC%97%90-">- 임베디드페이지 컨트롤을 디자인 탭에 배치한 후 대체 텍스트를 설정한다

</div>##### 3.1.2.1. 대체 텍스트 처리 

<div id="bkmrk-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C%ED%8E%98%EC%9D%B4%EC%A7%80%EC%97%90-%ED%91%9C%EC%8B%9C%EB%90%98%EB%8A%94-iframe">- 임베디드페이지에 표시되는 iframe에 title 속성을 설정하여 표시한다

</div> &lt;그림 39. 임베디드페이지 tooltip 속성 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/P5Kimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/P5Kimage.png)

관련 항목: 2.1. 적절한 대체 텍스트 제공 – 1, 2, 4

#### 3.1.3. 탭폴더/MDI 폴더 

- 탭폴더 컨트롤을 디자인 탭에 배치한 후 대체 텍스트를 설정한다

#### 3.1.3.1. 대체 텍스트 처리

- fieldLabel 속성에 값을 설정하여 스크린리더에서 읽을 수 있게 한다

&lt;그림 40. 탭폴더 fieldLabel 속성 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/B5Yimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/B5Yimage.png)

관련 항목: 2.1. 적절한 대체 텍스트 제공 – 1, 2, 4

##### 3.1.3.2. 바인딩 

- 익스프레션 바인딩을 통해 동적으로 탭의 개수를 읽을 수 있게 한다

&lt;그림 41. 탭폴더의 fieldLabel 익스프레션 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/RXsimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/RXsimage.png)

&lt;소스 28. 익스프레션 설정 값&gt;

```javascript
getTabItems().length + '개의 탭이 있습니다.' 
```

 관련 항목 : 2.1. 적절한 대체 텍스트 제공 – 3

#### 3.1.4. 인풋박스 / 넘버에디터 / 마스트에디터 / 텍스트에리어 

- 인풋박스 컨트롤을 디자인 탭에 배치한 후 대체 텍스트를 설정한다

##### 3.1.4.1. 대체 텍스트 처리 

- 컨트롤의 fieldLabel 속성을 설정하여 필드 이름을 컨트롤에서 리더에서 읽을 수 있다

&lt;그림 42. 인풋박스 fieldLabel 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/cfCimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/cfCimage.png)

 관련 항목: 2.1. 적절한 대체 텍스트 제공 – 1, 2, 4

#### 3.1.5. 프로그레스 

- 프로그레스 컨트롤을 디자인 탭에 배치한 후 대체 텍스트를 설정한다

##### 3.1.5.1. 대체 텍스트 처리 

- fieldLabel 속성에서 진행상황을 알려주는 텍스트를 설정한다

&lt;그림 43. 프로그레스 fieldLabel 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/ufVimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/ufVimage.png)

관련 항목: 2.1. 적절한 대체 텍스트 제공 – 1, 2, 4

##### 3.1.5.2. 바인딩 

- 진행되는 수치의 값을 익스프레션을 통해 동적으로 표시한다

&lt;그림 44. 프로그레스 fieldLabel 익스프레션 바인딩&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/AKaimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/AKaimage.png)

&lt;소스 29. 익스프레션 바인딩 설정 값&gt;

```javascript
"진행상황: "+self.max+"% 중 현재 "+value+"% 진행 중" 
```

관련 항목 : 2.1. 적절한 대체 텍스트 제공 – 3

#### 3.1.6. 트리 

- 트리 컨트롤을 디자인 탭에 배치한 후 대체 텍스트를 설정한다

##### 3.1.6.1. 대체 텍스트 처리 

- 트리 컨트롤의 tooltip 속성을 통해 키보드 동작을 설명합니다
- fieldLabel 속성을 통해 필드의 이름을 리더에서 읽을 수 있다

&lt;그림 45. 트리 tooltip 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/2rZimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/2rZimage.png)

관련 항목: 2.1. 적절한 대체 텍스트 제공 – 1, 2, 4

#### 3.1.7. 콤보박스 / 링크드콤보박스 / 리스트박스

- 콤보박스 컨트롤을 디자인 탭에 배치한 후 대체 텍스트를 설정한다

##### 3.1.7.1. 대체 텍스트 처리 

- 컨트롤의 필드이름을 스크린리더에 읽을 수 있게 한다

&lt;그림 46. 콤보박스 fieldLabel 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/UsPimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/UsPimage.png)

관련 항목: 2.1. 적절한 대체 텍스트 제공 – 1, 2, 4

### 3.2. 키보드 사용 보장   


#### 3.2.1. 초점 제어 

- eXbuilder6 에서는 각 컨트롤의 초점제어를 세 가지 방식으로 지원한다

**1) tabIndex를 통한 초점 제어**

- Properties 탭의 tabIndex 속성을 0 이외의 숫자로 설정하여 물리적인 초점 순서를 제어할 수 있다
- TabIndex 값으로 초점을 제어하기 위해서는 초점을 받을 수 있는 모든 컨트롤이 논리적 모순이 없는 0 이상의 값으로 초점 순서가 정의되어야 하기 때문에 UDC 등을 사용하는 경우 초점 순서에 문제가 일어날 수 있으므로 수정하는 것을 권장하지 않는다

**2) 컨트롤의 순서에 의한 초점 제어**

- 기본적으로 초점은 Outline View의 컨트롤 순서대로 이동된다
- 컨트롤의 순서에 의한 제어는 UDC를 포함한 App 에서도 논리적인 문제의 소지가 최소화될 수 있기 때문에 권장된다
- 컨트롤의 순서는 Outline View를 통해 조정이 가능하다

&lt;그림 47. 컨트롤의 tabIndex 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/au9image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/au9image.png)

- 컨트롤의 tabIndex 속성은 기존의 컨트롤 순서대로 초점이 맞춰질 수 있도록 0으로 설정한다(기본적으로 포커스를 받을 수 있는 컨트롤은 0으로 설정되어 있다)

  
&lt;그림 48. Outline View에 순서대로 정렬된 컨트롤&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/m3uimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/m3uimage.png)

- 포커스 되는 순서를 변경하는 방법 
    1. Outline View의 해당 컨트롤을 우 클릭하여 순서 변경을 할 수 있다.
    2. 컨트롤을 선택한 뒤 ctrl+↑ 또는 ctrl+↓ 로 순서를 변경할 수 있다.

&lt;그림 49. 컨트롤 초점 순서 변경&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/RCDimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/RCDimage.png)

**3) 다음/이전 포커스 컨트롤 지정**

- 순서에 의한 제어가 어려운 특수한 경우 컨트롤 별로 이 컨트롤 다음에 초점을 받을 컨트롤을 강제로 지정할 수 있다

<p class="callout info">이 경우 초점이 순환이동 되지 않도록 주의해야 한다 </p>

 &lt;그림 50. 다음/이전 컨트롤 지정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/q8Jimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/q8Jimage.png)

<div id="bkmrk-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4%EC%9D%98-palette-%EC%B0%BD-%EB%8F%84%EA%B5%AC-%EB%A9%94">- 스튜디오의 Palette 창 도구 메뉴의 다음 포커스 컨트롤 지정을 선택한 상태로 순방향 초점 이동 순서를 지정할 수 있다
- 스튜디오의 Palette 창 도구 메뉴의 다음 포커스 컨트롤 지정을 선택한 상태로 역방향 초점 이동 순서를 지정할 수 있다
- 다음/이전 컨트롤 지정을 통해 순환구조의 초점 이동을 강제로 설정할 수 있고 순환하지 않는 경우 마지막 초점을 받은 컨트롤은 컨트롤의 순서 또는 tabIndex 순서에 의해 다음 컨트롤로 초점이 이동된다

</div>관련 항목: 2.8. 키보드 사용 보장 – 1, 2 | 2.9. 초점 이동 – 2,6 | 2.19. 콘텐츠의 선형화 - 2

#### 3.2.2. 다이얼로그 

<div id="bkmrk-%EB%B2%84%ED%8A%BC%EC%9D%84-%ED%81%B4%EB%A6%AD%ED%95%98%EC%97%AC-%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0-">- 버튼을 클릭하여 다이얼로그 호출하기 위해 click 이벤트를 설정한다
- 다이얼로그 열기 팝업 시 초점은 팝업 최상단(그룹컨트롤)에 자동 포커스 되어야 하며 팝업 닫기 버튼을 눌렀을 때 기존 열기 버튼으로 포커스를 회귀해야 한다

</div>&lt;소스 30. 다이얼로그 호출을 위한 click 이벤트 설정&gt;

```javascript
/*  
 * "다이얼로그 호출" 버튼에서 click 이벤트 발생 시 호출.
 * 사용자가 컨트롤을 클릭할 때 발생하는 이벤트.  
 */
function onBtn1Click( /* cpr.events.CMouseEvent */ e) {
  /**    
  * @type cpr.controls.Button 
  */
  var btn1 = e.control;
  app.openDialog("app/Dialog/popup", {width: 700, height: 500}, function(dialog) {
    dialog.ready(function(dialogApp) { 
    // 다이얼로그에 포커스 
    dialog.focus();
    });
            dialog.addEventListener("close",function(e){
    btn1.focus();
    });
  }).then(function(returnValue) {
  
  
  });
}
```

 &lt;그림 51. 다이얼로그 호출 및 포커스 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/YhDimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/YhDimage.png)

&lt;소스 31. ‘닫기’버튼의 클릭 이벤트 및 키보드 이벤트 설정&gt;

```javascript
/* 
 * "닫기" 버튼에서 click 이벤트 발생 시 호출. 
 * 사용자가 컨트롤을 클릭할 때 발생하는 이벤트. 
 */
function onBtn1Click( /* cpr.events.CMouseEvent */ e) {
  /**  
  * @type cpr.controls.Button 
  */
  var btn1 = e.control;
  // 다이얼로그 닫기 
  app.close();
}


/* 
 * "닫기" 버튼에서 keydown 이벤트 발생 시 호출. 
 * 사용자가 키를 누를 때 발생하는 이벤트. 
 */
function onBtn1Keydown( /* cpr.events.CKeyboardEvent */ e) {
  /**  
  * @type cpr.controls.Button 
  */
  var btn1 = e.control;
  if (e.keyCode == cpr.events.KeyCode.ENTER) {
    onBtn1Click(e);
  }
}
```

<div id="bkmrk-keydown-%EC%9D%B4%EB%B2%A4%ED%8A%B8%EB%A5%BC-%ED%86%B5%ED%95%B4-%EC%97%94%ED%84%B0%ED%82%A4%EB%A5%BC">- keydown 이벤트를 통해 엔터키를 누르면 클릭 이벤트를 호출할 수 있다

</div>관련 항목: 2.9. 초점 이동 – 1 | 2.18. 사용자 요구에 따른 실행 - 2

#### 3.2.3. 컨트롤의 내부 이동 단축키 많은 컨트롤이 내부 이동 단축키를 지원하고 있다. 

(“Help &gt; Help Contents &gt; eXbuilder6 &gt; 앱 개발 &gt; 컨트롤 &gt; UI 컨트롤” 에서 각 컨트롤 별 키 동작에 대한 도움말을 확인 가능)

##### 3.2.3.1. 콤보 박스 컨트롤 

<div id="bkmrk-%EB%93%9C%EB%A1%AD%EB%8B%A4%EC%9A%B4-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%3A-alt-%2B-%E2%86%93%C2%A0-">- 드롭다운 리스트 : Alt + ↓
- 아이템 이동 : 위, 아래 화살표
- 아이템 선택 : enter 키

</div>##### 3.2.3.2. 네비게이션바 컨트롤 

<div id="bkmrk-%EB%A9%94%EB%89%B4-%EC%95%84%EC%9D%B4%ED%85%9C-%EC%9D%B4%EB%8F%99-%3A-%EC%9C%84%2C-%EC%95%84%EB%9E%98%2C-%EC%96%91">- 메뉴 아이템 이동 : 위, 아래, 양 옆 화살표
- 아이템 선택 : enter 키

</div>##### 3.2.3.3. 트리 컨트롤 

<div id="bkmrk-%EB%A9%94%EB%89%B4-%EC%95%84%EC%9D%B4%ED%85%9C-%EC%9D%B4%EB%8F%99-%3A-%EC%9C%84%2C-%EC%95%84%EB%9E%98%2C-%EC%96%91-1">- 메뉴 아이템 이동 : 위, 아래, 양 옆 화살표
- 아이템 선택 : enter 키 또는 space 키

</div>##### 3.2.3.4. 슬라이더 컨트롤 

<div id="bkmrk-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%93%9C-%EC%A6%9D%EA%B0%80-%3A-%EC%9C%84%2C-%EC%98%A4%EB%A5%B8%EC%AA%BD-%ED%99%94%EC%82%B4%ED%91%9C">- 슬라이드 증가 : 위, 오른쪽 화살표
- 슬라이더 감소 : 아래, 왼쪽 화살표

</div>##### 3.2.3.5. 탭 폴더, MDI 폴더 컨트롤 

<div id="bkmrk-tabitem-%EA%B0%84-%EC%B4%88%EC%A0%90-%EC%9D%B4%EB%8F%99-%3A-%EC%A2%8C%EC%9A%B0">- TabItem 간 초점 이동 : 좌우 화살표
- 해당 TabItem 의 content 활성화 : enter 키 또는 아래 방향키
- 열려진 TabItem 의 content 로 초점 이동: tab 키를 통해 이동
- content 내부에서는 tab 키를 통해 컨트롤 간 초점이동이 가능하다

</div>##### 3.2.3.6. 아코디언 

<div id="bkmrk-sectionitem-%EA%B0%84-%EC%B4%88%EC%A0%90-%EC%9D%B4%EB%8F%99-">- SectionItem 간 초점 이동 : 상하 화살표
- 해당 SectionItem 의 content 활성화 : enter 키
- 열려진 SectionItem 의 content 로 초점 이동 : tab 키를 통해 이동
- content 내부에서는 tab 키를 통해 컨트롤 간 초점 이동이 가능하다

</div>#####  3.2.3.7. 파일업로드 

<div id="bkmrk-tab-%ED%82%A4%EB%A1%9C-%EC%B2%B4%ED%81%AC%EB%B0%95%EC%8A%A4%2C-%EB%B2%84%ED%8A%BC-%EC%88%9C%EC%9C%BC%EB%A1%9C-">- tab 키로 체크박스, 버튼 순으로 이동이 가능하다

</div>#####  3.2.3.8. 그리드 

<div id="bkmrk-%ED%8A%B8%EB%A6%AC%EA%B7%B8%EB%A6%AC%EB%93%9C%EC%9D%98-%ED%99%95%EC%9E%A5-%3A-ctrl-%2B-%E2%86%92">- 트리그리드의 확장 : Ctrl + →
- 트리그리드의 축소 : Ctrl + ←

</div>관련 항목 : 2.8. 키보드 사용 보장 – 1 | 2.9. 초점 이동 – 1 | 2.18. 사용자 요구에 따른 실행 - 3

####  3.2.4. onclick 이벤트 및 onkeydown 이벤트 

<div id="bkmrk-onkeydown-%EC%9D%B4%EB%B2%A4%ED%8A%B8%EA%B0%80-%EC%8B%A4%ED%96%89%EB%90%98%EB%A9%B4-">- onkeydown 이벤트가 실행되면 onclick 이벤트가 호출될 수 있도록 설정할 수 있다

</div>&lt;그림 52. 이미지 컨트롤의 이벤트 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/tmZimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/tmZimage.png)

<div class="align-center" id="bkmrk-%3C%EC%86%8C%EC%8A%A4-32.-%ED%81%B4%EB%A6%AD-%EB%98%90%EB%8A%94-%EC%97%94%ED%84%B0%ED%82%A4%EB%A5%BC-%EB%88%8C">&lt;소스 32. 클릭 또는 엔터키를 눌렀을 때 이벤트 설정&gt; </div>```javascript
/* 
 * 이미지에서 click 이벤트 발생 시 호출. 
 * 사용자가 컨트롤을 클릭할 때 발생하는 이벤트. 
 */
function onImg1Click( /* cpr.events.CMouseEvent */ e) {
  /**  
  * @type cpr.controls.Image 
  */
  var img1 = e.control;
  alert("캐릭터 이미지입니다");
}
/* 
* 이미지에서 keydown 이벤트 발생 시 호출. 
사용자가 키를 누를 때 발생하는 이벤트. 
 */
function onImg1Keydown( /* cpr.events.CKeyboardEvent */ e) {
  /**  
  * @type cpr.controls.Image 
  */
  var img1 = e.control;
  if (e.keyCode == cpr.events.KeyCode.ENTER) {
    onImg1Click(e);
  }
}
```

관련 항목: 2.8. 키보드 사용 보장 – 1 | 2.9. 초점 이동 – 3,4

### 3.3. 레이블/타이틀 제공 

#### 3.3.1. 입력 계열 컨트롤의 레이블 활용 가이드 

<div id="bkmrk-%EC%9E%85%EB%A0%A5-%EA%B3%84%EC%97%B4-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EC%9D%98-%EB%A0%88%EC%9D%B4%EB%B8%94-%EC%86%8D%EC%84%B1%28to">- 입력 계열 컨트롤의 레이블 속성(tooltip, fieldLabel, placeholder)를 설정할 수 있다
- 마스크 에디터 컨트롤은 placeholder 속성을 지원하지 않는다
- tooltip 속성은 HTML Tag의 title 속성으로 표현된다
- placeholder 속성은 HTML Tag의 placeholder 속성으로 표현된다
- fieldLabel 속성은 HTML Tag의 aria-label 속성으로 표현된다
- 그리드 셀에 배치된 컨트롤의 fieldLabel은 헤더 셀의 text로 작성한다

</div> &lt;그림 53. 인풋 박스 컨트롤의 레이블 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/aa4image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/aa4image.png)

&lt;그림 54. 입력 계열 컨트롤 레이블 활용 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/gq2image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/gq2image.png)

&lt;소스 33. 입력 계열 컨트롤 tooltip 속성 지정 결과&gt;

```javascript
<input class="cl-text" style="ime-mode:auto" 
  data-ndid="11c60c0f-0476-2fe4-b587-951a22686488" role="textbox" 
    type="text" title="인풋박스 tooltip입니다." tabindex="0" arialabel="인풋 박스" 
      placeholder="인풋박스 placeholder입니다."> 
```

- tooltip으로 제공한 속성이 title 속성으로 확인할 수 있다

&lt;그림 55. 그리드 셀에 배치된 컨트롤의 fieldLabel&gt;

 [![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/0J8image.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/0J8image.png)

- 그리드에 배치된 컨트롤의 경우, fieldLabel은 해당 헤더 셀의 text로 작성한다

관련 항목: 2.4. 명확한 지시 사항 제공 – 1 | 2.21. 레이블 제공 - 2

3.3.2. 임베디드 페이지 컨트롤의 타이틀 입력

- 임베디드 페이지 컨트롤을 사용할 경우 반드시 tooltip 속성에 상황에 맞는 제목을 설정하여 임베디드 페이지가 표현되는 iframe 영역에 적절한 프레임 제목을 제공하여야 한다

&lt;그림 56. 임베디드 페이지 컨트롤의 tooltip 속성 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/Nycimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/Nycimage.png)

&lt;소스 34. tooltip 속성 적용 결과&gt;

```xml
<iframe style="position: absolute; height: 100%; width:100%; border:none" 
  data-ndid="9717491f-9843-35b6-9e94-4de2a2b56d29" frameborder="0" scrolling="auto" 
  src="app/EmbeddedPage/page.html" title="프레임 제목을 제공하고 있습니다."><p ></p></iframe> 
```

관련 항목: 2.15. 제목 제공 - 3

### 3.4. 반복영역 건너뛰기 

#### 3.4.1. 네비게이션바 컨트롤을 이용한 반복영역 건너뛰기 

<div id="bkmrk-%EB%84%A4%EB%B9%84%EA%B2%8C%EC%9D%B4%EC%85%98-%EB%B0%94%EC%97%90-%ED%8F%AC%EC%BB%A4%EC%8A%A4%EA%B0%80-%EB%A7%9E%EC%B6%B0%EC%A7%88-%EB%95%8C%2C">- 네비게이션 바에 포커스가 맞춰질 때, 엔터키를 누르면 바로 본문으로 이동할 수 있도록 설정할 수 있다.

</div>&lt;소스 35. 네비게이션바에서 keydown 이벤트 설정&gt;

```javascript
/* 
 * 네비게이션 바에서 keydown 이벤트 발생 시 호출. 
 * 사용자가 키를 누를 때 발생하는 이벤트. 
 */
function onNgb1Keydown( /* cpr.events.CKeyboardEvent */ e) {
  /**  
  * @type cpr.controls.NavigationBar 
  */
  var ngb1 = e.control;
  if (e.keyCode == cpr.events.KeyCode.ENTER) {
    app.lookup("txa1").focus();
  }
}
```

 &lt;그림 57. Keydown 이벤트 적용 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/LyIimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/LyIimage.png)

관련 항목: 2.8. 키보드 사용 보장 – 2 | 2.14. 반복 영역 건너뛰기 - 1

### 3.5. 기본 언어 표시

#### 3.5.1. exbuilder.json 의 html-lang 속성을 이용한 기본 언어 설정 

- eXbuilder.json 파일은 DynamicWebProject에서 eXbuilder 관련 환경설정 정보를 담고 있는 파일이다
- 경로 : /exbuilder/config/ eXbuilder.json

&lt;그림 58. exbuilder.json 파일 위치&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/58Qimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/58Qimage.png)

&lt;그림 59. exbuilder.json 파일에서 html-lang 지정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/SIRimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/SIRimage.png)

- 설정하고자 하는 나라의 언어 코드를 해당 부분에 입력하여 기본 언어를 지정할 수 있다

관련 항목: 2.17. 기본 언어 표시 - 1

### 3.6. 기타 마크업 삽입 

#### 3.6.1. HTML 스니펫 컨트롤의 활용 

##### 3.6.1.1. 이미지맵 처리 

&lt;그림 60. HTML 스니펫 컨트롤의 value 속성 설정&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/oxkimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/oxkimage.png)

&lt;소스 36. 이미지맵 value 속성 소스&gt;

```xml
<img src="./theme/images/tomatosystem.png" alt="usemap" border="0" usemap="#tutorials"> 
<map name="tutorials"> 
     <area shape="circle" coords="93, 24, 25" href="http://tomatosystem.co.kr" alt="새창 띄우기" target="_blank"> 
</map> 
```

&lt;그림 61. 이미지맵 설정 후 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/kxuimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/kxuimage.png)

##### 3.6.1.2. &lt;a&gt; 태그 처리 

- HTML 스니펫 컨트롤의 value 속성에 a 태그를 작성하여 alt를 설정할 수 있다

&lt;소스 37. img 태그 안에 직접 alt 설정&gt;

```xml
<a><img src="./theme/images/example11.jpg" alt="자연풍경입니다."></a> 
```

&lt;소스 38. alt 를 빈 값으로 제공했을 때 대체 텍스트 설정&gt;

```xml
<a><img src="./theme/images/example11.jpg" alt=""><span>자연풍경입니다!</span></a>
```

- HTML 스니펫 컨트롤의 value 속성에 a 태그를 활용하여 다운로드를 받을 수 있다

&lt;소스 39. a 태그를 이용하여 멀티미디어 콘텐츠 다운로드&gt;

```xml
<a href="./data/testVideo.mp4">동영상 다운로드</a> 
```

&lt;그림 62. 멀티미디어 콘텐츠 다운로드 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/ZTMimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/ZTMimage.png)

관련 항목 : 2.1. 적절한 대체 텍스트 제공 – 2, 4 | 2.2. 자막 제공 – 1, 3

##### 3.6.1.3. Heading Tag 의 활용 

- HTML 스니펫 컨트롤의 value 속성에 Heading Tag 를 사용하여 결과를 확인할 수 있다

&lt;소스 40. HTML 스니펫 컨트롤에 Heading Tag 설정&gt;

```xml
<h1>h1 입니다.</h1><br /> 
<h2>h2 입니다.</h2><br /> 
<h3>h3 입니다.</h3><br /> 
<h4>h4 입니다.</h4><br /> 
<h5>h5 입니다.</h5><br /> 
<h6>h6 입니다.</h6><br /> 
```

&lt;그림 63. Heading Tag 결과&gt;

[![image.png](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/scaled-1680-/PmWimage.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2025-06/PmWimage.png)

관련 항목 : 2.15. 제목 제공 - 6

</body></html>

# 프로젝트 가이드

1. 브라우저 호환성 관련 eXBuilder6 지원 가이드
2. 크로스 브라우징 테스트 체크리스트 
    - 기본적으로 브라우저 호환성은 eXBuilder6가 제공하는 API를 사용하는 경우 보증됩니다.
    - 다음의 경우 각 브라우저에서의 작동 시험이 필요합니다: 
        - 서드 파티 라이브러리 등, 브라우저 API를 직접적으로 사용한 경우
        - 스니펫, 쉘 등 HTML 콘텐츠를 직접 합성한 경우
        - CSS를 통한 퍼블리싱
3. 렌더링 최적화 가이드 
    - eXBuilder6의 렌더링 엔진은 일반적인 렌더링 최적화 기법을 포함하고 있습니다.
    - 다음의 상황들을 가급적 피하여 주십시오: 
        - 그룹의 깊이를 너무 깊게 만들지 마십시오.
        - CSS에서 속성 연산 셀렉터를 가급적 사용하지 마십시오.
        - 특정 요소가 그려질 때 그 값이 계산의 결과 값인 경우를 가급적 피하십시오.
    - load이벤트에서 redraw가 필요한 초기화 작업은 init이벤트에서 처리하여 redraw회수를 줄일 수 있습니다.
    - `DeferrredUpdateManager.INSTANCE.update()`는 즉시 그리기로 코드 흐름에서 UI가 갱신된 상태에서 값을 가져와서 작업하고 싶은 경우 사용합니다. 특별한 경우가 아니라면 `UIControl.redraw()`(데이터맵, 데이터셋에 바인딩된 경우 데이터셋의 값을 직접 변경하면 컨트롤을 redraw해서 UI를 갱신해야 함. 그리드만 자동으로 그리기 지원.) 사용을 권장합니다.

# 성능 가이드

### 개요

- eXBuilder6의 렌더링 엔진은 일반적인 렌더링 최적화 기법을 포함하고 있습니다.
- 다음의 상황들을 가급적 피하여 주십시오: 
    - 그룹의 깊이를 너무 깊게 만들지 마십시오.
    - CSS에서 속성 연산 셀렉터를 가급적 사용하지 마십시오.
    - 특정 요소가 그려질 때 그 값이 계산의 결과 값인 경우를 가급적 피하십시오.
- `load` 이벤트에서 `redraw`가 필요한 초기화 작업은 `init`이벤트에서 처리하여 `redraw`회수를 줄일 수 있습니다.
- `DeferrredUpdateManager.INSTANCE.update()`는 즉시 그리기로 코드 흐름에서 UI가 갱신된 상태에서 값을 가져와서 작업하고 싶은 경우 사용합니다. 특별한 경우가 아니라면 `UIControl.redraw()`(데이터맵, 데이터셋에 바인딩된 경우 데이터셋의 값을 직접 변경하면 컨트롤을 redraw해서 UI를 갱신해야 함. 그리드만 자동으로 그리기 지원.) 사용을 권장합니다.

#### 컨트롤 파퓰레이션

eXBulder6는 VirtualDOM 기술을 이용하여 그리기 작업을 자동으로 최적화 합니다.

```js
for (var a=0; a

- 그룹에 컨트롤을 추가하는 경우 다음의 규칙을 준수하여 주십시오. 
    - 여러 컨트롤을 추가하는 경우, 자식 컨트롤을 연속되는 위치에 추가하여 주십시오. 
        - O - `grp1`의 2번째 3번째 4번째 자식으로 아웃풋을 추가.
        - X - `grp1`의 2번째 4번째 자식으로 아웃풋을 추가 - 불연속적인 위치에 대한 자식 추가는 성능 저하 요인이 됩니다.
    - 한 그룹으로부터 자식 컨트롤을 제거하는 코드와 새로운 자식 컨트롤을 추가하는 코드는 한 이벤트 틱 처리에서 실행되지 않도록 처리하여 주십시오.
    -


#### 강제 화면 업데이트

`DeferrredUpdateManager.INSTANCE.update()`는 현재 예약된 그리기 작업을 호출된 시점에 강제로 모두 실행하게 됩니다.
일반적으로 이러한 그리기 작업은 사용자에게 다음 프레임에 표시하기 직전까지 미리 실행될 필요가 없기 때문에, 자동적으로 지연(Deferred)됩니다.

직접적으로 이를 호출하는 것은 불필요한 성능 저하를 일으킬 수 있으므로, 지양하여 주십시오.
다음 그릴 DOM 상태를 현재 코드 내에서 예측해야 할 필요가 있고 다른 대안이 없는 경우에만 사용하여 주십시오.

화면이 갱신된 이후의 코드를 실행 하려면, 대신 `DeferrredUpdateManager.INSTANCE.asyncExec()`를 사용하여 작업을 예약 하십시오.

# eXBuilder6 최적화 가이드

## 변경 이력
|제품 버전|변경 날짜|변경 내용|
|-|-|-|
| 1.0.5980 | 2026.02.12 | 문서 최초 작성 |

## 1. 개요 및 목적
이 가이드는 eXBuilder6를 활용하여 UI 애플리케이션을 개발할 때, **성능 최적화**와 **유지보수성 향상**을 돕기 위해 작성되었습니다. 특히 렌더링 효율을 높이고, 플랫폼의 설계를 존중하는 개발 방식을 통해 안정적인 애플리케이션을 구축하는 방법을 제안합니다.

주로 다루는 내용은 다음과 같습니다:
- DOM 접근 제어 및 플랫폼 상태 관리
- 효율적인 화면 갱신 (Redraw) 전략
- 대량 데이터 컴포넌트(Grid, Tree) 최적화
- 컨테이너 및 레이아웃 렌더링 비용 관리
- 애플리케이션 라이프사이클과 렌더링 시점
- 비동기 데이터 통신과 표준 준수

---

## 2. DOM 접근 제어 가이드
eXBuilder6는 가상 DOM과 유사한 내부 상태 관리 메커니즘을 통해 컴포넌트를 렌더링합니다. 따라서 브라우저의 DOM을 직접 조작하는 것보다는 플랫폼이 제공하는 API를 활용하는 것이 안전하고 효율적입니다.

### 2.1 API 사용을 권장하는 이유
* **플랫폼의 렌더링 최적화**: eXBuilder6는 성능 향상이나 기능 개선을 위해 런타임 업데이트 시 컨트롤의 DOM 구조를 변경할 수 있습니다. 직접적인 DOM 의존 코드는 이러한 업데이트 시 오동작을 유발할 수 있습니다.
* **상태 불일치 방지**: 플랫폼은 컨트롤의 데이터 상태를 추적하여 필요한 시점에 DOM을 재구성합니다. 외부에서 강제로 DOM을 변경하면, 플랫폼이 인지하는 상태와 실제 화면 간의 불일치가 발생하여 예기치 않은 결과로 이어질 수 있습니다.
* **권장 방향**: "화면은 컨트롤 상태의 결과물"이라는 원칙에 따라, DOM을 직접 수정하기보다는 컨트롤의 속성(Attribute)이나 상태(State)를 변경하여 간접적으로 화면을 갱신하는 방식을 권장합니다.

### 2.2 패턴 비교

**[권장 패턴] API를 통한 상태 변경**
```javascript
// 컨트롤의 API를 사용하여 값을 변경하면, 플랫폼이 이를 감지하고 안전하게 렌더링합니다.
app.lookup("opt").value = "abc";
```

**[지양해야 할 패턴] DOM 직접 접근**
```javascript
// DOM 요소에 직접 접근하여 값을 변경하면, 플랫폼의 상태 관리와 충돌할 수 있습니다.
document.getElementById("opt").value = "abc";
```

### 2.3 예외적 허용 범위
다음과 같이 개발자가 콘텐츠의 구성을 직접 제어하도록 설계된 특정 컨트롤에서는 제한적으로 DOM 접근이 허용됩니다.
* **Shell**: 외부 라이브러리 연동 등을 위해 HTML 콘텐츠를 직접 구성하는 경우
* **HTMLSnippet**: HTML 코드를 삽입하여 렌더링하는 경우

---

## 3. 화면 갱신(`redraw`) 전략
**`redraw()` 메서드**는 컨트롤의 갱신을 엔진에게 예약하는 기능입니다. eXBuilder6 엔진은 짧은 시간 내에 발생하는 여러 번의 `redraw()` 요청을 하나로 묶어(Coalescing), 적절한 시점에 한 번만 실제 DOM 렌더링을 수행합니다. 따라서 빈번한 호출이 즉시 심각한 성능 저하를 일으키지는 않지만, 불필요하게 넓은 범위를 다시 그리도록 요청하는 것은 피해야 합니다.

### 3.1 자동 갱신과 수동 갱신 구분
컨트롤이 다시 그려져야 하는 상황은 크게 **내부 상태 변경**과 **외부 데이터 변경** 두 가지로 나뉩니다.

* **내부 상태 변경 (자동 갱신)**:
  컨트롤 자체의 속성(`value`, `visible`, `style` 등)이나 상태를 변경하는 경우, 엔진이 이를 감지하여 **자동으로 갱신을 예약**합니다. 따라서 별도의 `redraw()` 호출이 **불필요**합니다.
  ```javascript
  // 예시: 속성 변경 시 자동 갱신됨
  app.lookup("opt").value = "New Value";
  app.lookup("btn").visible = false;
  ```

* **외부 데이터 변경 (수동 갱신 필요)**:
  `DataMap`이나 `DataSet`과 같이 컨트롤 외부에 있는 데이터 소스의 값이 변경된 경우입니다.
  * **일반 컨트롤 (InputBox, Output 등)**: 데이터 변경 사실을 컨트롤이 즉시 인지하지 못할 수 있으므로, **수동으로 `redraw()`를 호출**하여 변경된 값을 화면에 반영해야 합니다.
  * **Grid 컨트롤 (예외)**: Grid는 바인딩된 `DataSet`의 변경 사항을 스스로 감지하고 효율적으로 갱신하도록 설계되어 있어, 별도의 `redraw()` 호출이 **불필요**합니다.

### 3.2 결정 기준표

| 상황 | 변경 주체 | 자동 갱신 여부 | `redraw()` 필요 여부 |
| :--- | :--- | :---: | :--- |
| **속성 변경** | 컨트롤 (내부 상태) | O | **불필요** |
| **데이터 변경** | DataMap/DataSet (외부 상태) | X | **필요** (일반 컨트롤의 경우) |
| **Grid 데이터** | DataSet (Grid 바인딩) | O | **불필요** (Grid는 자동 감지) |

### 3.3 패턴 비교

**[권장 패턴]**
```javascript
// 1. 속성 변경 시: 자동 갱신 (redraw 불필요)
app.lookup("opt").value = "12345";

// 2. DataMap 값 변경 시: 바인딩된 일반 컨트롤 수동 갱신
app.lookup("dataMap").setValue("column1", "12345");
app.lookup("opt").redraw(); // 연결된 컨트롤만 redraw 호출

// 3. Grid 데이터 변경 시: Grid는 자동 갱신 (redraw 불필요)
app.lookup("dataSet").setValue(0, "column1", "12345");
```

**[주의가 필요한 패턴]**
```javascript
// DataMap/DataSet 변경 후, 화면 전체(컨테이너)를 다시 그리는 경우
app.lookup("dataMap").setValue("column1", "12345");

// 비효율적: 변경된 데이터와 무관한 컨트롤까지 모두 검사하게 됨
app.getContainer().redraw(); 
```

---

## 4. 대용량 데이터와 그리드 렌더링 전략
그리드(Grid) 컨트롤은 대량의 데이터를 다루는 핵심 컴포넌트입니다. 데이터 양과 업무 특성에 따라 렌더링 모드를 적절히 선택하면 성능을 크게 개선할 수 있습니다.

### 4.1 렌더링 모드 설정 (`setWholeRenderingMode`)
eXBuilder6 그리드는 기본적으로 **가상 스크롤(Virtual Scroll)** 방식을 사용하여, 화면에 보이는 영역만 렌더링합니다. 하지만 필요에 따라 전체 렌더링 모드를 선택할 수도 있습니다.

| 모드 설정값 | 동작 방식 | 특징 | 추천 활용 시나리오 |
| :---: | :--- | :--- | :--- |
| **`false`**<br>(기본값) | **가상 스크롤 모드**<br>현재 화면에 <b>보이는 행(Row)과 열(Column)</b>만 렌더링합니다. | • **초기 로딩 빠름**<br>• 메모리 효율 우수<br>• 스크롤 시 렌더링 연산 발생 | **[일반 업무 표준]**<br>대량의 데이터를 처리하는 대부분의 화면에 권장됩니다. |
| **`true`** | **전체 렌더링 모드**<br>보이지 않는 영역까지 **모든 데이터**를 미리 DOM으로 생성합니다. | • **부드러운 스크롤**<br>(Native Scroll)<br>• 초기 로딩 느림<br>• 메모리 사용량 높음 | **[소량 데이터 / 웹 접근성]**<br>데이터 건수가 적거나, 스크린 리더 등 **웹 접근성** 준수가 필수적인 화면에서 사용합니다. |
| **`"column"`** | **컬럼 우선 렌더링**<br>**열(Column)은 미리 생성**하고, 행(Row)만 가상화하여 렌더링합니다. | • 가로 스크롤 시 **빈 화면 방지**<br>• 세로 스크롤 성능 유지 | **[가로 스크롤 최적화]**<br>행은 많지만 열 개수가 적고, 좌우 스크롤 시 끊김 없는 뷰가 필요한 경우 적합합니다. |

### 4.2 전체 렌더링 모드 사용 시 주의사항
`setWholeRenderingMode(true)` 상태에서 그리드 컬럼에 **복잡한 표현식(Expression)** 이 다수 포함될 경우, '전체 행 개수 × 표현식 수'만큼의 연산이 일시에 발생하여 심각한 성능 저하를 초래할 수 있습니다. 
만약 성능 이슈가 발생한다면 다음 방안을 고려해 보세요:
1. **모드 변경**: `setWholeRenderingMode(false)`로 설정하여 보이는 영역만 연산하도록 변경
2. **데이터 분할**: 페이징(Paging) 기법을 도입하여 한 번에 렌더링할 데이터 양 조절

---

## 5. 트리 컨트롤 렌더링 최적화
트리(Tree) 컨트롤은 계층 구조를 표현하는 데 유용하지만, 노드 개수가 많아질수록 렌더링 비용이 증가할 수 있습니다. 특히 5,000건 이상의 대량 아이템을 다룰 때는 주의가 필요합니다.

### 5.1 가상 스크롤 활용 (`useVirtualScroll`)
트리의 성능 저하를 막기 위해 **`useVirtualScroll`** 속성 사용을 적극 권장합니다.
* **설정 방법**: `useVirtualScroll="true"`
* **효과**: 전체 아이템 중 현재 화면에 노출되는 아이템만 렌더링하여, 대량의 노드를 펼치거나 스크롤할 때의 버벅임을 최소화합니다.

### 5.2 웹 접근성 고려
가상 스크롤 방식은 화면에 보이지 않는 DOM을 생성하지 않으므로, 스크린 리더 등 보조 기술이 전체 콘텐츠를 탐색하는 데 제약이 있을 수 있습니다. 접근성 준수가 필수적인 환경에서는 이러한 특성을 고려하여 적용 여부를 결정해야 합니다.

---

## 6. 복합 레이아웃(탭, MDI 폴더) 설계 시 고려사항
탭 폴더나 MDI 폴더와 같이 컴포넌트를 중첩하여 사용하는 컨테이너는 렌더링 비용 관리가 중요합니다. 특히 중첩 단계가 깊어질수록 렌더링 비용이 기하급수적으로 증가할 수 있습니다.

### 6.1 렌더링 메커니즘 이해
* **지연 렌더링**: 탭이나 MDI 폴더는 초기 로딩 시 선택된 탭만 렌더링하여 리소스를 절약합니다.
* **상태 유지와 비용**: 사용자가 탭을 전환하며 여러 화면을 열어볼수록, 엔진은 방문했던 모든 탭의 DOM 상태를 메모리에 유지합니다.
* **재렌더링 부하**: 상위 컨테이너(예: 부모 탭)가 다시 그려져야 할 때, 이미 활성화된 하위 탭들의 내부 컨트롤까지 모두 재계산해야 하므로 성능 부담이 가중될 수 있습니다.

### 6.2 권장 설계 방향
* 중첩 깊이를 최소화하여 DOM 트리의 복잡도를 낮추는 것이 좋습니다.
* 불필요하게 많은 탭을 동시에 유지하기보다는, 적절한 시점에 닫거나 리소스를 해제하는 UX를 고려해 보세요.
* [!참고 이미지] 복잡한 중첩 구조 예시
  [![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2026-01/scaled-1680-/image-1769671605823-25-22.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2026-01/image-1769671605823-25-22.png)

---

## 7. 애플리케이션 라이프사이클과 렌더링
### 7.1 `init`과 `load`의 역할 구분
eXBuilder6 앱은 `run` → `init` → `render` → `load` 순서로 초기화됩니다. 각 단계의 역할을 명확히 이해하고 코드를 작성하면 불필요한 중복 렌더링을 막을 수 있습니다.

* **`init` (초기화 단계)**: 화면이 그려지기 전입니다. UI 속성 변경이나 초기 데이터 설정은 이 단계에서 수행하여, 렌더링이 한 번에 완료되도록 하는 것이 좋습니다.
* **`load` (로드 완료 단계)**: 화면 렌더링이 끝난 후입니다. 이미 그려진 화면을 조작하면 다시 그리는 비용이 발생하므로, `load`에서는 렌더링 후 필요한 후속 로직만 처리하는 것을 권장합니다.

**[권장 패턴] init 활용**
```javascript
function onBodyInit(e){
    // 렌더링 전에 속성을 설정하여 중복 렌더링 방지
    app.lookup("grd1").visible = false;
}
```

### 7.2 화면 갱신 제어 (`update` vs `asyncExec`)
eXBuilder6의 `DeferredUpdateManager`는 여러 변경 사항을 모아 한 번에 효율적으로 렌더링합니다.

* **`update()`**: 현재 변경 사항을 즉시 화면에 반영합니다. 이는 엔진의 최적화 메커니즘을 우회하여 강제로 그리기를 수행하므로, 잦은 호출은 성능 저하의 원인이 됩니다. 정확한 크기 계산 등 꼭 필요한 경우에만 제한적으로 사용하세요.
* **`asyncExec()`**: 현재 실행 중인 로직이 끝난 후, 다음 렌더링 사이클에 코드를 실행하도록 예약합니다. 화면 갱신 후의 후속 작업(예: 포커스 이동)을 처리할 때 권장되는 안전한 방식입니다.

**[패턴 비교]**
| 메서드 | 동작 시점 | 성능 영향 | 권장 여부 |
| :--- | :--- | :--- | :--- |
| **`asyncExec()`** | 화면 갱신 후 (비동기) | 낮음 | **권장** (화면 갱신 후 로직 실행 시) |
| **`update()`** | 호출 즉시 (동기) | 높음 | **주의** (크기 계산 등 필수 시에만) |

---

## 8. 데이터 통신 전략
### 8.1 비동기(Async) 통신 권장
과거에는 흐름 제어의 편의를 위해 동기(Sync) 통신을 사용하기도 했으나, 현대 웹 환경에서는 이는 사용자 경험을 해치는 요인으로 간주됩니다.
* **동기 통신 (Sync)**: 응답이 올 때까지 브라우저가 멈춥니다(Freezing). 최신 브라우저들은 메인 스레드에서의 동기 통신을 경고하거나 차단하는 추세입니다.
* **비동기 통신 (Async)**: 응답을 기다리는 동안에도 사용자는 화면을 조작할 수 있습니다. `Promise`, `async/await` 등의 모던 자바스크립트 문법을 활용하여 비동기 로직을 효율적으로 제어하세요.
* **권장**: 모든 데이터 통신은 **비동기 방식**을 표준으로 채택하는 것이 좋습니다.

---

## 9. 대용량 데이터 처리 참고
대량의 데이터를 조회할 때, 사용자가 오래 기다리지 않도록 **분할 전송(Streaming)** 방식을 활용할 수 있습니다.

* **Client**: `submit-progress` 이벤트를 활용해 데이터가 도착하는 대로 그리드를 갱신합니다.
* **Server**: 응답 헤더의 ContentType을 `text/tab-separated-values` (TSV)로 설정하고 행(Row) 단위로 데이터를 전송하면, 클라이언트는 전체 데이터가 로드되기 전에 일부를 먼저 표시할 수 있습니다.

---

## 10. 파일 다운로드 처리
`Submission`의 `responseType` 속성을 통해 파일 다운로드 방식을 제어할 수 있습니다.

### 10.1 대용량 파일: `responseType="filedownload"`
* **특징**: 브라우저의 기본 다운로드 매니저를 활용합니다. 메모리 부담이 적어 대용량 파일 처리에 적합합니다.
* **설정**:
  ```javascript
  submission.responseType = "filedownload";
  ```
  [![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2026-01/scaled-1680-/image-1768985885160.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2026-01/image-1768985885160.png)

### 10.2 소용량 파일: `responseType="blob"`
* **특징**: 데이터를 메모리에 Blob 객체로 받은 후 다운로드 처리합니다. 애플리케이션 내부 로직과 연동하기 좋으나, 파일 크기가 클 경우 메모리 부하가 발생할 수 있습니다.
* **설정**:
  ```javascript
  submission.responseType = "blob";
  ```
  [![](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2026-01/scaled-1680-/image-1768986029615.png)](https://bookstack.tomatosystem.co.kr/uploads/images/gallery/2026-01/image-1768986029615.png)

---

## 11. 브라우저 호환성 및 스크립트 표준
eXBuilder6는 다양한 브라우저 환경(IE 포함)을 지원하기 위해 기본적으로 ES5 표준을 준수합니다.

### 11.1 ES6+ 문법 사용 가이드
* 최신 문법(ES6 이상)은 개발 생산성을 높여주지만, Internet Explorer(IE)와 같은 구형 브라우저에서는 동작하지 않을 수 있습니다.
* 편집기에서 표시되는 **Warning**은 "현재 프로젝트 설정(또는 대상 브라우저)에서 호환되지 않을 수 있음"을 알려주는 안내 메시지입니다.
* **권장 전략**:
  * 대상 브라우저에 IE가 포함된다면, ES6 문법(화살표 함수, let/const 등) 사용 시 트랜스파일링(Transpiling)이 필요하거나 ES5 문법으로 작성해야 안전합니다.
  * IE를 지원하지 않는 프로젝트라면, 최신 문법을 적극 활용하셔도 무방합니다.

### 11.2 호환성 변환 예시 (ES6 → ES5)

| 문법 | ES6 (Modern) | ES5 (Legacy Support) |
| :--- | :--- | :--- |
| **변수 선언** | `let`, `const` | `var` |
| **null 병합 연산자** | `x ?? 5` | `x != null && x !== undefined` |
| **옵셔널 체인** | `phone?.model` | `phone && phone.model` |
| **화살표 함수** | `(a, b) => a + b` | `function(a, b) { return a + b; }` |
| **템플릿 문자열** | `` `Value: ${val}` `` | `"Value: " + val` |
| **비동기 처리** | `async` / `await` | `Promise` + `.then()` |

> **Note**: 프로젝트의 브라우저 지원 정책을 먼저 확인하시고, 이에 맞는 스크립트 표준을 따르는 것을 권장합니다.