예 제

주요 파일 및 디렉토리 구성

  • ○ GMS_ROOT/
    • - gms_init.bat : SL-GMS 환경 설정용 batch file
  • ○ GMS_ROOT/bin/
    • - 각종 Utility 및 binary 실행 파일들
    • - dxf2g.exe : AutoCAD .dxf 파일을 SL-GMS .g 파일로 conversion하는 utility
    • - emf2g.exe : .wmf (Windows Metafile) 파일을 .g 파일로 conversion하는 utility
    • - gm1.exe, m1g.exe : SL-GMS 모델파일 (g -> m1, m1 -> g) conversion utility
    • - m1java.exe : SL-GMS 모델파일을 JAVA 파일로 converting
  • ○ GMS_ROOT/jdemo/
    • - 샘플 데모 프로그램들 위치
  • ○ GMS_ROOT/jdoc/
    • - 사용자 Manual Directory
  • ○ GMS_ROOT/lib/
    • - SL-GMS 각종 jar 파일 위치
    • - KEYS : SL-GMS License 파일
    • - GmsRegister.html, gmsjregister.jar : 웹라이센스 발급을 위한 PIN 제공
  • ○ GMS_ROOT/dongle/
    • - Dongle License 발급을 위한 setup 파일 위치
  • ○ GMS_ROOT/symbols/, GMS_ROOT/work/
    • - 미리 만들어진 Template Symbol 파일들 위치

1. Model의 작성

  • 1. 게이지 모델 작성
    • x
  • 2. 시계 모델 작성
    • x
  • 모델을 구성하는 서브 모델을 작성합니다.
  • Submodel에 변수 값에 따른 게이지의 양과 특정값에서 Alert 창을 띄우도록 Dinamic을 입력합니다
    • x
  • 앞서 작성한 모델을 서브모델화 하여 3개를 삽입합니다
  • 변수명을 Renamed variable 을 통해 변경합니다
  • 아래와 같이 시뮬레이션 Data 파일을 작성해 모델을 Preview 해봅니다
    • x
    • x
  • 모델을 구성하는 서브 모델을 작성합니다.
    • x
  • Submodel에 변수 값에 따른 시계바늘의 회전을 위한 Dinamic을 입력합니다
    • x
  • 앞서 작성한 모델을 서브모델화 하여 3개를 삽입합니다
  • 변수명을 Renamed variable 을 통해 변경합니다

2. Java 애플릿의 작성

  • Java 프로그래밍을 위한 환경을 설정합니다
  • 환경 변수명 설정 예
    • x
  • m1java 유틸을 사용하여 SL-GMS 모델을 Converting 합니다
    • x
  • 모델이 있는 디렉토리에서 아래의 커멘드를 실행합니다
    • x
  • 생성되는 HTML 파일은 극히 간단한 형태입니다
    ★ 필요에 따라 수정을 통해 사용하실 수 있습니다
    • x
  • 생성된 HTML 파일을 웹브라우저로 열어봅니다
  • dat 파일도 코드에 변환되어 생성됨을 확인할 수 있습니다

3. 데이터 소스

  • 실제의 어플리케이션에서는 유저 독자적인 데이터 갱신이 필요합니다
    • - 생성 코드내의 updateVariables()라고 하는 메소드를 수정합니다.
    • - 변경하고 싶은 변수명과 같은 이름의 변수에 데이터를 설정 합니다.
  • 코드의 생성
    • - 2장에서 작성한 모델을 사용합니다.
    • - 시뮬레이션 파일(total_gage.dat)은 삭제합니다
    • - 아래의 옵션으로 m1java를 실행합니다
    • set OPTIONS=-classpath %GMS_CP%
    • m1java %OPTIONS% -w800 -h600 -u1000 -ex -jar -j -p total_gage
  • 생성된 파일내에서 updateVariables()를 찾아 수정합니다.
  • 다음과 같은 배치파일을 작성해 컴파일과 jar 파일의 작성을 실시합니다.
    • - 클래스 패스등을 미리 변수 OPTIONS 로 설정해 둡니다.
    • x
  • total_gage.html 파일을 웹 브라우저로부터 실행합니다
  • 데이터 갱신을 실시하는 부분을 다른 클래스로 분리해 생성할 수 있습니다
    • - SL-GMS 모델의 코드는 Applet과는 다른 독립한 클래스로서 생성됩니다
    • - Applet 코드는 유저가 제공할 필요가 있습니다
    • x
  • 아래의 옵션으로 m1java 를 실행합니다
    • x
  • total_gage_ds.java 파일을 아래와 같이 수정합니다
    • x
  • Applet 코드를 작성합니다 (total_gage_demo.java)
    • x
  • java.util.EventListener를 확장한 것입니다.
  • applet의 데이터를 주기적으로 갱신하려면 GmsTimerListener를 사용합니다.
  • startTimer(), stopTimer()로 타이머를 컨트롤 합니다
  • 매 주기에 gmsTimerFired()가 호출되어 지고 거기서 SL-GMS 모델의 갱신을 실행합니다.
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cMf total_gage_demo.jar total_gage_demo.class total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
  • 다음과 같은 HTML 파일을 작성해 웹브라우저를 통해 실행합니다 (total_gage_demo.html)
    • x
  • 2번째 이후의 코드 생성시에는 -dsmodel 대신에 -dsref 옵션을 사용합니다.
  • 이 옵션은 외부 데이터 소스 클래스를 참조하는 코드를 생성하고 데이터 소스 클래스의 코드는 생성하지 않습니다.
  • -dsref 옵션을 사용하면, 첫회에 -dsmodel 옵션을 지정해 생성된 데이터 소스 클래스를 덮어쓰기 하지 않고, 모델의 수정등을 반영시킬 수 있습니다.
  • 다만, 모델중의 다이나믹스에서 변수를 추가/삭제했을 경우에는 -dsmodel 옵션을 사용하고, 재차 데이터 소스 클래스를 출력할 필요가 있습니다.

4. 오브젝트의 선택

  • 마우스로 모델내의 오브젝트를 선택할 수 있도록 합니다.
  • 모델에 Start / Stop 버튼을 부가합니다.
  • Start 버튼으로 동작을 게시하고 Stop 버튼으로 동작을 정지합니다.
  • 모델의 수정
    • x
  • 아래의 옵션으로 m1java를 실행합니다
    • - set OPTIONS=-classpath %GMS_CP%
    • - m1java %OPTIONS% -w800 -h600 -ex -g -dsmodel total_gage
  • total_gage_ds.java를 아래 같이 수정합니다
    • x
    • x
    • x
  • java.util.EventListener를 확장한 것입니다.
  • SL-GMS의 오브젝트를 인식할 때에 실행합니다.
  • addGmsObjectListener()로 등록합니다.
  • GmsObjectSelected()에 선택된 오브젝트가 전달됩니다.
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cMf total_gage_demo.jar total_gage_demo.class total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
  • Total_gage.html 파일을 웹 브라우저로부터 실행합니다

5. Java 어플리케이션의 작성

  • main() 메소드를 마련합니다
  • 윈도우의 레이아웃을 결정해 표시합니다
  • 윈도우의 리사이즈와 클로우즈의 이벤트를 받는 메소드를 정의합니다
  • 앞서 만든 코드를 재사용합니다
    • x
    • x
    • x
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cmf Manifest.mf total_gage_demo.jar total_gage_demo*.class
    • - total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
  • 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
  • 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
  • 실행 결과
    • x

6. 마우스 이벤트의 감시

  • 모델의 수정
    • x
  • m1java로 java 코드를 생성합니다
    • - set OPTIONS=-classpath %GMS_CP%
    • - m1java %OPTIONS% -w800 -h600 -ex -g -dsmodel -getvars total_gage
    • - getvars 옵션을 지정 함으로서 total_gage_ds.java에 아래 메소드의 내용이 생성됩니다.
    • x
  • 원시 파일
    • x
    • x
    • x
    • x
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cmf Manifest.mf total_gage_demo.jar total_gage_demo*.class
    • - total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
  • 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
  • 어플리케이션의 실행
    • - 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
    • - Total_gage_demo.jar 파일만으로 실행 가능합니다.
  • GmsMouseListener & GmsMouseMotionListener
    • - java.util.EventListener를 확장한 것입니다
    • - SL-GMS의 오브젝트를 인식할 때에 사용합니다.
    • 구 분 GmsMouseListener GmsMouseMotionListener
      등 록 addGmsMouseListener() addGmsMouseMotionListener()
      메소드 - gmsMousePressed()
      - gmsMouseReleased()
      - gmsMouseClicked()
      - gmsMouseEntered()
      - gmsMouseExited()
      - gmsMouseDragged()
      - gmsMouseMoved()
  • 실행 결과
    • x

7. Zoom

  • 원시 파일
    • x
  • 코드수정 – total_gage_demo.java
    • x
    • x
    • x
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cmf Manifest.mf total_gage_demo.jar total_gage_demo*.class
    • - total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
  • 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
  • 어플리케이션의 실행
    • - 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
    • - Total_gage_demo.jar 파일만으로 실행 가능합니다.
    • - ActionListener
    • - addActionListener() 로 등록합니다.
    • - actionPerformed() 로 액션 이벤트를 받습니다.
  • 실행결과
    • x
  • Swing 컴퍼넌트의 이용
    • - 같은 작업을 Swing 컴퍼넌트로 구현해 보겠습니다.
    • - 화면 구성과 클래스
    • x
  • 원시 파일
    • x
  • 코드수정 – total_gage_demo.java
    • x
    • x
    • x
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cmf Manifest.mf total_gage_demo.jar total_gage_demo*.class
    • - total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
  • 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
  • 어플리케이션의 실행
    • - 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
    • - Total_gage_demo.jar 파일만으로 실행 가능합니다.
    • - ActionListener
    • - addActionListener() 로 등록합니다.
    • - actionPerformed() 로 액션 이벤트를 받습니다.
  • 실행결과
    • x

8. 화면 천이

  • 전환 화면의 작성
    • - 앞장에서 작성하였던 total_gage.m1 과 total_watch.m1 파일을 재사용합니다
    • x
  • 전환 화면의 코드 생성
    • - 아래와 같은 명령으로 모델을 Java 코드로 변환합니다
    • - set OPTIONS=-classpath %GMS_CP%
    • - m1java %OPTIONS% -w800 -h600 -ex -g -dsmodel total_watch
    • - 아래의 파일이 생성됩니다.
    • - total_watch.java
    • - total_watch_ds.java
    • - total_gage 관련 생성파일들은 전장 “Zoom”에서 사용한것을 재사용합니다
  • 원시 파일
    • x
  • 전환 화면측의 화면 갱신
    • - 전환된 화면의 데이터 갱신을 위해 코드를 수정합니다
    • x
  • 코드수정 – total_gage_demo.java
    • x
    • x
    • x
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
    • - javac %OPTIONS% total_watch.java
    • - javac %OPTIONS% total_watch_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cmf Manifest.mf total_gage_demo.jar total_gage_demo*.class
    • - total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
    • - total_watch_ds.class com/sl/gmsjrt/*.class
  • 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
  • 어플리케이션의 실행
    • - 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
  • 실행결과
    • x

9. 새 윈도우창 띄우기

  • 원시 파일
    • x
  • 코드수정 – total_gage_demo.java
    • x
    • x
    • x
    • x
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
    • - javac %OPTIONS% total_watch.java
    • - javac %OPTIONS% total_watch_ds.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cmf Manifest.mf total_gage_demo.jar total_gage_demo*.class
    • - total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
    • - total_watch_ds.class com/sl/gmsjrt/*.class
  • 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
  • 어플리케이션의 실행
    • - 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
  • 실행결과
    • x

10. 레이어

  • 베이스 화면의 작성
    • - 레이어를 겹쳐 사용하기 위한 베이스 화면이 필요합니다.
    • - SL-GMS Draw로 베이스화면을 작성하여 배경색으로 적당한 색을 채웁니다(main_layer.m1)
    • x
  • 레이어의 구성
    • - 레이어는 아래와 같이 구성합니다.
    • - 베이스가 되는 모델이 자신 위에 겹쳐지는 레이어를 배열로서 관리합니다.
    • x
  • 레이어용 모델의 수정
    • - 레이어로는 지금까지 작성한 2개의 모델을 사용합니다.
    • - total_gage
    • - total_watch
    • - 화면의 크기를 결정하는 background 가 없는 경우는 m1java의 옵션으로 설정할 수 있습니다.(-ef옵션)
  • 레이어 코드의 생성
    • - 아래와 같이 베이스 화면과 레이어의 코드를 작성합니다
    • x
  • 모델에 배경 구형이 없는 경우
    • - 아래와 같이 모델의 크기를 설정합니다.
    • x
    • - 이상으로 total_gage는 (0,0)-(72,54)의 크기를 가지는 모델로서 코드 생성됩니다.주:72 x54의 extent의 경우에 한정해“-ex72”옵션도 사용할 수 있습니다.
  • 원시 파일
    • x
  • 레이어의 가시성
    • - 각 레이어의 보여짐 여부를 체크 박스를 사용하여 설정할 수 있도록 합니다.
    • - ItemListener을 삽입
    • - 레이어 마다 체크 박스를 작성
    • - itemStateChanged ()을 정의
  • 코드수정 – total_gage_demo.java
    • x
    • x
    • x
  • 컴파일
    • - set OPTIONS=-classpath %GMS_CP%
    • - javac %OPTIONS% total_gage_demo.java
    • - javac %OPTIONS% total_gage.java
    • - javac %OPTIONS% total_gage_ds.java
    • - javac %OPTIONS% total_watch.java
    • - javac %OPTIONS% total_watch_ds.java
    • - javac %OPTIONS% main_layer.java
  • Jar 파일 생성
    • - jar xf %GMS_HOME%/lib/gmsjrt.jar
    • - jar cmf Manifest.mf total_gage_demo.jar total_gage_demo*.class
    • - total_gage.class total_gage_ds.class com/sl/gmsjrt/*.class
    • - total_watch_ds.class com/sl/gmsjrt/*.class
  • 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
  • 어플리케이션의 실행
    • - 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
  • 주 의
    • - 레이어로 설정된 각 모델내에 있는 오브젝트를 마우스 클릭으로 찾을 수 없습니다.
    • - 이것은 “-layer”옵션을 지정하면 findObject() 메소드의 코드를 생성하지 않기 때문입니다
  • 실행결과
    • x

11. User Function

  • 모델의 수정
    • - 제1장으로 작성한 모델을 재사용합니다.
    • - total_gage.m1 에 적당한 도형을 추가해 적당한 색으로 채운후 아래의 다이나믹을 설정합니다.
    • x
  • 유저 함수 코드의 작성
    • - 유저 함수는 UserFctns.java 라는 파일에 기술합니다.
    • - 이 파일에는 어플리케이션에서 사용하는 유저 함수를 모두 기술합니다.
    • - 아래와 같이 유저 함수의 코드를 기술합니다.
    • x
  • 유저 함수의 정의
    • - 유저 함수의 반환값이나 인수 형태등을 USERFCTNS.dat 파일에 기술하여 정의합니다
    • - USERFCTNS.dat 파일의 기술 형식은 다음과 같습니다
    • x
    • ※ 이 파일은 모델 파일과 같은 디렉토리에 위치시킵니다
    • - 함수명 myfunction 의 뒤로 이어 기술되고 있는 수치가 함수 및 인수의 정의이며 차례로 아래의 의미를 가집니다.
    • - 2 = 함수의 반환값이 int 인 것을 나타냅니다 → 반환값 type
    • - 3 = 함수의 인수가 3 개인 것을 나타냅니다 → 인수개수
    • - 2 = 함수의 제1 인수 m1 가 int 인 것을 나타냅니다 → 첫번째인수 type
    • - 2 = 함수의 제2 인수 m2 가 int 인 것을 나타냅니다 → 두번째인수 type
    • - 2 = 함수의 제3 인수 m3 가 int 인 것을 나타냅니다 → 세번째인수 type
  • 코드의 생성
    • - 아래의 옵션을 통해 m1java를 실행합니다.
    • - set OPTIONS=-classpath %GMS_CP%
    • - m1java %OPTIONS% -w800 -h600 -u1000 -ex -userfctns total_gage
    • - total_gage.java 파일내에 updateVariable()을 수정합니다.
    • x
  • Jar 파일의 작성
    • - 다음과 같은 배치파일을 작성해 컴파일과 jar 파일의 작성을 실시합니다.(run_demo.bat)
    • x
  • 실행결과
    • x

12. GISMO 액션

  • 버튼 모델의 작성
    • - 작업 디렉토리에 “GISMOS” 라는 이름의 서브 디렉토리를 작성합니다.
    • - GISMOS 디렉토리에 Push 버튼의 모델을 작성합니다.
    • x
  • 모델의 수정
    • - 6장에서 사용한 모델파일(total_gage.m1)을 재사용합니다.
    • - total_gage.m1 에 button 서브 모델을 인스턴스 한 후 rename variable을 통해 아래와 같이 설정합니다.
    • x
  • 유저함수 코드의 작성
    • - GISMO용 유저 함수는 UserFctns.java 파일에 기술합니다.
    • - 다음 페이지와 같이 유저 함수의 코드를 기술합니다.
    • - UserFctns.dat 파일은 다음과 같이 기술합니다.
    • x
    • x
    • x
  • 코드 생성
    • - m1java로 java 코드를 생성합니다.
    • - set OPTIONS=-j -ex -g -classpath %GMS_CP%
    • - m1java %OPTIONS% -w800 -h600 -getvars -gismo -userfctns total_gage
    • - m1java %OPTIONS% -w800 -h600 total_watch
    • - gismo 옵션은 “#”다이나믹을 이용할 때에 필요합니다.
    • - userfctns 옵션은 유저 함수를 사용하므로 필요합니다.
    • - trigger 라고 하는 변수의 형태를 지정하기 위해(때문에), 오른쪽의 내용의 total_gage.dat 를 작성합니다.
  • 원시 파일
    • x
  • 코드의 수정 – total_gage_demo.java
    • x
    • x
    • x
    • x
  • 코드의 작성 – total_gage_sub.java
    • - m1java 가 출력한 모델 클래스의 서브 클래스를 작성해, updateVariables() 메소드를 오버라이드(override) 하고 있습니다.
    • x
  • 코드의 작성 – total_watch_sub.java
    • - m1java 가 출력한 모델 클래스의 서브 클래스를 작성해, updateVariables() 메소드를 오버라이드(override) 하고 있습니다.
    • x
  • Jar 파일의 작성
    • - 다음과 같은 배치파일을 작성해 컴파일과 jar 파일의 작성을 실시합니다.
    • - 클래스 패스등을 미리, 변수 OPTIONS 로 설정해 둡니다 .
    • x
  • 어플리케이션의 실행
    • - 매니페스트 파일(Manifest.mf)의 내용
    • - Main-Class: total_gage_demo
    • - 다음과 같이 java 어플리케이션을 실행합니다.
    • - set OPTIONS= -classpath %GMS_CP%
    • - java %OPTIONS% -jar total_gage_demo.jar
  • 서브 클래스화
    • - m1java 가 출력한 코드의 서브 클래스를 작성해 필요한 메소드를 오버라이드(override) 하는 것으로, m1java 를 반복 실행했을 때에 수작업으로 기술한 코드가 덮어쓰기 되어 지워져 버리는 것을 막을 수 있습니다.
    • - 이번은 total_gage 와 total_watch 의 서브 클래스를 작성 하여 updateVariables() 메소드를 오버라이드(override) 하고 있습니다.
    • - m1java 가 출력한 코드에는 변경을 더할 필요가 없고 잘못해 수작업으로 기술한 코드를 지워 버리는 실수를 줄일 수 있습니다.
  • 실행결과
    • x
  • GISMO 버튼
    • - 마우스 클릭에 의해 눌러진 듯이 보이는 버튼입니다.
    • - 인스턴스 후의 슬캘링도 가능합니다.
    • - 3개의 부품으로 구성되어 있습니다.
    • x