---
title: "7.2. API 추가/삭제 기능 관련 API"
---
API 추가 및 삭제 기능은 선택적으로 제공할 수 있다. 이 기능을 제공하고자 하면, 다 음의 규격에따라 지원되어야 한다.
## 7.2.1. C API
### MC_knlMExecute
**프로토타입**
```c
M_Int32 MC_knlMExecute(char* symName, int parmCnt, ...)
```
**설명**
프로그램에 설치된 프로그램을 실행시킨다.
프로그램 내부에 존재하는 프로그램을 실행시키므로 같은 보안레벨을 가진다. 이 기능은 프로그램이 큰 경우, 여러 프로그램으로 나누어 부분(partial) 로딩함으로 서 프로그램 로딩속도를 향상시키고 오버레이(overlay)형태로 플랫폼이 지원하는 힙보다 큰 프로그램을 실행시킬 수 있다. 그 외의 동작은 MC_knlCExecute()기능과 일치한다.
**매개 변수**
- `symName` — [in] 프로그램 개발시 개발자가 부여한 심볼릭(symbolic)이름
- `parmCnt` — [in] 이 매개변수뒤에 연속해서 전달할 매개변수 수
**반환 값**
성공 생성된 프로그램 ID 실패 M_E_ACCESS - 만기일이 지났거나, 접근 권한이 없는 경우 M_E_NOMEMORY – 메모리가 부족한 경우 M_E_INVALID - 전달한 매개변수가 잘못된 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlLoad
**프로토타입**
```c
M_Int32 MC_knlLoad(char* execName, int parmCnt, ...)
```
**설명**
플랫폼에 설치된 동적로딩라이브러리를 로딩한다.
만기일이 지났거나 기타, 접근이 허락되지 않으면 에러값을 반환한다. 이 함수는 넌블라킹(non-blocking)함수이다. 프로그램이 라이브러리를 로딩하면 같은 메모리 공간에 존재하고 바로 라이브러리함수를 불러 사용할 수 있다. 서로 다른 프로그 램이 같은 라이브러리를 로딩하면 라이브러리는 한번만 로딩되고 공유된다. 라이 브러리는 명시적으로 해제될 수 없고, 해당 라이브러리를 사용하는 모든 프로그램 이 종료되면 자동으로 종료된다.
**매개 변수**
- `execName` — [in] 실행시킬 프로그램의 이름, MC_knlGetExecNames()에 의해 구해진
다.
- `parmCnt` — [in] 이 매개변수뒤에 연속해서 전달할 매개변수 수
**반환 값**
성공 생성된 프로그램 ID 실패 M_E_ACCESS - 만기일이 지났거나, 접근 권한이 없는 경우 M_E_NOMEMORY – 메모리가 부족한 경우 M_E_INVALID - 전달한 매개변수가 잘못된 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlMLoad
**프로토타입**
```c
M_Int32 MC_knlMLoad(char* symName, int parmCnt, ...)
```
**설명**
프로그램에 설치된 동적로딩라이브러리를 로딩한다.
프로그램 내부에 존재하는 라이브러리이므로 다른 프로그램과 공유될 수 없다. 이 기능은 프로그램이 큰 경우, 여러 라이브러리로 나누어 부분(partial) 로딩함으로 서 프로그램 로딩속도를 향상시키는데 사용할 수 있다. 그 외의 동작은 MC_knlLoad()기능과 일치한다.
**매개 변수**
- `symName` — [in] 프로그램 개발시 개발자가 부여한 심볼릭(symbolic)이름
- `parmCnt` — [in] 이 매개변수뒤에 연속해서 전달할 매개변수 수
**반환 값**
성공 생성된 프로그램 ID 실패 M_E_ACCESS - 만기일이 지났거나, 접근 권한이 없는 경우 M_E_NOMEMORY – 메모리가 부족한 경우 M_E_INVALID - 전달한 매개변수가 잘못된 경우
**부작용**
없음
**참고 항목**
없음
## 7.2.2. 자바 API
### mExecute
public static int mExecute(java.lang.String symName, java.lang.String[] args) 프로그램에 설치된 프로그램을 실행시킵니다. 프로그램 내부에 존재하는 프로그램을 실행시키므로 같은 보안레벨을 가집니다. 이 기능은 프로그램이 큰 경우, 여러 프로그 램으로 나누어 부분(partial) 로딩함으로서 프로그램 로딩속도를 향상시키고 오버레이 (overlay)형태로 플랫폼이 지원하는 힙보다 큰 프로그램을 실행시킬 수 있읍니다. 그 외의 동작은 execute()기능과 일치합니다.
Parameters: symName - 프로그램 개발시 개발자가 부여한 심볼릭(symbolic)이름 args - Main method()로 전달될 매개변수 Returns: 성공이면 살행된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
### load
public static int load(java.lang.String execName, java.lang.String[] args) 플랫폼에 설치된 동적로딩라이브러리를 로딩합니다. 만기일이 지났거나 기타, 접근이 허락되지 않으면 에러값을 반환합니다. 이 함수는 넌블라킹(non-blocking)함수입니다.
프로그램이 라이브러리를 로딩하면 같은 메모리공간에 존재하고 바로 라이브러리함수 를 불러 사용할 수 있읍니다. 서로 다른 프로그램이 같은 라이브러리를 로딩하면 라이 브러리는 한번만 로딩되고 공유됩니다. 라이브러리는 명시적으로 해제될 수 없고, 해 당 라이브러리를 사용하는 모든 프로그램이 종료되면 자동으로 종료됩니다.
Parameters: execName - 실행시킬 프로그램의 이름, getExecNames()함수에 의해 구해진다.
args - Main method()로 전달될 parameter Returns: 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환 See Also: getExecNames(String prgName, String version, String vendor)
### mLoad
public static int mLoad(java.lang.String symName, java.lang.String[] args) 프로그램에 설치된 동적로딩라이브러리를 로딩합니다. 프로그램 내부에 존재하는 라이 브러리이므로 다른 프로그램과 공유될 수 없읍니다. 이 기능은 프로그램이 큰 경우, 여러 라이브러리로 나누어 부분(partial) 로딩함으로서 프로그램 로딩속도를 향상시키 는데 사용할 수 있읍니다. 그 외의 동작은 load()기능과 일치합니다.
Parameters: symName - 프로그램 개발시 개발자가 부여한 심볼릭(symbolic)이름 args - Main method()로 전달될 parameter Returns: 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
---
title: "7.1. 한국어(EUC_KR) 지원을 위한 확장 유니코드"
---
기본적으로 KSC5601 에서 (0xA1A0-0xACFF)의 영역을 (0xE1A0-ECFF)의 영역으로 매핑시킨다. 변경하는 함수는 다음과 같다.
### A1 - 특수문자/기호
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A1A0** | | 、 | 。 | · | ‥ | … | ¨ | 〃 | – | — | ‖ | \ | ∼ | ‘ | ’ | |
| **A1B0** | “ | ” | 〔 | 〕 | 〈 | 〉 | 《 | 》 | 「 | 」 | 『 | 』 | 【 | 】 | ± | × |
| **A1C0** | ÷ | ≠ | ≤ | ≥ | ∞ | ∴ | ° | ′ | ″ | ℃ | Å | ¢ | £ | ¥ | ♂ | ♀ |
| **A1D0** | ∠ | ⊥ | ⌒ | ∂ | ∇ | ≡ | ≒ | § | ※ | ☆ | ★ | ○ | ● | ◎ | ◇ | ◆ |
| **A1E0** | □ | ■ | △ | ▲ | ▽ | ▼ | → | ← | ↑ | ↓ | ↔ | 〓 | ≪ | ≫ | √ | ∽ |
| **A1F0** | ∝ | ∵ | ∫ | ∬ | ∈ | ∋ | ⊆ | ⊇ | ⊂ | ⊃ | ∪ | ∩ | ∧ | ∨ | ¬ | |
### A2 - 특수문자/기호 2
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A2A0** | | ⇒ | ⇔ | ∀ | ∃ | ´ | ˜ | ˇ | ˘ | ˝ | ˚ | ˙ | ¸ | ˛ | ¡ | ¿ |
| **A2B0** | ∶ | ∮ | ∑ | ∏ | ¤ | ℉ | ‰ | ◁ | ◀ | ▷ | ▶ | ♤ | ♠ | ♡ | ♥ | ♧ |
| **A2C0** | ♣ | ⊙ | ◈ | ▣ | ◐ | ◑ | ▒ | ▤ | ▥ | ▨ | ▧ | ▦ | ▩ | ♨ | ☏ | ☎ |
| **A2D0** | ☜ | ☞ | ¶ | † | ‡ | ↕ | ↗ | ↙ | ↖ | ↘ | ♭ | ♩ | ♪ | ♬ | ㉿ | ㈜ |
| **A2E0** | № | ㏇ | ™ | ㏂ | ㏘ | ℡ | ꋦ | ® | ? | ? | ? | ? | ? | ? | ? | ? |
| **A2F0** | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | |
### A3 - 전각 영숫자/기호
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A3A0** | | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
| **A3B0** | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
| **A3C0** | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
| **A3D0** | P | Q | R | S | T | U | V | W | X | Y | Z | [ | ₩ | ] | ^ | _ |
| **A3E0** | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
| **A3F0** | p | q | r | s | t | u | v | w | x | y | z | { | | | } |  ̄ | |
### A4 - 한글 자모
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A4A0** | | ㄱ | ㄲ | ㄳ | ㄴ | ㄵ | ㄶ | ㄷ | ㄸ | ㄹ | ㄺ | ㄻ | ㄼ | ㄽ | ㄾ | ㄿ |
| **A4B0** | ㅀ | ㅁ | ㅂ | ㅃ | ㅄ | ㅅ | ㅆ | ㅇ | ㅈ | ㅉ | ㅊ | ㅋ | ㅌ | ㅍ | ㅎ | ㅏ |
| **A4C0** | ㅐ | ㅑ | ㅒ | ㅓ | ㅔ | ㅕ | ㅖ | ㅗ | ㅘ | ㅙ | ㅚ | ㅛ | ㅜ | ㅝ | ㅞ | ㅟ |
| **A4D0** | ㅠ | ㅡ | ㅢ | ㅣ | ㆔ | ㅥ | ㅦ | ㅧ | ㅨ | ㅩ | ㅪ | ㅫ | ㅬ | ㅭ | ㅮ | ㅯ |
| **A4E0** | ㅰ | ㅱ | ㅲ | ㅳ | ㅴ | ㅵ | ㅶ | ㅷ | ㅸ | ㅹ | ㅺ | ㅻ | ㅼ | ㅽ | ㅾ | ㅿ |
| **A4F0** | ㆀ | ㆁ | ㆂ | ㆃ | ㆄ | ㆅ | ㆆ | ㆇ | ㆈ | ㆉ | ㆊ | ㆋ | ㆌ | ㆍ | ㆎ | |
### A5 - 로마자 숫자/그리스 문자
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A5A0** | | ⅰ | ⅱ | ⅲ | ⅳ | ⅴ | ⅵ | ⅶ | ⅷ | ⅸ | ⅹ | ? | ? | ? | ? | ? |
| **A5B0** | Ⅰ | Ⅱ | Ⅲ | Ⅳ | Ⅴ | Ⅵ | Ⅶ | Ⅷ | Ⅸ | Ⅹ | ? | ? | ? | ? | ? | ? |
| **A5C0** | ? | Α | Β | Γ | Δ | Ε | Ζ | Η | Θ | Ι | Κ | Λ | Μ | Ν | Ξ | Ο |
| **A5D0** | Π | Ρ | Σ | Τ | Υ | Φ | Χ | Ψ | Ω | ? | ? | ? | ? | ? | ? | ? |
| **A5E0** | ? | α | β | γ | δ | ε | ζ | η | θ | ι | κ | λ | μ | ν | ξ | ο |
| **A5F0** | π | ρ | σ | τ | υ | φ | χ | ψ | ω | ? | ? | ? | ? | ? | ? | |
### A6 - 괘선(罫線)
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A6A0** | | ─ | │ | ┌ | ┐ | ┘ | └ | ├ | ┬ | ┤ | ┴ | ┼ | ━ | ┃ | ┏ | ┓ |
| **A6B0** | ┛ | ┗ | ┣ | ┳ | ┫ | ┻ | ╋ | ┠ | ┯ | ┨ | ┷ | ┿ | ┝ | ┰ | ┥ | ┸ |
| **A6C0** | ╂ | ┒ | ┑ | ┚ | ┙ | ┖ | ┕ | ┎ | ┍ | ┞ | ┟ | ┡ | ┢ | ┦ | ┧ | ┩ |
| **A6D0** | ┪ | ┭ | ┮ | ┱ | ┲ | ┵ | ┶ | ┹ | ┺ | ┽ | ┾ | ╀ | ╁ | ╃ | ╄ | ╅ |
| **A6E0** | ╆ | ╇ | ╈ | ╉ | ╊ | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| **A6F0** | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | |
### A7 - 단위 기호
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A7A0** | | ㎕ | ㎖ | ㎗ | ℓ | ㎘ | ㏄ | ㎣ | ㎤ | ㎥ | ㎦ | ㎙ | ㎚ | ㎛ | ㎜ | ㎝ |
| **A7B0** | ㎞ | ㎟ | ㎠ | ㎡ | ㎢ | ㏊ | ㎍ | ㎎ | ㎏ | ㏏ | ㎈ | ㎉ | ㏈ | ㎧ | ㎨ | ㎰ |
| **A7C0** | ㎱ | ㎲ | ㎳ | ㎴ | ㎵ | ㎶ | ㎷ | ㎸ | ㎹ | ㎀ | ㎁ | ㎂ | ㎃ | ㎄ | ㎺ | ㎻ |
| **A7D0** | ㎼ | ㎽ | ㎾ | ㎿ | ㎐ | ㎑ | ㎒ | ㎓ | ㎔ | Ω | ㏀ | ㏁ | ㎊ | ㎋ | ㎌ | ㏖ |
| **A7E0** | ㏅ | ㎭ | ㎮ | ㎯ | ㏛ | ㎩ | ㎪ | ㎫ | ㎬ | ㏝ | ㏐ | ㏓ | ㏃ | ㏉ | ㏜ | ㏆ |
| **A7F0** | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | |
### A8 - 라틴 확장/원문자/분수
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A8A0** | | Æ | Ð | ª | Ħ | ? | ? | ? | ? | Ł | Ø | Œ | º | Þ | Ŧ | ? |
| **A8B0** | ? | ㉠ | ㉡ | ㉢ | ㉣ | ㉤ | ㉥ | ㉦ | ㉧ | ㉨ | ㉩ | ㉪ | ㉫ | ㉬ | ㉭ | ㉮ |
| **A8C0** | ㉯ | ㉰ | ㉱ | ㉲ | ㉳ | ㉴ | ㉵ | ㉶ | ㉷ | ㉸ | ㉹ | ㉺ | ㉻ | ⓐ | ⓑ | ⓒ |
| **A8D0** | ⓓ | ⓔ | ⓕ | ⓖ | ⓗ | ⓘ | ⓙ | ⓚ | ⓛ | ⓜ | ⓝ | ⓞ | ⓟ | ⓠ | ⓡ | ⓢ |
| **A8E0** | ⓣ | ⓤ | ⓥ | ⓦ | ⓧ | ⓨ | ⓩ | ① | ② | ③ | ④ | ⑤ | ⑥ | ⑦ | ⑧ | ⑨ |
| **A8F0** | ⑩ | ⑪ | ⑫ | ⑬ | ⑭ | ⑮ | ½ | ⅓ | ⅔ | ¼ | ¾ | ⅛ | ⅜ | ⅝ | ⅞ | |
### A9 - 라틴 소문자 확장/괄호 문자
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **A9A0** | | æ | đ | ð | ħ | ı | ? | ? | ? | ł | ø | œ | ß | þ | ŧ | ? |
| **A9B0** | ? | ㈀ | ㈁ | ㈂ | ㈃ | ㈄ | ㈅ | ㈆ | ㈇ | ㈈ | ㈉ | ㈊ | ㈋ | ㈌ | ㈍ | ㈎ |
| **A9C0** | ㈏ | ㈐ | ㈑ | ㈒ | ㈓ | ㈔ | ㈕ | ㈖ | ㈗ | ㈘ | ㈙ | ㈚ | ㈛ | ㈜ | ⒜ | ⒝ |
| **A9D0** | ⒞ | ⒟ | ⒠ | ⒡ | ⒢ | ⒣ | ⒤ | ⒥ | ⒦ | ⒧ | ⒨ | ⒩ | ⒪ | ⒫ | ⒬ | ⒭ |
| **A9E0** | ⒮ | ⒯ | ⒰ | ⒱ | ⒲ | ⒳ | ⒴ | ⒵ | ⑴ | ⑵ | ⑶ | ⑷ | ⑸ | ⑹ | ⑺ | ⑻ |
| **A9F0** | ⑼ | ⑽ | ⑾ | ⑿ | ⒀ | ⒁ | ⒂ | ¹ | ² | ³ | ⁴ | ⁿ | ₁ | ₂ | ₃ | ₄ |
### AA - 히라가나
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **AAA0** | | ぁ | あ | ぃ | い | ぅ | う | ぇ | え | ぉ | お | か | が | き | ぎ | く |
| **AAB0** | ぐ | け | げ | こ | ご | さ | ざ | し | じ | す | ず | せ | ぜ | そ | ぞ | た |
| **AAC0** | だ | ち | ぢ | っ | つ | づ | て | で | と | ど | な | に | ぬ | ね | の | は |
| **AAD0** | ば | ぱ | ひ | び | ぴ | ふ | ぶ | ぷ | へ | べ | ぺ | ほ | ぼ | ぽ | ま | み |
| **AAE0** | む | め | も | ゃ | や | ゅ | ゆ | ょ | よ | ら | り | る | れ | ろ | ゎ | わ |
| **AAF0** | ゐ | ゑ | を | ん | | | | | | | | | | | | |
### AB - 가타카나
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **ABA0** | | ァ | ア | ィ | イ | ゥ | ウ | ェ | エ | ォ | オ | カ | ガ | キ | ギ | ク |
| **ABB0** | グ | ケ | ゲ | コ | ゴ | サ | ザ | シ | ジ | ス | ズ | セ | ゼ | ソ | ゾ | タ |
| **ABC0** | ダ | チ | ヂ | ッ | ツ | ヅ | テ | デ | ト | ド | ナ | ニ | ヌ | ネ | ノ | ハ |
| **ABD0** | バ | パ | ヒ | ビ | ピ | フ | ブ | プ | ヘ | ベ | ペ | ホ | ボ | ポ | マ | ミ |
| **ABE0** | ム | メ | モ | ャ | ヤ | ュ | ユ | ョ | ヨ | ラ | リ | ル | レ | ロ | ヮ | ワ |
| **ABF0** | ヰ | ヱ | ヲ | ン | ヴ | ヵ | ヶ | ? | | | | | | | | |
### AC - 키릴 문자
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **ACA0** | | А | Б | В | Г | Д | Е | Ё | Ж | З | И | Й | К | Л | М | Н |
| **ACB0** | О | П | Р | С | Т | У | Ф | Х | Ц | Ч | Ш | Щ | Ъ | Ы | Ь | Э |
| **ACC0** | Ю | Я | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| **ACD0** | ? | а | б | в | г | д | е | ё | ж | з | и | й | к | л | м | н |
| **ACE0** | о | п | р | с | т | у | ф | х | ц | ч | ш | щ | ъ | ы | ь | э |
| **ACF0** | ю | я | | | | | | | | | | | | | | |
---
title: "부속서"
---
본 규격의 보조 자료 및 확장 API 들을 모았습니다.
| 절 | 항목 |
|---|---|
| 6 | [참조 문헌](references.md) |
| 7.1 | [한국어 EUC-KR 확장 문자셋](euc-kr-extended.md) |
| 7.2 | [API 추가/삭제 기능 관련 API](api-management.md) |
| 7.3 | [보안 관련 API](security.md) |
| 7.4 | [Media 관련 API](media-ext.md) |
---
title: "7.4. Media 관련 API"
---
Media관련된 고급 기능은 선택적으로 제공할 수 있다. 이 기능을 제공하고자 하면, 다 음의 규격에따라 지원되어야 한다.
## 7.4.1. C API
### MC_MdaToneType
**프로토타입**
```c
typedef enum MC_MdaToneType {
MC_MDA_TONE_0 = 0 //DTMF for 0 key
MC_MDA_TONE_1 , //DTMF for 1 key
MC_MDA_TONE_2 , //DTMF for 2 key
MC_MDA_TONE_3 , //DTMF for 3 key
MC_MDA_TONE_4 , //DTMF for 4 key
MC_MDA_TONE_5 , //DTMF for 5 key
MC_MDA_TONE_6 , //DTMF for 6 key
MC_MDA_TONE_7 , //DTMF for 7 key
MC_MDA_TONE_8 , //DTMF for 8 key
MC_MDA_TONE_9 , //DTMF for 9 key
MC_MDA_TONE_A , //DTMF for A key
MC_MDA_TONE_B , //DTMF for B key
MC_MDA_TONE_C , //DTMF for C key
MC_MDA_TONE_D , //DTMF for D key
MC_MDA_TONE_POUND , //DTMF for # key
MC_MDA_TONE_STAR , //DTMF for * key
MC_MDA_NOTE_A4 , //4400 Hz -Piano Notes-
MC_MDA_NOTE_AS4 , //4661 Hz
MC_MDA_NOTE_B4 , //4938 Hz
MC_MDA_NOTE_C4 , //5232 Hz
MC_MDA_NOTE_CS4 , //5543 Hz
MC_MDA_NOTE_D4 , //5873 Hz
MC_MDA_NOTE_DS4 , //6222 Hz
MC_MDA_NOTE_E4 , //6592 Hz
MC_MDA_NOTE_F4 , //6985 Hz
MC_MDA_NOTE_FS4 , //7399 Hz
MC_MDA_NOTE_G4 , //7840 Hz
MC_MDA_NOTE_GS4 , //8306 Hz
MC_MDA_NOTE_A5 , //8800 Hz
MC_MDA_NOTE_AS5 , //9322 Hz
MC_MDA_NOTE_B5 , //9877 Hz
MC_MDA_NOTE_C5 , //10465 Hz
MC_MDA_NOTE_CS5 , //11087 Hz
MC_MDA_NOTE_D5 , //11746 Hz
MC_MDA_NOTE_DS5 , //12443 Hz
MC_MDA_NOTE_E5 , //13185 Hz
MC_MDA_NOTE_F5 , //13970 Hz
MC_MDA_NOTE_FS5 , //14799 Hz
MC_MDA_NOTE_G5 , //15680 Hz
MC_MDA_NOTE_GS5 , //16612 Hz
MC_MDA_NOTE_A6 , //17600 Hz
MC_MDA_NOTE_AS6 , //18647 Hz
MC_MDA_NOTE_B6 , //19755 Hz
MC_MDA_NOTE_C6 , //20931 Hz
MC_MDA_NOTE_CS6 , //22174 Hz
MC_MDA_NOTE_D6 , //23493 Hz
MC_MDA_NOTE_DS6 , //24891 Hz
MC_MDA_NOTE_E6 , //26370 Hz
MC_MDA_NOTE_F6 , //27937 Hz
MC_MDA_NOTE_FS6 , //29599 Hz
MC_MDA_NOTE_G6 , //31359 Hz
MC_MDA_NOTE_GS6 , //33224 Hz
MC_MDA_NOTE_A7 , //35200 Hz
} MC_MdaToneType;
```
**설명**
TONE TYPE의 열거형 소리의 음계를 나타낸다
### MC_mdaSetWaterMark
**설명**
MC_MDA_STATUS_END_OF_DATA, MC_MDA_STATUS_FULL_OF_DATA 이벤트가 발생할 수위선 (WaterMark)를 지정한다. 쉬위선이 90%로 설정되었을 경우, 재생중이라면 저장데 이타의 90%이상이 재생되면 MC_MDA_STATUS_END_OF_DATA 이벤트가 발생하고, 녹음 중이라면 저장버퍼의 90%이상이 차면 MC_MDA_STATUS_FULL_OF_DATA 이벤트가 발생 하게 된다. 기본값은 100%이다.
**프로토타입**
```c
void MC_mdaSetWaterMark(MC_MdaClip* clip, M_Int32 percent)
```
**매개 변수**
- `clip` — [in] 클립
- `percent` — [in] 수위선(0-100)
**반환 값**
없음
**부작용**
없음
**참고 항목**
### MC_mdaClipPutToneData
**설명**
클립 타입이 "audio/TONE"인 경우에 클립에 미디어 데이타를 복사한다. 미디어 데 이타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내의 데이타는 매체 재생기에서 재생되면 줄어들고, MC_mdaClipPutToneData()로 늘어나게 된다. 복사 할 데이타가 크기가 클립내부버퍼가 수용할 데이타보다 크면 수용할 수 있는 만큼 만 복사된다.
**프로토타입**
```c
M_Int32 MC_mdaClipPutToneData (MC_MdaClip* clip, MC_MdaToneType tone[] ,
M_Int duration[], M_Int32 number)
```
**매개 변수**
- `clip` — [in] 클립
- `tone` — [in] 재생할 톤의 배열
- `duration` — [in] 재생할 톤의 시간에 대한 배열
- `number` — [in] 복사할 갯수
**반환 값**
성공 복사된 갯수 실패 없음
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipPutFreqToneData
**설명**
클립 타입이 "audio/FREQTONE"인 경우에 클립에 미디어 데이타를 복사한다. 미디 어 데이타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내의 데이타는 매체재생기에서 재생되면 줄어들고, MC_mdaClipPutFreqToneData()로 늘어나게 된 다. 복사할 데이타가 크기가 클립내부버퍼가 수용할 데이타보다 크면 수용할 수 있는 만큼만 복사된다.
**프로토타입**
```c
M_Int32 MC_mdaClipPutFreqToneData (MC_MdaClip* clip, M_Int32 hiFreq[],
M_Int32 lowFreq[], M_Int32 duration, M_Int32 number)
```
**매개 변수**
- `clip` — [in] 클립
- `hiFreq` — [in] 재생할 고주파 HZ 배열
- `lowFreq` — [in] 재생할 저주파 HZ 배열
- `duration` — [in] 재생할 톤의 시간에 대한 배열
- `number` — [in] 복사할 갯수
**반환 값**
성공 복사된 갯수 실패 없음
**부작용**
없음
**참고 항목**
없음
## 7.4.2. Java API
가 Media (org.kwis.msp.media) Class Clip java.lang.Object | +--org.kwis.msp.media.Clip public class Clip extends java.lang.Object 이 클래스는 Player 에 의해 재생되는 클립을 구현한다.
Methods inherited from class java.lang.Object clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
### 필드 상세 설명
### SND_TONE_0
public static final int SND_TONE_0 DTMF for 0 key. 값은 0 이다.
### SND_TONE_1
public static final int SND_TONE_1 DTMF for 1 key. 값은 1 이다.
### SND_TONE_2
public static final int SND_TONE_2 DTMF for 2 key. 값은 2 이다.
### SND_TONE_3
public static final int SND_TONE_3 DTMF for 3 key. 값은 3 이다.
### SND_TONE_4
public static final int SND_TONE_4 DTMF for 4 key. 값은 4 이다.
### SND_TONE_5
public static final int SND_TONE_5 DTMF for 5 key. 값은 4 이다.
### SND_TONE_6
public static final int SND_TONE_6 DTMF for 6 key. 값은 6 이다.
### SND_TONE_7
public static final int SND_TONE_7 DTMF for 7 key. 값은 7 이다.
### SND_TONE_8
public static final int SND_TONE_8 DTMF for 8 key. 값은 8 이다.
### SND_TONE_9
public static final int SND_TONE_9 DTMF for 9 key. 값은 9 이다.
### SND_TONE_A
public static final int SND_TONE_A DTMF for A key. 값은 10 이다.
### SND_TONE_B
public static final int SND_TONE_B DTMF for B key. 값은 11 이다.
### SND_TONE_C
public static final int SND_TONE_C DTMF for C key. 값은 12 이다.
### SND_TONE_D
public static final int SND_TONE_D DTMF for D key. 값은 13 이다.
### SND_TONE_POUND
public static final int SND_TONE_POUND DTMF for # key. 값은 14 이다.
### SND_TONE_STAR
public static final int SND_TONE_STAR DTMF for * key. 값은 15 이다.
### SND_NOTE_A4
public static final int SND_NOTE_A4 440.0 Hz -Piano Notes-. 값은 16 이다.
### SND_NOTE_AS4
public static final int SND_NOTE_AS4 466.1 Hz. 값은 17 이다.
### SND_NOTE_B4
public static final int SND_NOTE_B4 493.8 Hz . 값은 18 이다.
### SND_NOTE_C4
public static final int SND_NOTE_C4 523.2 Hz. 값은 19 이다.
### SND_NOTE_CS4
public static final int SND_NOTE_CS4 554.3 Hz. 값은 20 이다.
### SND_NOTE_D4
public static final int SND_NOTE_D4 587.3 Hz. 값으 21 이다.
### SND_NOTE_DS4
public static final int SND_NOTE_DS4 622.2 Hz. 값은 22 이다.
### SND_NOTE_E4
public static final int SND_NOTE_E4 659.2 Hz . 값은 23 이다.
### SND_NOTE_F4
public static final int SND_NOTE_F4 698.5 Hz . 값은 24 이다.
### SND_NOTE_FS4
public static final int SND_NOTE_FS4 739.9 Hz . 값은 25 이다.
### SND_NOTE_G4
public static final int SND_NOTE_G4 784.0 Hz . 값은 26 이다.
### SND_NOTE_GS4
public static final int SND_NOTE_GS4 830.6 Hz. 값은 27 이다.
### SND_NOTE_A5
public static final int SND_NOTE_A5 880.0 Hz . 값은 28 이다.
### SND_NOTE_AS5
public static final int SND_NOTE_AS5 932.2 Hz. 값은 29 이다.
### SND_NOTE_B5
public static final int SND_NOTE_B5 987.7 Hz . 값은 30 이다.
### SND_NOTE_C5
public static final int SND_NOTE_C5 1046.5 Hz . 값은 31 이다.
### SND_NOTE_CS5
public static final int SND_NOTE_CS5 1108.7 Hz . 값은 32 이다.
### SND_NOTE_D5
public static final int SND_NOTE_D5 1174.6 Hz . 값은 33 이다.
### SND_NOTE_DS5
public static final int SND_NOTE_DS5 1244.3 Hz . 값은 34 이다.
### SND_NOTE_E5
public static final int SND_NOTE_E5 1318.5 Hz . 값은 35 이다.
### SND_NOTE_F5
public static final int SND_NOTE_F5 1397.0 Hz . 값은 36 이다.
### SND_NOTE_FS5
public static final int SND_NOTE_FS5 1479.9 Hz . 값은 37 이다.
### SND_NOTE_G5
public static final int SND_NOTE_G5 1568.0 Hz . 값은 38 이다.
### SND_NOTE_GS5
public static final int SND_NOTE_GS5 1661.2 Hz . 값은 39 이다.
### SND_NOTE_A6
public static final int SND_NOTE_A6 1760.0 Hz . 값은 40 이다.
### SND_NOTE_AS6
public static final int SND_NOTE_AS6 1864.7 Hz . 값은 41 이다.
### SND_NOTE_B6
public static final int SND_NOTE_B6 1975.5 Hz . 값은 42 이다.
### SND_NOTE_C6
public static final int SND_NOTE_C6 2093.1 Hz . 값은 43 이다.
### SND_NOTE_CS6
public static final int SND_NOTE_CS6 2217.4 Hz . 값은 44 이다.
### SND_NOTE_D6
public static final int SND_NOTE_D6 2349.3 Hz . 값은 45 이다.
### SND_NOTE_DS6
public static final int SND_NOTE_DS6 2489.1 Hz . 값은 46 이다.
### SND_NOTE_E6
public static final int SND_NOTE_E6 2637.0 Hz . 값은 47 이다.
### SND_NOTE_F6
public static final int SND_NOTE_F6 2793.7 Hz . 값은 48 이다.
### SND_NOTE_FS6
public static final int SND_NOTE_FS6 2959.9 Hz . 값은 49 이다.
### SND_NOTE_G6
public static final int SND_NOTE_G6 3135.9 Hz . 값은 50 이다.
### SND_NOTE_GS6
public static final int SND_NOTE_GS6 3322.4 Hz . 값은 51 이다.
### SND_NOTE_A7
public static final int SND_NOTE_A7 3520.0 Hz . 값은 52 이다.
### 생성자 상세설명
### Clip
public Clip(String type, int bufSize) 특정 타입의 CLIP 을 생성한다. 지원되는 타입은 HandsetProperty.getSystemProperty()의 "SOUNDDEVICES", "MEDIADEVICES"에 의해 구해진 타입들이다. 타입은 MIME에서 지원하는 타입일 경우 "audio/xxx", "video/xxx"와 같이 MIME타입을 따른다. "audio/TONE"인 경우에는 putData(int[] tone, int[] duration, int off, int len)로 데이타가 입력되어야 한다. 타입이 "audio/FREQTONE"인 경우에는 putData(int[] hiFreq, int[] lowFreq, int[] duration, int off, int len)로 데이타가 입력되어야 한다. 그외의 타입인 경우에는 putData(byte[] buf, int off, int len)를 통하여 CLIP 버퍼에 재생할 데이타를 입력한다. CLIP 내부 버퍼 크기는 재생하고자 하는 데이터의 크기만큼 생성 해야 한다.
CLIP 내부 버퍼크기는 CLIP 이 생성될때 만들어져 고정된다. 이벤트 listener함수가 설정되지 않으면 클립재생/녹음시의 상태변화가 전달되지 않는다. 지원되지 않는 타입의 CLIP object를 생성할려고 하면 IllegalArgumentException 이 발생한다.
Parameters:
### type - 리소스 타입
bufSize - 클립내부에 생성될 버퍼의 크기 1. 타입이 "audio/TONE"인 경우에 크기가 3이라면 putData(int[] tone, int[] duration, int off, int len)에서 int[3] tone, int[3] duration이 저장될수 있는 크기이다.
2. 타입이 "audio/FREQTONE"인 경우에 크기가 3이라면 putData(int[] hiFreq, int[] lowFreq, int[] duration, int off, int len)에서 int[3] hiFreq, int[3] lowFreq, int[3] duration가 저장될 수 있는 크기이다.
3. 그외의 타입인 경우 크기가 3이라면, putData(byte[] buf, int off, int len) 에서 byte[3] buf가 저장될 수 있는 크기이다.
### Clip
public Clip(String type) 특정 타입의 클립을 생성한다. Clip(String type, int bufSize)와 같으나, 내부버퍼을 생 성하지 않고 클립을 생성하는 것이 다른다. 이 생성자는 클립 생성시 내부버퍼크기를 모르고, 나중에 버퍼가 설정될 경우에 사용한다. 클립생성후 버퍼를 설정할 경우에는 setBuffer()을 사용한다.
Parameters:
### type - 리소스 타입
### Clip
public Clip(String type, byte[] buf) "audio/TONE", "audio/FREQTONE"타입외의 이미 데이타가 저장되어 있는 매개변수를 받아들여 클립을 생성한다. 그외는 Clip(String type, int bufSize)과 같다 Parameters:
### type - 리소스 타입
### buf - 데이타가 들어 있는 버퍼
### Clip
public Clip(int[] tone, int[] duration) "audio/TONE"타입의 이미 데이타가 저장되어 있는 매개변수를 받아들여 클립을 생성 한다. 그외는 Clip(String type, int bufSize)과 같다 Parameters:
### tone - 톤 데이타가 들어 있는 버퍼
duration - 시간 데이타가 들어 있는 버퍼
### Clip
public Clip(int[] hiFreq, int[] lowFreq, int[] duration) "audio/FREQTONE"타입의 이미 데이타가 저장되어 있는 매개변수를 받아들여 클립을 생성한다. 그외는 Clip(String type, int bufSize)과 같다 Parameters:
### hiFreq - 고주파데이타가 들어 있는 버퍼
lowFreq - 저주파데이타가 들어 있는 버퍼 duration - 시간 데이타가 들어 있는 버퍼
### Clip
public Clip(String type, String filename) 이미 데이타가 저장되어 있는 파일 이름을 받아들여 클립을 생성한다. 그외는 Clip(String type, byte[] buf)과 같다 Parameters:
### type - 리소스 타입
### filename - 데이타가 들어 있는 버퍼
### 메쏘드 상세설명
### getType
public java.lang.String getType()
### 클립의 Type을 구한다
Returns:
### Type 문자열
### setBuffer
public boolean setBuffer(byte[] buf, int dataSize) 클립의 내부버퍼을 설정한다.
Parameters:
### buf - 버퍼
dataSize - 버퍼안에 들어있는 데이타 크기 Returns: true : 버퍼 설정 성공, false : 이미 버퍼가 설정되어 있음
### setBuffer
public boolean setBuffer(int[] tone, int[] duration, int dataSize) 클립의 내부버퍼을 설정한다. "audio/TONE"타입의 데이타를 저장하는 내부버퍼를 설 정한다.
Parameters:
### buf - 버퍼
dataSize - 버퍼안에 들어있는 데이타 크기 Returns: true : 버퍼 설정 성공, false : 이미 버퍼가 설정되어 있음
### setBuffer
public boolean setBuffer(int[] hiFreq, int[] lowFreq, int[] duration, int dataSize) 클립의 내부버퍼을 설정한다. "audio/FREQTONE"타입의 데이타를 저장하는 내부버퍼 를 설정한다.
Parameters:
### buf - 버퍼
dataSize - 버퍼안에 들어있는 데이타 크기 Returns: true : 버퍼 설정 성공, false : 이미 버퍼가 설정되어 있음
### setWaterMark
public void setWaterMark(int percent) END_OF_DATA, FULL_OF_DATA 이벤트가 발생할 수위선(WaterMark)를 지정한다.
쉬위선이 90%로 설정되었을 경우, 재생중이라면 저장버퍼의 90%이상이 재생되면 END_OF_DATA이벤트가 발생하고, 녹음중이라면 저장버퍼의 90%이상이 차면 FULL_OF_DATA 이벤트가 발생하게 된다. 기본값은 100%이다.
Parameters: percent - 수위선(0-100)
### putData
public int putData(byte[] buf, int off, int len) 클립타입이 "audio/TONE", "a udio/FREQTONE"외의 경우에 클립에 미디어 데이타를 복사한다. 미디어 데이타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내의 데이타는 매체재생기에서 재생되면 줄어들고, putData(byte[] buf, int off, int len)로 늘 어나게 된다. 복사할 데이타가 크기가 클립내부버퍼가 수용할 데이타보다 크면 수용할
### 수 있는 만큼만 복사된다
Parameters:
### buf - 데이타 버퍼
### off - 버퍼 offset
### len - 복사할 크기
Returns:
### 복사된 크기
### putData
public int putData(int[] buf, int off, int len) 클립타입이 "audio/TONE", "audio/FREQTONE" 외의 경우에 클립에 미디어 데이타를 복사한다. 미디어 데이타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내의 데이타는 매체재생기에서 재생되면 줄어들고, putData(int[] buf, int off, int len)로 늘어 나게 된다. 복사할 데이타가 크기가 클립내부버퍼가 수용할 데이타보다 크면 수용할
### 수 있는 만큼만 복사된다
Parameters:
### buf - 데이타 버퍼
### off - 버퍼 offset
### len - 복사할 크기
Returns:
### 복사된 크기
### putData
public int putData(int[] tone, int[] duration, int off, int len) 클립 타입이 "audio/TONE"인 경우에 클립에 미디어 데이타를 복사한다. 미디어 데이 타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내의 데이타는 매체재생기 에서 재생되면 줄어들고, putData(int[] tone, int[] duration, int off, int len)()로 늘어나 게 된다. 복사할 데이타가 크기가 클립내부버퍼가 수용할 데이타보다 크면 수용할 수
### 있는 만큼만 복사된다
Parameters: tone - SND_TONE_XXX, SNT_NOTE_XXX값의 배열
### duration - 재생할 시간에 대한 배열
### off - 버퍼 offset
### len - 복사할 크기
Returns:
### 복사된 크기
### putData
public int putData(int[] hiFreq, int[] lowFreq, int[] duration, int off, int len) 클립 타입이 "audio/FREQTONE"인 경우에 클립에 미디어 데이타를 복사한다. 미디어 데이타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내의 데이타는 매체재 생기에서 재생되면 줄어들고, putData(int[] hiFreq, int[] lowFreq, int[] duration, int off, int len)로 늘어나게 된다. 복사할 데이타가 크기가 클립내부버퍼가 수용할 데이타
### 보다 크면 수용할 수 있는 만큼만 복사된다
Parameters:
### hiFreq - 고주파HZ 값의 배열
### lowFreq - 저주파HZ 값의 배열
### duration - 재생할 시간에 대한 배열
### off - 버퍼 offset
### len - 복사할 크기
Returns:
### 복사된 크기
### getData
public int getData(byte[] buf, int off, int len) 클립에서 버퍼로 미디어 데이타를 복사한다. 클립내의 데이타는 매체재생기에서 녹음 되면 늘어나고, getData(byte[] buf, int off, int len)로 줄어들게 된다. 클립내부의 데이 타가 전달한 버퍼보다 크면 버퍼크기만큼만 복사된다. 이 함수는 클립 타입이 "VOCODERDEVICES"에서 얻어진 타입일때 사용된다 Parameters:
### buf - 클립내부의 데이타가 복사될 버퍼
### off - 복사될 시작위치
### len - 복사될 크기
Returns:
### 복사된 크기
### availableDataSize
public int availableDataSize() 클립에서 이용가능한 데이타 크기(클립 내부버퍼 크기가 아님) Returns:
### 이용가능한 데이타 크기
### clearData
public void clearData() 클립내의 이용가능한 데이타를 모두 버린다.
### setPosition
public boolean setPosition(int ms) 재생을 시작을 위치를 설정한다. 재생위치 설정기능을 지원하지 않는 타입으로 생성된 클립에 이 함수를 호출할 경우, MediaUnsupportedException이 발생한다.
Parameters: ms - 클립 재생을 시작할 시작 시점(milli second) Returns: ture : 성공 false : 설정 실패
### getVolume
클립 재생기의 볼륨을 읽어온다. 클립 재생기의 독립적인 볼륨 설정을 지원할 경우, 이 함수는 클립 재생기의 볼륨을 읽어온다. 지원하지 않을 경우는, 클립생성 타입이 달라도 같은 볼륨소스를 가리킬 수 있다. 볼륨의 최소값은 0 이고, 최대값은 100이다.
Parameters: Returns: 성공 : 볼륨 값 (0-100 사이의 볼륨값)
### setVolume
public final boolean setVolume(int level) 클립 재생기의 볼륨을 설정한다. 클립 재생기의 독립적인 볼륨 설정을 지원할 경우, 이 함수는 클립 재생기의 볼륨을 설정한다. 지원하지 않을 경우는, 클립생성 타입이 달라도 같은 볼륨소스를 가리킬 수 있다. 설정할 볼륨의 최소값은 0 이고, 최대값은 100이다.
Parameters: level - 볼륨값 (0-100사이의 볼륨값)
### setListener
public void setListener(PlayListener listener) 클립 재생시 상태변화를 알려줄 listener를 등록한다.
Parameters: listener - 새로운 listener, 만일 null 이면 기존 것을 제거함
### playStart
protected void playStart(boolean repeat) Player.play(Clip clip, boolean repeat)메쏘드안에서 실제 재생함수를 부르기전 repeat 값을 매개변수로 불러준다.
Parameters: repeat - Player.play()에 전달된 repeat값
### playUpdate
public void playUpdate(int event, int parm) 클립 재생시 상태변화를 알린다. 전달되는 이벤트는 PlayListener.playUpdate()와 같다.
Parameters:
### event - 상태값
parm - 각 event에 추가 전달값이 있을 경우 사용
---
title: "6. 참조 문헌"
---
1. TIA/EIA/IS-637 Short Message Services for Wideband Spread Spectrum Cellular Systems
---
title: "7.3. SMS 관련 API"
---
SMS 관련된 고급 기능은 선택적으로 제공할 수 있다. 이 기능을 제공하고자 하면, 다 음의 규격에따라 지원되어야 한다.
## 7.3.1. 용어 정의
### 가 Teleservice ID
SMS 어플리케이션 식별자이다. (Identification, TIA/EIA/IS-637 참조)
## 7.3.2. Java API
- org.kwis.msf.io.URL
SMS를 사용하기 위하여 URL.find() 메쏘드에 다음의 URL(RFC1738 참조) 문자열을 전달한다.
### 소켓 URL 문자열 예 비고
sms://SHORTME .모드 read: SSAGE:read 운영체제에서 복사해옴 sms://<텔레서비스문자열>: sms://SHORTME .모드 delread: SMS <모드> SSAGE:send 운영체제로 부터 sms://SHORTME 옮겨옴 SSAGE:delread .모드 send: 전송용
## 7.3.3. C API
SMS 송수신에 관한 API 를 모은 것이다. SMS API 는 텔레서비스에 따라서 단문 메 시지,벨소리 다운로드,이미지 다운로드 등 다양한 서비스가 가능하다. SMS 메시 지 수신관련 API 는 운영체제가 수신하여 저장하고 있는 메시지를 복사해 오거나 옮겨오는 두가지 방식이 존재한다. SMS 메시지를 읽어 오거나 복사해 올 때는 MC_phnSmsOpen() 함수를 통해 생성된 메시지 리스트 식별자를 사용한다. 이 리스 트가 생성된 후에 운영체제에 도착하는 메시지를 이 리스트에 반영할 지 여부는 플랫폼 구현의 선택사항이다.
**참고 항목**
없음
### MC_SmsData
**프로토타입**
```c
typedef MC_SmsData {
/// SMS Message의 번호
M_Byte index;
/// 새로운 메시지 또는 읽었던 메시지 인지 구분. 0 이면 읽지 않은 메
시지, 1 이면 읽은 메시지
M_Byte class;
/// ASCII 문자열로 된 발신자 전화번호.
bar 없이 붙여 사용된다.
예)016-123-4567 ->0161234567
M_Byte callback[12];
/// 발신자 전화번호의 길이 data의 size.
M_Byte cb_size;
/// 수신된 데이터
M_Byte data[256];
/// 수신된 데이터의 사이즈.
M_Byte data_size;
/**
year 2byte,etc 1byte.
수신된 시간.
년 월 일 시 분 초
2 byte 1 byte 1 byte 1 byte 1 byte 1 byte
*/
M_Byte timer[7];
} MC_SmsData;
```
**설명**
수신되는 SMS 데이터 를 가진 구조체
### MC_SmsCmd
**프로토타입**
```c
typedef enum MC_SmsCmd{
MC_SMSCMD_READONLY = 0, // 메시지 상태를 변경하지 않으면서 읽는 명령
MC_SMSCMD_CHANGEREAD, // 메시지를 읽지 않은 상태에서 읽은 상태로 변
환시키는 명령어
MC_SMSCMD_DELETE, // 메시지를 삭제시키는 명령어
} MC_SmsCmd;
```
**설명**
SMS 메시지의 상태를 변화시키는 명령어
### MC_phnSmsOpen
**설명**
SMS 메시지 리스트를 연다.테레서비스 문자열에 해당하는 SMS 메시지가 존재하면 SMS 리스트 식별자를 리턴한다. 매개변수 del 이 0 이 아니면 MC_phnSmsRead() 로 읽어 온 메시지는 다시 읽어 올 수 없다. 텔레서비스들은 서비스 사업자에 따라 서 그 기능과 구현이 다르므로 추가 되는 서비스에 대해서 서비스문자열을 추가해 나간다. 현재는 단문메세지를 위한 "SHORTMSG, 방송메세지를 위한 “BROADCAST”, 음성메일을 위한 “VOICEMAIL” 이 세개의 텔레서비스 문자열만 정의한다. 매개변수 cmd 에 따라 운영체제에서 관리하는 SMS 메시지의 상태가 MC_phnSmsRead() 함수가 불릴 때 마다 변한다. 메시지의 상태는 “읽지 않은 상태”, “읽은 상태”, “삭제된 상태” 세가지를 가지며 각 상태는 MC_SMSCMD_READONLY , MC_SMSCMD_CHANGEREAD, MC_SMSCMD_DELETE 로 각각 제어된다. “삭제된 상태” 메시지는 MC_phnSmsRead() 로 읽혀지지 않는다. 메시지 상태는 MC_phnSmsRead() 읽었을 때 SMS 메시지 구조체 MC_SmsData 의 class 필드에 “읽지 않은 상태” 는 0, “읽은 상태”는 1 로 표시된 다. 현재 호출된 MC_phnSmsOpen()과 MC_phnSmsRead()으로 제어되는 메시지리스트 의 메시지 상태는 MC_phnSmsClose() 가 불리고 다음번 MC_phnSmsOpen() 과 MC_phSmsRead() 불렸을 때 변화가되었는지 확인할 수 있다.
**프로토타입**
```c
M_Int32 MC_phnSmsOpen(M_Byte* telIDString, MC_SmsCmd cmd)
```
**매개 변수**
- `telIDString` — 서비스 문자열(현재는 “SHORTMSG” 만 정의되어 있음)
- `cmd` — MC_phnSmsRead() 한 메시지의 상태를 변경시키는 명령어.
**반환 값**
성공 SMS 리스트 식별자 실패 M_E_NOTSUP - 해당 서비스를 지원하지 않는 경우 M_E_NOENT – 리스트에 메시지가 없을 경우 M_E_ISCONN - 이미 OPEN되어 있는 경우
**부작용**
없음
**참고 항목**
MC_phnSmsRead
### MC_phnGetSMSAvailable
**설명**
해당 SMS 리스트의 데이터 갯수를 얻어온다. MC_phnSmsRead 로 메시지를 하나씩 읽을 때마다 이 함수가 리턴하는 값은 1 씩 줄어 든다. 만일 SMS 메시지를 운영체 제에서 복사해 오거나 옮겨 오는 도중에 운영체제에 도착하는 메시지를 메시지 리 스트에 반영하는 플랫폼 이라면 MC_phnSmsRead() 를 호출할 때 마다 이 함수가 리 턴하는 값이 반드시 1 씩 줄어 들지 않을 수도 있다.
**프로토타입**
```c
M_Int32 MC_phnGetSMSAvailable(M_Int32 fd)
```
**매개 변수**
- `fd` — SMS 리스트 식별자
**반환 값**
성공 매세지 개수 실패 MC_E_BADFD(입력된 식별자가 맞지 않는 경우)
**부작용**
없음
**참고 항목**
MC_phnSmsRead
### MC_phnSmsClose
**설명**
해당 SMS 리스트 탐색을 끝마친다. MC_telSmsRead() 함수를 통해 데이터을 읽은 후 더이상 데이터가 존재하지 않는 경우 이 함수를 호출한다.
**프로토타입**
```c
M_Int32 MC_phnSmsClose(M_Int32 fd)
```
**매개 변수**
- `fd` — SMS 리스트 식별자
**반환 값**
성공 실패 MC_E_BADFD(입력된 식별자가 맞지 않는 경우)
**부작용**
없음
**참고 항목**
없음
### MC_phnSmsRead
**설명**
SMS 메시지를 읽어 온다. 이 함수는 한번에 하나의 메시지를 전달해 준다.
**프로토타입**
```c
M_Int32 MC_phnSmsRead(M_Int32 fd, MC_SmsData* buf)
```
**매개 변수**
- `fd` — SMS 리스트 식별자
- `buf` — 메시지가 저장될 버퍼
**반환 값**
성공 0 혹은 1 실패 M_E_BADFD - 입력된 식별자가 맞지 않는 경우 M_E_NOENT - 더 이상 읽을 메시지가 존재하지 않는 경우 M_E_INVALID – 메시지가 저장될 버퍼가 NULL 일 경우
**부작용**
없음
**참고 항목**
MC_phnSmsOpen
### MC_phnSmsSend
**설명**
SMS 메시지를 전송한다. 매개변수 telIDString 은 MC_phnSmsOpen()참조. 매개변수 buf 는 SMS 메시지 포맷의 사용자 데이터 버퍼에 실을 내용을 포함한다. 사용자 데이터는 256 바이트를 초과할 수 없다.
**프로토타입**
```c
M_Int32 MC_phnSmsSend(M_Byte* telIDString, M_Char* telnum , M_Byte* buf,
M_Int32 len)
```
**매개 변수**
- `telIDString` — 텔레서비스 문자열
- `telnum` — 상대방 전화번호
- `buf` — 사용자 데이터 버퍼
- `len` — 사용자 데이터버퍼의 크기
**반환 값**
성공 실패 M_E_NOTSUP - 해당 텔레서비스를 지원하지 않는 경우 M_E_INVALID – 버퍼의 크기가 잘 못 될 경우 M_E_ERROR – 기타 에러
**부작용**
없음
**참고 항목**
없음.
## 7.3.4. HAL API
플랫폼에서 지원하는 SMS 관련 함수들이다. SMS 메시지 리스트는 한번에 하나만 접근이 가능하다. 따라서 다른 텔레서비스에 해당하는 리스트에 접근하려면 현재 사용되는 SMS 메시지 리스트를 닫고 다시 다른 텔레서비스에 해당하는 SMS 메시지 리스트를 열어야 한다. SMS 메시지 리스트가 열려 있는 상태에서 운영체제에 새로 도착하는 메시지를 이 메시지 리스트에 반영할 것인가는 선택사항이다. SMS 메시 지 리스트가 열려 있어도 메시지 전송은 언제든지 가능하다. 새로운 SMS 데이터가 도착하면 운영체제는 MH_SMSEV_NEW 이벤트를 플랫폼에 보내 새 SMS 메시지 도착을 알려야 한다. 운영체제 MH_pltEvent() 함수에 매개변수로 MH_SMS_EVENT 와 MH_SMSEvent 를 넘겨주어 플랫폼에 이벤트를 전달한다.
- 관련 자료형
```c
// SMS 메시지를 읽어 올 때 쓰이는 구조체. TIA/EIA/IS-637 표준 참조
typedef struct MH_SmsData{
M_Byte index; // SMS 메시지의 번호;
M_Byte class; /*새로운 메시지 또는 읽었던 메시지 인지 구분. 0 은 새
로운 메시지, 1은 읽은 상태로 변한 메시지 */
M_Byte callback[16]; /* ASCII 문자열로 된 발신자 전화번호. “-“ 없음
*/
M_Byte cb_size; // callback 에 저장된 발신자 전화번호 길이.
M_Byte data[512]; // 수신된 데이터,CBS 의 경우에는 user data + url
callback + image data = max 512
M_Byte data_size; // 수신된 데이터의 사이즈.
M_Byte timer[7]; // 년0-99사이
/** 각각의 바이트는 정수값임
수신된 시간
년 월 일 시 분 초
1 byte 1 byte 1 byte 1 byte 1 byte 1 byte
*/
} MH_SmsData;
//운영체제가 저장하고 있는 SMS 메시지의 상태를 변화시키는 명령어
typedef enum MH_SmsCmd{
MH_SMSCMD_READONLY = 0, // 메시지 상태를 변경하지 않으면서 읽는 명령
MH_SMSCMD_CHANGEREAD , // 메시지를 읽지 않은 상태에서 읽은 상태로 변
환시키는 명령어
MH_SMSCMD_DELETE, // 메시지를 삭제시키는 명령어
} MH_SmsCmd;
//SMS 이벤트
typedef enum MH_SUB_SMS_EVENT {
MH_SMSEV_NEW = 0, // 새로운 메시지가 도착함
```
MH_SMSEV_SEND_NOTIFY //메시지가 전송되었을 경우에 전달함.
```c
} MH_SUB_SMS_EVENT;
//SMS 이벤트를 전달하는 구조체
typedef struct MH_SMSEvent{
M_Int32 event; // MH_SUB_SMS_EVENT값
M_Int32 parm1; //event가 MH_SMSEV_SEND_NOTIFY 일 때 실
제로 전송된 메시지 수, 전송 실패시 -1
//event가 MH_SMSEV_NEW일 때 메시지 저장
함 내의 인덱스
M_Int32 parm2;//event가 MH_SMSEV_NEW일 때 수신한 메시지의 tele -
Service ID
} MH_SMSEvent;
```
### MH_smsOpen
**설명**
텔레서비스 문자열에 해당하는 SMS 메시지 리스트를 연다. 매개변수 telIDString 을 분석한 후 그에 해당되는 텔레서비스(Teleservice)가 존재한다면 해당 리스트 의 식별자를 리턴한다. 이 문서에서 텔레서비스 아래의 세가지만 정의하며 다른 텔레서비스에 대한 문자열의 정의는 이 문서가 규정할 수 있는 범위 밖의 것이다.
입력 String 설명 “SHORTMSG” 단문 메시지 “BROADCAST” 방송메시지 “VOICEMAIL" 음성메일 메시지 매개변수 cmd 에 따라 운영체제에서 관리하는 SMS 메시지의 상태가 MH_smsGetNext() 함수가 불릴 때 마다 변한다. 메시지의 상태는 “읽지 않은 상태”, “읽은 상태”, “삭제된 상태” 세가지를 가지며 각 상태는 MH_SMSCMD_READONLY , MH_SMSCMD_CHANGEREAD, MH_SMSCMD_DELETE 로 각각 제어된다. “삭제된 상태” 메시 지는 MH_smsGetNext() 로 읽혀지지 않는다. 메시지 상태는 MH_smsGetNext() 읽었 을 때 SMS 메시지 구조체 MH_SmsData 의 class 필드에 “읽지 않은 상태” 는 0, “읽은 상태”는 1 로 표시된다. 현재 호출된 MH_smsOpen()과 MH_smsGetNext()으로 제어되는 메시지리스트의 메시지 상태는 MH_smsClose() 가 불리고 다음번 MH_smsOpen() 과 MH_smsGetNext() 불렸을 때 변화가되었는지 확인할 수 있다.
**프로토타입**
```c
M_Int32 MH_smsOpen (M_Char * tID, MH_SmsCmd cmd)
```
**매개 변수**
[in] telIDString teleservice ID String [in] cmd 메시지 상태를 변경하는 명령어
**반환 값**
성공 SMS 메시지 리스트 식별자 실패 M_E_NOTSUP – 해당 서비스를 지원하지 않는 경우 M_E_ERROR - 기타 이유로 실패할 경우 M_E_ISCONN – 해당 텔레서비스에 대한 리스트가 이미 열려 있는 경우
**부작용**
없음
**참고 항목**
없음
### MH_smsGetAvailable
**설명**
SMS 메시지 리스트의 갯수를 얻어 온다. 리턴되는 값은 MC_smsGetNext() 를 호출 할 때 마다 1 씩 감소하는 것이 일반적이지만 만약 운영체제가 리스트가 열려 있 는 상태에서 운영체제게 새롭게 도착하는 메시지를 열려 있는 리스트에 반영한다 면 MC_smsGetNext() 함수 호출 후에 이 함수가 리턴하는 값이 반드시 1 씩 감소하 지 않을 수도 있다.
**프로토타입**
```c
M_Int32 MH_smsGetAvailable (M_Int32 tID)
```
**매개 변수**
[in] tID 텔레서비스식별자
**반환 값**
성공:메시지 개수 실패: M_E_ERROR – 기타 이유로 인한 실패
**부작용**
없음
**참고 항목**
MH_smsGetNext
### MH_smsClose
**설명**
해당 SMS 메시지 리스트사용을 종료한다.
**프로토타입**
```c
void MH_smsClose (M_Int32 tID)
```
**매개 변수**
[in] tID SMS 메시지 리스트 식별자
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_smsGetNext
**설명**
SMS 메시지 리스트의 메세지를 하나씩 얻어 온다. 반환될 데이터가 더 이상 존재 하지 않는다면 M_E_NOENT 가 반환된다.
**프로토타입**
```c
M_Int32 MH_smsGetNext (
M_Int32 tID,
MH_SmsData *buf,
)
```
**매개 변수**
[in] tID SMS 메시지 리스트 식별자 [out] buf 메시지가 저장될 버퍼
**반환 값**
성공 실패 M_E_NOENT– 더 이상 읽을 메시지가 존재하지 않는 경우 M_E_ERROR – 기타 이유로 인한 실패
**부작용**
없음
**참고 항목**
없음
### MH_smsSend
**설명**
SMS 메시지를 전송한다. 송신자와 보낸 시간 등은 HAL 에서 처리한다. 전송하는 사용자 데이터는 256 바이트를 초과할 수 없다. 텔레서비스 문자열은 MH_smsOpen() 참조한다. 반환 값이 M_E_WOULDBLOCK 일 경우에는 시스템 내부요인 으로 지금 당장 데이터를 전송할 수 없다는 것을 의미한다. 이 경우 데이터를 처 리한후 전송여부에 대한 결과를 MH_SMSEV_SEND_NOTIFY 이벤트로 플랫폼에 전달되 어야 한다.
**프로토타입**
```c
M_Int32 MH_smsSend (M_Char* telIDString, M_Char* telnum, M_Byte* buf,
M_Int32 len)
```
**매개 변수**
[in] telIDString 텔레서비스 문자열 [in] telnum 상대방 전화번호 [in] buf 사용자 데이터 버퍼길이는 256 바이트를 넘길 수 없다.
[in] len 데이터의 길이
**반환 값**
성공: 0실패: M_E_ERROR - 기타 이유에 의해 실패 M_E_NOTSUP - 해당 텔레서비스를 지원하지 않는 경우 M_E_WODULDBLOCK – 시스템 내부 요인으로 지금 당장 데이터를 전송할 수 없는 경우
**부작용**
없음
**참고 항목**
MH_smsOpen
### MH_smsGetMaximumLength
**설명**
텔레서비스 문자열에 해당하는 SMS 메시지의 사용자 데이터 영역의 최대 지원길이 를 리턴한다.
**프로토타입**
```c
M_Int32 MH_smsGetMaximumLength (M_Char* telIDString)
```
**매개 변수**
[in] telIDString 텔레서비스 문자열
**반환 값**
성공: 메시지 사용자 데이터 영역의 최대 지원길이 실패: M_E_NOTSUP - 해당 텔레서비스를 지원하지 않는 경우
**부작용**
없음
**참고 항목**
없음.
### MH_smsGetDirect
**설명**
메시지 저장함으로부터 지정한 인덱스를 가진 메시지를 조회한다. 메시지 저장함 내에 지정한 인덱스를 가진 메시지가 없으면M_E_NOENT 가 반환된다..
**프로토타입**
```c
M_Int32 MH_smsGetDirect (M_Char * telIDString,M_Int32 idx,MH_SmsData *buf)
```
**매개 변수**
[in] telIDString tele-Service ID String(메시지 저장함을 구분함.) [in] idx 조회할 메시지의 인덱스 [out] buf 메시지가 저장될 버퍼
**반환 값**
성공: 실패: M_E_NOTSUP – 해당 tele-Service ID String이 존재하지 않을 때 M_E_NOENT - 지정한 인덱스를 가진 메시지가 존재하지 않는 경우
**부작용**
없음
**참고 항목**
없음
### MH_smsSetStateDirect
**설명**
메시지 저장함 내의 특정 메시지의 상태를 변경한다.
**프로토타입**
```c
M_Int32 MH_smsSetStateDirect(M_Char * telIDString,M_Int32 idx,MH_SmsCmd cmd)
```
**매개 변수**
[in] telIDString tele-Service ID String(메시지 저장함을 구분함.) [in] idx 조회할 메시지의 인덱스 [in] cmd 메시지 상태를 변경하는 명령어
**반환 값**
성공: 실패: M_E_NOTSUP - 해당 서비스를 지원하지 않는 경우 M_E_ERROR - 기타 이유로 실패할 경우,MH_smsOpen으로 개방된 메 시지 리스트에 대해 이 API를 호출할 경우에도 이 에러 값을 리턴한다.
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.12. 표준 C 라이브러리"
---
C언어 개발자의 개발 편의를 위해 다음의 표준 C 라이브러리를 지원 해야 한다. 지원 되는 함수들은 ANSI-C 인터페이스와 동일하게 지원한다. 자세한 내역은 다음과 같다.
#### 문자열 관련 함수(string.h)
```c
strcpy, strncpy, strcat, strncat, strcmp, strncmp, strchr, strrchr, strspn, strcspn, strpbrk, strstr, strlen, strtok, memcpy, memmove, memcmp, memchr, memset
```
#### 표준 라이브러리 함수(stdlib.h)
```c
atof, atoi, atoll, strtod, strtol, strtoul
```
#### 가변 매개변수 관련 함수(stdarg.h)
```c
va_list, va_start, va_arg, va_end
```
#### 시간 관련(time.h)
```c
clock, time, difftime, mktime, localtime, gmtime
```
---
title: "5.1.3. 데이터베이스"
---
데이터베이스 함수.
데이터를 레코드 단위로 저장하고, 찾으며 관리하기 위한 API 들이다.
레코드는 문자 어레이의 형태로 저장된다. 저장되는 데이터의 의미는 무시된다. 저장된 데이터의 논리적인 의미를 파악하는 것은 사용자의 몫이다. 레코드 크기는 처음 데이터베이스를 생성할 때 지정한 크기를 초과할 수 없다.
각 레코드는 데이터베이스 상에서 레코드 식별자라는 정수값으로 표현된다. 레코 드가 중간에 삭제되면 다음 레코드를 저장할 때 삭제된 레코드 식별자를 재사용한다. 레코드 식별자는 음수가 될 수 없다.
레코드의 빈번한 추가/삭제로 데이터베이스에 저장된 레코드의 개수와 데이터베이 스가 실제 플랫폼의 물리적인 영역에 저장된 용량이 차이가 날 수 있다.
하나의 응용 프로그램은 여러개의 데이터베이스를 생성할 수 있으며 자신이 생성 한 데이터베이스 모두에 접근이 가능한다. 하지만 대부분의 경우 다른 응용프로그램이 생성한 데이터베이스에 접근할 수 없다. 데이터베이스를 공유디렉토리에 생 성시키는 방법으로 여러 응용프로그램이 공유할 수도 있으며, 해당 응용프로그램 이 권한이 있다면 시스템 프로그램이 사용하는 데이터베이스에 접근할 수 있다. 이는 데이터베이스를 열 때 플래그를 지정해서 이루어진다.
모든 데이터베이스 함수는 함수의 수행이 끝난 후에 반환된다. 예를 들어 `MC_dbInsertRecord` 함수의 경우 데이터가 물리적인 저장영역에 쓰여진 후에 반환된 다. 따라서 이 함수가 반환된 즉시 `MC_dbSelectRecord` 로 바로 이전에 저장한 레코드를 가져 올 수 있다.
응용프로그램이 종료되더라도 데이터베이스는 수행이 종료된 시점의 상태대로 보존되어 다음 수행시에 이용할 수 있다. 하지만 응용프로그램이 플랫폼 상에서 지 워지면 해당 응용프로그램이 생성한 데이터베이스는 삭제된다.
**참고 항목**
없음
### MC_dbOpenDataBase
**설명**
데이터베이스를 연다.
데이터베이스의 공유 모드는 플래그로 지정할 수 있다. 고정크기의 레코드만 지원 한다. 레코드는 연속된 문자 어레이로 표현되며 레코드의 논리적인 의미는 데이터 베이스 사용자가 파악하고 있어야 한다.
**프로토타입**
```c
M_Int32 MC_dbOpenDataBase(M_Char* dataBaseName, M_Int32 recordSize, M_Boolean create, M_Int32 mode)
```
**매개 변수**
- `dataBaseName` - 데이터베이스 이름, 이름으로 쓸 수 있는 문자는 파일 시스템의 제한사항을 따른다.
- `recordSize` - 생성할 데이터베이스의 레코드 하나의 크기(byte 단위). 데이터베이 스가 이미 존재하는 경우 지정된 recordSize 는 무시되고 기존의 레코드 크기가 적용됨
- `create` - 만약 데이터베이스가 존재하지 않으면 새로 만들 것인지 여부
- `mode` - 데이터베이스의 공유 방법을 지정, `DIR_PRIVATE_ACCESS, DIR_SHARED_ACCESS, DIR_SYSTEM_ACCESS` 중 하나가 가능
**반환 값**
성공
- 데이터베이스 식별자(0 보다 큰 정수)
실패
- `M_E_NOENT` - create 가 거짓인데 데이터베이스가 존재하지 않는 경우
- `M_E_INVALID` - create 가 참인데 recordSize 가 0 이거나 음수인 경우, dataBaseName 이 NULL 인 경우, mode 가 위에서 기술한 셋 중 하나가 아닌 경우
- `M_E_ERROR` - 기타 데이터베이스를 열 수 없는 경우
**부작용**
없음
**참고 항목**
`MC_dbCloseDataBase`, `MC_fsOpen`
### MC_dbCloseDataBase
**설명**
데이터베이스를 닫는다.
**프로토타입**
```c
M_Int32 MC_dbCloseDataBase(M_Int32 dbId)
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
`MC_dbOpenDataBase`
### MC_dbDeleteDataBase
**설명**
데이터베이스를 삭제한다.
해당 응용프로그램이 접근 가능한 데이터베이스만 삭제가 가능한다. 열려있는 데이터베이스는 삭제할 수 없다.
**프로토타입**
```c
M_Int32 MC_dbDeleteDataBase(M_Char* dataBaseName, M_Int32 mode)
```
**매개 변수**
- `dataBaseName` - 삭제할 데이터베이스 이름
- `mode` - 어떤 접근권한에 있는 데이터베이스를 지울 것인지를 나타냄, `DIR_PRIVATE_ACCESS , DIR_SHARED_ACCESS, DIR_SYSTEM_ACCESS` 중 하나가 가능
**반환 값**
성공
- 0
실패
- `M_E_NOENT` - 데이터베이스가 존재하지 않는 경우
- `M_E_INUSE` - 데이터베이스가 닫혀 있지 않은 경우
- `M_E_INVALID` - dataBaseName 이 NULL 이거나, mode 가 위에서 기술한 셋 중 하나가 아닌 경우
- `M_E_ACCESS` – 접근 권한이 없는 데이터베이스를 지우려 하는 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
`MC_dbCloseDataBase`, `MC_fsOpen`
### MC_dbInsertRecord
**설명**
새로운 레코드를 데이터베이스에 추가한다.
버퍼에 저장된 데이터를 하나의 레코드로 데이터베이스에 저장한다. 저장할 버퍼 의 크기가 데이터베이스를 생성할 때 지정한 레코드 크기보다 작으면, 남는 영역 에 쓰레기값(garbage)이 저장되어 있을 수 있다.
`MC_dbSelectRecord` 는 레코드 크기 단위로 데이터를 읽어오기 때문에 레코드 크기보 다 작은 데이터를 저장했다면, 이후 다시 읽어들인 문자 어레이에서 실제 데이터 뒤에 쓰레기값(garbage)이 들어 있을 수 있다.
**프로토타입**
```c
M_Int32 MC_dbInsertRecord(M_Int32 dbId, M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `dbId` - 레코드를 추가할 데이터베이스 식별자
- `buf` - 데이터가 저장되어 있는 버퍼
- `len` - 저장할 데이터의 크기
**반환 값**
성공
- 레코드 식별자(0 보다 큰 정수)
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_DATABIG` - 데이터베이스의 레코드 크기보다 더 큰 데이터를 저장하려 하는 경우
- `M_E_INVALID` - len 이 0 이거나 음수인 경우, buf 가 NULL 인 경우
- `M_E_ERROR` - 기타 데이터를 저장할 수 없는 경우
**부작용**
없음
**참고 항목**
`MC_dbSelectRecord`, `MC_dbUpdateRecord`, `MC_dbDeleteRecord`
### MC_dbSelectRecord
**설명**
특정 레코드 식별자에 저장된 데이터를 돌려준다.
읽어들인 데이터는 버퍼에 복사되어 돌려진다. 이 함수를 호출한 이후에 버퍼의 내용을 바꾸더라도 데이터베이스에 저장된 레코드는 변하지 않는다. 버퍼의 크기 는 해당 데이터베이스의 레코드 크기보다 크거나 같아야 한다. 데이터베이스의 하 나의 레코드의 크기는 `MC_dbGetRecordSize` 함수로 알아올 수 있다.
**프로토타입**
```c
M_Int32 MC_dbSelectRecord(M_Int32 dbId, M_Int32 recId, M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
- `recId` - 레코드 식별자
- `buf` - 데이터를 받을 버퍼
- `len` - 버퍼의 길이
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_BADRECID` - 해당 레코드 식별자가 존재하지 않는 경우
- `M_E_INVALID` - len 이 0 이거나 음수인 경우, buf 가 NULL 인 경우
- `M_E_SHORTBUF` - 주어진 버퍼가 레코드 크기보다 작은 경우
- `M_E_ERROR` - 기타 이유로 레코드를 읽어올 수 없는 경우
**부작용**
없음
**참고 항목**
`MC_dbInsertRecord`, `MC_dbUpdateRecord`, `MC_dbDeleteRecord`
### MC_dbUpdateRecord
**설명**
특정 레코드의 데이터의 내용을 바꾼다. 해당 레코드 식별자에 저장되어 있던 내용을 새로운 내용으로 바꾼다.
**프로토타입**
```c
M_Int32 MC_dbUpdateRecord(M_Int32 dbId, M_Int32 recId, M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
- `recId` - 데이터 내용을 변경시킬 레코드 식별자
- `buf` - 새로이 저장할 데이터가 들어있는 버퍼
- `len` - 버퍼의 크기
**반환 값**
성공
- 0
실패
- `M_E_BADFD` 데이터베이스 식별자가 잘못된 경우
- `M_E_BADRECID` - 해당 레코드 식별자가 존재하지 않는 경우
- `M_E_DATABIG` - 갱신하려는 데이터가 데이터베이스 생성시에 지정한 레코드 크기보다 큰 경우
- `M_E_INVALID` - len 이 0 이거나 음수인 경우, buf 가 NULL 인 경우
- `M_E_ERROR` - 기타 이유로 레코드를 갱신할 수 없는 경우
**부작용**
없음
**참고 항목**
`MC_dbInsertRecord`, `MC_dbSelectRecord`, `MC_dbDeleteRecord`
### MC_dbDeleteRecord
**설명**
레코드를 데이터베이스에서 삭제한다.
매개변수로 받은 레코드 식별자에 해당하는 레코드를 지운다.
**프로토타입**
```c
M_Int32 MC_dbDeleteRecord(M_Int32 dbId, M_Int32 recId)
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
- `recId` - 지울 레코드의 식별자
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_BADRECID` - 해당 레코드 식별자가 존재하지 않는 경우
- `M_E_ERROR` - 기타 이유로 레코드를 지울 수 없는 경우
**부작용**
없음
**참고 항목**
`MC_dbInsertRecord`, `MC_dbSelectRecord`, `MC_dbUpdateRecord`
### MC_dbListRecords
**설명**
데이터베이스에 저장된 레코드들의 레코드 식별자를 돌려준다.
매개변수로 받은 정수형 배열에 데이터베이스에 저장된 레코드들의 레코드 식별자 를 저장해서 돌려준다. 돌려지는 레코드 식별자의 순서는 실제 레코드를 저장한 순서와 다를 수 있다.
**프로토타입**
```c
M_Int32 MC_dbListRecords(M_Int32 dbID, M_Int32* buf, M_Int32 len)
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
- `buf` - 받아온 레코드 식별자를 저장할 버퍼
- `len` - 버퍼의 크기
**반환 값**
성공
- 레코드 개수
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_INVALID` - len 이 0 이거나 음수인 경우, buf 가 NULL 인 경우
- `M_E_SHORTBUF` - 레코드 식별자를 받아올 버퍼가 너무 작은 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
`MC_dbSortRecords`
### MC_dbSortRecords
**설명**
데이터베이스에 저장된 레코드들의 정렬된 레코드 식별자를 돌려준다. 각 레코드를 바이트별로 비교해 정렬한다.
예를 들어 어떤 데이터베이스의 레코드 크기가 2 이고 아래와 같이 4 개의 레코드가 저장되어 있다면,
| 레코드 식별자 | 데이터 |
|:---:|:---:|
| 0 | `0x33 0x22` |
| 1 | `0x11 0x22` |
| 2 | `0x22 0xff` |
| 3 | `0x11 0xff` |
*
이 함수를 호출하면 매개변수로 받은 정수형 버퍼에 1, 3, 2, 0 순서로 레코드 식별자가 저장되어 돌려지며 4(레코드 개수)가 반환된다(매개 변수인 compare 와 filter 를 모두 NULL 로 넣은 경우).
응용 프로그램 작성자가 정렬 방법을 지정하거나 정렬에 사용할 레코드를 제한하는 기능은 이 함수의 매개 변수를 사용해 구현할 수 있다.
정렬할 때 두 개의 레코드의 순서를 정하는 방법을 compare 를 구현해 지정할 수 있다. compare 가 받는 매개 변수는 데이터베이스에 저장한 레코드이다. 이 함수 는 두 개의 레코드를 비교해서 첫번째 매개변수로 받은 레코드가 두번째 매개변수 로 받은 레코드보다 앞에 오면 0 보다 큰 정수를, 뒤에 오면 0 보다 작은 정수를, 두 개의 순서가 동일하면 0 을 반환해야 한다.
filter 는 특정 레코드를 정렬에 포함시킬 것인지 결정하는 함수이다. 레코드를 정렬에 포함시키려면 0 보다 큰 정수를, 정렬에서 제외하려면 0 을 반환해야 한다. filter 가 받는 매개 변수도 레코드이다.
함수를 호출한다 하더라도 저장된 데이터베이스의 구조는 변하지 않는다.
**프로토타입**
```c
M_Int32 MC_dbSortRecords(M_Int32 dbID, M_Int32* buf, M_Int32 len, M_Int32 (*compare)(const void *, const void *), M_Int32 (*filer)(const void *))
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
- `buf` - 받아온 레코드 식별자들를 저장할 버퍼
- `len` - 버퍼의 크기
- `compare` – 두 레코드를 비교하기 위한 함수 포인터, NULL 이면 앞의 예제처 럼 각 byte 별로 올림차순으로 정렬됨
- `filter` - 정렬에 사용할 레코드를 제한하는 함수 포인터, NULL이면 모든 레코드 를 정렬에 사용함 반환 값
성공
- 레코드 개수
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_INVALID` - len 이 0 이거나 음수인 경우, buf 가 NULL 인 경우
- `M_E_SHORTBUF` - 레코드 식별자를 받아올 버퍼가 너무 작은 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
`MC_dbListRecords`
### MC_dbGetAccessMode
**설명**
데이터베이스의 접근 권한을 돌려 준다.
해당 응용프로그램이 생성한 데이터베이스와, 서로 공유할 수 있는 데이터베이스, 시스템에서 사용하는 데이터베이스의 접근권한을 알아 볼 수 있다. 단 해당 응용 프로그램이 접근할 수 있는 데이터베이스만 접근 권한을 알아 볼 수 있다.
**프로토타입**
```c
M_Int32 MC_dbGetAccessMode(M_Char* dataBaseName)
```
**매개 변수**
- `dataBaseName` - 접근 권한을 알아볼 데이터베이스 이름
**반환 값**
성공
- `DIR_PRIVATE_ACCESS`, `DIR_SHARED_ACCESS`, `DIR_SYSTEM_ACCESS` 중 한가지 값
실패
- `M_E_NOENT` - 데이터베이스가 존재하지 않는 경우
- `M_E_INVALID` - dataBaseName 이 NULL 인 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
`MC_dbOpenDataBase`, `MC_fsOpen`
### MC_dbGetNumberOfRecords
**설명**
데이터베이스에 저장된 레코드 개수를 돌려준다.
**프로토타입**
```c
M_Int32 MC_dbGetNumberOfRecords(M_Int32 dbId)
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
**반환 값**
성공
- 레코드 개수
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
없음
### MC_dbGetRecordSize
**설명**
데이터베이스의 하나의 레코드 크기를 돌려준다.
**프로토타입**
```c
M_Int32 MC_dbGetRecordSize(M_Int32 dbId)
```
**매개 변수**
- `dbId` - 데이터베이스 식별자
**반환 값**
성공
- 레코드의 크기(byte)
실패
- `M_E_BADFD` - 데이터베이스 식별자가 잘못된 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
`MC_dbOpenDataBase`
### MC_dbListDataBases
**설명**
데이터베이스의 이름의 어레이를 돌려준다.
`DIR_PRIVATE_ACCESS` 로 생성한 데이터베이스와 `DIR_SHARED_ACCESS`, `DIR_SYSTEM_ACCESS` 로 생성한 데이터베이스 중 응용프로그램이 접근 가능한 데이터베이스의 이름을 돌려준다. 버퍼를 통해 돌려지는 각각의 데이터베이스는 NULL(\0)로 구분이 되며 리스트의 끝은 두개의 연속된 NULL 로 표현된다.
**프로토타입**
```c
M_Int32 MC_dbListDataBases(M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `buf` - 데이터베이스 이름을 저장할 버퍼
- `len` - 버퍼의 크기
**반환 값**
성공
- 데이터베이스의 개수(데이터베이스가 하나도 없는 경우도 성공한 것으로 간주함)
실패
- `M_E_SHORTBUF` - 어레이를 받아오기에 버퍼가 너무 작은 경우
- `M_E_INVALID` - len 이 0 이거나 음수인 경우, buf 가 NULL 인 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
`MC_dbOpenDataBase`, `MC_fsOpen`
---
title: "5.1.4. 파일시스템"
---
파일에 관련된 모듈이다.
계층적 디렉토리 구조를 가진 파일 시스템이 운영체제에서 지원함을 가정한다. 파일을 열고, 읽고, 쓰며, 파일의 정보를 읽어오는 것과 관련된 API 들이 포함된 다.
파일이름은 모두 절대경로로 되어 있다. 실제로는 플랫폼에서 허용하는 디렉토리 안에서 모든 파일을 만들고 지울 수 있게 되어있다. 사용자입장에서는 플랫폼에서 어떤 식으로 지원하든 상관없이 절대경로로 사용하면 된다.
구분자(separator)의 경우 유닉스 시스템의 관행을 따랐다. 그러므로 "/"를 사용하 면 된다.
다음과 같이 파일 경로를 인수로 갖는 API 는 접근 레벨도 함께 인수로 넣어주어야 한다.
- `MC_fsOpen`
- `MC_fsFileAttribute`
- `MC_fsRemove`
- `MC_fsRename`
- `MC_fsMkDir`
- `MC_fsRmDir`
- `MC_fsList`
접근 레벨은 다음과 같이 세가지가 있다.
- `MC_DIR_PRIVATE_ACCESS`: 자기 자신의 디렉토리로 접근
- `MC_DIR_SHARED_ACCESS` : 공유 디렉토리로 접근
- `MC_DIR_SYSTEM_ACCESS` : 시스템 공유 디렉토리로 접근
모든 응용프로그램은 자기 자신의 디렉토리로는 접근이 가능하고, 나머지 접근 수준은 권한을 받은 프로그램만이 접근 가능하도록 되어있다. 파일 공유시에 한 응 용 프로그램에서 Read/Write 로 열린 경우는 다른 응용 프로그램에서는 Read 만 할 수 있다. 위의 모든 API 는 blocking 이다. 곧, 모든 파일 operation 을 마친 후에 리턴 된다.
**참고 항목**
없음
### MC_FILE_OPEN_RDONLY
**설명**
읽기만 가능. `MH_FILE_OPEN_RDONLY` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_OPEN_RDONLY
```
### MC_FILE_OPEN_WRONLY
**설명**
쓰기만 가능. `MH_FILE_OPEN_WRONLY` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_OPEN_WRONLY
```
### MC_FILE_OPEN_WRTRUNC
**설명**
쓰기만 가능하고 파일이 존재하면 파일 크기를 0 으로 만듬. `MH_FILE_OPEN_WRTRUNC` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_OPEN_WRTRUNC
```
### MC_FILE_OPEN_RDWR
**설명**
읽기와 쓰기 모두 가능. `MH_FILE_OPEN_RDWR` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_OPEN_RDWR
```
### MC_FILE_IS_DIR
**설명**
파일 attribute 중 디렉토리를 나타내는 bit. `MH_FILE_IS_DIR` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_IS_DIR
```
### MC_MAX_FILENAME_LENGTH
**설명**
파일이름 최대 길이. `MH_MAX_FILENAME_LENGTH` 로 정의한다.
**프로토타입**
```c
#define MC_MAX_FILENAME_LENGTH
```
### MC_DIR_PRIVATE_ACCESS
**설명**
자기 자신의 디렉토리로 접근. 1 로 정의한다.
**프로토타입**
```c
#define MC_DIR_PRIVATE_ACCESS
```
### MC_DIR_SHARED_ACCESS
**설명**
공유 디렉토리로 접근. 2 로 정의한다.
**프로토타입**
```c
#define MC_DIR_SHARED_ACCESS
```
### MC_DIR_SYSTEM_ACCESS
**설명**
시스템 디렉토리로 접근. 3 으로 정의한다.
**프로토타입**
```c
#define MC_DIR_SYSTEM_ACCESS
```
### MC_FILE_SEEK_SET
**설명**
파일의 처음을 기준으로 파일포인터의 위치를 설정. `MH_FILE_SEEK_SET` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_SEEK_SET
```
### MC_FILE_SEEK_CUR
**설명**
파일의 current position 을 기준으로 파일포인터의 위치를 설정. `MH_FILE_SEEK_CUR` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_SEEK_CUR
```
### MC_FILE_SEEK_END
**설명**
파일의 끝을 기준으로 파일포인터의 위치를 설정. `MH_FILE_SEEK_SET` 로 정의한다.
**프로토타입**
```c
#define MC_FILE_SEEK_SET
```
### MC_fsOpen
**설명**
파일을 엽니다. aMode의 값에 따라 열고자 하는 디렉토리의 위치가 달라집니다. 파일 이름은 30 자로 제한합니다.
**프로토타입**
```c
M_Int32 MC_fsOpen(M_Char* name, M_Int32 flag, M_Int32 aMode)
```
**매개 변수**
- `name` - 파일이름
- `flag`
- `MC_FILE_OPEN_RDONLY` 읽기만 가능 MC_FILE_OPEN_WRONLY 쓰기만 가능
- `MC_FILE_OPEN_WRTRUNC` 열기만 가능하고 파일이 존재하면 파일크기가 0 이 됩니다.
- `MC_FILE_OPEN_RDWR` 읽기와 쓰기가 모두 가능
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` system 디렉토리에 접근
**반환 값**
성공
- 파일 식별자
실패
- `M_E_ERROR` - 기타 이유로 실패
- `M_E_NOENT` - `MC_FILE_OPEN_RDONLY` 로 열 경우 파일이 없음
- `M_E_BADFILENAME` - 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 파일이름의 길이가 최대 길이를 초과할 경우
- `M_E_INVALID` - flag 가 잘못됨
- `M_E_NOSPACE` - 파일 시스템의 남은 공간이 없음
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
mkdir aMode의미 참조
### MC_fsRead
**설명**
파일을 읽는다. len 크기의 byte 만큼 buf 로 읽는다.
**프로토타입**
```c
M_Int32 MC_fsRead(M_Int32 fd, M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `fd` - 파일 식별자
- `buf` - 파일에서 읽어들인 데이타가 저장되는 버퍼
- `len` - 읽어들일 byte 수
**반환 값**
성공
- 실제 읽어들인 byte 수
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFD` - 파일 식별자가 잘못됨
- `M_E_EOF` - 파일 끝임
**부작용**
없음
**참고 항목**
없음
### MC_fsWrite
**설명**
파일을 쓴다. buf 에 있는 내용을 len 크기의 byte 만큼 쓴다.
**프로토타입**
```c
M_Int32 MC_fsWrite(M_Int32 fd, M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `fd` - 파일 식별자
- `buf` - 파일에 쓸 데이타가 저장되는 버퍼
- `len` - 쓸 byte 수
**반환 값**
성공
- 실제 써진 byte 수
실패
- `M_E_ERROR` - fail
- `M_E_BADFD` - 파일 식별자가 잘못됨
- `M_E_NOSPACE` - 파일시스템의 여유공간이 없음
**부작용**
없음
**참고 항목**
없음
### MC_fsClose
**설명**
파일을 닫다
**프로토타입**
```c
M_Int32 MC_fsClose(M_Int32 fd)
```
**매개 변수**
- `fd` - 파일 식별자
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFD` - 파일 식별자가 잘못됨
**부작용**
없음
**참고 항목**
없음
### MC_fsSeek
**설명**
파일을 읽고 쓸 때 현재 읽고 쓰는 위치를 나타내는 파일 포인터의 위치를 조정한 다
**프로토타입**
```c
M_Int32 MC_fsSeek(M_Int32 fd, M_Int32 pos, M_Int32 where)
```
**매개 변수**
- `fd` - 파일 식별자
- `pos` - 새로 설정할 파일포인터의 위치
- `where`
- `MC_FILE_SEEK_SET` 파일의 처음을 기준으로 파일포인터의 위치를 설정
- `MC_FILE_SEEK_CUR` 파일의 current position 을 기준으로 파일포인터의 위치를 설정
- `MC_FILE_SEEK_END` 파일의 끝을 기준으로 파일포인터의 위치를 설정
**반환 값**
성공
- 파일포인터의 현재 위치
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFD` - 파일 식별자가 잘못됨
- `M_E_INVALID` - where 가 잘못된 값
- `M_E_BADSEEKPOS` - 파일포인터가 파일크기의 범위를 벗어남
**부작용**
없음
**참고 항목**
없음
### MC_fsFileAttribute
**설명**
파일의 현재 특성을 구한다. 인수로 들어가는 `MC_FileInfo` 의 구조는 다음과 같다.
```c
struct _fileInfo{
M_Int32 attrib; // 파일의 특성을 표시한 bit mask들
M_Uint32 creationTime; // 파일이 생성된 시간을 1970 년 1 월 1 일 이후 초단위로 나타낸다.
M_Uint32 size; // 파일의 크기
};
```
위 구조체에서 파일 특성을 표시하는 bit mask 의 경우는 아래의 예제와 같이 사 용할 수 있다.
fa->attrib 에 `MC_FILE_IS_DIR` bit 가 설정되어 있으면 directory 임.
```c
// program A
MC_FileInfo fi;
...
int rtn = MC_fsFileAttribute("B", &fi, MC_DIR_PRIVATE_ACCESS);
if ( fi.attrib & MC_FILE_IS_DIR ) {
// direcorty임
} else {
}
...
```
**프로토타입**
```c
M_Int32 MC_fsFileAttribute(M_Char* name, MH_FileInfo* fa, M_Int32 aMode)
```
**매개 변수**
- `name` - 파일 이름
- `fa` - 파일 attribute structure 포인터
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFILENAME` - 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 파일이름의 길이가 최대 길이를 초과할 경우
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
mkdir aMode 의미 참조
### MC_fsRemove
**설명**
파일을 삭제한다. 이미 열려 있는 파일은 지울 수 없다.
**프로토타입**
```c
M_Int32 MC_fsRemove(M_Char* name, M_Int32 aMode)
```
**매개 변수**
- `name` - 파일 이름
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFILENAME` - 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 파일이름의 길이가 최대 길이를 초과할 경우
- `M_E_NOENT` - 파일이 존재하지 않음
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
mkdir aMode 의미 참조
### MC_fsRename
**설명**
파일이름을 변경한다. 변경할려고 하는 파일이름이 이미 존재할 경우는 이름을 변경할 수 없다.
**프로토타입**
```c
M_Int32 MC_fsRename(M_Char* oldname, M_Char* newname, M_Int32 aMode)
```
**매개 변수**
- `oldname` - 변경전 파일이름
- `newname` - 변경할 파일이름
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 0
실패
- `M_E_ERROR` - 기타 이유로 실패
- `M_E_BADFILENAME` - 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 파일이름의 길이가 최대 길이를 초과할 경우
- `M_E_EXIST` - 변경할려고 하는 파일이름이 존재함
- `M_E_NOSPACE` - 파일시스템의 여유공간이 없음
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
mkdir aMode 의미 참조
### MC_fsMkDir
**설명**
디렉토리를 만든다. 프로그램은 aMode 의 값에 따라 접근 권한이 다른 영역에 디 렉토리를 만들 수 있다.
**프로토타입**
```c
M_Int32 MC_fsMkDir(M_Char* dirName, M_Int32 aMode)
```
**매개 변수**
- `dirName` - 디렉토리 이름
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_EXIST` - 이미 디렉토리가 존재함
- `M_E_NOENT` - parent 디렉토리가 존재하지 않음
- `M_E_BADFILENAME` - 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 디렉토리 이름의 길이가 최대 길이를 초과할 경우
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
없음
### MC_fsRmDir
**설명**
디렉토리를 삭제한다. 디렉토리 안에 파일이나 하위 디렉토리가 남아 있을 경우 삭제가 되지 않는다.
**프로토타입**
```c
M_Int32 MC_fsRmDir(M_Char* dirName, M_Int32 aMode)
```
**매개 변수**
- `dirName` - 디렉토리 이름
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_NOENT` - 디렉토리가 존재하지 않음
- `M_E_NOTEMPTY` - 디렉토리내에 파일이나 디렉토리가 존재함
- `M_E_BADFILENAME` - 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 디렉토리 이름의 길이가 최대 길이를 초과할 경우
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
mkdir aMode 의미 참조
### MC_fsList
**설명**
디렉토리안에 존재하는 파일및 디렉토리 이름의 목록을 구한다. 파일및 디렉토리 이름들은 null terminator string 으로 buf 에 연속적으로 저장되어 리턴된다. 목 록의 끝은 null 이 연속적으로 두번온다.
예를 들면 아래와 같다.
만약 디렉토리 안에 파일이 file1 과 file2 라는 이름으로 있을 경우,
`file1\0file2\0\0`
**프로토타입**
```c
M_Int32 MC_fsList(M_Char* name, M_Char* buf, M_Int32 bufSize, M_Int32 aMode)
```
**매개 변수**
- `name` - 디렉토리 이름
- `buf` - 파일및 디렉토리 이름들이 저장되어 return 되는 buf
- `bufSize` - buf 크기
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFILENAME` - 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 디렉토리 이름의 길이가 최대 길이를 초과할 경우
- `M_E_SHORTBUF` - buf 크기가 모자람
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
mkdir aMode 의미 참조
### MC_fsTotalSpace
**설명**
파일 시스템 총 공간을 구한다
**프로토타입**
```c
M_Int32 MC_fsTotalSpace()
```
**반환 값**
성공
- 파일 시스템 전체 크기(byte)
실패
- `M_E_ERROR` – 기타 이유로 실패
**부작용**
없음
**참고 항목**
없음
### MC_fsAvailable
**설명**
파일 시스템에서 남아있는 공간을 구한다
**프로토타입**
```c
M_Int32 MC_fsAvailable()
```
**반환 값**
성공
- 남아있는 파일 시스템 크기(byte)
실패
- `M_E_ERROR` – 기타 이유로 실패
**부작용**
없음
**참고 항목**
없음
### MC_fsSetMode
**설명**
파일의 속성을 변경한다. 변경가능한 속성은 아래의 매개변수 table 의 fmode 값을 참조한다. 기본적으로 모든 응용프로그램은 자기 자신의 디렉토리로는 접근이 가능하고, 나머지 접근 수준은 권한을 받은 프로그램만이 접근 가능하도록 되어있다.
**프로토타입**
```c
M_Int32 MC_fsSetMode(char* fileName, M_Int32 fmode, M_Int32 aMode)
```
**매개 변수**
- [in] `filename` - 파일의 절대 경로명
- [in] `fmode` - 파일 속성 mode
| fmode | 의미 | 값 |
|---|---|:---:|
| `MH_FILEMODE_RDONLY` | 읽기 전용 모드이면 세팅된다. | 1 |
| `MH_FILEMODE_WRONLY` | 쓰기 전용 모드이면 세팅된다. | 2 |
| `MH_FILEMODE_RDWR` | 읽기/쓰기 모드이면 세팅된다. | 3 |
- [in] `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- `M_E_SUCCESS` – 성공
실패
- `M_E_ERROR` - 기타 이유로 실패
- `M_E_BADPATHNAME` - 파일의 절대 경로명 형식이 잘못됨
- `M_E_LONGNAME` - 파일이름의 길이가 최대 길이를 초과할 경우
- `M_E_INVALID` - mode 가 잘못됨
- `M_E_ACCESS` - 파일을 접근할 수 없음
- `M_E_NOENT` – 파일이 존재하지 않음
**부작용**
없음
**참고 항목**
없음
### MC_fsGetCounts
**설명**
디렉토리내의 파일의 개수를 가져온다. 파일의 개수는 서브디렉토리를 포함한 값 이다.
**프로토타입**
```c
M_int32 MC_fsGetCounts(char* dirName, M_Int32 aMode)
```
**매개 변수**
- `dirName` - 디렉토리 이름
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 파일 및 디렉토리의 개수
실패
- `M_E_ERROR` – 실패
- `M_E_BADFILENAME` – 잘못된 경로 이름
- `M_E_LONGNAME` – 디렉토리 이름의 길이가 최대 길이를 초과할 경우
- `M_E_ACCESS` - 파일을 접근할 수 없음
**부작용**
없음
**참고 항목**
없음
### MC_fsTell
**설명**
읽기 쓰기 동작의 기준이 되는 파일내의 현재 위치를 가져온다.
**프로토타입**
```c
M_int32 MC_fsTell(M_int32 fd)
```
**매개 변수**
- `fd` - 파일 식별자
**반환 값**
성공
- 파일 포인터 위치
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFD` - 파일 식별자가 잘못됨
**부작용**
없음
**참고 항목**
없음
### MC_fsIsExist
**설명**
특정 경로상의 파일이 있는지 없는지를 알려준다.
**프로토타입**
```c
M_Int32 MC_fsIsExist(char* fileName, M_Int32 aMode)
```
**매개 변수**
- [in] `fiileName` - 파일 이름
- [in] `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- `M_E_SUCCESS` – 파일이 존재함
실패
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFILENAME` – 잘못된 경로 이름
- `M_E_LONGNAME` – 경로 이름이 최대 길이 보다 긴 경우
- `M_E_ACCESS` - 파일을 접근할 수 없음
- `M_E_NOENT` – 파일이 존재하지 않음
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.2. 그래픽"
---
### 그래픽 함수
화면이나 오프 스크린 프레임 버퍼(Off Screen Frame Buffer) 에 다양한 그리기를 할 수 있는 API 들이다.
### 프레임 버퍼
화면 프레임 버퍼나 오프 스크린 프레임 버퍼는 데이타의 포인터와 데이터의 한 줄당 바이트 수(Byte Per Line)으로 기술된다. 이 기술되는 프레임 버퍼는 MC_GrpFrameBuffer 로 정의되며, 내부에 데이터와 데이터의 한 줄당 바이트수, 폭, 높이를 담고 있다.
### 오프 스크린 프레임 버퍼 생성/소멸
프레임 버퍼는 `MC_grpCreateOffScreenFrameBuffer` 함수로 생성되거나 `MC_grpGetScreenFrameBuffer` 함수로 존재하는 화면 프레임 버퍼를 가져 올 수 있다. 생성된 프레임 버퍼는 `MC_grpDestoryScreenFrameBuffer` 함수로 삭제 해주어야 한다.
### 그래픽 컨텍스트
프레임 버퍼에 그리는 함수에는 대부분 그래픽 컨텍스트가 매개 변수로 넘어간다. 그래픽 컨택스트는 그리기시에 필요한 각종 매개 변수를 저장하는 구조체로써 안 에는 전경색상과 클리핑 영역, 투명정도, 픽셀 연산 함수, 폰트와 스타일, 상대 좌표의 원점 Offset등을 가지고 있다.
각 그래픽 컨텍스트의 값을 변경하기 위해서는 `MC_grpSetContext` 함수를 사용하여 그 값을 변경한다.
모든 그리기 API 에 클리핑 영역이 지정되어 있는 상태에서 그려지며, API 에 따라 서 각기 필드값을 사용하거나 사용하지 않을 수 있다.
그리기 모드는 투명하게 그리기(alpha 모드), XOR 로 그리기(xor 모드) 일반 모드 (둘다 아닌 모드) 가 있으며 각 모드 배타적인 모드이다. 즉, xor 모드로 되어 있 을때 alpha 모드로 지정하면 이전에 xor 모드는 취소가 된다.
상대 좌표체계를 지정하면 모든 그리기 좌표는 상대 좌표계에 따라서 변경된다.
### 이미지 디코딩/인코딩
이미지는 프레임 버퍼와 애니메이션의 여부, 매스크 이미지로 이루어 진다. 이미지 포맷은 BMP, PNG 를 지원한다. 먼저 이미지 원본 내용을 버퍼에 로드한 후
에 이미지 내용을 `MC_grpCreateImage` 함수를 통하여 이미지 구조체를 생성하면 화면 에 출력할 수 있다. `MC_grpDrawImage` 함수를 통하면 이미지를 화면에 출력한다. 만일 animated 이미지라면 `MC_grpDecodeNextImage` 함수를 사용하여 다음 이미지를 생 성할 수 있다. 다 사용된 이미지는 `MC_grpDestoryImage` 함수를 통하여 삭제한다.
`MC_grpEncodeImage` 함수를 통해서 원하는 프레임 버퍼 영역을 BMP 로 인코딩할 수 있다.
### 더블 버퍼링
폰의 LCD 는 대부분의 경우 호스트 메모리와 불리되어 있으며 화면의 내용을 갱신 하는데 상당히 많은 시간을 소요한다. 이로 인해서 더블 버퍼링 기법을 사용한다. 화면 프레임 버퍼에 임의의 그림을 그린다 해도 실제적으로 LCD 화면에 출려되지 않고, `MC_grpFlushLcd` 함수를 호출해야만 LCD 화면에 화면 프레임 버퍼의 내용이 출 력된다.
### 듀얼 디스플레이
폰에 따라서 LCD 가 두개이며 다른 부가적인 LCD 는 주 LCD 와 색상수가 다를 수 있다. 색상이 다른 LCD 라 할지라도 `MC_grpFlushLcd` 함수에서 받아 들이는 프레임 버퍼의 색상은 주 LCD 와 같은 형식을 사용한다.(색상수도 같다.) `MC_grpFlushLcd` 그 색상에 가장 근접한 색상을 출력한다.
### 문자 입력 처리
사용자에 의해서 입력 키를 넘겨 받아서 키 값을 검사하고, 오토마타를 통해서 문 자 조합하여 완성된 문자열버퍼와 조합 중인 문자열 버퍼를 통해 넘겨준다. 입력 가능한 문자열은 오토마타에 의해 결정되며 , 현재 오토마타에서 사용가능한 문자 열은 `MC_imGetSurpportModeCount()` 를 통해서 얻을 수있고, 이때 리턴되는 타입은 스트링 포인터로 그 데이터는 ISO 639 코드에 정의된 표준언어코드를 따른다. 추 가적으로 언어가 대소문자를 구분하는 경우 각 코드에 `'/S','/L'`를 추가하여 사용 할 수 있다. 기타 숫자입력을 위한 언어코드는 `'N123'`이 사용된다.
**참고 항목**
`MC_GrpContext`, `MC_GrpFrameBuffer`
### MC_GrpPixelOpProc
**설명**
픽셀 연산(Operation)함수이다.
모든 그리기 함수에서 이 함수를 통한 결과 값이 최종적으로 쓰여지는 값이 된다. `srcpxl` 과 `orgpxl` 을 `param1` 의 매개 변수로 적절히 계산하여 그 결과 값을 돌려주면 그 값이 프레임 버퍼에 쓰여지는 최종적인 값이 된다. 예를 들면 투명 모드에서 사용되는 함수는 다음과 같이 구성해야 한다.
**프로토타입**
```c
typedef M_Int32 (*MC_GrpPixelOpProc)(M_Int32 srcpxl, M_Int32 orgpxl, M_Int32 param1)
```
**매개 변수**
- `srcpxl` - [in] 프레임 버퍼에 있는 픽셀 값
- `destpxl` - [in] 프레임 버퍼에 쓰려고 하는 픽셀 값
- `param1` - [in] 함수를 제어하는 매개 변수
**반환 값**
최종적으로 프레임 버퍼에 쓰여질 픽셀 값
```c
int alphaOp(int srcpxl, int orgpxl, int param1){
return (srcpxl * (255 - param1) + orgpxl * param1) / 255;
}
```
**부작용**
없음
**참고 항목**
없음
### MC_GrpContext
**설명**
그래픽 컨텍스트
그리기 시에 다양한 매개 변수들을 효율적으로 전달하기 위한 구조체이다. 대부분 그리기 함수는 이 구조체를 매개 변수로 받다. 이 구조체에는 그리는데 필요한 매개 변수 클리핑, 전경색, 폰트, 스타일, 상대 좌표 체계등을 가진다.
**프로토타입**
```c
typedef struct _MC_GrpContext MC_GrpContext
```
### MC_GRP_DIRECT_COLOR_TYPE
**설명**
팔레트를 사용하지 않는 경우의 컬러 타입. (1 << 0)로 정의한다.
**프로토타입**
```c
#define MC_GRP_DIRECT_COLOR_TYPE
```
### MC_GRP_GRAY_TYPE
**설명**
흑백 타입. (1 << 1)로 정의한다.
**프로토타입**
```c
#define MC_GRP_GRAY_TYPE
```
### MC_GRP_COLOR_TYPE
**설명**
컬러 타입. (1 << 2)로 정의한다.
**프로토타입**
```c
#define MC_GRP_COLOR_TYPE
```
### _MC_GrpDisplayInfo
**설명**
화면 정보 구조체
- int m_bpp
픽셀당 비트수
- int m_depth
실제적인 픽셀당 사용 비트수
- int m_width
화면의 픽셀 단위 폭
- int m_height
화면의 픽셀 단위 높이
- int m_bpl
프레임 버퍼의 화면의 한 줄당 바이트 수
- int m_colortype
컬러 타입; MC_GRP_DIRECT_COLOR_TYPE, MC_GRP_GRAY_TYPE, MC_GRP_COLOR_TYPE
- int m_redmask
빨간 색상 매스크
- int m_bluemask
파랑 색상 매스크
- int m_greenmask
녹색 색상 매스크
**프로토타입**
```c
struct _MC_GrpDisplayInfo
int m_bpp // 픽셀당 비트수
int m_depth // 실제적인 픽셀당 사용 비트수
int m_width // 화면의 픽셀 단위 폭
int m_height //화면의 픽셀 단위 높이
int m_bpl // 프레임 버퍼의 화면의 한 줄당 바이트 수
int m_colortype // 컬러 타입; MC_GRP_DIRECT_COLOR_TYPE, MC_GRP_GRAY_TYPE, MC_GRP_COLOR_TYPE
int m_redmask // 빨간 색상 매스크
int m_bluemask // 파랑 색상 매스크
int m_greenmask // 녹색 색상 매스크
```
### MC_GrpDisplayInfo
**설명**
화면의 각종 정보를 가진다
**프로토타입**
```c
typedef struct _MC_GrpDisplayInfo MC_GrpDisplayInfo
```
### *MC_GrpFrameBuffer
**설명**
프레임 버퍼.
내부에 높이와 넓이와 프레임 버퍼 포인터를 가진다.
**프로토타입**
```c
typedef M_Int32 MC_GrpFrameBuffer
```
### MC_GRP_GET_FRAME_BUFFER_POINTER
**설명**
프레임 버퍼의 포인터를 돌려준다.
**프로토타입**
```c
#define MC_GRP_GET_FRAME_BUFFER_POINTER(a)
```
**매개 변수**
- `a` - [in] MC_GrpFrameBuffer
**반환 값**
프레임 버퍼의 내용이 있는 포인터
### MC_GRP_GET_FRAME_BUFFER_WIDTH
**설명**
프레임 버퍼의 폭을 돌려준다.
**프로토타입**
```c
#define MC_GRP_GET_FRAME_BUFFER_WIDTH(a)
```
**매개 변수**
- `a` - [in] MC_GrpFrameBuffer
**반환 값**
프레임 버퍼 포인터
### MC_GRP_GET_FRAME_BUFFER_HEIGHT
**설명**
프레임 버퍼의 높이을 돌려준다.
**프로토타입**
```c
#define MC_GRP_GET_FRAME_BUFFER_HEIGHT(a)
```
**매개 변수**
- `a` - [in] MC_GrpFrameBuffer
**반환 값**
프레임 버퍼 높이
### MC_GRP_GET_FRAME_BUFFER_BPL
**설명**
프레임 버퍼의 한줄당 바이트수를 돌려준다.
**프로토타입**
```c
#define MC_GRP_GET_FRAME_BUFFER_BPL(a)
```
**매개 변수**
- `a` - [in] MC_GrpFrameBuffer
**반환 값**
프레임 버퍼 한줄당 바이트수
### MC_GRP_GET_FRAME_BUFFER_BPP
**설명**
프레임의 한 픽셀당 비트수를 돌려준다.
**프로토타입**
```c
#define MC_GRP_GET_FRAME_BUFFER_BPP(a)
```
**매개 변수**
- `a` - [in] MC_GrpFrameBuffer
**반환 값**
한 픽셀당 비트수
### MC_GRP_CONTEXT_CLIP_IDX
**설명**
클리핑 영역을 가리키는 사각형을 지정한다.
사각형은 왼쪽 상단의 점과 오른쪽 하단의 점으로 기술되며, 왼쪽 상단의 점은 사각형에 포함되지만, 오른쪽 하단의 점은 사각형에 포함되지 않는다. 0 으로 정의 한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_CLIP_IDX
```
### MC_GRP_CONTEXT_FG_PIXEL_IDX
**설명**
전경색 픽셀 값을 지정한다. 1 로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_FG_PIXEL_IDX
```
### MC_GRP_CONTEXT_BG_PIXEL_IDX
**설명**
후경색 픽셀 값을 지정한다. 2 로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_BG_PIXEL_IDX
```
### MC_GRP_CONTEXT_ALPHA_IDX
**설명**
그리기의 투명 정도를 지정한다.
0 이면 화면에 나오지 않고, 255 이면 화면에 투명하지 않게 출력된다. 4 로 정의 한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_ALPHA_IDX
```
### MC_GRP_CONTEXT_PIXELOP_IDX
**설명**
픽셀 연산(Operation)함수를 지정한다. 5 로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_PIXELOP_IDX
```
**참고 항목**
`MC_GrpPixelOpFunc`
### MC_GRP_CONTEXT_PIXEL_PARAM1_IDX
**설명**
픽셀 연산 함수의 매개 변수를 지정한다.
픽셀 연산 함수가 불릴때 넘어가는 세번째 파리미터를 지정한다. 6 으로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_PIXEL_PARAM1_IDX
```
### MC_GRP_CONTEXT_FONT_IDX
**설명**
폰트 식별자를 지정한다.
`MC_getFont` 함수를 통해서 얻어오는 폰트 식별자를 지정한다. 7 로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_FONT_IDX
```
### MC_GRP_CONTEXT_STYLE_IDX
**설명**
선그리기 스타일을 지정한다.
`MC_GRP_SOLID_STYLE` 혹은 `MC_GRP_DOTTED_STYLE` 둘 중에 하나가 된다. 8 로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_STYLE_IDX
```
### MC_GRP_CONTEXT_XOR_MODE_IDX
**설명**
그리기 모드를 지정한다.
그리기시 XOR 로 그릴지 여부를 정의한다. 1 이면 XOR 로 그리고, 그렇지 않으면 일반적인 모드로 그린다. 9 로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_XOR_MODE_IDX
```
### MC_GRP_CONTEXT_OFFSET_IDX
**설명**
그리기 상대 좌표의 원점(Offset)을 지정한다.
상대 좌표의 점 좌표를 정수 어레이에 넣어서 지정한다. 10 으로 정의한다.
**프로토타입**
```c
#define MC_GRP_CONTEXT_OFFSET_IDX
```
### MC_GRP_SOLID_STYLE
**설명**
선 그리기시에 동일한 색상으로 그린다. `MG_FB_SOLID_STYLE` 로 정의한다.
**프로토타입**
```c
#define MC_GRP_SOLID_STYLE
```
### MC_GRP_DOTTED_STYLE
**설명**
선 그리기시에 한 점그린후 다음점은 그리지 않는 식으로 반복해서 그린다. `MG_FB_DOTTED_STYLE` 로 정의한다.
**프로토타입**
```c
#define MC_GRP_DOTTED_STYLE
```
### MC_GRP_FT_SIZE_SMALL
**설명**
작은 폰트 크기를 지정한다. 8 로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_SIZE_SMALL
```
### MC_GRP_FT_SIZE_MEDIUM
**설명**
중간 폰트 크기를 지정한다. 0 으로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_SIZE_MEDIUMz
```
### MC_GRP_FT_SIZE_LARGE
**설명**
큰 폰트 크기를 지정한다. 16 으로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_SIZE_LARGE
```
### MC_GRP_FT_FACE_SYSTEM
**설명**
시스템에서 사용하는 폰트 페이스를 지정한다. 0 으로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_FACE_SYSTEM
```
### MC_GRP_FT_FACE_MONOSPACE
**설명**
각 폰트의 폭이 균일한 폰트 페이스를 지정한다. 32 로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_FACE_MONOSPACE
```
### MC_GRP_FT_FACE_PROPORTIONAL
**설명**
각 폰트의 폭이 균일하지 않은 폰트 페이스를 지정한다. 64 로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_FACE_PROPORTIONAL
```
### MC_GRP_FT_STYLE_PLAIN
**설명**
일반적은 스타일의 폰트를 지정한다. 0 으로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_STYLE_PLAIN
```
### MC_GRP_FT_STYLE_BOLD
**설명**
굵은 스타일의 폰트를 지정한다. 1 로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_STYLE_BOLD
```
### MC_GRP_FT_STYLE_ITALIC
**설명**
기울여진 스타일의 폰트를 지정한다. 2 로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_STYLE_ITALIC
```
### MC_GRP_FT_STYLE_UNDERLINE
**설명**
밑줄이 쳐진 스타일의 폰트를 지정한다. 4 로 정의한다.
**프로토타입**
```c
#define MC_GRP_FT_STYLE_UNDERLINE
```
### MC_GRP_IMAGE_DONE
**설명**
전체 이미지 소스 디코딩이 끝났음을 알린다. 1 로 정의한다.
**프로토타입**
```c
#define MC_GRP_IMAGE_DONE
```
### MC_GRP_FRAME_DONE
**설명**
이미지 소스에서 부터 한 프레임이 이미지가 완성되었음을 알린다. 0 으로 정의한다.
**프로토타입**
```c
#define MC_GRP_FRAME_DONE
```
### MC_GrpImage
**설명**
이미지이다. 이미지는 내부에 프레임 버퍼와 기타 속성(애니메이션 여부등)가지고 있다.
**프로토타입**
```c
typedef void * MC_GrpImage
```
### MC_GRP_IS_ANIMATED
**설명**
애니메이션 여부의 이미지의 속성. 1 로 정의한다.
**프로토타입**
```c
#define MC_GRP_IS_ANIMATED
```
### MC_GRP_ANIMATE_DELAY
**설명**
애니메이션 지연 단위 이미지의 속성. 2 로 정의한다.
**프로토타입**
```c
#define MC_GRP_ANIMATE_DELAY
```
### MC_GRP_LOOP_COUNT
**설명**
애니메이션 루프 카운트 이미지의 속성. 3 로 정의한다.
**프로토타입**
```c
#define MC_GRP_LOOP_COUNT
```
### MC_grpGetImageProperty
**설명**
이미지의 속성을 돌려준다.
| 매크로 | 설명 | 비고 |
|---|---|---|
| `MC_GRP_IS_ANIMATED` | 애니메이션 여부 | 1: 애니메이션, 0: 애니메이션 아님 |
| `MC_GRP_ANIMATE_DELAY` | 애니메이션 지연 시간 | 밀리세컨드(ms) 단위 |
| `MC_GRP_LOOP_COUNT` | 애니메이션 전체 루프 카운트 | |
| `MC_GRP_IMAGE_WIDTH` | 이미지의 너비 | |
| `MC_GRP_IMAGE_HEIGHT` | 이미지의 높이 | |
| `MC_GRP_IMAGE_BPP` | 픽셀당 비트 수 | Bit per Pixel |
**프로토타입**
```c
int MC_grpGetImageProperty(MC_GrpImage img, int index)
```
**매개 변수**
- `img` - 이미지
- `index` - 이미지 속성
**반환 값**
속성 값
**부작용**
없음
**참고 항목**
없음
### MC_grpGetImageFrameBuffer
**설명**
이미지의 프레임 버퍼를 돌려준다.
**프로토타입**
```c
MC_GrpFrameBuffer MC_grpGetImageFrameBuffer( MC_GrpImage img)
```
**매개 변수**
- `img` - 이미지
**반환 값**
이미지의 프레임 버퍼
**부작용**
없음
**참고 항목**
없음
### MC_grpGetScreenFrameBuffer
**설명**
현재 화면 프레임 버퍼를 얻어 온다.
각 i 에 해당하는 화면 프레임 버퍼를 얻어 온다.
**프로토타입**
```c
MC_GrpFrameBuffer MC_grpGetScreenFrameBuffer(M_Int32 i)
```
**매개 변수**
- `i` - [in] 화면 프레임 버퍼 0 인 경우에 주 LCD 화면 프레임 버퍼이고, 1 인 경우에는 외부 보조 LCD 화면 프레임 버퍼.
**반환 값**
화면에 대응되는 프레임 버퍼; i 에 대응하는 화면 프레임 버퍼가 없는 경우 NULL 을 돌려준다.
**부작용**
없음
**참고 항목**
없음
### MC_grpDestroyOffScreenFrameBuffer
**설명**
생성된 오프 스크린 프레임 버퍼를 파괴한다.
만일 매개 변수로 화면 프레임 버퍼를 넣으면 아무런 동작도 하지 않는다.
**프로토타입**
```c
void MC_grpDestroyOffScreenFrameBuffer(MC_GrpFrameBuffer fb)
```
**매개 변수**
- `fb` - [in] 파괴할 오프 스크린 프레임 버퍼.
**부작용**
없음
**참고 항목**
없음
### MC_grpCreateOffScreenFrameBuffer
**설명**
오프 스크린 프레임 버퍼를 생성한다.
지정된 폭과 높이의 오프 스크린 프레임 버퍼를 메모리에 생성한다. 이때 생성되 는 오프 스크린 프레임 버퍼는 주 화면 LCD 와 같은 색상수를 가질 수 있다.
w 와 h 는 0 보다는 큰 수이어야 한다.
**프로토타입**
```c
MC_GrpFrameBuffer MC_grpCreateOffScreenFrameBuffer(M_Int32 w, M_Int32 h)
```
**매개 변수**
- `w` - [in] 프레임 버퍼의 폭
- `h` - [in] 프레임 버퍼의 높이
**반환 값**
새로 생성된 프레임 버퍼; w, h 가 0 보다 작은 경우나 생성시 메모리가 부족하면 NULL 을 돌려준다.
**부작용**
없음
**참고 항목**
없음
### MC_grpInitContext
**설명**
그래픽 컨텍스트를 초기화 한다.
그래픽 컨텍스트의 모든 필드들을 초기화 한다. 폰트, 상대 좌표의 원점, 색상, 스트로크 스타일, Alpha 값, XORMode, 클리핑 영역등을 기본값으로 초기화 한다. 폰트는 기본 시스템 폰트가 되고, 색상은 검정색, 그리기 모드는 일반 모드, 클리 핑 영역은 해제되고, 상대 좌표의 원점은 (0, 0)이 된다.
**프로토타입**
```c
void MC_grpInitContext( MC_GrpContext* pgc)
```
**매개 변수**
- `pgc` - [in] 초기화 할 `MC_GrpContext` 의 포인터
**부작용**
없음
**참고 항목**
없음
### MC_grpSetContext
**설명**
그래픽 컨텍스트 값을 변경한다.
그래픽 컨텍스트의 특정 부분을 변경한다. index 값에 의해서 pv 에 들어 가는 내 용이 달라진다.
| idx 값 | pv 값 (설명) |
|---|---|
| `MC_GRP_CONTEXT_CLIP_IDX` | 클리핑 영역. `pv`에는 정수 배열이 들어가며, 이 배열은 내부에서 복사된다. 배열의 첫 번째·두 번째 원소에는 클리핑 사각형의 좌측 상단 x, y 좌표가, 세 번째·네 번째 원소에는 우측 하단 x, y 좌표가 들어간다. 좌측 상단 점은 클리핑 영역에 포함되며, 우측 하단 점은 포함되지 않는다. |
| `MC_GRP_CONTEXT_FG_PIXEL_IDX` | 전경(foreground) 픽셀 값을 지정한다. |
| `MC_GRP_CONTEXT_BG_PIXEL_IDX` | 배경(background) 픽셀 값을 지정한다. |
| `MC_GRP_CONTEXT_ALPHA_IDX` | 투명도를 지정한다. 값은 `0` ~ `255` 범위이며, `0`이면 표시되지 않고 `255`이면 완전 불투명으로 표시된다. 투명도를 지정하면 내부적으로 `MC_GRP_CONTEXT_PIXELOP_IDX`와 `MC_GRP_CONTEXT_PIXEL_PARAM1_IDX`가 함께 지정된다. |
| `MC_GRP_CONTEXT_FONT_IDX` | 폰트 식별자를 지정한다. |
| `MC_GRP_CONTEXT_STYLE_IDX` | 스트로크 스타일을 지정한다. 값은 `MC_GRP_SOLID_STYLE` 또는 `MC_GRP_DOTTED_STYLE` 중 하나이다. |
| `MC_GRP_CONTEXT_PIXELOP_IDX` | 픽셀 연산 함수를 지정한다. 함수 포인터를 전달한다. |
| `MC_GRP_CONTEXT_OFFSET_IDX` | 상대 좌표의 원점을 지정한다. `pv`에는 정수 배열이 들어가며, 첫 번째 원소는 원점의 x 좌표, 두 번째 원소는 원점의 y 좌표이다. |
**프로토타입**
```c
void MC_grpSetContext(MC_GrpContext* pgc, M_Int32 index, void* pv)
```
**매개 변수**
- `index` - [in] 인덱스; `MC_GRP_CONTEXT_CLIP_IDX, MC_GRP_CONTEXT_FG_PIXEL_IDX, MC_GRP_CONTEXT_BG_PIXEL_IDX, MC_GRP_CONTEXT_ALPHA_IDX, MC_GRP_CONTEXT_FONT_IDX, MC_GRP_CONTEXT_STYLE_IDX, MC_GRP_CONTEXT_PIXELOP_IDX , MC_GRP_CONTEXT_OFFSET_IDX`
- `pv` - [in] 인덱스에 해당하는 값
**부작용**
없음
**참고 항목**
`MC_GrpContext`, `MC_GrpGetContext`
### MC_grpGetContext
**설명**
그래픽 컨텍스트의 값을 구한다.
그래픽 컨텍스트의 특정 부분의 값을 읽어온다. index 값에 의해서 pv 에 들어 가 는 내용이 달라진다. 자세한 내용은 `MC_grpSetContext` 참조.
**프로토타입**
```c
void MC_grpGetContext(MC_GrpContext* pgc, M_Int32 index, void* pv)
```
**매개 변수**
- `index` - [in] 인덱스; `MC_GRP_CONTEXT_CLIP_IDX, MC_GRP_CONTEXT_FG_PIXEL_IDX, MC_GRP_CONTEXT_BG_PIXEL_IDX, MC_GRP_CONTEXT_ALPHA_IDX, MC_GRP_CONTEXT_FONT_IDX, MC_GRP_CONTEXT_STYLE_IDX, MC_GRP_CONTEXT_PIXELOP_IDX, MC_GRP_CONTEXT_OFFSET_IDX`
- `pv` - [out] 인덱스에 해당하는 값
**부작용**
없음
**참고 항목**
`MC_GrpContext, MC_grpSetContext`
### MC_grpPutPixel
**설명**
지정된 프레임 버퍼(Frame Buffer)에 점을 찍다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 색상과 투명 정도로 x, y 가 지정하는 위치에 점을 찍다.
점 찍는 부분이 화면을 넘어가는 경우에 프레임 버퍼내에는 아무것도 그려지지 않는다.
**프로토타입**
```c
void MC_grpPutPixel(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `x` - [in] 점의 x 축 좌표
- `y` - [in] 점의 y 축 좌표
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpDrawLine
**설명**
지정된 프레임 버퍼(Frame Buffer)에 선을 그린다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 색상, 스타일과 투명 정도/그리기 모드로 (x1, y2), (x2, y2)를 연결하는 선을 그린다.
선 그리는 영역이 화면을 넘어가는 경우에 프레임 버퍼내에는 아무것도 그려지지 않는다.
**프로토타입**
```c
void MC_grpDrawLine(MC_GrpFrameBuffer dst, M_Int32 x1, M_Int32 y1, M_Int32 x2, M_Int32 y2, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `x1` - [in] 시작점의 x 축 좌표
- `y1` - [in] 시작점의 y 축 좌표
- `x2` - [in] 끝점의 x 축 좌표
- `y2` - [in] 끝점의 y 축 좌표
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpDrawRect
**설명**
지정된 프레임 버퍼(Frame Buffer)에 사각형을 그린다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 색상, 스타일과 투명정도/그리기 모 드로 (x,y) 부터 시작해서 폭 w, 높이 h 인 사각형을 그린다. 이때 (x+w-1,y+h-1) 까지 포함된다.
w 나 h 가 음수 값이면 화면에 아무것도 그리지 않는다.
**프로토타입**
```c
void MC_grpDrawRect(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `x` - [in] 시작점의 x 축 좌표
- `y` - [in] 시작점의 y 축 좌표
- `w` - [in] 사각형의 폭
- `h` - [in] 사각형의 높이
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpFillRect
**설명**
지정된 프레임 버퍼(Frame Buffer)에 사각형을 칠한다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 색상과 투명정도/그리기 모드로 (x,y) 부터 시작해서 폭 w, 높이 h 인 사각형을 그린다. 이때 (x+w,y+h)까지 포함되지 않고, (x+w-1, y+h-1)까지 포함된다.
w 나 h 가 0 이하이면 화면에 아무것도 그리지 않는다.
**프로토타입**
```c
void MC_grpFillRect(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `x` - [in] 시작점의 x 축 좌표
- `y` - [in] 시작점의 y 축 좌표
- `w` - [in] 사각형의 폭
- `h` - [in] 사각형의 높이
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpCopyFrameBuffer
**설명**
지정된 프레임 버퍼(Frame Buffer)에 이미지를 그린다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 투명정도와 투명색으로 (dx, dy)부터 시작해서 폭 w, 높이 h 인 영역에 img 가 가리키는 프레임 버퍼에서 (sx, sy)의 위치의 내용을 복사한다.
이때 dst 와 src 는 같은 버퍼를 가리키면안된다. 이 경우에는 `MC_grpCopyArea` 함수를 사용해야 한다.
w 나 h 가 0 이하이거나 복사할 영역이 src 의 영역을 벗어나는 경우에 화면에 아무것도 그리지 않는다.
**프로토타입**
```c
void MC_grpCopyFrameBuffer( MC_GrpFrameBuffer dst, M_Int32 dx, M_Int32 dy, M_Int32 w, M_Int32 h, MC_GrpFrameBuffer src, M_Int32 sx, M_Int32 sy, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `dx` - [in] 영역의 x 축 좌표
- `dy` - [in] 영역의 y 축 좌표
- `w` - [in] 영역의 폭
- `h` - [in] 영역의 높이
- `src` - [in] 소스 프레임 버퍼의 영역
- `sx` - [in] 소스 영역의 x 축 좌표
- `sy` - [in] 소스 영역의 y 축 좌표
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
`MC_grpCopyArea`
### MC_grpDrawImage
**설명**
지정된 프레임 버퍼(Frame Buffer)에 이미지를 그린다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 투명정도와 투명색으로 (dx, dy)부터 시작해서 폭 w, 높이 h 인 영역에 img 가 가리키는 프레임 버퍼에서 (sx, sy)의 위치의 내용을 복사한다.
이때 이미지 내부에 매스크 이미지가 있다면 이 매스크 이미지에 의해서 출력되는 내용이 변경된다.
w 나 h 가 0 이하이거나 복사할 영역이 src 의 영역을 벗어나거나 mask plane 의 영역을 벗어나거나 mask 가 1bit plane 이 아니거나 src 가 화면과 같은 DEPTH 가 아 닌 경우에 화면에 아무것도 그리지 않는다.
**프로토타입**
```c
void MC_grpDrawImage( MC_GrpFrameBuffer dst, M_Int32 dx, M_Int32 dy, M_Int32 w, M_Int32 h, MC_GrpImage src, M_Int32 sx, M_Int32 sy, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `dx` - [in] 영역의 x 축 좌표
- `dy` - [in] 영역의 y 축 좌표
- `w` - [in] 영역의 폭
- `h` - [in] 영역의 높이
- `src` - [in] 소스 프레임 버퍼의 영역
- `sx` - [in] 소스 영역의 x 축 좌표
- `sy` - [in] 소스 영역의 y 축 좌표
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpCopyArea
**설명**
지정된 프레임의 내용을 자기 자신으로 복사한다.
dst 가 가리키는 프레임 버퍼의 (dx, dy)에 dst 의 (x, y)부터 폭 w, 높이 h 의 내 용을 복사한다.
**프로토타입**
```c
void MC_grpCopyArea(MC_GrpFrameBuffer dst, M_Int32 dx, M_Int32 dy, M_Int32 w, M_Int32 h, M_Int32 x, M_Int32 y, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `dx` - [in] 새로 복사되는 이미지의 x 축 좌표
- `dy` - [in] 새로 복사되는 이미지의 y 축 좌표
- `w` - [in] 새로 복사되는 이미지의 폭
- `h` - [in] 새로 복사되는 이미지의 높이
- `x` - [in] 복사할 영역의 x 축 좌표
- `y` - [in] 복사할 영역의 y 축 좌표
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpDrawArc
**설명**
지정된 프레임 버퍼(Frame Buffer)에 아크를 그린다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 스타일, 투명정도와 색상/그리기 모 드로 아크를 그린다.
이때 아크는 s 에서 시작해서 e 만큼 그리며, 각도는 0 도가 3 시 방향이 된다. 양 수값은 시계 반대 방향이고, 음수 값은 시계 방향이다
(x,y)가 시작점이고 높이 height, 넓이 width 인 사각형의 중심이 아크의 중심이 된다.된다.
아크는 drawRect 할 때와 마찬가지로 (x + width, y + height)높이를 가지는 영역 을 차지 한다. 만일 폭이나 높이가 0 보다 작은 경우에 아무것도 그려지지 않는다.
**프로토타입**
```c
void MC_grpDrawArc(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, M_Int32 s, M_Int32 e, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `x` - [in] 영역의 x 축 좌표
- `y` - [in] 영역의 y 축 좌표
- `w` - [in] 아크의 폭
- `h` - [in] 아크의 높이
- `s` - [in] 시작 각도 (0-360 단위:도)
- `e` - [in] 아크의 각도 (0-360 단위:도)
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpFillArc
**설명**
지정된 프레임 버퍼(Frame Buffer)에 아크를 칠한다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 투명정도와 색상/그리기 모드로 아 크를 칠한다.
이때 아크는 s 에서 시작해서 e 만큼 그리며, 각도는 0 도가 3 시 방향이 된다. 양 수값은 시계 반대 방향이고, 음수 값은 시계 방향이다
아크의 중심은 (x,y)가 시작점이고 높이 height, 넓이 width 인 사각형의 중심이 된다.
아크는 fillRect 할 때와 마찬가지로 (x + width - 1, y + height - 1)높이를 가 지는 영역을 차지 한다. 만일 폭이나 높이가 0 이하인 경우에 아무것도 그려지지 않는다.
**프로토타입**
```c
void MC_grpFillArc(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, M_Int32 s, M_Int32 e, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `x` - [in] 영역의 x 축 좌표
- `y` - [in] 영역의 y 축 좌표
- `w` - [in] 아크의 폭
- `h` - [in] 아크의 높이
- `s` - [in] 시작 각도 (0-360 단위:도)
- `e` - [in] 아크의 각도 (0-360 단위:도)
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpDrawString
**설명**
지정된 프레임 버퍼(Frame Buffer)에 문자열을 그려준다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 투명정도와 색상/그리기 모드와 지정된 폰트로 문자열을 그린다.
str 은 일반적인 "C" 문자열이 되며 Unicode 를 출력하기 위해서는 `drawUnicodeString` 함수를 사용하십시요.
len 이 -1 이면 문자가 NULL 일때 까지 문자열을 처리하며, len 이 0 이거나 -1 이 아닌 음수이면 화면에 아무것도 출력되지 않는다.
**프로토타입**
```c
void MC_grpDrawString(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, const M_Char* str, M_Int32 len, MC_GrpContext* pgc)
```
**매개 변수**
- `pd` - [in] 프레임 버퍼
- `bpl` - [in] 프레임 버퍼의 한 줄당 차지하는 바이트 개수
- `x` - [in] 문자열의 x 축 좌표
- `y` - [in] 문자열의 baseline 의 y 축 좌표
- `str` - [in] "C" 문자열
- `len` - [in] 문자열의 길이 pgc - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpDrawUnicodeString
**설명**
지정된 프레임 버퍼(Frame Buffer)에 문자열을 그려준다.
pgc 가 지정하는 그래픽 컨텍스트가 지정하는 투명정도와 색상/그리기 모드로 지 정된 폰트로 문자열을 그린다.
str 은 유니 코드 문자열이 되며 일반 "C" 문자열을 출력하기 위해서 drawString 함수를 사용하십시요. 일반 응용 프로그램에서 이 함수를 제공할 필요는 없지만, 자바 프로그램 작성시에 "C"언어와 혼용하여 작성하는 경우에 보다 빠른 그리기를 위해서 제공한다.
len 이 0 이하인 경우에는 아무것도 나타나지 않는다.
**프로토타입**
```c
void MC_grpDrawUnicodeString(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, const M_UCode* str, M_Int32 len, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `x` - [in] 문자열의 x 축 좌표
- `y` - [in] 문자열의 baseline 의 y 축 좌표
- `str` - [in] 유니코드 문자열
- `len` - [in] 문자열의 길이
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpGetRGBPixels
**설명**
지정된 프레임 버퍼(Frame Buffer)의 여러 픽셀 색상을 동시에 가져온다.
임의 프레임 버퍼의 영역의 색상 값들을 정수 어레이에 복사한다. 이때 색상값은 0x00RRGGBB 형태이다.
만일 가져오는 영역이 프레임 버퍼의 영역을 넘어 가거나 폭이 ipl 보다 큰 경우 에는 복사되는 값은 프로그램 수행마다 임의적으로 결정된다.
**프로토타입**
```c
void MC_grpGetRGBPixels(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, M_Uint32* pd, M_Int32 ipl)
```
**매개 변수**
- `psrc` - [in] 프레임 버퍼
- `sbpl` - [in] 프레임 버퍼의 한 줄당 차지하는 바이트 개수
- `x` - [in] 가져올 영역의 x 축 좌표
- `y` - [in] 가져올 영역의 y 축 좌표
- `w` - [in] 가져올 영역의 폭
- `h` - [in] 가져올 영역의 높이
- `pd` - [out] 정수 어레이
- `ipl` - [in] 이미지 한 줄당 정수의 개수
**부작용**
없음
**참고 항목**
없음
### MC_grpSetRGBPixels
**설명**
지정된 프레임 버퍼(Frame Buffer)의 여러 픽셀의 색상을을 동시에 지정한다. 정수 어레이에 저장되어 있는 색상들을 임의 프레임 버퍼 영역에 복사한다. LCD 의 컬러 수에 따라서 색상은 가장 근접한 색상값으로 변경되어 지정된다. 이때 색 상값은 0x00RRGGBB 형태이다.
가져올 영역이 프레임 버퍼를 벗어 나거나 만일 ibpl 이 w 보다 작은 값이거나 제 대로된 이미지를 복사하지 않는다.
**프로토타입**
```c
void MC_grpSetRGBPixels(MC_GrpFrameBuffer dst, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, const M_Uint32* psrc, M_Int32 ibpl, MC_GrpContext* pgc)
```
**매개 변수**
- `pd` - [in] 프레임 버퍼
- `x` - [in] 가져올 영역의 x 축 좌표
- `y` - [in] 가져올 영역의 y 축 좌표
- `w` - [in] 가져올 영역의 폭
- `h` - [in] 가져올 영역의 높이
- `pd` - [in] 정수 어레이
- `ipl` - [in] 이미지 한 줄당 바이트 수
- `pgc` - [in] 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_grpFlushLcd
**설명**
지정된 프레임 버퍼(Frame Buffer)를 LCD 화면에 출력한다.
임의 프레임 버퍼의 내용의 일부분을 LCD 화면에 출력한다. 이때 프레임 버퍼의 한줄당 차지하는 바이트 수와 LCD 의 한줄당 차지하는 바이트 수는 동일해야 한다. 사용자는 여러개의 화면 프레임 버퍼를 사용할 수도 있고, 하나의 화면 프레임 버퍼만을 사용할 수 있다.
**프로토타입**
```c
void MC_grpFlushLcd(M_Int32 i, MC_GrpFrameBuffer frm, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h)
```
**매개 변수**
- `pd` - [in] 프레임 버퍼
- `i` - [in] 화면 인덱스(0; 주화면 1; 보조 LCD 화면)
- `bpl` - [in] 프레임 버퍼의 한 줄당 차지하는 바이트 개수
- `x` - [in] 출력할 영역의 x 축 좌표
- `y` - [in] 출력할 영역의 y 축 좌표
- `w` - [in] 출력할 영역의 폭
- `h` - [in] 출력할 영역의 높이
**부작용**
없음
**참고 항목**
없음
### MC_grpGetPixelFromRGB
**설명**
지정된 색상의 픽셀 값을 얻어 온다. 만일 r, g, b 가 255 를 넘어가면 제대로된 픽셀 값을 얻어 오지 않는다.
**프로토타입**
```c
M_Int32 MC_grpGetPixelFromRGB(M_Int32 r, M_Int32 g, M_Int32 b)
```
**매개 변수**
- `r` - [in] red 값(0-255)
- `g` - [in] green 값(0-255)
- `b` - [in] blue 값(0-255)
**반환 값**
픽셀 값
**부작용**
없음
**참고 항목**
없음
### MC_grpGetRGBFromPixel
**설명**
지정된 픽셀 값의 색상 값들을 얻어 온다.
**프로토타입**
```c
M_Int32 MC_grpGet RGBFromPixel(M_Int32 pixel, M_Int32 *r, M_Int32 *g, M_Int32
*b)
```
**매개 변수**
- `pixel` - [in] pixel 값
- `r` - [out] red 값(0-255)
- `g` - [out] green 값(0-255)
- `b` - [out] blue 값(0-255)
**반환 값**
픽셀 값 pixel 과 같음
**부작용**
없음
**참고 항목**
없음
### MC_grpGetDisplayInfo
**설명**
화면 정보 구조체를 얻어 온다.
**프로토타입**
```c
M_Int32 MC_grpGetDisplayInfo(M_Int32 i, MC_GrpDisplayInfo* pi)
```
**매개 변수**
- `i` - [in] 예약된 파라미터; 0 을 넣다.
- `pi` - [out] 화면 정보 구조체
**반환 값**
해당되는 정보 구조체가 있으면 1, 그렇지 않으면 0 을 돌려준다.
**부작용**
없음
**참고 항목**
없음
### MC_grpRepaint
**설명**
특정 영역에 대해서 `paintClet` 함수가 불리도록 한다. 이 함수를 부르면, 함수 내에서 `paintClet` 을 직접 부르지 않고, `paintClet` 이 불릴 수 있도록 응용 프로그램 이벤트 큐에 관련 이벤트를 넣어 준다.
**프로토타입**
```c
void MC_grpRepaint(M_Int32 lcd, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h)
```
**매개 변수**
- `i` - [in] 화면 프레임 버퍼 0 인 경우에 주 LCD 화면 프레임 버퍼이고, 1 인 경우에는 외부 보조 LCD 화면 프레임 버퍼.
- `x` - [in] 영역의 x 축 좌표
- `y` - [in] 영역의 y 축 좌표
- `w` - [in] 영역의 폭
- `h` - [in] 영역의 높이
**부작용**
없음
**참고 항목**
없음
### MC_grpGetFont
**설명**
지정된 폰트와 가장 근접한 시스템 폰트를 돌려준다.
face 나 size, style 에 제대로된 값이 넘어 오지 않으면 기본 폰트를 돌려준다.
**프로토타입**
```c
M_Int32 MC_grpGetFont(M_Int32 face, M_Int32 size, M_Int32 style)
```
**매개 변수**
- `face` - [in] 폰트 페이스; `MC_GRP_FT_FACE_SYSTEM, MC_GRP_FT_FACE_MONOSPACE, MC_GRP_FT_FACE_PROPORTIONAL` 중 하나
- `size` - [in] 폰트 크기; `MC_GRP_FT_SIZE_LARGE 이나 MC_GRP_FT_SIZE_MEDIUM, MC_GRP_FT_SIZE_SMALL` 중 하나.
- `style` - [in] 폰트 스타일; `MC_GRP_FT_STYLE_PLAIN 이나 MC_GRP_FT_STYLE_ITALIC, MC_GRP_FT_STYLE_BOLD, MC_GRP_FT_STYLE_UNDERLINED` 을 OR 한값.
**반환 값**
지정된 폰트 식별자
**부작용**
없음
**참고 항목**
없음
### MC_grpGetFontHeight
**설명**
폰트 높이를 돌려준다.
만일 지정된 폰트가 유효하지 않은 값인 경우에 0 을 돌려준다.
**프로토타입**
```c
M_Int32 MC_grpGetFontHeight(M_Int32 font)
```
**매개 변수**
- `font` - [in] 폰트 식별자
**반환 값**
폰트 높이
**부작용**
없음
**참고 항목**
없음
### MC_grpGetFontAscent
**설명**
폰트의 어센트(Ascent)를 돌려준다.
만일 지정된 포트가 유효하지 않은 값인 경우에는 0 을 돌려준다.
**프로토타입**
```c
M_Int32 MC_grpGetFontAscent(M_Int32 font)
```
**매개 변수**
- `font` - [in] 폰트 식별자
**반환 값**
폰트의 어센트
**부작용**
없음
**참고 항목**
없음
### MC_grpGetFontDescent
**설명**
폰트의 디센트(Descent)를 돌려준다.
만일 지정된 포트가 유효하지 않은 값인 경우에는 0 을 돌려준다.
**프로토타입**
```c
M_Int32 MC_grpGetFontDescent(M_Int32 font)
```
**매개 변수**
- `font` - [in] 폰트 식별자
**반환 값**
폰트의 디센트
**부작용**
없음
**참고 항목**
없음
### MC_grpGetStringWidth
**설명**
문자열의 화면상의 폭을 얻어 온다.
지정된 폰트로 문자를 화면상에 출력하였을때 화면에서 차지하는 폭을 돌려준다. 만일 len 값이 -1 이면 문자열끝(NULL 문자가 나타나는 곳까지)까지의 폭을 돌려 준다.
**프로토타입**
```c
M_Int32 MC_grpGetStringWidth(M_Int32 font, const M_Uint8* str, M_Int32 len)
```
**매개 변수**
- `font` - [in] 폰트 식별자
- `str` - [in] 문자열
- `len` [in] 문자열의 길이
**반환 값**
문자열의 폭
**부작용**
없음
**참고 항목**
없음
### MC_grpGetUnicodeStringWidth
**설명**
유니코드 문자열의 화면상의 폭을 얻어 온다.
지정된 폰트로 유니코드 문자를 화면상에 출력하였을때 화면에서 차지하는 폭을 돌려준다.
만일 len 값이 -1 이면 문자열끝(NULL 문자가 나타나는 곳까지)까지 의 폭을 돌려준다.
**프로토타입**
```c
M_Int32 MC_grpGetUnicodeStringWidth(M_Int32 font, const M_UCode* str, M_Int32 len)
```
**매개 변수**
- `font` - [in] 폰트
- `str` - [in] 문자열
- `len` - [in] 문자열의 길이
**반환 값**
문자열의 폭
**부작용**
없음
**참고 항목**
없음
### MC_grpCreateImage
**설명**
이미지를 생성한다.
이미지 데이타(PNG, GIF, Animated-GIF, BMP 포맷)를 가지고 있는 버퍼를 넘겨서 이미지 구조체를 초기화 한다.
이 함수를 부르면 맨처음 이미지가 생성된다. 만일 이미지가 제대로 생성되지 않 았다면 NULL 을 돌려준다.
매개 변수로 넘기는 buf 는 이미지 함수내에서 자동으로 해제 시켜준다. 그러므로 `MC_knlCalloc` 으로 생성된 버퍼의 ID 이어야 한다. 해제 시키는 시점은 애니메이션 이미지가 아닌 경우에 초기 한장 프레임을 완성 시킨후 해제되며, 애니메이션 이 미지인 경우에는 `MC_grpDestroyImage` 함수가 호출되면 그때 해제 된다.
**프로토타입**
```c
M_Int32 MC_grpCreateImage(MC_GrpImage *newImg, M_Uint32 bufID, M_Int32 off, M_Int32 len)
```
**매개 변수**
- `newImg` - [out] 새로 생성된 이미지 ; 오류시 NULL 로 세팅된다.
- `bufID` - [in] 이미지 데이타를 가지고 있는 버퍼로써 `MC_knlCalloc` 으로 할당된 버퍼 ID 이어야 함
- `off` - [in] 이미지 데이타의 시작 부분
- `len` - [in] 이미지 데이타의 길이
**반환 값**
- `MC_GRP_IMAGE_DONE` : 오류없이 이미지가 디코딩 되었을때
- `M_E_NOMEMORY` : 이미지를 생성하는데 메모리가 부족할때
- `M_E_BADFORMAT` : 이미지 포맷이 잘못되었을때
**부작용**
없음
**참고 항목**
없음
### MC_grpDestroyImage
**설명**
이미지를 삭제한다.
**프로토타입**
```c
void MC_grpDestroyImage(MC_GrpImage img)
```
**매개 변수**
- `img` - 삭제할 이미지
**부작용**
없음
**참고 항목**
없음
### MC_grpDecodeNextImage
**설명**
이미지의 다음 프레임을 만든다.
특정 버퍼에서 데이타를 읽어 들여서 이미지를 생성한다. 만들어진 이미지는 이미 지 타겟 구조체에 들어간다.
만일 움직이는 이미지인 경우에는 한번 더 부르면, 다음 이미지를 디코딩하여 dst 에 저장한다. 이때 유의해야 할점은 처음 이미지를 저장한 dst 를 넘겨주어야 한다. 움직이는 이미지 특성상 이전 이미지 위에 변경된 이미지만을 그려서 다음 이미지를 만드는 경우가 있기 때문이다.
**프로토타입**
```c
M_Int32 MC_grpDecodeNextImage(MC_GrpImage dst)
```
**매개 변수**
- `dst` - [out] 이미지 타겟 구조체
**반환 값**
다음 중의 한 값이 된다.
- `MC_GRP_FRAME_DONE` : 오류없이 이미지가 디코딩 되었을때
- `MC_GRP_IMAGE_DONE` : 오류없이 이미지가 디코딩 되었으며, 더이상의 디코딩할 이 미지가 남아 있지 않을때
- `M_E_NOMEMORY` : 이미지를 생성하는데 메모리가 부족할때
- `M_E_BADFORMAT` : 이미지 포맷이 잘못되었을때
**부작용**
없음
**참고 항목**
없음
### MC_grpEncodeImage
**설명**
지정된 프레임버퍼의 일정 영역을 그래픽 파일 포맷으로 인코딩한다.
지정한 프레임버퍼의 일정 영역을 BMP 파일 포맷으로 인코딩해서 리턴한다. 리턴 된 이미지 버퍼의 크기는 len 파라미터로 얻어온다. 리턴된 값은 `MC_knlCalloc` 에 의해서 생성된 버퍼 ID 이다.
**프로토타입**
```c
M_Int16 MC_grpEncodeImage(MC_GrpFrameBuffer src, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, M_Int32* len)
```
**매개 변수**
- `src` - [in] 이미지 소스 구조체
- `x` - [in] 영역의 시작 x 축 좌표
- `y` - [in] 영역의 시작 y 축 좌표
- `w` - [in] 영역의 폭
- `h` - [in] 영역의 높이
- `len` - [out] 인코딩된 이미지 버퍼의 크기
**반환 값**
인코딩된 이미지 버퍼 ID, 실패하면 NULL
**부작용**
없음
**참고 항목**
없음
### MC_grpPostEvent
**설명**
지정한 응용 프로그램의 이벤트 큐에 이벤트를 넣다.
지정한 응용 프로그램이 이벤트를 받을 수 있도록 이벤트 큐에 이벤트를 넣다. 지 정한 응용 프로그램에는 해당 이벤트가 발생하여 handleCletEvent 함수가 호출되 고. 각 parameter 는 type, param1, param2 가 된다.
**프로토타입**
```c
M_Int32 MC_grpPostEvent(M_Int32 id, M_Int32 type, M_Int32 param1, M_Int32 param2)
```
**매개 변수**
- `id` - [in] 응용 프로그램 식별자
- `type` - [in] 이벤트 타입
- `param1` - [in] 매개 변수 1
- `param2` - [in] 매개 변수 2
**반환 값**
성공시 1, 실패시 0
**부작용**
없음
**참고 항목**
없음
### MC_grpDrawPolygon
**설명**
임의의 꼭지점을 갖는 다각형을 그린다.
**프로토타입**
```c
void MC_grpDrawPolygon(MC_GrpFrameBuffer dst, M_INT32* xPoints, M_INT32* yPoints, M_Int32 nPoints, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `xPoints` – [in] x 좌표 배열
- `yPoints` – [in] y 좌표 배열
- `nPoints` – [in] 꼭지점의 개수
- `pgc` - [in] 그래픽 컨텍스트
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_grpDrawFillPolygon`
### MC_grpFillPolygon
**설명**
임의의 꼭지점을 갖는 채워진 다각형을 그린다
**프로토타입**
```c
void MC_grpDrawFillPolygon(MC_GrpFrameBuffer dst, M_INT32* xPoints, M_INT32* yPoints, M_INT32 nPoints, MC_GrpContext* pgc)
```
**매개 변수**
- `dst` - [in] 프레임 버퍼
- `xPoints` – [in] x좌표 배열
- `yPoints` – [in] y좌표 배열
- `nPoints` – [in] 꼭지점의 개수
- `pgc` – [in] 그래픽 컨텍스트
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_grpDrawPolygon`
### MC_imGetSurpportModeCount
**설명**
오토마타에서 지원는 입력모드의 수를 얻어온다
**프로토타입**
```c
M_Int32 MC_imGetSurpportModeCount()
```
**매개 변수**
없음
**반환 값**
입력모드의 수
**부작용**
없음
**참고 항목**
없음
### MC_imGetSupportedModes
**설명**
오토마타에서 지원하는 입력모드의 언어코드를 얻어온다. 언어코드는 ISO 639 코드를 따른다. 단, 해당 언어가 대소문자를 구분하는 경우 각 언어코드에 `"/S","/L"`를 추가하여 지정할 수 있다. 예를 들어 영문 소문자의 경우 `"EN/S"`의 언어코드를 넘겨주게 된다. 한글의 경우에는 `"KO"`의 언어코드를 넘겨주게 된다.
**프로토타입**
```c
M_Char** MC_imGetSupportedModes()
```
**매개 변수**
없음
**반환 값**
언어코드 (스트링 어레이 포인터)
**부작용**
없음
**참고 항목**
없음
### MC_imSetCurrentMode
**설명**
오토마타에서 사용할 모드를 지정한다. 이 값은 `MH_IMAgetSupportedModes()`로 얻은 언어코드의 인덱스값이다.
**프로토타입**
```c
M_Int32 MC_imSetCurrentMode (M_Int32 mode)
```
**매개 변수**
- `mode` - [in] 입력모드
**반환 값**
지정한 입력모드가 바르게 적용된 경우 "1". 그렇지 않은 경우 "0".
**부작용**
없음
**참고 항목**
없음
### MC_imGetCurrentMode
**설명**
오토마타의 현재 입력모드를 얻어온다. 이 값은 `MH_IMAgetSupportedModes()`로 얻은 언어코드의 인덱스값이다.
**프로토타입**
```c
M_Int32 MC_imGetCurrentMode()
```
**매개 변수**
없음
**반환 값**
오토마타의 현재 입력모드
**참고 항목**
없음
### MC_imHandleInput
**설명**
사용자 컴포넌트로 부터받은 키 입력을 현재 입력모드에 따라 처리하며 문자를 생 성하고, 생성된 문자를 넘긴다
**프로토타입**
```c
M_Int32 MC_imHandleInput(char key, M_Int32 type, char *buf1, M_Int32 *size1, char *buf2, M_Int32 *size2)
```
**매개 변수**
- `key` - [in] 입력된 키값 (`MH_KeyCode`에 정의된 것, `MH_IMA_FLUSH`)
- `type` - [in] 입력된 키 타입 (`MH_Event`에 정의된 것.)
- `buf1` - [out] 완성된 문자열버퍼
- `size1` - [in] 완성된 문자열 버퍼의 크기
- `buf2` - [out] 조합중인 문자열버퍼
- `size2` - [in] 조합중인 문자열 버퍼의 크기
**반환 값**
없음
**참고 항목**
없음
---
title: "C API"
---
WIPI-C 응용프로그래밍 인터페이스. 응용프로그램이 플랫폼 위에서 사용할 수 있는
C 언어 API 들을 정의합니다. 함수는 `MC_` 접두사를 갖습니다 (예: `MC_knlCalloc`,
`MC_grpDrawLine`).
| 절 | 항목 | 내용 |
|---|---|---|
| 5.1.1 | [커널](kernel.md) | 메모리 할당, 타이머, 프로세스 |
| 5.1.2 | [그래픽](graphics.md) | 2D 드로잉, 이미지 |
| 5.1.3 | [데이터베이스](database.md) | 응용프로그램 저장소 |
| 5.1.4 | [파일시스템](filesystem.md) | 파일/디렉토리 입출력 |
| 5.1.5 | [NETWORK](network.md) | 소켓, HTTP |
| 5.1.6 | [매체 처리기](media.md) | 미디어 클립 재생 |
| 5.1.7 | [SERIAL](serial.md) | 시리얼 통신 |
| 5.1.8 | [PHONE](phone.md) | 전화 발신 |
| 5.1.9 | [MISC](misc.md) | 메뉴, 알람 등 |
| 5.1.10 | [UTILITY](utility.md) | 문자열, 변환 |
| 5.1.11 | [UI Components](ui-components.md) | 위젯, 컴포넌트 |
| 5.1.12 | [표준 C 라이브러리](c-stdlib.md) | 지원 표준 C 함수 목록 |
## 5.1 C API
Clet 에서 사용할 수 있는 모든 API를 정의 한다. Clet은 다음의 함수를 모두 구현해야 한다. 플랫폼이 필요한 경우 각종 이벤트에 따라 해당 함수를 불러 준다.
### handleCletEvent
```c
void CletHandleEvent(int type, int param1, int param2)
```
이벤트를 처리하는 함수이다. type에는 1 항에 정의된 이벤트가 올 수 있다. param1과 param2는 type의 값에 따라서 달라진다.
| 이벤트 (type) | 설명 | 사용되는 변수 |
|---|---|---|
| `MV_KEY_PRESS_EVENT` | 키가 눌렸을 때 발생되는 이벤트 | `param1` = 키 코드 값
`param2` = 0 |
| `MV_KEY_REPEAT_EVENT` | 키가 계속 눌려 있는 상태일 때 특정 시간마다 반복적으로 발생되는 이벤트 | `param1` = 키 코드 값
`param2` = 0 |
| `MV_KEY_RELEASE_EVENT` | 키가 떼어졌을 때 발생되는 이벤트 | `param1` = 키 코드 값
`param2` = 0 |
| `MV_CHILD_APP_START_EVENT` | 현재 응용 프로그램이 수행시킨 자식 프로그램이 시작되었음을 알려주는 이벤트 | `param1` = 생성된 자식 프로그램의 식별자
`param2` = 0 |
| `MV_CHILD_APP_DESTROY_EVENT` | 현재 응용 프로그램이 수행시킨 자식 프로그램이 종료되었음을 알려주는 이벤트 | `param1` = 생성된 자식 프로그램의 식별자
`param2` = 프로그램의 종료 코드 |
| `MV_USER_EVENT` | 사용자 이벤트 | `param1` = 사용자 지정 값
`param2` = 사용자 지정 값 |
---
title: "5.1.1. 커널"
---
커널 인터페이스 API
동적 메모리 할당/해제, 프로그램의 생성/종료, 타이머, 시스템 정보, 공유 메모 리에 관한 API 를 제공한다.
#### 메모리 관리
메모리의 효율적인 관리를 위하여 메모리의 고정(static)할당과, 동적(dynamic)할 당을 지원한다. 또한 동적으로 할당된 메모리는 컴팩션(compaction)을 지원한다. 고정할당되는 메모리는 프로그램 로딩시 메모리에 할당되며, 프로그램 수행중에는 해제될수 없고, 프로그램 종료시에 자동으로 해제된다. 동적할당되는 메모리는 프로그램 수행중에 `MC_knlCalloc()` API 에 의해 할당되며, 수행중에 `MC_knlFree()` API 를 통해 해제할 수 있다. 프로그램 종료시 해제되지 않은 메모리는 플랫폼이 자동으로 해제한다. 컴팩션(compaction)은 동적 메모리 할당시 할당할 미사용 메 모리가 없으면 자동으로 일어난다. 동적으로 할당되는 메모리는 메모리식별자(ID) 이며 사용자는 컴팩션(compaction)이 일어날 수 있는 곳에서는 메모리식별자에서 포인터를 다시 구해와서 사용해야 한다. 컴팩션(compaction)은 동적메모리 할당시 할당할 미사용 메모리가 없는 경우와, `MC_knlGetFreeMemory()` API 를 부를 때만 일어난다. 이외의 API 에서 컴팩션(compaction)이 일어나는 경우는 해당 API 내부 에서 메모리를 동적으로 할당하는 경우이다. 내부적으로 메모리를 동적으로 할당 하는 API 는 각 API 의 부작용 항목을 참조한다. 플랫폼 API 중에는 입력으로 간접 (indirect)버퍼를 요구하는 API 들이 있다. 이런 API 들은 주로 내부적으로 동적할 당을 사용하여 컴팩션이 일어날 수 있는 API 들이다.
간접버퍼(메모리식별자와 같음)는 동적할당된 버퍼와, `DECLARE_INDIRECTBUF()`로 선언된 고정할당된 버퍼를 말한다. `DECLARE_INDIRECTBUF()`로 선언된 버퍼는 동적할 당된 버퍼와 같은 구조를 가지지만 실제로는 고정할당된다.
```c
typedef struct _IndirectBuf {
INDIRECT_BUF_HEAD;
char buf[1024]
} IndirectBuf;
char staticBuf[256]; // 고정(static)할당 buffer
char imageBuf[1024];
DECLARE_INDIRECTBUF(IndirectBuf, idBuf);
void startClet() {
M_Byte* dynamicBuf;
M_Uint32 mBufID;
M_Int32 freeMemorySize;
strcpy(staticBuf, "this is testing...\n");
MC_knlPrintk("%s", staticBuf);
mBufID = MC_knlCalloc(256); // mBufID는 메모리식별자
dynamicBuf = MC_GETDPTR(mBufID); // 메모리식별자에서 포인터를 구해옴
strcpy(dynamicBuf, "this is testing...\n");
MC_knlPrintk("%s", dynamicBuf);
freeMemorySize = MC_knlGetFreeMemory(); // 컴팩션(compaction)이 일어남
dynamicBuf = MC_GETDPTR(mBufID); // 컴팩션(compaction)이 일어 날 수 있으므로
// 메모리식별자에서 다시 포인터를 구해옴
MC_knlPrintk("%s", dynamicBuf);
MC_knlFree(mBufID);
...
if ( (rID = MC_knlGetResourceID("test.gif", &rSize)) < 0 ) {
MC_knlPrintk("resource not found\n");
...
}
mBufID = MC_knlCalloc(rSize); // 동적할당을 이용한 리소스 얻기
MC_knlGetResource(rID, mBufID, rSize);
dynamicBuf = MC_GETDPTR(mBufID);
memcpy(imageBuf, dynamicBuf, rSize);
...
MC_knlGetResource(rID, &idBuf, rSize); // DECLARE_INDIRECTBUF()로 할당된 간접버퍼를 통한 리소스 얻기
memcpy(imageBuf, idBuf.buf, rSize);
...
}
```
#### 프로그램 관리
다중 프로그램 수행을 지원한다. 각 프로그램은 독립적인 메모리/실행 공간을 가진다.플랫폼은 여러개의 프로그램을 동시에 실행할 수 있고 가능한 자신이외의 프로그램 자원을 접근(access)할 수 없게 해야 한다. 프로그램간의 통신은 event 와 공유메모리를 사용한다. 프로그램은 자기자신을 생성시킨 프로그램과 부모/자 식간의 관계를 가진다. 응용 프로그램 관리자는 최상위 부모가 되고, 여기서부터 자식 프로그램이 수행된다. 자식 프로그램은 부모 프로그램을 강제로 종료시킬 수 없고, 부모는 자식을 강제로 종료시킬 수 있다. 또한 부모 프로그램이 종료되면 자식프로그램들은 자동으로 종료된다.
플랫폼은 오버레이(overlay)기능을 제공할 수 있다. 프로그램 개발자는 플랫폼에서 제공하는 heap 보다 큰 프로그램을 실행시킬 수 있다. 오버레이 기능을 이용하 기 위하여 플랫폼 개발환경에서는 프로그램 개발자가 큰 프로그램을 여러개의 작은 프로그램으로 나누어 컴파일하고, 이것을 묶어서 플랫폼에 하나의 프로그램으 로 설치할 수 있는 환경을 제공해야 한다. 또한 프로그램 개발자가 큰 프로그램을 여러 작은 프로그램으로 나눌때, 작은 프로그램마다 심볼릭(symbolic)이름을 정의 할 수 있어야 한다. 플랫폼은 오버레이방식으로 작은 프로그램을 로딩할때, 프로 그램 식별자로 이 심볼릭(symbolic)이름을 사용한다.
동적 로딩 라이브러리를 지원한다. 플랫폼은 플랫폼에 추가할 API 를 라이브러리 로 만들고, 여러 프로그램이 공유하여 사용할 수 있는 기능을 제공한다.
#### 공유메모리
프로그램간에 자료공유는 공유메모리를 이용한다. 공유메모리는 플랫폼에 1 개가 존재하고, 필요한 프로그램이 수행중에 생성할 수 있다. 공유메모리는 사용하는 프로그램이 종료되면 자동으로 해제된다.
#### 기타
여러개의 타이머를 지원한다. 타이머를 설정한 프로그램이 타이머가 해제되기 전 에 종료되면 해제되지 않은 타이머도 자동으로 해제된다. 단말기 번호, ESN 등 각 종 시스템정보를 읽어오는 API 를 제공한다.
#### 버퍼할당
언급이 없을 경우, 플랫폼의 모든 API는 버퍼가 필요할 때 호출자(caller) 가 버퍼를 할당하여 매개변수로 전달한다.. 호출받는 API안에서 메모리버퍼 가 할당되어 반환할 경우에는 각API에 명확히 언급된다.
### MC_PRGTYPE_JAVAAPP
**설명**
자바 애플리케이션. 1 로 정의 되어있다.
**프로토타입**
```c
#define MC_PRGTYPE_JAVAAPP
```
### MC_PRGTYPE_CAPP
**설명**
C 애플리케이션. 2 로 정의 되어있다.
**프로토타입**
```c
#define MC_PRGTYPE_CAPP
```
### MC_PRGTYPE_CDLL
**설명**
C 동적로딩 라이브러리, 3 로 정의 되어있다.
**프로토타입**
```c
#define MC_PRGTYPE_CDLL
```
### MC_PRGTYPE_JAVADLL
**설명**
자바 동적로딩 라이브러리, 4 로 정의 되어있다.
**프로토타입**
```c
#define MC_PRGTYPE_JAVADLL
```
### MC_PRGTYPE_JAVASYSDLL
**설명**
자바 시스템 라이브러리, 5 로 정의 되어있다.
**프로토타입**
```c
#define MC_PRGTYPE_JAVASYSDLL
```
### MC_DIR_SYS_READ_REQ_MASK
**설명**
`system directory read` 가능. 0x01 로 정의 되어있다.
**프로토타입**
```c
#define MC_DIR_SYS_READ_REQ_MASK
```
### MC_DIR_SYS_WRITE_REQ_MASK
**설명**
`system directory write` 가능. 0x02 로 정의 되어있다.
**프로토타입**
```c
#define MC_DIR_SYS_WRITE_REQ_MASK
```
### MC_DIR_SHARED_READ_REQ_MASK
**설명**
`shared directory read` 가능. 0x04 로 정의 되어있다.
**프로토타입**
```c
#define MC_DIR_SHARED_READ_REQ_MASK
```
### MC_DIR_SHARED_WRITE_REQ_MASK
**설명**
`shared directory write` 가능. 0x08 로 정의 되어있다.
**프로토타입**
```c
#define MC_DIR_SHARED_WRITE_REQ_MASK
```
### MC_NETWORK_ACCESS_REQ_MASK
**설명**
`network API` 사용 가능. 0x10 으로 정의 되어있다.
**프로토타입**
```c
#define MC_NETWORK_ACCESS_REQ_MASK
```
### MC_SERIAL_ACCESS_REQ_MASK
**설명**
`serial API` 사용 가능. 0x20 으로 정의 되어있다.
**프로토타입**
```c
#define MC_SERIAL_ACCESS_REQ_MASK
```
### MC_SYSTEM1_ACCESS_REQ_MASK
**설명**
`system group1` 에 속한 API 사용가능(`system group1` 에 속할 API 들은 각 이통사가 정의) . 0x40 으로 정의 되어있다.
**프로토타입**
```c
#define MC_SYSTEM1_ACCESS_REQ_MASK
```
### MC_SYSTEM2_ACCESS_REQ_MASK
**설명**
`system group2` 에 속한 API 사용가능(`system group2` 에 속할 API 들은 각 이통사가 정의) . 0x80 으로 정의 되어있다.
**프로토타입**
```c
#define MC_SYSTEM2_ACCESS_REQ_MASK
```
### MC_GETDPTR
**설명**
메모리식별자에서 포인터를 구한다.
`MC_knlCalloc()`에서 할당한 메모리식별자에서 실제로 사용할 포인터를 구한다.
**프로토타입**
```c
#define MC_GETDPTR(mID)
```
**매개 변수**
- `mID` - 메모리식별자
**반환 값**
포인터
### DECLARE_INDIRECTBUF
**설명**
고정할당으로 간접버퍼(메모리식별자)를 할당한다.
버퍼를 할당하기 위하여는 먼저, 할당할 버퍼의 타입을 아래와 같은 형태로 정의 한다.
```c
typedef struct type_name {
INDIRECT_BUF_HEAD; // 간접버퍼할당을 위해 플랫폼에서 제공하는 매크로
char buf[1024]; // 사용자가 원하는 크기의 버퍼 설정
};
```
**프로토타입**
```c
#define DECLARE_INDIRECTBUF(typeName, var)
```
**매개 변수**
- `typeName` – 사용자가 선언한 타입선어의 이름
- `var` – 간접버퍼로 선언할 변수명
**반환 값**
포인터
**참고항목**
사용법은 `kernel overview` 의 예제 참조
### MCTimer
**설명**
타이머 설정에 사용되는 구조체형 선언
**프로토타입**
```c
typedef struct _MTimer MCTimer
```
**참고항목**
`MC_knlDefTimer, MC_knlSetTimer, MC_knlUnsetTimer`
### TIMERCB
**설명**
`MC_knlDefTimer()`에 등록하는 콜백함수이다. 설정한 타이머가 만료되면 불린다.
**프로토타입**
```c
typedef void (*TIMERCB)(MCTimer *tm, void* parm)
```
**매개 변수**
- `tm` - 타이머 설정시 타이머 구조체 포인터
- `parm` - 타이머 설정시 전달한 매개변수
**참고항목**
`MC_knlDefTimer`
### MC_knlPrintk
**설명**
`format string` 을 stdout 으로 출력한다. `ISO/IEC 9899:1999(E) - Programming Languages – C` 의 printf 규격을 따른다.
**프로토타입**
```c
int MC_knlPrintk(M_Char* format, ...)
```
**부작용**
없음
**참고 항목**
없음
### MC_knlSprintk
**설명**
format string 을 buf 로 출력한다.
`ISO/IEC 9899:1999(E) - Programming Languages – C` 의 sprintf 규격을 따른다.
**프로토타입**
```c
int MC_knlSprintk(M_Char* buf, M_Char* format, ...)
```
**부작용**
없음
**참고 항목**
없음
### MC_knlGetExecNames
**설명**
플랫폼에 설치된 어플리케이션중 prgName(프로그램이름), version, vendor 와 일 치하는 어플리케이션 식별이름을 반환한다. 매개변수가 NULL 인 경우에는 아무것 이나 일치한다는 뜻 이다. 예를 들어 prgName, version, vendor 가 모두 NULL 인경\\우, 플랫폼에 설치된 모든 프로그램의 이름을 반환한다. 반환되는 이름은 null 로 끝나는 문자열의 리스트이다.
```c
예로서 두개의 일치하는 프로그램이 있을 경우
예) "/1/1.jar,3\0/2/2.jar,2\0" 와같이 buf에 저장되어 반환될 수 있다.
```
**프로토타입**
```c
M_Int32 MC_knlGetExecNames(M_Char* prgName, M_Char* version, M_Char* vendor, M_Char* buf, M_Int32 bufSize)
```
**매개 변수**
- `prgName` - [in] 프로그램 이름
- `version` - [in] 버전
- `vendor` - [in] 제작사
- `buf` - [out] null 로 끝나는 문자열의 list
- `bufSize` - [in] buf 의 크기
**반환 값**
- 성공 : 해당되는 프로그램의 count
- 실패 : `M_E_SHORTBUF` - buf가 작아 해당되는 이름을 모두 반환하지 못하는 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlExecute
**설명**
플랫폼에 설치된 `java/C/C++`프로그램을 실행시킨다
만기일이 지났거나 기타, 접근이 허락되지 않으면 에러값을 반환한다. 이 함수는 넌블라킹(non-blocking)함수이다. 프로그램이죽게되면, `MV_CHILD_APP_DESTROY_EVENT` 를 응용프로그램 관리자와 죽는 프로그램의 부모 프 로그램에게 보내게 된다. 실행된 프로그램은 다른 프로그램과 서로 다른 메모리 공간에 존재하게 되고, event 와 공유메모리를 통하여만 데이타를 주고 받을 수 있다.
매개변수 전달 : 프로그램은 자신이 실행시킨 자식프로그램에게 필요한 정보를 전 달할 수 있다. 전달할 매개변수는 문자열이어야만 한다.
```c
// C 부모 프로그램
...
MC_knlExecute("execName", 4, "this parm1", "20", "this parm3", "40");
...
// 실행된 프로그램이 C/C++ 자식 프로그램인 경우
void startClet(int argc, char* args[]) {
args[0]; // 프로그램 이름(플랫폼이 전달함)
args[1]; // "this parm1" 이 들어가 있음
args[2]; // "20" 이 들어가 있음
args[3]; // "this parm3" 이 들어가 있음
args[4]; // "40" 이 들어가 있음
}
//실행된 프로그램이 Java 자식 프로그램인 경우
public static void main(String[] args) {
int argsLen = args.length; // 5 임
args[0]; // " 프로그램 이름(플랫폼이 전달함)
args[1]; // "this parm1" 이 들어가 있
args[2]; // "20" 이 들어가 있음
args[3]; // "this parm3" 이 들어가 있음
args[4]; // "40" 이 들어가 있음
}
```
**프로토타입**
```c
M_Int32 MC_knlExecute(M_Char* execName, M_Int32 parmCnt, ...)
```
**매개 변수**
- `execName` - [in] 실행시킬 프로그램의 이름, MC_knlGetExecNames()에 의해 구해진다.
- `parmCnt` - [in] 이 매개변수뒤에 연속해서 전달할 매개변수 수
**반환 값**
성공
- 생성된 프로그램 ID
실패
- `M_E_ACCESS` - 만기일이 지났거나, 접근 권한이 없는 경우
- `M_E_NOMEMORY` – 메모리가 부족한 경우
- `M_E_INVALID` - 전달한 매개변수가 잘못된 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlExit
**설명**
프로그램을 종료한다. 실제 종료시점은 이 함수가 불리는 시점이 아니라, 이 함수에서 return 되고, 이벤트 핸들러를 빠져나간 시점에서 종료가 일어난다. 그러므로 `MC_knlExit()`를 호출한 이후에는 바로 return 해야 한다. `MC_knlExit()`를 통하여 프로그램이 종료되게 되면 부모 프로그램과, 응용 프로그램 관리자에게 `MV_CHILD_APP_DESTROY_EVENT`(exitCode 는 이벤트 매개변수로 전달)를 보내게 된다. 프로그램 종료시 해제되지 않은 자원들은 플랫폼에서 자동으로 해제한다.
아래의 예는 프로그램 A 가 프로그램 B 를 실행시키고 프로그램 B 가 `exitCode 27` 로 종료하는 예제이다.
```c
// program A
void handleCletEvent(int type, int parm1, int parm2) {
switch(type) {
case MV_CHILD_APP_DESTROY_EVENT:
knlPrintk("exit code %d\n", param1); // 27 을 출력함
break;
case XXX:
...
execute("B", ...);
...
break;
}
}
...
// program B
void handleCletEvent(int type, int parm1, int parm2) {
...
if ( xxx ) {
MC_knlExit(27);
return
}
}
```
**프로토타입**
```c
void MC_knlExit(M_Int32 exitCode)
```
**매개 변수**
- `exitCode` - [in] 종료값
**부작용**
없음
**참고 항목**
없음
### MC_knlProgramStop
**설명**
수행중인 다른 응용 프로그램을 강제로 종료시킨다. 동적로딩라이브러리는 강제로 해제될 수 없고, 동적로딩라이브러리를 사용하는 모든 응용프로그램이 종료되면 자동으로 종료된다. 부모프로그램은 종료시킬 수 없고, 자식프로그램만 종료시킬 수 있다.
**프로토타입**
```c
M_Int32 MC_knlProgramStop(M_Int32 prgID)
```
**매개 변수**
- `prgID` - [in] 종료시킬 프로그램 식별자
**반환 값**
성공
- 0
실패
- `M_E_ACCESS` - 부모 프로그램 종료를 시도한 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlGetCurProgramID
**설명**
현재 수행되고 있는 자기 자신의 프로그램 식별자를 얻어 온다.
**프로토타입**
```c
M_Int32 MC_knlGetCurProgramID()
```
**반환 값**
프로그램 식별자
**부작용**
없음
**참고 항목**
없음
### MC_knlGetParentProgramID
**설명**
현재 수행되고 있는 프로그램의 부모 프로그램 식별자를 얻어 온다.
**프로토타입**
```c
M_Int32 MC_knlGetParentProgramID()
```
**반환 값**
프로그램 식별자
**부작용**
없음
**참고 항목**
없음
### MC_knlGeAppManagerID
**설명**
응용프로그램 관리자의 프로그램 ID 를 구한다.
**프로토타입**
```c
M_Int32 MC_knlGetAppManagerID()
```
**반환 값**
프로그램 식별자
**부작용**
없음
**참고 항목**
없음
### MC_knlGetProgramInfo
**설명**
현재 동작중인 프로그램에 대한 정보를 얻는다. 반환값은 현재 동작중인 프로그램 의 수를 나타내고, 각 index 에 속한 값은 해당 index 에 해당하는 프로그램의 type 를 나타낸다. 예로소 buf[2]가 `MC_PRGTYPE_JAVADLL` 인경우 prgID 가 2 인 프로그램은 `java application DLL` 이다.
**프로토타입**
```c
M_Int32 MC_knlGetProgramInfo(M_Int32* buf, M_Int32 bufSize)
```
**매개 변수**
- `buf` - [out] 구해진 프로그램 타입이 반환될 버퍼
- `bufSize` - [in] 전달되는 버퍼 크기
**반환 값**
성공
- 동작중인 프로그램 수
실패
- `M_E_SHORTBUF` - 버퍼가 작아 모두 반환하지 못하는 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlGetAccessLevel
**설명**
프로그램의 접근 수준을 구한다. 반환값의 각 비트(bit)는 현재 프로그램이 접근 할 수 있는 API 들의 종류를 나타낸다. 각 비트(bit)의 의미는 `MC_DIR_SYS_READ_REQ_MASK`, `MC_DIR_SYS_WRITE_REQ_MASK`, `MC_DIR_SHARED_READ_REQ_MASK`, `MC_DIR_SHARED_WRITE_REQ_MASK`, `MC_NETWORK_ACCESS_REQ_MASK`, `MC_SERIAL_ACCESS_REQ_MASK`, `MC_SYSTEM1_ACCESS_REQ_MASK`, `MC_SYSTEM2_ACCESS_REQ_MASK` 마스크값에 따른다.
**프로토타입**
```c
M_Int32 MC_knlGetAccessLevel()
```
**반환 값**
접근수준(각 마스크값의 OR 값)
**부작용**
없음
**참고 항목**
없음
### MC_knlGetProgramName
**설명**
현재 수행되고 있는 자기 자신의 프로그램 이름을 구한다. 구해지는 이름은 ADF 파일에 기술된 이름이다.
**프로토타입**
```c
M_Int32 MC_knlGetProgramName(M_Char* nameBuf, M_Int32 bufSize)
```
**매개 변수**
- `nameBuf` - [out] 구해진 이름이 반환될 버퍼
- `bufSize` - [in] namebuf size
**반환 값**
성공
- 0
실패
- `M_E_SHORTBUF` - 버퍼가 작아 이름을 모두 반환하지 못하는 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlCreateSharedBuf
**설명**
공유 버퍼를 생성한다. 공유 버퍼는 프로그램간에 자료를 공유할 수 있도록 한다. 생성된 버퍼는 이 버퍼를 사용하는 모든 프로그램이 종료되면 자동으로 삭제된다.
**프로토타입**
```c
void* MC_knlCreateSharedBuf(const M_Char* name, M_Int32 size)
```
**매개 변수**
- `name` - [in] 공유버퍼의 이름. Null 문자로 끝난다. size - [in] 생성시킬 버퍼의 크기
**반환 값**
성공
- 생성된 간접버퍼(메모리식별자)
실패
- `0` - 경우 같은 이름의 공유버퍼가 존재하거나 메모리가 부족한 경우
**부작용**
공유버퍼 생성시 메모리가 부족하면 컴팩션이 일어날 수 있다.
**참고 항목**
없음
### MC_knlDestroyShareBuf
**설명**
생성된 공유버퍼를 파괴한다.
**프로토타입**
```c
M_Int32 MC_knlDestroySharedBuf(void* buf)
```
**매개 변수**
- `buf` - [in] 공유 간접버퍼(메모리식별자)
**반환 값**
성공
- 0
실패
- `M_E_INVALID` – 공유버퍼의 메모리식별자가 존재하지 않을 경우
- `M_E_ERROR` – 기타 이유로 공유버퍼를 파괴할 수 없을 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlGetSharedBuf
**설명**
`name` 문자열로 생성된 공유 버퍼를 얻어 온다.
**프로토타입**
```c
void* MC_knlGetSharedBuf(const M_char* name)
```
**매개 변수**
- `name` - [in] 공유버퍼의 이름. Null 문자로 끝난다.
**반환 값**
성공
- 공유 간접버퍼(메모리식별자)
실패
- `0` - 설정된 공유버퍼가 없는 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlGetSharedBufSize
**설명**
공유 버퍼 크기를 얻어 온다.
**프로토타입**
```c
M_Int32 MC_knlGetSharedBufSize(void* buf)
```
**매개 변수**
- `buf` - [in] 공유 간접버퍼(메모리식별자). `MC_knlCreateSharedBuf()`나 `MC_knlGetSharedBuf()` 함수의 리턴값이다.
**반환 값**
성공
- 공유버퍼 크기
실패
- `1` - 설정된 공유버퍼가 없는 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlResizeSharedBuf
**설명**
공유버퍼의 크기를 변경한다.
**프로토타입**
```c
void* MC_knlResizeSharedBuf(void* buf, M_Int32 size)
```
**매개 변수**
- `buf` - [in] 공유 간접버퍼(메모리식별자)
- `size` - [in] 생성할 공유버퍼 크기
**반환 값**
성공
- 크기가 변경된 공유 간접버퍼(메모리식별자)
실패
- 0
**부작용**
공유버퍼 크기변경시 메모리가 부족하면 컴팩션이 일어날 수 있다
**참고 항목**
없음
### MC_knlAlloc
**설명**
힙에서 요청하는 크기만큼의 메모리를 할당한다. 할당된 메모리는 `MC_knlFree()`에서 해제해 주어야 재사용된다. 할당된 메모리를 프로그램 종료시까지 해제하지 않으면 프로그램 종료시 플랫폼에서 자동으로 해제한다. 할당된 메모리는 메모리 식별자로 사용시 `MC_GETDPTR()`를 이용하여 포인터를 구해와 사용해야 한다.
**프로토타입**
```c
M_Uint32 MC_knlAlloc(M_Int32 size)
```
**매개 변수**
- `size` - [in] 할당을 요청하는 크기(byte 단위)
**반환 값**
성공
- 할당된 메모리 식별자 0
실패
- 0
**부작용**
메모리가 부족하면 컴팩션이 일어날 수 있다
**참고 항목**
없음
### MC_knlCalloc
**설명**
힙에서 요청하는 크기만큼의 메모리를 할당한다. 할당되는 영역은 0 으로 초기화 된다. 할당된 메모리는 `MC_knlFree()`에서 해제해 주어야 재사용된다. 할당된 메모리를 프로그램 종료시까지 해제하지 않으면 프로그램 종료시 플랫폼에서 자동으로 해제한다. 할당된 메모리는 메모리 식별자로 사용시 `MC_GETDPTR()`를 이용하여 포 인터를 구해와 사용해야 한다.
**프로토타입**
```c
M_Uint32 MC_knlCalloc(M_Int32 size)
```
**매개 변수**
- `size` - [in] 할당을 요청하는 크기(byte 단위)
**반환 값**
성공
- 할당된 메모리 식별자
실패
- 0
**부작용**
메모리가 부족하면 컴팩션이 일어날 수 있다
**참고 항목**
없음
### MC_knlFree
**설명**
`MC_knlCalloc()` 으로 할당한 메모리를 해제한다. 할당되지 않은 메모리를 해제할려고 하면 안된다.
**프로토타입**
```c
void MC_knlFree(M_Uint32 mID)
```
**매개 변수**
- `mID` - [in] 해제할 메모리 식별자
**부작용**
없음
**참고 항목**
없음
### MC_knlGetTotalMemory
**설명**
total 메모리를 구한다.
**프로토타입**
```c
M_Int32 MC_knlGetTotalMemory()
```
**반환 값**
total 메모리(byte 단위)
**부작용**
없음
**참고 항목**
없음
### MC_knlGetFreeMemory
**설명**
free 메모리를 구한다. 컴팩션을 수행하고 free 메모리를 구해 반환한다. 명시적으로 메모리 컴팩션이 필요한 경우, 이 함수를 이용한다
**프로토타입**
```c
M_Int32 MC_knlGetFreeMemory()
```
**반환 값**
free 메모리(byte 단위)
**부작용**
없음
**참고 항목**
없음
```c
MC_knlDefTimer
```
**프로토타입**
```c
void MC_knlDefTimer(MCTimer* tm, TIMERCB cb)
```
**설명**
타이머를 초기화하고 콜백함수를 등록한다. 타이머가 만료되면 등록된 콜백함수가 불립니다.
콜백함수가 불릴때 MC_knlSetTimer()호출시 설정한 타이머구조체 포인터와 매개변 수가 전될됩니다.
```c
MCTimer tm;
void TimerCb(MCTimer* ptm, void* parm) {
MC_knlPrintk("timer occur %d\n", parm);
MC_knlSetTimer(ptm, 1000L, (int)param+1);
}
void startClet(int argc, char* argv[]) {
MC_knlPrintk("start Clet!!!\n");
MC_knlDefTimer(&tm, TimerCb);
MC_knlSetTimer(&tm, 1000L, 0x1234);
}
```
**매개 변수**
- `tm` - [in] 초기화할 타이머 구조체 포인터
- `cb` – [in] 타이머 콜백함수
**부작용**
없음
**참고 항목**
없음
### MC_knlSetTimer
**설명**
타이머를 설정한다.
타이머가 만료되면 `MC_knlDefTimer()`에서 설정한 콜백함수가 불린다. 만료되지않은 타이머가 남은 상태에서 프로그램이 종료하면, 남은 타이머들은 자동으로 해제된다.
만료되지 않은 타이머를 이 함수를 통해서 재 정의하면 오류가 발생한다.
만일 만료되지 않은 타이머를 재 정의하기 위해서는 `MC_knlUnsetTimer()`를 호출한 후에 이 함수를 다시 호출한다.
타이머는 플랫폼하단의 운영체제에서 지원하는 타이머 resolution 과 타이머 만료 시 다른 태스크가 수행될 경우
어느정도의 오차는 발생할 수 있다.
**프로토타입**
```c
M_Int32 MC_knlSetTimer(MCTimer* tm, M_Int64 timeout, void* parm)
```
**매개 변수**
- `tm` - [in] 타이머 구조체 포인터
- `timeout` - [in] milliseconde 단위
- `parm` - [in] 타이머가 만료되었을때 콜백함수에 전달될 매개변수
**반환 값**
성공
- 0
실패
- `M_E_EXIST` - 기존에 설정된 타이머가 만료되지 않고 존재하는 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlUnsetTimer
**설명**
설정된 타이머를 취소한다. 타이머가 설정되지 않았을때는 무시된다.
**프로토타입**
```c
void MC_knlUnsetTimer(MCTimer* tm)
```
**매개 변수**
- `tm` - [in] 타이머 구조체 포인터
**부작용**
없음
**참고 항목**
없음
### MC_knlCurrentTime
**설명**
현재의 시간을 구한다. 단위는 millisecond 이다.
**프로토타입**
```c
M_Int64 MC_knlCurrentTime()
```
**반환 값**
1970년 1월 1일 0시 0분 0초를 기준으로 현재시간까지의 millisecond
**부작용**
없음
**참고 항목**
없음
### MC_knlGetSystemProperty
**설명**
단말기에 특화된 값을 읽어 온다. 패러미터로 올 수 있는 id 문자열은 HAL 문서 API 중 `MH_sysGetInformation()`에서 사용하는 문자열에 준하고, 또한 각 이통사나 벤더에 따라 추가 확장될 수 있다.
`"ESN", "NID", "SID", "BASELAT", "BASELONG", "CURRENTCH", "PHONENUMBER", "RSSILEVEL", "BATTERYLEVEL", "DATASERVICEMODE", "MAXSOCKETNUM", "MAXRSSILEVEL", "MAXSERIALNUM", "MAXBATTLEVEL", "MEDIADEVICES", "DNS",
"VIBRATORLEVEL"` 등의 id 문자열이 온다. 이것은 탑재되는 단말기에 따라 달라 질 수 있다.
**프로토타입**
```c
M_Int32 MC_knlGetSystemProperty(M_Char* id, M_Char* rtnBuf, M_Int32 bufSize)
```
**매개 변수**
- `id` - [in] 읽어 오고자 하는 문자열
- `rtnBuf` - [out] 반환 문자열이 반환되는 버퍼
- `bufSize` - [in] 반환값이 저장될 버퍼 크기
**반환 값**
성공
- 0
실패
- `M_E_SHORTBUF` : 반환되는 문자열보다 전달한 버퍼크기가 작을때 발생
- `M_E_INVALID` : 전달한 매개변수가 잘못되었음
**부작용**
없음
**참고 항목**
없음
### MC_knlSetSystemProperty
**설명**
단말기에 특화된 값을 설정 한다. 패러미터로 올 수 있는 id, buf 문자열은 HAL 문서 API 중 `MH_sysSetInformation()`에서 사용하는 문자열에 준하고, 또한 각 이통사나 벤더에 따라 추가 확장될 수 있다.
**프로토타입**
```c
M_Int32 MC_knlSetSystemProperty(M_Char* id, M_Char* buf)
```
**매개 변수**
- `id` - [in] 설정 하고자 하는 ID 문자열
- `buf` - [in] 설정할 문자열 버퍼
**반환 값**
성공
- 0
실패
- `M_E_INVALID` : 전달한 매개변수가 잘못되었거나, 설정할 수 없는 정보
**부작용**
없음
**참고 항목**
없음
### MC_knlGetResourceID
**설명**
프로그램과 연관된 리소스의 ID 를 얻어온다
**프로토타입**
```c
M_Int32 MC_knlGetResourceID(M_Char* resourceName, M_Int32* size)
```
**매개 변수**
- `resourceName` - [in] 리소스 이름
- `size` - [?] 리소스 크기
**반환 값**
성공
- 리소스 ID
실패
- `M_E_NOENT` : 리소스가 존재하지 않는 경우
**부작용**
없음
**참고 항목**
없음
### MC_knlGetResource
**설명**
리소스 ID 에 해당하는 리소스를 읽어온다.
**프로토타입**
```c
M_Int32 MC_knlGetResource(M_Int32 resourceID, void* buf, M_Int32 bufSize)
```
**매개 변수**
- `resourceID` - [in] 리소스 ID
- `buf` - [in] 리소스를 복사할 간접버퍼(메모리식별자)
- `bufSize` – [in] 버퍼크기
**반환 값**
성공
- 0
실패
- `M_E_SHORTBUF` : 버퍼크기가 작은 경우
**부작용**
컴팩션이 일어날 수 있음
**참고 항목**
없음
---
title: "5.1.6. 매체 처리기"
---
사운드나 동영상등의 모든 Media 에 대해서 처리를 해주는 매체 처리기와 관련된 함수와 톤 재생 및 음성녹음 및 볼륨 조절에 관련한 패키지 이다
사운드, 톤, 동영상등의 모든 데이타는 클립(CLIP)으로 추상화되어 매체처리기에 서 수행한다. 매체재생기에서 지원하는 타입은 `MC_knlSetSystemProperty()`의 `"MEDIADEVICES"`에 의해 구해진 타입들이다.
매체처리, 톤 재생, 녹음 등의 상태 변화는 등록하는 콜백 함수로 전달된다. 볼륨 조절은 톤, 사운드, 녹음에 대해 각각 가능하다.
```c
MC_MDA_STATUS_ERROR
```
**설명**
오류로 인한 정지 상태. 상수값은 -1.
**프로토타입**
```c
#define MC_MDA_STATUS_ERROR (-1)
```
### MC_MDA_STATUS_END_OF_DATA
**설명**
매체(혹은 톤)처리시 - 처리기가 매체(혹은 톤) 데이터의 마지막에 도달한 상태. 상수값은 1.
**프로토타입**
```c
#define MC_MDA_STATUS_END_OF_DATA 1
```
### MC_MDA_STATUS_START
**설명**
매체(혹은 톤)처리시 - 매체(혹은 톤) 처리를 시작한 상태. 상수값은 2.
**프로토타입**
```c
#define MC_MDA_STATUS_STARTED 2
```
### MC_MDA_STATUS_STOPP
**설명**
매체(혹은 톤)처리시 - 매체(혹은 톤) 처리를 종료한 상태 녹음시 – 녹음을 중단한 상태. 상수값은 3
```c
MC_MDA_STATUS_PAUSE
```
**프로토타입**
```c
#define MC_MDA_STATUS_STOPP 3
```
**프로토타입**
```c
#define MC_MDA_STATUS_PAUSED 4
```
**설명**
매체(혹은 톤)처리시 - 매체(혹은 톤) 처리를 잠시 멈춘 상태 녹음시 – 녹음을 잠시 멈춘 상태. 상수값은 4
### MC_MDA_STATUS_RESUME
**설명**
매체(혹은 톤)처리시 - 잠시 멈춘 매체(혹은 톤) 처리를 재개한 상태 녹음시 – 잠시 멈춘 녹음을 재개한 상태. 상수값은 5
**프로토타입**
```c
#define MC_MDA_STATUS_RESUMED 5
```
### MC_MDA_STATUS_RECORD
**설명**
녹음시 – 녹음을 시작한 상태. 상수값은 6
**프로토타입**
```c
#define MC_MDA_STATUS_RECORDED 6
```
### MC_MDA_STATUS_FULL_OF_DATA
**설명**
녹음시 – 클립내부버퍼가 완전히 채워진 상태. 상수값은 7.
**프로토타입**
```c
#define MC_MDA_STATUS_FULL_OF_DATA 7
```
### MC_MDA_VOLSEL_CUR
**설명**
현재 볼륨값을 의미하는 상수. 상수값은 0.
**프로토타입**
```c
#define MC_MDA_VOLSEL_CUR 0
```
### MC_MDA_VOLSEL_MIN
**설명**
최소 볼륨값을 의미하는 상수. 상수값은 1.
**프로토타입**
```c
#define MC_MDA_VOLSEL_MIN 1
```
### MC_MDA_VOLSEL_MAX
**설명**
최대 볼륨값을 의미하는 상수. 상수값은 2.
**프로토타입**
```c
#define MC_MDA_VOLSEL_MAX 2
```
### (*MEDIACB)
**설명**
처리기의 상태가 변경될 때 불려지는 콜백함수. 상태 값은 매체 처리 상태를 참조.
**프로토타입**
```c
typedef void (*MEDIACB)(MC_MdaClip* clip, M_Int32 status)
```
**매개 변수**
- `clip` - ? 클립
- `status` ? 매체처리기 상태
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipCreate
**설명**
특정 타입의 CLIP 을 생성한다. 지원되는 타입은 `MC_knlSetSystemProperty()`의 "MEDIADEVICES"에 의해 구해진 타입들이다. 타입은 MIME 에서 지원하는 타입일 경 우 "audio/xxx", "video/xxx"와 같이 MIME 타입을 따른다.
메모리 버퍼를 데이터로 입력하고자 하는 경우 `MC_mdaClipPutData()`를 통하고, file 로 데이터를 입력하고자 하는 경우 `MC_mdaClipPutDataByFile()` 을 통하여 재 생할 데이터를 입력한다.
Clip 의 버퍼 크기는 입력하고자 하는 데이터의 전체 크기만큼 생성해야 한다.
콜백함수가 설정되지 않으면 매채재생기의 상태변화가 전달되지 않는다.
**프로토타입**
```c
MC_MdaClip* MC_mdaClipCreate(M_Char* mType, M_Int32 bufSize, MEDIACB cb)
```
**매개 변수**
- `mType` - [in] 미디어타입
- `bufSzie` - [in] 버퍼 크기(CLIP 내에 생성될 버퍼크기)
- `cb` - [in] 클립을 매체처리기에서 처리하는중 상태변화를 알려 줄 콜백함수
**반환 값**
성공
- `MC_MdaClip` 객체 포인터 0
실패
- 0
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipFree
**설명**
클립에 할당된 모든 리소스를 해제한다.
**프로토타입**
```c
M_Int32 MC_mdaClipFree(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
성공
- 0
실패
- `M_E_INUSE` - 클립을 재생중이거나 녹음중에 해제할려고 시도함
- `M_E_INVALID` - `clip` 이 NULL 이면 리턴
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipGetType
**설명**
클립의 타입을 구한다.
**프로토타입**
```c
M_Int32 MC_mdaClipGetType(MC_MdaClip* clip, M_Byte* buf, M_Int32 bufSize)
```
**매개 변수**
- `clip` - [in] 클립
- `buf` – [out] 타입이 저장될 버퍼
- `bufSize` – [in] 복사할 버퍼 크기
**반환 값**
성공
- 0
실패
- `M_E_SHORTBUF` - 저장할 버퍼가 작음
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipPutData
**설명**
입력 할 미디어 데이터가 메모리에 저장되어 있을 때 클립에 미디어 데이타를 복 사한다. 미디어 데이타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내 의 데이타는 매체재생기에서 재생되면 줄어들고, `MC_mdaClipPutData()`로 늘어나게 된다. 복사할 데이타가 크기가 클립내부버퍼가 수용할 데이타보다 크면 수용할 수 있는 만큼만 복사된다.
**프로토타입**
```c
M_Int32 MC_mdaClipPutData (MC_MdaClip* clip, M_Byte* buf, M_Int32 size)
```
**매개 변수**
- `clip` - [in] 클립
- `buf` – [in] 직접버퍼
- `size` – [in] 복사할 버퍼 크기
**반환 값**
성공
- 복사된 크기
실패
- 없음
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipPutDataByFile
**설명**
입력 할 미디어 데이터가 파일로 저장되어 있을 때, 클립에 미디어 데이타를 복사 한다. 미디어 데이타는 클립생성당시 설정한 타입의 데이타이어야 한다. 클립내의 데이타는 매체재생기에서 재생되면 줄어들고, `MC_mdaClipPutData()`로 늘어나게 된 다. 복사할 데이타가 크기가 클립내부버퍼가 수용할 데이타보다 크면 수용할 수 있는 만큼만 복사된다.
**프로토타입**
```c
M_Int32 MC_mdaClipPutData (MC_MdaClip* clip, M_Byte* filename, M_Int32 size, M_Int32 aMode)
```
**매개 변수**
- `clip` - [in] 클립
- `filename` – [in] 복사해올 파일 이름
- `size` – [in] 복사할 버퍼 크기
- `aMode`
- `MC_DIR_PRIVATE_ACCESS` - private 디렉토리에 접근
- `MC_DIR_SHARED_ACCESS` - shared 디렉토리에 접근
- `MC_DIR_SYSTEM_ACCESS` - system 디렉토리에 접근
**반환 값**
성공
- 복사된 크기
실패
- 없음
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipGetData
**설명**
클립에서 버퍼로 미디어 데이타를 복사한다. 클립내의 데이타는 매체재생기에서 녹음되면 늘어나고, `MC_mdaClipGetData()`로 줄어들게 된다. 클립내부의 데이타가 전달한 버퍼보다 크면 버퍼크기만큼만 복사된다. 이 함수는 클립 타입이 `"MEDIADEVICES"`에서 얻어진 타입일때 사용된다.
**프로토타입**
```c
M_Int32 MC_mdaClipGetData(MC_MdaClip* clip, M_Byte* buf, M_Int32 size)
```
**매개 변수**
- `clip` - [in] 클립
- `buf` – [in] 직접버퍼
- `size` – [in] 복사할 버퍼 크기
**반환 값**
성공
- 복사된 크기
실패
- 없음
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipAvailableDataSize
**설명**
클립에서 이용가능한 데이타 크기(클립 내부버퍼 크기가 아님)
**프로토타입**
```c
M_Int32 MC_mdaClipAvailableDataSize(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
이용가능한 데이타 크기
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipClearData
**설명**
클립내의 이용가능한 데이타를 모두 버린다.
**프로토타입**
```c
M_Int32 MC_mdaClipClearData(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 사운드 재생이나 일시정지 상태에서 이 함수가 호출 될 경우 발생함.
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipSetPosition
**설명**
재생을 시작할 위치를 설정한다. 재생위치 설정기능을 지원하지 않는 타입으로 생성된 클립에 이 함수를 호출할 경우, `M_E_NOTSUP` 가 반환된다.
**프로토타입**
```c
M_Int32 MC_mdaClipSetPosition(MC_MdaClip* clip, M_Int32 ms)
```
**매개 변수**
- `clip` - [in] 클립
- `ms` – [in] 클립 재생을 시작할 시작 시점(milli second)
**반환 값**
성공
- `0`
실패
- `M_E_NOTSUP` - ? 클립재생기가 재생위치 설정기능을 제공하지 않음
- `M_E_ERROR` – 설정 실패
**부작용**
없음
**참고 항목**
없음
### MC_mdaClipGetVolume
**설명**
클립 재생기의 볼륨을 읽어온다. 클립 재생기의 독립적인 볼륨 설정을 지원할 경우, 이 함수는 클립 재생기의 볼륨을 읽어온다. 지원하지 않을 경우는, 클립생성 타입이 달라도 같은 볼륨소스를 가리킬 수 있다.
볼륨의 최소값은 0, 최대값은 100 이다.
**프로토타입**
```c
M_Int32 MC_mdaClipGetVolume(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
성공
- 볼륨값
실패
- `M_E_NOTSUP` – 볼륨값이 존재하지 않는 미디어 장치부작용
**참고 항목**
없음
### MC_mdaClipSetVolume
**설명**
클립 재생기의 볼륨을 설정한다. 클립 재생기의 독립적인 볼륨 설정을 지원할 경 우, 이 함수는 클립 재생기의 볼륨을 설정한다. 지원하지 않을 경우는, 클립생성 타입이 달라도 같은 볼륨소스를 가리킬 수 있다. 볼륨값의 최소는 0, 최대는 100 이다.
**프로토타입**
```c
void MC_mdaClipSetVolume(MC_MdaClip* clip, M_Int32 level)
```
**매개 변수**
- `clip` - [in] 클립
- `level` – [in] 볼륨 값(0-100사이의 볼륨값)
**반환 값**
- `M_E_NOTSUP` – 볼륨값 설정을 지원하지 않는 미디어 장치
**부작용**
없음
**참고 항목**
없음
### MC_mdaPlay
**설명**
클립의 데이타를 재생한다.
이 함수가 불려 매체처리를 시작하면 클립생성시 등록된 콜백 함수에 `MC_MDA_STATUS_STARTED` 상태가 전달된다. 이미 함수가 불려 매체를 처리하고 있었 다면 이 함수는 아무런 역할을 하지 않는다. 클립데이타가 소진되면 콜백함수에 `MC_MDA_STATUS_END_OF_DATA` 상태가 전달된다.
스트리밍 재생을 하고 싶은 경우에는 클립 데이타가 완전 소진되기 전에, 주기적 으로 `MC_mdaClipPutData()`로 클립 데이타를 채워주어야 한다.
**프로토타입**
```c
M_Int32 MC_mdaPlay(MC_MdaClip* clip, M_Boolean repeat)
```
**매개 변수**
- `clip` - [in] 클립
- `repeat` - [in] 0 이면 한번, 1 이면 반복 재생
**반환 값**
성공
- `0`
실패
- `M_E_INUSE` – 클립재생기가 이미 다른 클립을 재생하고 있음
- `M_E_ERROR` – 이미 같은 클립을 재생중에 있음
**부작용**
없음
**참고 항목**
없음
### MC_mdaPause
**설명**
매체 처리(재생/녹음)를 일시적으로 멈춘다.
이 함수가 불려 매체처리 일시 정지하게 되면 클립생성시 등록한 콜백 함수에 `MC_MDA_STATUS_PAUSED` 상태가 전달된다. 일시로 멈추어 있거나, 정지되어 있는 처리기에 대해서 이 함수를 다시 부르면, 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_mdaPause(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
성공
- 0
실패
- `M_E_NOTSUP` – paue 를 지원하지 않는 클립재생기
- `M_E_ERROR` - 이미 멈추어 있거나, 정지되어 있음
**부작용**
없음
**참고 항목**
없음
### MC_mdaResume
**설명**
일시 정지한 매체처리(재생/녹음)를 재개한다.
이 함수가 불려 매체처리를 재개하면 클립생성시 등록한 콜백 함수에 `MC_MDA_STATUS_RESUMED` 상태가 전달된다. 매채처리중인 처리기에 대해서 이 함수 를 다시 부르면, 이 함수는 아무런 역활을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_mdaResume(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
성공
- 0
실패
- `M_E_NOTSUP` – resume 를 지원하지 않는 클립재생기
- `M_E_ERROR` - 이미 매체처리중
**부작용**
없음
**참고 항목**
없음
### MC_mdaStop
**설명**
매체처리(재생/녹음)를 종료한다.
이 함수가 불려 매체처리를 종료하면 클립생성시 등록한 콜백 함수에 `MC_MDA_STATUS_STOPPED` 상태가 전달된다. 정지되어 있는 처리기에 대해서 이 함수를 다시 부르면, 이 함수는 아무런 역활을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_mdaStop(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
성공
- 0
실패
- `M_E_ERROR` - 이미 정지되어 있음
**부작용**
없음
**참고 항목**
없음
### MC_ mdaRecord
**설명**
녹음을 시작한다.
녹음을 지원하지 않는 타입으로 생성된 클립으로 녹음을 시도할 경우, 아무기능도 하지 않는다. 이 함수가 불려 매체처리를 시작하면 클립생성시 등록된 콜백 함수에 `MC_MDA_STATUS_RECORDED` 상태가 전달된다. 이미 함수가 불려 녹음중이었다면, 이 함수는 아무런 역할을 하지 않는다. 녹음 중, 클립 내부버퍼가 완전히 차면 콜 백함수에 `MC_MDA_STATUS_FULL` 상태가 전달된다.
스트리밍 녹음을 하고 싶은 경우에는 클립 내부버퍼가 완전히 차기전에, 주기적으로 `MC_mdaClipGetData()`로 클립 내부버퍼를 비워주어야 한다.
**프로토타입**
```c
M_Int32 MC_mdaRecord(MC_MdaClip* clip)
```
**매개 변수**
- `clip` - [in] 클립
**반환 값**
성공
- 0
실패
- `M_E_INUSE` – 이미녹음중인 다른클립이 있음
- `M_E_ERROR` – 이미 같은 클립을 녹음중에 있음
**부작용**
없음
**참고 항목**
없음
### MC_mdaGetVolume
**설명**
볼륨의 값을 리턴한다. 각 디바이스마다 독립적인 볼륨이 설정되었을 경우, 이 값 은 정확하지 않을 수 있다. 그럴경우, 정확한 각 디바이스의 볼륨은 `MC_mdaClipGetVolume()`으로 읽어와야 한다 반환되는 볼륨값은 0 – 100 사이의 값으로 환산하여 반환되어야 한다. 0-100 사이값을 어느정도의 볼륨세기와 일치시 키는가는 아래의 예처럼 하드웨어가 지원하는 볼륨단계를 백분율로 일치시킨것에 따른다. 하드웨어가 몇단계의 볼륨세기를 지원하는가는 `MC_knlGetSystemProperty()`에서 반환한다.
> 예) 볼륨세기가 강, 약 두개인 하드웨어 => 1-50 : 약볼륨 51-100 : 강볼륨
> 볼륨세기가 강,중,약 세개인 하드웨어 => 1-33:약볼륨, 34 -66:중볼륨, 67-100:강볼륨
**프로토타입**
```c
M_int32 MC_mdaGetVolume()
```
**매개 변수**
**반환 값**
볼륨 값
**부작용**
없음
**참고 항목**
없음
### MC_mdaSetVolume
**설명**
볼륨을 설정한다. 볼륨을 설정할 수 있는 모든 디바이스의 볼륨을 설정한다. 각 디바이스마다 독립적인 불륨을 설정할 경우, Clip 에 있는 볼륨 API 을 이용하도록 한다. 설정할 볼륨의 최소값은 0 이고, 최대값은 100 이다.
**프로토타입**
```c
void MC_mdaSetVolume(M_Int32 value)
```
**매개 변수**
- `value` - [in] 볼륨값(0-100 사이의 볼륨값)
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MC_mdaVibrator
**설명**
Vibrator 를 제어 한다. 지정한 시간 동안 on 시킨 후 자동으로 꺼진다.
매개변수 level값이 0보다 큰 경우만 timeout 값이 유효하다. level값 0은 virbrator 가 꺼지는 것을 의미한다. 진동강도는 매개변수 level값으로 정해지고 0-100사이의 값 이 올수 있다. 100은 하드웨어가 지원하는 가장 강한 진동을 0은 가장 약한 진동을 의 미한다. 0-100사이값을 어느정도의 진동세기와 일치시키는가는 아래의 예처럼 하드웨 어가 지원하는 진동단계를 백분율로 일치시킨것에 따른다. 하드웨어가 몇단계의 진동 세기를 지원하는가는 `MC_knlGetSystemProperty(“VIBRATORLEVEL”)` 에서 알수 있다.
> 예) 진동세기가 하나인 하드웨어 => 1-100 : 진동
> 진동세기가 강, 약 두개인 하드웨어 => 1-50 : 약진동, 51-100 : 강진동
> 진동세기가 강,중,약 세개인 하드웨어 => 1-33:약진동, 34-66:중진동, 67-100:강진동
**프로토타입**
```c
void MC_mdaVibrator(M_Int32 level, M_Int32 timeout)
```
**매개 변수**
- `level` - [in] 0 이면 off, 1-100 이면 운영체제에서 일치시킨 진동세기로 진동
- `timeout` - [in] 진동시간, 밀리초 단위
**부작용**
없음
**참고 항목**
없음
### MC_mdaSetMuteState
**설명**
단말기의 음원별 소리 발생 방지를 설정한다.
**프로토타입**
```c
M_Int32 MC_mdaSetMuteState(M_int32 source, M_Boolean bmute)
```
**매개 변수**
- `source` – [in] 볼륨소스. `MC_MDA_VOLTYPE_TONE`, `MC_MDA_VOLTYPE_SOUND`,`MC_MDA_VOLTYPE_RECORDER` 중의 하나가 될 수 있다
- `bmute` – [in] 소리발생 방지 설정
- `TRUE` - 소리 발생 방지
- `FALSE` - 소리 발생 허용
**반환 값**
성공
- `M_E_SUCCESS` – 성공
실패
- `M_E_ERROR` – 실패
**부작용**
없음
**참고 항목**
없음
### MC_mdaGetMuteState
**설명**
단말기의 음원별 소리 발생 방지 설정 상태를 얻는다.
**프로토타입**
```c
M_Boolean MC_mdaGetMuteState(M_int32 source)
```
**매개 변수**
- `source` – [in] 볼륨소스. `MC_MDA_VOLTYPE_TONE`, `MC_MDA_VOLTYPE_SOUND`,`MC_MDA_VOLTYPE_RECORDER` 중의 하나가 될 수 있다
**반환 값**
- `TRUE` - 소리 발생 방지
- `FALSE` - 소리 발생 허용
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.9. MISC"
---
단말기에서 지원되는 부가장치들에 대해서 제어하는 함수 들이다. HAL 에서 수정된 부분 반영함.
### MC_BackLight
**설명**
백라이트 제어 옵션을 나타내는 열거형
**프로토타입**
```c
typedef enum _MC_BackLight MC_BackLight {
MC_LIGHT_ON = 0 // 백라이트 켬
MC_LIGHT_OFF, // 백라이트 끔
MC_LIGHT_ALWAYS_ON, // 백라이트 항상 켬
MC_LIGHT_DEFAULT, //사용자가 설정한 상태로 함
} MC_BackLight;
```
### MC_miscBackLight
**설명**
백라이트를 제어하는 함수 이다. 단말기에서 초기에 설정된 백라이트 설정이 존재 한다. 이 설정된 값은 키가 눌려 질 때 몇 초 동안 그 상태를 유지 하게 되어 있 다. 이 함수는 그 설정된 값을 무효화 시켜야 하며 어플리케이션에서 사용 후 원 상태로 돌리고 싶다면 `MC_LIGHT_DEFAULT` 값으로 재 설정 후 종료 한다.타임아웃 되면 `Backlight` 는 자동으로 꺼진다. 백라이트 번호는 0 이면 주 LCD 의 백라이트 이고 1 이면 보조 LCD 의 백라이트를 가르킨다. 만약 백라이트가 색상을 지정할 수 있을 경우 색상은 매개변수 color 로 지정하는데 color 값의 형식은 0xYYRRGGBB(네트웍 바이트 순서(network byte ordering)이다) 형태이다. 여기서 YY 는 무시되면 RR 은 빨강(Red), GG 는 녹색(Green), BB 는 파랑(Blue) 범위를 지정한다.
**프로토타입**
```c
M_Int32 MC_miscBackLight(M_Int32 id, MC_BackLight on_off, M_Int32 color, M_Int32 timeout)
```
**매개 변수**
- `id` - 백라이트 번호
- `on_off` - 백라이트 조정옵션
- `color` – 백라이트 색상
- `timeout` - 밀리초단위의 타임머값. on_off 가 `MC_DEV_LIGHT_ON` 경우만 참조한다
**반환 값**
성공
- 0
실패
- `M_E_ERROR` - 지정한 백라이트가 없을 경우
**부작용**
없음
**참고 항목**
없음
### MC_miscSetLed
**설명**
LED on/off 를 설정한다. 각 bit 가 1 이면 on, 0 이면 off 를 나타낸다.
예) 외장 LED 가 4 개 존재한다면 LSB BIT 부터 4 개를 사용한다.
```text
* 0 bit
* +---------------------+
* | |*|*|*|*|
* +---------------------+
*
```
`MC_miscSetLed(0x3)` led2 개를 켜고, 두개를 끈다.
**프로토타입**
```c
void MC_miscSetLed(M_Int32 leds)
```
**매개 변수**
- `leds` - 비트가 1 이면 해당 LED 가 on 되고 0 이면 off 된다
**부작용**
없음
**참고 항목**
없음
### MC_miscGetLed
**설명**
LED 의 on/off 상태를 읽어온다.
**프로토타입**
```c
M_Int32 MC_miscGetLed()
```
**매개 변수**
없음
**반환 값**
- 각 led의 on/off상태의 bit OR값
**부작용**
없음
**참고 항목**
없음
### MC_miscGetLedCount
**설명**
외장된 LED 개수를 얻어 온다.
**프로토타입**
```c
M_Int32 MC_miscGetLedCount(void)
```
**반환 값**
led 개수
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.5. NETWORK"
---
TCP/IP 인터넷 통신에 관련된 모듈이다. 인터넷 접근, TCP/UDP 소켓, HTTP 연결에 관련된 API 들이 포함된다.
모든 네트웍 I/O 관련 API 는 넌블로킹(nonblocking)이며 I/O 상에서 발생하는 이벤트를 받기위해서는 콜백함수를 등록해야한다.
어플리케이션은 `MC_netConnect()` 를 호출하여 인터넷 접근이 허용된 후부터 모든 소켓 관련 API 를 통해 데이터 통신이 가능해 진다. `MC_netSocketClose()` 를 통해 인터넷 접근이 종료된 이후에는 모든 소켓 API 가 `M_E_NOTCONN` 에러를 리턴하며, 소켓에 등록된 모든 콜백 함수는 삭제되어 불리지 않게 된다. `MC_netConnect()` 를 통한 인터넷 접근은 어플리케이션 단위로 이루어져야 하며 한 어플리케이션의 인터넷 접근은 다른 어플리케이션에 영향을 주지 않는다. 예를 들어 한 어플리케이션에서 `MC_netConnect()` 로 인터넷에 접근이 가능해 진다 하더라도 다른 어플리케 이션에서 인터넷연결을 하려면 `MC_netConnect()` 을 호출하여 인터넷 접근을 시도 해야한다.
플랫폼은 TCP 와 UDP 소켓을 지원한다. TCP 서버소켓 지원은 선택사항이며 클라이 언트 기능은 필수사항이다. TCP 소켓과 UDP 소켓은 동시에 여러개를 지원할 수 있 지만 동시에 지원할 수 있는 개수는 해당 플랫폼마다 다르다. 만일 `MC_netSocket()` 이 `M_E_NOSPACE` 를 리턴하면 더이상 소켓을 열 수 없다는 뜻이다. `MC_netClose()` 함수를 호출하여 인터넷 접근을 종료하면 응용프로그램에서 네트웍 API 로 등록한 모든 콜백함수는 호출되지 않으며 플랫폼은 응용프로그램에서 생성 한 모든 소켓을 종료한다.
**참고 항목**
없음
### MC_AF_INET
**설명**
인터넷 도메인임을 가르키는 상수로 값은 2 이다.
**프로토타입**
```c
#define MC_AF_INET 2
```
### MC_SOCKET_STREAM
**설명**
TCP 소켓 타입을 지정하는 값으로 1 이다
**프로토타입**
```c
#define MC_SOCKET_STREAM 1
```
### MC_SOCKET_DGRAM
**설명**
UDP 소켓 타입을 지정하는 값으로 2 이다
**프로토타입**
```c
#define MC_SOCKET_DGRAM 2
```
### NETCONNECTCB
**설명**
함수 `MC_netConnect` 에 등록하는 콜백함수.
**프로토타입**
```c
typedef void (*NETCONNECTCB)(M_Int32 error, void *param)
```
**매개 변수**
- `error` - 성공: 0, 실패: `M_E_ERROR`
- `param` - `MC_netConnect()` 호출시에 넘겨주는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_netConnect`
### NETSOCKCONNECTCB
**설명**
함수 MC_netConnect 에 등록하는 콜백함수
**프로토타입**
```c
typedef void (*NETSOCKCONNECTCB)(M_Int32 fd, M_Int32 error, void *param)
```
**매개 변수**
- `fd` - 소켓 식별자
- `error` - 0 : 성공, 실패: `M_E_ERROR`
- `param` - `MC_netSocketConnect()` 호출 시에 넘겨주눈 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
### MC_netSocketConnect
### NETSOCKACCEPTCB
**설명**
함수 `MC_netSocketAccept` 에 등록하는 콜백함수
**프로토타입**
```c
typedef void (*NETSOCKACCEPTCB)(M_Int32 sd, M_Int32 fd, M_Int32 error, void *param)
```
**매개 변수**
- `sd` - 서버소켓 식별자
- `fd` - 클라이언트와 연결된 소켓 식별자 error – 0 : 성공, 실패: M_E_ERROR
- `param` - `MC_netSocketAccept()` 호출 시에 넘겨주는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_netSocketAccept`
### NETSOCKREADCB
**설명**
함수 `MC_netSetReadCB` 에 등록하는 콜백함수
**프로토타입**
```c
typedef void (*NETSOCKREADCB)(M_Int32 fd, M_Int32 error, void *param)
```
**매개 변수**
- `fd` - 소켓 식별자
- `error` - 0 : 성공, 실패: `M_E_ERROR`
- `param` - `MC_netSetReadCB()` 호출시 넘겨주는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_netSetReadCB`
### NETSOCKWRITECB
**설명**
함수 `MC_netSetWriteCB` 에 등록하는 콜백함수
**프로토타입**
```c
typedef void (*NETSOCKWRITECB)(M_Int32 fd, M_Int32 error, void *param)
```
**매개 변수**
- `fd` - 소켓 식별자
- `error` - 성공: 0, 실패: `M_E_ERROR`
- `param` - `MC_netSetWriteCB()` 호출시 넘겨주는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_netSetWriteCB`
### NETHOSTADDRCB
**설명**
`MC_netGetHostAddr()` 로 등록하는 콜백함수. 성공하면 addr 로 -1 이 아닌 IP 주소값이 전달된다. 이 주소값은 네트웍 바이트 순서(network byte ordering)이다.
**프로토타입**
```c
typedef void (*NETHOSTADDRCB)(M_Int32 addr, void *param)
```
**매개 변수**
- `addr` - IP 주소
- `param` - `MC_netGetHostAddr()` 호출 시에 넘겨주는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_netGetHostAddr`
### NETHTTPCB
**설명**
`MC_netHttpConnect()` 에 등록하는 콜백함수. 이 함수는 HTTP 서버로 부터 응답을 받거나 통신상의 에러가 발생하면 불리는 콜백함수이다. 서버로부터 응답을 받을 받았을 경우 서버응답 중 HTTP 헤더 필드 부분의 파싱(parsing)이 끝나는 시점이 이 함수가 불리는 시점이다. 따라서 이 함수가 불린 이후에야 다음 함수들이 정상적으로 동작한다.
```c
MC_netHttpGetResponseCode(), MC_netHttpGetResponseMessage(), MC_netHttpGetHeaderField(), MC_netHttpGetLength(), MC_netHttpGetType(), MC_netHttpGetEncoding()
```
또한 서버가 전송하는 컨텐츠는 이 함수로 전달되는 매개변수 sd 소켓 식별자를 통해서 읽을 수 있다. 서버가 전송하는 컨텐츠가 없을 경우 이 소켓 식별자는 -1 이 전달된다. 이 소켓 식별자가 -1 이 아닐 경우 소켓은 이미 서버와 연결된 상태이므로 `MC_netSocketConnect()` 를 호출할 필요가 없다. `MC_netHttpClose()` 가 불리면 앞에서 언급한 소켓 식별자가 무의미 해지며 이 소켓을 통한 모든 I/O 가 시 도가 실패로 돌아 간다. 이 함수로 전달되는 error 가 `M_E_ERROR` 일 경우 통신상 의 문제가 발생한 것으로 위에 열거한 함수들은 모두 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
typedef void (*NETHTTPCB)(M_Int32 fd, M_Int32 sd, M_Int32 error, void *param)
```
**매개 변수**
- `fd` - HTTP 식별자 sd – 소켓 식별자
- `error` - 성공: 0, 실패: `M_E_ERROR`
- `param` - `MC_netHttpConnect()` 호출시에 넘겨주는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netConnect
**설명**
인터넷 접근을 시도한다.
소켓을 사용하기 전에 이 함수가 불려 인터넷 접근이 가능해 져야만 소켓을 통한 TCP/IP 통신이 가능해 진다. 이 함수는 어플리케이션 별로 불려야 하는 함수다. 즉 다른 어플리케이션이 이 함수를 호출하여 인터넷 접근이 허용되어 있다 하더라 도 현재 어플리케이션이 이 함수를 호출하지 않으면 소켓을 사용할 수 없다. 이 함수가 0 을 리턴할 경우 등록하는 콜백함수를 통해 연결이 성공했는지 실패했는 지 여부를 알려준다. 이 함수를 사용하는 어플리케이션이 이미 함수를 호출하였거 나 다른 어플리케이션에서 인터넷 접근을 시도 중일 경우 `M_E_INPROGRESS` 를 리턴 하며, 이 함수를 호출하는 어플리케이션을 위한 인터넷 접근이 이미 허용되어 있 으면 에러 값 `M_E_ISCONN` 이 리턴된다. 이 함수가 에러 값을 리턴할 경우에는 이 함수로 등록하는 콜백이 불리지 않는다.
**프로토타입**
```c
M_Int32 MC_net Connect(NETCONNECTCB cb, void *param)
```
**매개 변수**
- `cb` - 접근에 성공하거나 실패할 경우 불려지는 콜백함수
**반환 값**
성공
- 0
실패
- `M_E_INPROGRESS` – 이 어플리케이션이 혹은 다른 어플리케이션이 인터넷 접근을 시도하고 있는 경우
- `M_E_ISCONN` – 이 어플리케이션이 이미 인터넷 접근이 허용된 경우
- `M_E_ERROR` – 기타 에러가 발생했을 경우
**부작용**
없음
**참고 항목**
없음
### MC_netClose
**설명**
인터넷 접근을 종료한다.
이 함수를 부르면 모든 인터넷 통신이 불가능하게 된다. 따라서 이 함수가 불릴 때 어플리케이션 내에 종료되지 않는 소켓이 존재한다면 자동으로 종료되며, `MC_netHttpOpen()` 으로 생성되는 HTTP 식별자도 종료된다. 더불어 네트웍 API 로 등록하는 모든 콜백함수는 호출되지 않는다. 또한 이 함수는 어플리케이션별로 불려지는 함수이어서 이 함수가 불리고 난 뒤에 소켓을 사용하는 다른 어플리케이션에 영향을 주지 않는다.
**프로토타입**
```c
void MC_netClose(void)
```
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MC_netSocket
**설명**
TCP 혹은 UDP 통신을 위한 소켓을 생성한다. 이 함수가 불리기 전에 먼저 `MC_netConnect()` 함수로 인터넷 접근에 성공해야 한다.
**프로토타입**
```c
M_Int32 MC_netSocket(M_Int32 domain, M_Int32 type)
```
**매개 변수**
- `domain` - 통신 도메인으로 인터넷 소켓일 경우 AF_INET 임
- `type` - `MC_SOCKET_STREAM` 혹은 `MC_SOCKET_DGRAM`
**반환 값**
성공
- 소켓 식별자
실패
- `M_E_NOTSUP` – domain 혹은 type 이 지원하지 않는 값을 경우
- `M_E_NOTCONN` - 인터넷 접근이 허용되지 않은 경우
- `M_E_NOSPACE` – 더 이상 소켓을 생성할 수 없을 경우
- `M_E_ERROR` – 기타 에러
**부작용**
없음
**참고 항목**
없음
### MC_netSocketConnect
**설명**
TCP 소켓으로 서버와 연결을 시도한다.
파라메타로 들어가는 IP 주소(addr) 과 포트번호(port) 는 네트웍 바이트 순서 (network byte ordering) 이어야 한다. 이 함수로 등록하는 콜백함수가 NULL 일 경우 이 함수는 `M_E_INVALID` 를 리턴하며 아무 역할도 하지 않는다. 이 함수가 0 을 리턴할 경우 콜백으로 등록된 함수가 불린다. 이 함수로 등록하는 콜백함수가 불리기 전에 `MC_netSocketClose()` 가 호출되면 콜백함수는 호출되지 않는다.
**프로토타입**
```c
M_Int32 MC_netSocketConnect(M_Int32 fd, M_Int32 addr, M_Int16 port, NETSOCKCONNECTCB cb, void *param)
```
**매개 변수**
- `fd` - 소켓 식별자
- `addr` - 서버의 주소
- `port` - 서버의 포트번호
- `cb` - 연결에 성공하거나 실패할 경우 불리는 콜백함수
- `param` – 콜백함수가 불릴 때 전달되는 값
**반환 값**
성공
- 0
실패
- `M_E_NOTSUP` – 이 함수를 지원하지 않는 소켓일 경우
- `M_E_BADFD` - 유효하지 않는 소켓 식별자
- `M_E_NOTCONN` - 인터넷 접근이 불가능한 경우
- `M_E_ISCONN` - 이미 연결되어 있는 경우
- `M_E_INPROGRESS` - 연결 작업이 이미 진행 중인
- `M_E_INVALID` – 주소가 잘 못된 경우나 콜백함수가 NULL 일 경우
- `M_E_ERROR` – 기타 에러
**부작용**
없음
**참고 항목**
`MC_netSocketClose`
### MC_netSocketWrite
**설명**
TCP 소켓으로 데이터를 보낸다.
이 함수가 `M_E_WOULDBLOCK` 을 리턴하면 시스템 내부 요인으로 지금 데이타를 전송 할 수 없다는 뜻이다. 이 경우 `MC_netSetWriteCB()` 로 등록한 콜백함수 내에서 다시 이 함수를 불러 데이터를 전송한다. 콜백내에서 부른 이 함수는 `M_E_WOULDBLOCK` 을 리턴할 수 있다.
**프로토타입**
```c
M_Int32 MC_netSocketWrite(M_Int32 fd, M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `fd` - 소켓 식별자
- `buf` - 데이터의 버퍼
- `len` - 보낼 데이터의 길이
**반환 값**
성공
- 보낸 데이터 길이(0 이상의 값)
실패
- `M_E_WODULDBLOCK` - 시스템 내부요인으로 당장 데이터를 전송할 수 없는 경우
- `M_E_BADFD` - 유효하지 않는 소켓 식별자
- `M_E_NOTCONN` – 서버와 소켓 연결이 끊기거나 인터넷 접근이 불가능한 경우
- `M_E_INVALID` – 버퍼나 버퍼길이가 잘 못된 경우
**부작용**
없음
**참고 항목**
`MC_netSocketWriteNETSOCKWRITECB`
### MC_netSocketRead
**설명**
TCP 소켓을 통해 데이터를 읽어 온다.
이 함수가 `M_E_WOULDBLOCK` 을 리턴하면 시스템 내부 요인으로 지금 데이타를 읽을 수 없다는 뜻이다. 이 경우 `MC_netSetReadCB()` 로 등록하는 콜백함수 내에서 다시 이 함수를 불러 데이터를 읽는다. 콜백내에서 부른 이함수는 다시 `M_E_WOULDBLOCK` 을 리턴할 수 있다.
**프로토타입**
```c
M_Int32 MC_netSocketRead(M_Int32 fd, M_Byte* buf, M_Int32 len)
```
**매개 변수**
- `fd` - 소켓 식별자
- `buf` - 데이터의 버퍼
- `len` - 읽을 데이터의 길이
**반환 값**
성공
- 읽은 데이타 길이(0 이상의 값으로 0)
실패
- `M_E_WOULDBLOCK` - 데이터가 도착하지 않아 지금 읽을 수 없는 경우
- `M_E_NOTCONN` – 서버와 소켓 연결이 끊기거나 인터넷 접근이 불가능한 경우
- `M_E_BADFD` - 소켓 식별자가 유효하지 않은 경우
- `M_E_INVALID` – 버퍼나 버퍼길이가 잘못된 경우
**부작용**
없음
**참고 항목**
`MC_netSetReadCB`
### MC_netSocketClose
**설명**
소켓을 종료한다. 이 함수를 부르기 전에 `MC_netClose()` 을 불러 인터넷 접근을 종료한 경우에는 이미 소켓이 종료된 상태이지만 이 함수는 성공을 리턴한다. 이 함수가 불리면 소켓에 등록된 모든 콜백함수는 삭제되며 콜백은 불리지 않는다.
**프로토타입**
```c
M_Int32 MC_netSocketClose(M_Int32 fd)
```
**매개 변수**
`fd` - 소켓 식별자
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 유효하지 않은 소켓 식별자인 경우
**부작용**
없음
**참고 항목**
`MC_netClose`
### MC_netSocketBind
**설명**
특정 포트를 소켓에 지정한다.
**프로토타입**
```c
M_Int32 MC_netSocketBind(M_Int32 fd, M_Uint32 addr, M_Uint16 port)
```
**매개 변수**
- `fd` - 소켓 식별자
- `port` - 로컬 포트번호. 네트웍 바이트 순서(network byte ordering)이다.
**반환 값**
성공
- 0
실패
- `M_E_INVALID` - 이미 특정포트가 다른 소켓을 위해 지정되어 있는 경우
- `M_E_NOTCONN` - 인터넷 접근이 불가능한 경우
- `M_E_BADFD` - 유효하지 않은 소켓 식별자인 경우
**부작용**
없음
**참고 항목**
없음
### MC_netGetMaxPacketLength
**설명**
UDP 를 통해 보낼 수 있는 패킷의 최대길이를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netGetMaxPacketLength(void)
```
**반환 값**
패킷의 최대 길이
**부작용**
없음
**참고 항목**
없음
### MC_netSocketSendTo
**설명**
UDP 소켓을 통해 데이타를 보낸다.
전송하는 데이타 길이는 `MC_netGetMaxPacketLength()` 가 리턴하는 값을 초과할 수 없다. 파라메타로 들어가는 IP 주소(addr) 과 포트번호(port) 는 네트웍 바이트 순서 (network byte ordering) 이어야 한다. 이 함수가 `M_E_WOULDBLOCK` 을 리턴하 면 시스템 내부 요인으로 지금 데이타를 전송할 수 없다는 뜻이다. 이 경우 `MC_netSetWriteCB()`로 등록하는 콜백함수 내에서 다시 이 함수를 불러 데이터를 전송한다. 콜백내에서 부른 이함수는 다시 `M_E_WOULDBLOCK` 을 리턴할 수 있다.
**프로토타입**
```c
M_Int32 MC_netSocketSendTo(M_Int32 fd, M_Byte* buf, M_Int32 len, M_Uint32 addr, M_Uint16 port)
```
**매개 변수**
- `fd` - 소켓 식별자
- `buf` - 데이터의 버퍼
- `len` - 데이터의 길이
- `addr` - 상대방 IP 주소. 네트웍 바이트 순서(network byte ordering)이다.
- `port` - 상대방 포트번호. 네트웍 바이트 순서(network byte ordering)이다.
**반환 값**
성공
- 보낸 데이타 길이(0 이상의 값)
실패
- `M_E_NOTSUP` – 소켓이 이 함수를 지원하지 않는 경우
- `M_E_WODULDBLOCK` - 시스템 내부요인으로 지금 당장 데이터를 전송할 수 없는 경우
- `M_E_BADFD` - 유효하지 않는 소켓 식별자
- `M_E_NOTCONN` - 인터넷 접근이 불가능한 경우
- `M_E_INVALID` – 주소 혹은 버퍼나 버퍼 길이가 잘 못 된 경우
**부작용**
없음
**참고 항목**
`MC_netGetMaxPacketLength`, `MC_netSetWriteCB`
### MC_netSocketRcvFrom
**설명**
UDP 소켓을 통해 데이타를 읽어 온다.
데이타를 전송한 상대방의 IP 주소와 포트번호는 각각 addr 와 port 에 저장된다. 상대방의 IP 주소와 포트번호는 모두 네트웍 바이트 순서(network byte ordering) 이다. 이 함수가 `M_E_WOULDBLOCK` 을 리턴하면 시스템 내부 요인으로 지금 데이타를 읽을 수 없다는 뜻이다. 이 경우 `MC_netSetReadCB()` 로 등록하는 콜백함수 내에서 다시 이 함수를 불러 데이터를 읽는다. 콜백내에서 부른 이 함수는 다시 `M_E_WOULDBLOCK` 을 리턴할 수 있다.
**프로토타입**
```c
M_Int32 MC_netSocketRcvFrom(M_Int32 fd, M_Byte* buf, M_Int32 len, M_Uint32* addr, M_Uint16* port)
```
**매개 변수**
- `fd` - 소켓 식별자 buf - 데이터의 버퍼
- `len` - 읽을 데이터의 길이
- `addr` - 상대방 IP 주소가 저장될 버퍼. 네트웍 바이트 순서(network byte ordering)이다.
- `port` - 상대방 포트번호가 저장될 버퍼. 네트웍 바이트 순서(network byte ordering)이다.
**반환 값**
성공
- 읽은 데이타 길이(0 이상의 값)
실패
- `M_E_WODULDBLOCK` - 도착한 데이터가 없어 지금 당장 데이터를 읽을 수 없는 경우
- `M_E_BADFD` - 유효하지 않는 소켓 식별자
- `M_E_NOTCONN` - 인터넷 접근이 불가능한 경우
- `M_E_INVALID` – 데이터 버퍼나 버퍼길이 혹은 상대방 IP 와 포트가 저장될 버퍼가 잘못된 경우
**부작용**
없음
**참고 항목**
`MC_netSetReadCB`
### MC_netGetHostAddr
**설명**
네트웍 호스트이름에 해당하는 IP 주소를 얻는다. 이 함수가 에러를 리턴하는 경우를 제외하고 IP 주소를 얻었거나 실패한 경우에 등록한 콜백함수가 불린다. 매개변수 dnsserver 가 -1 일 경우 `MC_knlGetSystemProperty()` 함수가 리턴하는 도 메인 네임 서버에 접속하여 IP 주소를 구한다.
**프로토타입**
```c
M_Int32 MC_netGetHostAddr(M_Int32 dnsserver, M_Byte *hostname, NETHOSTADDRCB cb, void *param)
```
**매개 변수**
- `dnsserver` – 도메인 네임 서버 IP 주소
- `hostname` –호스트 이름
- `cb` – 호스트 이름에 해당하는 IP 주소를 얻게 되면 호출되는 콜백함수
- `param` – 콜백함수가 호출될 때 전달되는 매개변수
**반환 값**
성공
- 0
실패
- `M_E_INVALID` – 등록하는 콜백함수가 NULL 이거나 매개변수 dnsserver 가 0 혹은 매개변수 hostname 이 NULL 일 경우
- `M_E_ERROR` – 기타 에러
**부작용**
없음
**참고 항목**
`MC_knlGetSystemProperty`
### MC_netSocketAccept
**설명**
TCP 서버 소켓이 클라이언트와 연결된 소켓을 리턴한다. 이 함수가 불리기 전에 `MC_netSocketBind()` 로 로컬 포트를 지정해야 한다. 이 함수가 `M_E_WOULDBLOCK` 을 리턴하면 클라이언트와 연결된 소켓이 생기면 등록하는 콜백함수가 불린다. 이 함수가 `M_E_WOULDBLOCK` 이외의 에러 값을 리턴하면 이 함수는 역할도 하지 않는다.
**프로토타입**
```c
M_Int32 MC_netSocketAccept(M_Int32 fd. NETSOCKACCEPTCB cb, void *param)
```
**매개 변수**
- `fd` – TCP 서버 소켓 식별자
- `cb` – 콜백 함수
- `param` – 콜백함수가 호출될 때 전달되는 매개변수
**반환 값**
성공
- 클라이언트와 연결된 소켓 식별자
실패
- `M_E_INVALID` – 콜백함수가 NULL 일 경우
- `M_E_WOULDBLOCK` – 지금 클라이언트와 연결된 소켓이 없을 경우
- `M_E_NOTSUP` – 이 함수를 지원하지 않는 소켓일 경우
- `M_E_BADFD` – 잘못된 식별자일 경우
- `M_E_NOTCONN` – 인터넷 접근이 불가능한 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MC_netSetReadCB
**설명**
소켓으로부터 데이터를 읽을 수 있는 시점에서 불리는 콜백함수를 지정한다. `MC_netSocketRead()` 나 `MC_netSocketRcvFrom()` 이 `M_E_WOULDBLOCK` 을 리턴할 경우 에만 이 함수로 등록된 콜백이 불린다. 여기서 지정하는 콜백함수는 한번만 불린다. 따라서 데이터를 읽을 수 있는 시점에서 콜백함수이 다시 불리게 하려면 다시 이 함수를 호출하여 콜백을 등록해야 한다. 또한 콜백함수가 불리기 전에 이 함수를 부르면 이전 콜백함수는 새로운 콜백함수로 대체된다. 만약 콜백함수가 NULL 이면 이전에 등록한 콜백함수를 제거하는 역할을 한다. 또한 이 함수가 호출되었 을 때 소켓으로부터 데이터를 읽을 수 있으면 콜백함수가 불린다.
**프로토타입**
```c
M_Int32 MC_netSetReadCB(M_Int32 fd, NETSOCKREADCB cb, void *param)
```
**매개 변수**
- `fd` - 소켓 식별자
- `cb` – 콜백함수
- `param` - 콜백함수가 불릴 때 전달되는 콜백 매개변수
**반환 값**
성공
- 0
실패
- `M_E_NOTCONN` –인터넷 접근이 불가능한 경우
- `M_E_BADF` - 소켓 식별자가 잘못 되었을 경우
**부작용**
없음
**참고 항목**
없음
### MC_netSetWriteCB
**설명**
소켓으로 데이터를 전송할 수 있는 시점에서 불리는 콜백함수를 지정한다. `MC_netSocketWrite()` 나 `MC_netSocketSendTo()` 가 `M_E_WOULDBLOCK` 을 리턴할 경우 에만 이 함수로 등록한 콜백이 불린다. 여기서 지정하는 콜백함수는 한번만 불린 다. 따라서 데이터를 전송할 수 있는 시점에서 콜백함수이 다시 불리게 하려면 다 시 이 함수를 호출하여 콜백을 등록해야 한다. 또한 콜백함수가 불리기 전에 이 함수를 부르면 이전 콜백함수는 새로운 콜백함수로 대체된다. 만약 콜백함수가 NULL 이면 이전에 등록한 콜백함수를 제거하는 역할을 한다. 또한 이 함수가 호출 되었을 때 소켓을 통해 데이터를 전송할 수 있으면 콜백함수가 불린다.
**프로토타입**
```c
M_Int32 MC_netSetWriteCB(M_Int32 fd, NETSOCKWRITECB cb, void *param)
```
**매개 변수**
- `fd` - 소켓 식별자
- `cb` – 콜백함수
- `param` - 콜백함수가 불릴 때 전달되는 콜백 매개변수
**반환 값**
성공
- 0
실패
- `M_E_NOTCONN` – 인터넷 접근이 불가능한 경우
- `M_E_BADF` - 소켓 식별자가 잘못 되었을 경우
**부작용**
없음
**참고 항목**
없음
### MC_netHttpOpen
**설명**
HTTP 식별자를 생성한다. 이 함수로 HTTP 연결 식별자를 생성한 후에 다음 함수 들을 호출하여 필요한 값들을 설정하거나 읽어온다. URL 문자열에 HTTP 서버의 IP 주소가 명시되어 있지 않으면 도메인 네임 서버로부터 IP 주소를 구해오게된다. 이때 사용하는 도메인 네임 서버의 IP 주소는 MC_knlGetSystemProperty() 를 통해 얻을 수 있다.
```c
MC_netHttpSetRequestMethod(), MC_netHttpGetRequestMethod(), MC_netHttpSetRequestProperty(), MC_netHttpGetRequestProperty(), MC_netHttpSetProxy(), MC_netHttpGetProxy().
```
**프로토타입**
```c
M_Int32 MC_netHttpOpen(M_Byte* url)
```
**매개 변수**
- `url` - "http://" 로 시작하는 URL 문자열
**반환 값**
성공
- HTTP 식별자
실패
- `M_E_INVALID` – URL 문자열이 잘 못 된 경우
- `M_E_NOSPACE` - 더 이상 HTTP 식별자를 생성할 수 없을 때
- `M_E_NOTCONN` - 인터넷 접근이 허용되어 있지 않은 경우
- `M_E_ERROR` – 기타 에러
**부작용**
없음
**참고 항목**
`MC_knlGetSystemProperty`, `MC_netHttpSetRequestMethod`, `MC_netHttpGetRequestMethod`, `MC_netHttpSetRequestProperty`, `MC_netHttpGetRequestProperty`, `MC_netHttpSetProxy`, `MC_netHttpGetProxy`
### MC_netHttpConnect
**설명**
서버와 HTTP 연결을 시도한다. `MC_netHttpOpen()` 함수가 불려도 실제 서버와 HTTP 연결을 맺지 않고 이 함수가 불려야만 연결을 시도한다. 연결에 성공하거나 실패했을 경우 등록하는 콜백함수가 불린다. 이 함수가 불린 이후에는 다음 함수 들은 `M_E_ERROR` 를 리턴한다.
```c
MC_netHttpSetRequestMethod(), MC_netHttpGetRequestMethod(), MC_netHttpSetRequestProperty(), MC_netHttpGetRequestProperty(), MC_netHttpSetProxy(), MC_netHttpGetProxy().
```
**프로토타입**
```c
M_Int32 MC_netHttpConnect(M_Int32 fd, NETHTTPCB cb, void *param)
```
**매개 변수**
- `fd` - HTTP 연결 식별자
- `cb` – 콜백함수
- `param` - 콜백함수가 호출될 때 전달되는 매개변수
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 잘못된 식별자
- `M_E_NOTCONN` - 인터넷 접근이 불가능해진 경우
- `M_E_INPROGRESS` – HTTP 서버에 이미 연결 시도 중인 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpSetRequestMethod`, `MC_netHttpGetRequestMethod`, `MC_netHttpSetRequestProperty`, `MC_netHttpGetRequestProperty`, `MC_netHttpSetProxy`, `MC_netHttpGetProxy`
### MC_netHttpSetRequestMethod
**설명**
HTTP 요청 메쏘드(Request Method)를 설정한다. 요청 메쏘드는 "GET", "POST", "HEAD" 가 될 수 있다. 메쏘드가 "POST" 일 경우 전송할 메세지를 함께 명시해야 한다. 이 함수가 `MC_netHttpConnect()` 함수 이후에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpSetRequestMethod(M_Int32 fd, M_Byte *method, M_Byte *msg, M_Int32 msglen)
```
**매개 변수**
- `fd` - HTTP 식별자
- `method` - 요청 메쏘드 문자열
- `msg` - 요청 메쏘드가 "POST" 일 경우 전송할 메시지
- `msglen` - 메세지 길이
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 잘 못된 식별
- `M_E_INVALID` - 인식할 수 없는 요청 메쏘드일 경우나 POST 메쏘드 설정시 잘 못된 메시지일 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetRequestMethod
**설명**
HTTP 요청 메쏘드(Request Method)를 복사해 온다. `MC_netHttpSetRequestMethod()` 로 요청 메쏘드를 설정하지 않았다면 디폴트로 "GET" 이 복사된다. 매개변수 buf 에 저장되는 요청 메쏘드 문자열의 마지막에는 NULL 문자가 포함되며 리턴하는 길이는 NULL 문자를 제외한 문자열의 길이다. 이 함수가 `MC_netHttpConnect()` 함수 이후에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpGetRequestMethod(M_Int32 fd, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - HTTP 식별자
- `buf` - 요청 메쏘드를 저장할 버퍼
- `len` - 버퍼의 길이
**반환 값**
성공
- 버퍼에 저장된 요청 메쏘드 문자열의 길이
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_INVALID` - 버퍼나 버퍼 길이가 잘 못 된 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpSetRequestProperty
**설명**
HTTP 요청특성(Request Property)을 설정한다. 이 함수가 `MC_netHttpConnect()` 함수 이후에 불리면 `M_E_ERROR` 를 리턴한다
**프로토타입**
```c
M_Int32 MC_netHttpSetRequestProperty(M_Int32 fd, M_Byte *key, M_Byte *value)
```
**매개 변수**
- `fd` - HTTP 식별자
- `key` - 요청 특성 이름
- `value` - 특성 값
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetRequestProperty
**설명**
HTTP 요청특성(Request Property) 을 복사해 온다. 요청 특성 이름에 해당하는 값이 설정되어 있지 않았거나 이 함수가 `MC_netHttpConnect()` 함수 이후에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpGetRequestProperty(M_Int32 fd, M_Byte *key, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - HTTP 식별자
- `key` - 요청 특성 이름
- `buf` - 값이 저장될 버퍼
- `len` - 버퍼 길이
**반환 값**
성공
- 복사된 특성값의 길이
실패
- `M_E_BADFD` - 잘못된 식별자
- `M_E_INVALID` - 버퍼나 버퍼길이가 잘 못 된 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpSetProxy
**설명**
프락시를 설정한다. 이 함수가 `MC_netHttpConnect()` 함수 이후에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpSetProxy(M_Int32 fd, M_Int32 proxyhost, M_Int16 proxyport)
```
**매개 변수**
- `fd` - HTTP 식별자
- `proxyhost` - 프락시 호스트 IP 주소. 값은 네트웍 바이트 순서(network byte ordering)이다.
- `proxyport` - 프락시 포트 번호. 값은 네트웍 바이트 순서(network byte ordering)이다
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_INVALID` – proxyhost 가 0 이거나 -1 일 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetProxy
**설명**
프락시 호스트와 포트를 복사해 온다. 프락시를 지정하지 않았거나 이 함수가 `MC_netHttpConnect()` 함수 이후에 불리면 `M_E_ERROR` 를 리턴한다
**프로토타입**
```c
M_Int32 MC_netHttpGetProxy(M_Int32 fd, M_Int32 *proxyhost, M_Int16 *proxyport)
```
**매개 변수**
- `fd` - HTTP 식별자
- `proxyhost` - 프락시 호스트 값이 저장될 버퍼. 값은 네트웍 바이트 순서(network byte ordering)로 저장된다.
- `proxyport` - 프락시 포트 번호 값이 저장될 버퍼. 값은 네트웍 바이트 순서 (network byte ordering)로 저장된다.
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_INVALID` - 매개변수 proxyhost 나 proxyport 가 NULL 일 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetResponseCode
**설명**
HTTP 서버의 응답코드를 리턴한다. 서버로 부터의 응답이 다음과 같을 때
```text
HTTP/1.0 200 OK
HTTP/1.0 404 Not Found
```
응답 코드는 각각 200, 400 이 된다. 이 함수가 `MC_netHttpConnect()` 에서 설정하는 콜백함수가 불리기 전에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpGetResponseCode(M_Int32 fd)
```
**매개 변수**
- `fd` - HTTP 식별자
**반환 값**
성공
- 응답코드
실패
- `M_E_BADFD` - 잘못된 식별자
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetResponseMessage
**설명**
HTTP 서버의 응답메세지를 복사해 온다. 서버로 부터의 응답이 다음과 같을 때
```text
HTTP/1.0 200 OK
HTTP/1.0 404 Not Found
```
응답메세지는 "OK" 와 "Not Found" 가 된다. 이 함수가 `MC_netHttpConnect()` 에서 설정하는 콜백함수가 불리기 전에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpGetResponseMessage(M_Int32 fd, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - HTTP 식별자
- `buf` - 응답 메세지가 저장될 버퍼 len 버퍼 길이
**반환 값**
성공
- 복사된 메세지 길이
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_INVALID` - 버퍼나 버퍼 길이가 잘 못 된 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetHeaderField
**설명**
HTTP 서버의 응답중 헤더 값을 복사해 온다. 이 함수가 `MC_netHttpConnect()` 에서 설정하는 콜백함수가 불리기 전에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpGetHeaderField(M_Int32 fd, M_Byte *name, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - HTTP 식별자
- `name` - 헤더 이름
- `buf` - 헤더 값이 저장될 버퍼
- `len` - 버퍼 길이
**반환 값**
성공
- 복사된 헤더 값 길이
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_INVALID` - 버퍼나 버퍼 길이가 잘 못 된 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetLength
**설명**
컨텐츠의 길이를 리턴한다. 이 함수가 `MC_netHttpConnect()` 에서 설정하는 콜백함 수가 불리기 전에 불리면 `M_E_ERROR` 를 리턴한다
**프로토타입**
```c
M_Int32 MC_netHttpGetLength(M_Int32 fd)
```
**매개 변수**
- `fd` - HTTP 식별자
**반환 값**
성공
- 컨텐츠 길이
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetType
**설명**
컨텐츠의 타입 문자열을 복사해 온다. 이 함수가 `MC_netHttpConnect()` 에서 설정 하는 콜백함수가 불리기 전에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpGetType(M_Int32 fd, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - HTTP 식별자
- `buf` - 컨텐츠 타입 문자열이 복사될 버퍼
- `len` - 버퍼 길이
**반환 값**
성공
- 복사된 컨텐츠 타임 문자열 길이
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_INVALID` - 버퍼나 버퍼 길이가 잘 못 된 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpGetEncoding
**설명**
컨텐츠의 인코딩 문자열을 복사해 온다. 이 함수가 `MC_netHttpConnect()` 에서 설정하는 콜백함수가 불리기 전에 불리면 `M_E_ERROR` 를 리턴한다.
**프로토타입**
```c
M_Int32 MC_netHttpGetEncoding(M_Int32 fd, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - HTTP 식별자
- `buf` - 컨텐츠 인코딩 문자열 복사될 버퍼
- `len` - 버퍼 길이
**반환 값**
성공
- 복사된 컨텐츠 인코딩 문자열 길이
실패
- `M_E_BADFD` - 잘 못된 식별자
- `M_E_INVALID` - 버퍼나 버퍼 길이가 잘 못 된 경우
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
`MC_netHttpConnect`
### MC_netHttpClose
**설명**
HTTP 연결 식별자 사용을 종료한다. 이 함수가 `MC_netHttpConnect()` 에서 설정하는 콜백함수가 불리기 전에 불리면 콜백함수는 불리지 않는다.
**프로토타입**
```c
M_Int32 MC_netHttpClose(M_Int32 fd)
```
**매개 변수**
- `fd` - HTTP 식별자
**반환 값**
성공
- 0
실패
- `M_E_BADFD` – 잘 못된 식별자
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.8. PHONE"
---
전화 걸기에 관한 API 를 모은 것이다. 전화를 걸때는 전화번호 문자열을 넘겨 `MC_phnCallPlace()`를 호출한다.
**참고 항목**
없음
### MC_phnCallPlace
**설명**
전화를 건다.
**프로토타입**
```c
M_Int32 MC_phnCallPlace(M_Byte* phonenumber)
```
**매개 변수**
- `phonenumber` — 전화번호 문자열(마지막은 NULL)
**반환 값**
성공
- 0
실패
- `M_E_ERROR`(전화를 걸 수 없음)
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.7. SERIAL"
---
시리얼 통신에 관련한 API 이다. 시리얼 장치는 여러 개가 존재할 수 있으며 각 장치는 포트번호 0, 1, 2.. 로 접근된다. 플랫폼에서 지원하는 시리얼 포트 개수는 `MC_knlGetSystemProperty()` 에 `"MAXSERIALNUM"` 을 넘겨주어 구할 수 있다. 시 리얼 I/O API `MC_srlClose()` 함수를 제외하고 모두 논블로킹 함수이다. 따라서 I/O 함수가 호출되었을 때 I/O 를 처리할 수 없으면 `M_E_WOULDBLOCK` 을 리턴하며 콜백 등록함수로 콜백을 등록하면 I/O 가능한 시점 혹은 HAL 에서 시리얼 관련 에 러가 이벤트가 발생하면 불린다.
**참고 항목**
없음
### SRLWRITECB
**설명**
함수 `MC_srlSetWriteCB` 에 등록하는 콜백함수. 시리얼로 데이터를 전송할 수 있을 경우나 HAL 에서 시리얼 에러 이벤트가 플랫폼에 전달되면 불린다.
**프로토타입**
```c
typedef void (*SRLWRITECB)(M_Int32 fd, M_Int32 error, void *param)
```
**매개 변수**
- `fd` - 포트 식별자
- `error` - 성공: 0, 실패: `M_E_ERROR`
- `param` - 콜백함수를 등록할 때 설정하는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_srlSetWriteCB`
### SRLREADCB
**설명**
함수 `MC_srlSetReadCB` 에 등록하는 콜백함수. 시리얼로 데이터를 읽을 수 있을 경우나 HAL 에서 시리얼 에러 이벤트가 플랫폼에 전달되면 불린다.
**프로토타입**
```c
typedef void (*SRLREADCB)(M_Int32 fd, M_Int32 error, void *param)
```
**매개 변수**
- `fd` - 포트 식별자
- `error` - 성공: 0, 실패: `M_E_ERROR`
- `param` - 콜백함수를 등록할 때 설정하는 콜백 매개변수
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MC_srlSetReadCB`
### MC_srlOpen
**설명**
시리얼을 연다. 이 함수로 반환되는 시리얼 포트 식별자는 0 이상이어야 한다. 지 정되는 포트는 매개변수 param 으로 전달되는 제어문자열에 의해 제어된다. 제어 문자열은 다음과 같은 문법으로 만들어 져야 한다.
```text
제어문자열 ::= [제어쌍]
제어쌍 ::= 제어키 "=" 제어값 *(,제어키 '=' 제어값)
제어키 ::= 알파벳혹은 숫자문자로 만들어진 문자열
제어값 ::= 알파벳혹은 숫자문자로 만들어진 문자열
```
이 문서에서 정의하는 제어키와 제어값은 아래 표와 같다.
| 제어 키 | 제어 값 | 의미 | 디폴트 |
|---|---|---|---|
| `baudrate` | 9600, 19200, 38400, 57600, 115200 | 속도 | 115200 |
| `parity` | even, odd, no | 패리티 | no |
| `Size` | 숫자 | 바이트 크기 | 8 |
| `Flow` | hardware, software, no | 흐름 제어 | no |
이외의 제어키와 제어값에 대한 정의는 추가될 수 있다. 예를 들어 8 비트, 패리 티없음, 115200 속도로 하드웨어 흐름제어를 하기 위해 포트를 열 경우 제어문자 열은 다음과 같다.
```text
"baudrate=115200,parity=no,size=8,flow=hardware"
```
시리얼 포트를 열 때 앞에서 정의한 제어키가 제어문자열에서 빠진다면 디폴트 값 이 설정된다.
**프로토타입**
```c
M_Int32 MC_srlOpen(M_Int32 port,M_Byte* param)
```
**매개 변수**
- `port` - 포트 번호(0 ~(최대 포트갯수 - 1)) );
- `param` – 제어 문자열
**반환 값**
성공
- 식별자 반환
실패
- `M_E_NOTSUP` - 해당 포트번호 또는 제어문자열에 대한 제어가 지원되지 않 는 경우
- `M_E_INVALID` – 제어문자열이 잘 못된 포멧일 경우
- `M_E_ISCONN` - 해당 포트가 이미 사용되고 있을 경우
**부작용**
없음
**참고 항목**
없음
### MC_srlWrite
**설명**
시리얼 포트로 데이터를 전송한다. 시스템 내부 요인으로 데이터를 당장 전송하지 못할 경우 `M_E_WOULDBLOCK` 을 리턴한다. 이 경우 `MC_srlSetWriteCB` 로 등록하는 콜백 내에서 다시 이 함수를 호출하여 데이터를 전송하면 된다. 콜백 내에서 불린 이 함수는 또 다시 `M_E_WOULDBLOCK` 을 리턴할 수도 있다.
**프로토타입**
```c
M_Int32 MC_srlWrite(M_Int32 fd, M_Uint8* buf, M_Int32 size)
```
**매개 변수**
- `fd` - 식별자
- `buf` - 데이터의 버퍼
- `size` - 데이타의 크기
**반환 값**
성공
- write 된 size
실패
- `M_E_WOULDBLOCK` – 현재 데이터를 쓸 수 없을 경우
- `M_E_BADFD` - 유효 하지 않은 식별자
- `M_E_INVALID` – 버퍼나 버퍼길이가 잘 못 되었을 경우
**부작용**
없음
**참고 항목**
`MC_srlSetWriteCB`
### MC_srlRead
**설명**
시리얼 포트를 통해서 데이터를 읽는다. 읽을 데이터가 없을 경우 `M_E_WOULDBLOCK` 을 리턴한다. 이 경우 `MC_srlSetReadCB` 로 설정된 콜백 내에서 다 시 이 함수를 호출하여 데이터를 읽으면 된다. 콜백 내에서 불린 이 함수는 또 다시 `M_E_WOULDBLOCK` 을 리턴할 수도 있다.
**프로토타입**
```c
M_Int32 MC_srlRead(M_Int32 fd, M_Uint8* buf, M_Int32 size)
```
**매개 변수**
- `fd` - 식별자
- `buf` - 데이터의 버퍼
- `size` - 데이터의 크기
**반환 값**
성공
- 읽은 size
실패
- `M_E_WOULDBLOCK` - 읽을 데이터가 없을 경우
- `M_E_BADFD` - 유효 하지 않은 fd 값
- `M_E_INVALID` – 버퍼나 버퍼 길이가 잘 못 되었을 경우
**부작용**
없음
**참고 항목**
없음
### MC_srlSetReadCB
**설명**
시리얼 포트를 통해서 데이터를 읽을 수 있는 시점에서 불리는 콜백함수를 등록한다. 콜백함수가 불리면 매개변수 param 값이 콜백함수 API 로 전달된다. 등록하는 콜백함수가 NULL 일 경우 이전에 이 함수로 등록된 콜백이 삭제된다. 이 함수가 에러를 리턴하면 콜백은 불리지 않는다. 이 함수가 호출되었을 때 시리얼 포트로 부터 데이터를 읽을 수 있으면 콜백함수가 불린다.
**프로토타입**
```c
M_Int32 MC_srlSetReadCB(M_Int32 fd, SRLREADCB cb, void *param)
```
**매개 변수**
- `fd` - 포트 식별자
- `cb` – 콜백함수
- `param` - 콜백함수가 불릴 때 전달되는 값
**반환 값**
성공
- 0
실패
- `M_E_BADFD` - 잘못된 식별자
- `M_E_ERROR` - 기타 에러
**부작용**
없음
**참고 항목**
없음
### MC_srlSetWriteCB
**설명**
시리얼 포트를 통해서 데이터를 전송할 수 있는 시점에서 불리는 콜백함수를 등록 한다. 콜백함수가 불리면 매개변수 param 값이 콜백함수 API 로 전달된다. 등록하 는 콜백함수가 NULL 일 경우 이전에 이 함수로 등록된 콜백이 삭제된다. 이 함수 가 에러를 리턴하면 콜백은 불리지 않는다. 이 함수가 호출되었을 때 시리얼 포트로 데이터를 전송할 수 있으면 콜백이 불린다.
**프로토타입**
```c
M_Int32 MC_srlSetWriteCB(M_Int32 fd, SRLWRITECB cb, void *param)
```
**매개 변수**
- `fd` - 포트 식별자
- `cb` – 콜백함수
- `param` - 콜백함수가 불릴 때 전달되는 값
**반환 값**
성공
- 0
실패
- `M_E_BADFD` – 잘못된 식별자
- `M_E_ERROR` – 기타 에러
**부작용**
없음
**참고 항목**
없음
### MC_srlClose
**설명**
시리얼 포트 사용을 종료한다. 시리얼 포트 사용을 종료하면 시리얼 포트에 등록 되어 있던 모든 콜백함수는 삭제되어 불리지 않게 된다.
**프로토타입**
```c
M_Int32 MC_srlClose(M_Int32 fd)
```
**매개 변수**
- `fd` - 포트 식별자
**반환 값**
성공
- `0`
실패
- `M_E_BADFD` - 유효 하지 않은 식별자
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.11. 사용자 인터페이스 컴포넌트"
---
사용자 인터페이스 컴포넌트로 텍스트 박스, 날짜/시간 컴포넌트, 메뉴 컴포넌트, 라벨 컴포넌트, 리스트 컴포넌트가 있다.
### 컴포넌트 생성/소멸
컴포넌트를 생성하기 위해서는 컴포넌트 클래스 구조체가 있어야 한다. 컴포넌트 클래스 구조체는 미리 정의되어 값들이 결정된 구조체로 ` MC_uicGetClass` 함수를 통하여 정의된 구조체를 가져올 수 있다. 컴포넌트 클래스 구조체는 각 컴포넌트 별 로 다르며, 이 컴포넌트 클래스 구조체를 매개 변수로 하여 `MC_uicCreate` 함수를 호출하면, 컴포넌트 클래스 구조체를 생성할 수 있다. 생성된 컴포넌트는 `MC_uicDestroy` 로 파괴 된다.
### 좌표체계
컴포넌트의 위치와 크기는 화면 좌표 체계를 따른다. 왼쪽 상단이 원점(0, 0)이며, 오른쪽, 아래쪽으로 이동하면서 좌표값이 픽셀 단위로 증가한다.
### 이벤트 처리
"C"에서 제공하는 사용자 인터페이스 컴포넌트는 컨테이너를 제공하고 있지 않기 때문에 컨테이너가 하는 역할을 각 응용 프로그램에서 해주어야 한다. 즉 응용 프 로그램에서 컴포넌트 마다 각 이벤트를 처리하는 함수를 불러주어야 한다.
Clet 의 `handleCletEvent` 함수 내에서 생성된 각 컴포넌트를 매개 변수로 하여 `MC_uicHandleEvent` 함수를 호출해 주어야 한다. `MC_uicHandleEvent` 는 이벤트를 적절 히 처리하고, 이벤트 처리 여부를 돌려준다.
Clet 의 paintClet 함수 내에서는 컴포넌트마다 각 `MC_uicPaint` 함수를 호출해 주 어야 한다.
### 콜백 함수와 이벤트 핸들러 함수
`MC_uicHandleEvent` 에 의해서 이벤트가 처리될때 사용자가 `MC_uicSetEventHandler` 함수에 의해서 지정한 이벤트 핸들러 함수를 먼저 호출해 준다. 이 호출된 함수가 돌려주는 값에 따라서, `MC_uicHandleEvent` 함수는 계속 이벤트를 처리할지 안할지 여부를 결정한다. 만일 이벤트를 처리하게 되면, `MC_uicHandleEvent` 는 이벤트를 처리한 후에 해당되는 이벤트의 `MC_uicCallbackProc` 를 호출하도록 한다. 어떤 이벤트에 대해서 콜백 함수를 사용할 수 있는지에 대해서는 컴포넌트 마다 다르므로 컴포넌트에 대한 문서를 참조하십시요.
### 텍스트 박스 컴포넌트
텍스트 박스 컴포넌트는 `MC_UicComponent` 를 상속 받으며, 사용자에게 문자열을 보여주고, 해당 문자열을 변경할 수 있도록 해주는 컴포넌트이다. 텍스트 박스내 에 넣을수 있는 문자열은 `MC_uicGetTextSize` 로 알수가 있다. 기본적으로 저장할 수 있는 최대 값은 256 바이트이며, `MC_uicSetTextSize` 함수로 변경이 가능한다. 사용 가능한 함수는 다음과 같다.
```c
MC_uicInsertText MC_uicDeleteText MC_uicGetMaxTextSize MC_uicSetMaxTextSize MC_uicGetTextSize MC_uicGetText
그외 컴포넌트에서 사용할 수 있는 함수
```
사용 가능한 콜백 함수는 다음과 같다.
- `MC_UIC_CHANGE_CALLBACK` : 내부 문자열이 변경되었을 경우
- `MC_UIC_KEY_CALLBACK` : 키가 눌러졌을 경우
그외 컴포넌트에서 사용할 수 콜백 함수
### 날짜/시간 컴포넌트
날짜/시간 컴포넌트는 `MC_UicComponent` 를 상속받으며, 사용자에게 날짜/시간을 보여주고, 그 날짜/시간을 입력받는 함수이다. `MC_uicSetTime` 함수에 의해서 날짜/시간을 지정할 수 있으며, 지정하지 않는다면 날짜/시간 컴포넌트를 생성한 시간 으로 지정된다. 날짜/시간 컴포넌트는 날짜나 시간,혹은 두 항목다 화면에 출력할 수 있으며, 이는 `MC_uicSetTimeMask` 함수로 가능한다.
사용 가능한 함수는 다음과 같다.
```c
MC_uicSetTimeMask MC_uicSetTime MC_uicGetTime MC_uicSetTimeLong
그외 컴포넌트에서 사용할 수 있는 함수
```
사용 가능한 콜백 함수는 다음과 같다.
- `MC_UIC_CHANGE_CALLBACK` : 내부 시간이 변경되었을 경우
그외 컴포넌트에서 사용할 수 콜백 함수
### 메뉴 컴포넌트
메뉴 컴포넌트는 `MC_UicComponent` 를 상속받으며, 화면에 메뉴를 출력하고, 사용자로 부터 입력을 받다. 메뉴 상하/좌우키로 현재 선택 메뉴 항목을 변경하여 지 정하도록 한다.
사용 가능한 함수는 다음과 같다.
- `MC_uicAddMenuItem`
- `MC_uicGetMenuItem`
- `MC_uicRemoveMenuItem`
- `MC_uicSetActiveMenuItem`
- `MC_uicGetActiveMenuItem`
그외 컴포넌트에서 사용할 수 있는 함수
사용 가능한 콜백 함수는 다음과 같다.
- `MC_UIC_CHANGE_CALLBACK` : 내부 선택된 메뉴 항목이 변경되었을 경우
그외 컴포넌트에서 사용할 수 콜백 함수
### 라벨 컴포넌트
라벨 컴포넌트는 `MC_UicComponent` 를 상속받으며, 화면에 문자열을 출력해 주는 함수이다. 크기에 맞도록 문자열의 줄바꿈을 해준다. 이 컴포넌트는 다른 컴포넌 트와는 달리 이벤트에 대한 처리를 하지 않는다.
사용 가능한 함수는 다음과 같다.
```c
MC_uicSetLabel
```
### 리스트 컴포넌트
리스트 컴포넌트는 `MC_UicComponent` 를 상속받으며, 화면에 리스트를 출력하고, 사용자로 부터 입력을 받다. 메뉴 상하키로 메뉴 항목을 변경하여 지정하도록 한 다.
사용 가능한 함수는 다음과 같다.
- `MC_uicAddListItem`
- `MC_uicGetListItem`
- `MC_uicRemoveListItem`
- `MC_uicSetActiveListItem`
- `MC_uicGetActiveListItem`
그외 컴포넌트에서 사용할 수 있는 함수
사용 가능한 콜백 함수는 다음과 같다.
- `MC_UIC_CHANGE_CALLBACK` : 내부 선택된 메뉴 항목이 변경되었을 경우
그외 컴포넌트에서 사용할 수 콜백 함수
### 컴포넌트
컴포넌트 가장 기본이되는 컴포넌트이며, 이벤트에 대한 처리도 하지 않는다. 사용 가능한 함수는 다음과 같다.
```c
MC_uicDestory MC_uicRepaint MC_uicPaint MC_uicGetClassName MC_uicIsInstance MC_uicHandleEvent MC_uicConfigure MC_uicGetGeometry MC_uicSetEnable MC_uicSetExtData MC_uicGetExtData MC_uicSetCallback MC_uicSetEventHandler MC_uicSetFont MC_uicGetFont
```
사용 가능한 콜백 함수는 다음과 같다.
- `MC_UIC_SELECT_CALLBACK` : 사용자가 "SELECT"버튼을 눌러서 무엇인가 선택했을 때
- `MC_UIC_PAINT_CALLBACK` : 컴포넌트가 그려질때
- `MC_UIC_DESTORY_CALLBACK` : 컴포넌트가 소멸될때
**참고 항목**
없음
### MC_UicComponent
**설명**
컴포넌트 식별자
**프로토타입**
```c
typedef M_Int32 MC_UicComponent
```
### MC_UicClass
**설명**
컴포넌트 클래스 구조체 식별자
**프로토타입**
```c
typedef M_Int32 MC_UicClass
```
### MC_UicApplicationContext
**설명**
응용 프로그램 컨택스트 식별자
**프로토타입**
```c
typedef M_Int32 MC_UicApplicationContext
```
### MC_UicCallbackProc
**설명**
콜백 함수 타입
**프로토타입**
```c
typedef void (*MC_UicCallbackProc)(MC_UicComponent cc, void* serverData, M_Int32 clientData)
```
**매개 변수**
- `cc` - 콜백 함수를 호출하는 컴포넌트
- `serverData` - 부르는 쪽에서 넘기는 데이타; 호출하는 쪽마다 다른다.
- `clientData` - 콜백 함수를
**부작용**
없음
**참고 항목**
없음
### MC_UicEventHandlerProc
**설명**
이벤트 핸들러 함수 타입.
**프로토타입**
```c
typedef M_Int32 (*MC_UicEventHandlerProc)(MC_UicComponent cc, M_Int32 type, M_Int32 param1, M_Int32 param2)
```
**매개 변수**
- `cc` - 이벤트 핸들러를 호출하는 컴포넌트
- `type` - 이벤트 타입.
- `param1` - 이벤트 매개 변수 1
- `param2` - 이벤트 매개 변수 2
**반환 값**
- 이벤트 처리 여부 1 이면 처리한 것이고, 0 이면 처리하지 않음을 의미
**부작용**
없음
**참고 항목**
없음
### MC_UIC_MENU_COMPONENT
**설명**
메뉴 컴포넌트 클래스의 문자열, "MenuComponent"로 정의 되어 있다.
**프로토타입**
```c
#define MC_UIC_MENU_COMPONENT "MenuComponent"
```
### MC_UIC_DATE_TIME_COMPONENT
**설명**
데이트, 타임 컴포넌트 클래스의 문자열, "DateTimeComponent"로 정의 되어 있다.
**프로토타입**
```c
#define MC_UIC_DATE_TIME_COMPONENT "DateTimeComponent"
```
### MC_UIC_TEXT_COMPONENT
**설명**
텍스트 컴포넌트 클래스의 문자열, "TextComponent"로 정의한다.
**프로토타입**
```c
#define MC_UIC_TEXT_COMPONENT "TextComponent"
```
### MC_UIC_LABEL_COMPONENT
**설명**
라벨 컴포넌트 클래스의 문자열, "LabelComponent"로 정의한다.
**프로토타입**
```c
#define MC_UIC_LABEL_COMPONENT "LabelComponent"
```
### MC_UIC_LIST_COMPONENT
**설명**
리스트 컴포넌트 클래스의 문자열, "ListComponent"로 정의한다.
**프로토타입**
```c
#define MC_UIC_LIST_COMPONENT "ListComponent"
```
### MC_UIC_DESTROY_CALLBACK
**설명**
컴포넌트가 소멸될 때 불리는 콜백 함수의 인덱스 1
**프로토타입**
```c
#define MC_UIC_DESTORY_CALLBACK 1
```
### MC_UIC_PAINT_CALLBACK
**설명**
컴포넌트가 칠해질 때 불리는 콜백 함수의 인덱스, 상수 2 로 정의한다.
**프로토타입**
```c
#define MC_UIC_PAINT_CALLBACK 2
```
### MC_UIC_SELECT_CALLBACK
**설명**
컴포넌트의 특정 내용이 선택될 때 불리는 콜백 함수의 인덱스, 상수 3 으로 정의 한다.
**프로토타입**
```c
#define MC_UIC_SELECT_CALLBACK 3
```
### MC_UIC_CHANGE_CALLBACK
**설명**
컴포넌트의 내부 내용이 변경될 때 불리는 콜백 함수의 인덱스, 상수 4 로 정의한다.
**프로토타입**
```c
#define MC_UIC_CHANGE_CALLBACK 4
```
### MC_UIC_KEY_CALLBACK
**설명**
컴포넌트에 사용자가 키를 눌렀을 때 불리는 콜백 함수의 인덱스, 상수 5 로 정의 한다
**프로토타입**
```c
#define MC_UIC_KEY_CALLBACK 5
```
### MC_GRP_GRAY_TYPE
**설명**
흑백 타입. 상수값 (1 << 1).
**프로토타입**
```c
#define MC_GRP_GRAY_TYPE(1 << 1)
```
### MC_GRP_COLOR_TYPE
**설명**
컬러 타입. 상수값 (1 << 2).
**프로토타입**
```c
#define MC_GRP_COLOR_TYPE(1 << 2)
```
### MC_ALIGN_LEFT
**설명**
라벨컴포넌트의 좌측정렬. 상수값 0.
**프로토타입**
```c
#define MC_ALIGN_LEFT 0
```
### MC_ALIGN_RIGHT
**설명**
라벨컴포넌트의 우측정렬. 상수값 1.
**프로토타입**
```c
#define MC_ALIGN_RIGHT 1
```
### MC_ALIGN_CENTER
**설명**
라벨컴포넌트의 중앙정렬. 상수값 2.
**프로토타입**
```c
#define MC_ALIGN_CENTER 2
```
### MC_uicCreateApplicationContext
**설명**
응용프로그램 컨텍스트를 생성한다.
**프로토타입**
```c
MC_UicApplicationContext MC_uicCreateApplicationContext()
```
**매개 변수**
없음
**반환 값**
생성된 응용프로그램 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_uicGetClass
**설명**
컴포넌트 클래스 구조체를 가져온다.
문자열에 대응하는 컴포넌트 클래스 구조체를 가져 온다. 현재 지원하는 컴포넌트 클래스 구조체의 문자열은 `MC_UIC_MENU_COMPONENT`, `MC_UIC_DATE_TIME_COMPONENT`, `MC_UIC_TEXT_COMPONENT`, `MC_UIC_LABEL_COMPONENT`, `MC_UIC_LIST_COMPONENT` 가 있다.
**프로토타입**
```c
MC_UicClass MC_uicGetClass(M_Uint8* psz)
```
**매개 변수**
- `psz` - [in] 컴포넌트 클래스를 나타내는 문자열
**반환 값**
- 컴포넌트 클래스 구조체
- 매개변수(psz)값이 지원되는 컴포넌트 클래스 구조체의 문자열이 아닌 경우 `M_E_ERROR` 값을 반환
**부작용**
없음
**참고 항목**
없음
### MC_uicCreate
**설명**
컴포넌트를 생성한다.
지정한 컴포넌트 클래스로부터 컴포넌트를 생성한다. `MC_uicCreateApplicationContext` 함수로 부터 생성한 응용 프로그램 컨택스트(Application Context)와 `MC_uicGetClass` 함수로 가져온 클래스 구조체를 매개 변수로 넘긴다.
**프로토타입**
```c
MC_UicComponent MC_uicCreate(MC_UicApplicationContext pac, MC_UicClass cls)
```
**매개 변수**
- `pac` - [in] 응용 프로그램 컨텍스트
- `cls` - [in] 응용 프로그램 컨텍스트
**반환 값**
성공
- 새로 생성된 컴포넌트 클래스
실패
- `M_E_ERROR` - 부적합한 매개변수값 사용 및 기타 에러 발생시
- `MC_UIC_E_OUT_OF_MEM` - 메모리 부족시
**부작용**
없음
**참고 항목**
`MC_uicCreateApplicationContext`
### MC_uicDestroy
**설명**
지정한 컴포넌트를 소멸시킨다.
삭제한 cc 는 더이상 사용되서는 안된다.
**프로토타입**
```c
void MC_uicDestroy(MC_UicComponent cc)
```
**매개 변수**
- `cc` - [in] 삭제할 컴포넌트
**부작용**
없음
**참고 항목**
없음
### MC_uicRepaint
**설명**
지정한 컴포넌트에 대해서 그리기 이벤트를 생성한다.
지정한 컴포넌트 영역에 대해서 `paintClet` 함수가 호출될 수 있도록 내부 이벤트 를 생성한다. 만일 w, h 가 -1 이면, 지정된 (x, y)좌표에서 컴포넌트의 오른쪽 하단부분까지가 그리기 이벤트가 발생하는 영역이된다.
**프로토타입**
```c
void MC_uicRepaint(MC_UicComponent cc, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `x` - [in] 컴포넌트 내의 영역의 x 축 좌표(컴포넌트 좌표 체계)
- `y` - [in] 컴포넌트 내의 영역의 y 축 좌표(컴포넌트 좌표 체계)
- `w` - [in] 컴포넌트 내의 영역의 폭
- `h` - [in] 컴포넌트 내의 영역의 높이
**부작용**
없음
**참고 항목**
`MC_grpRepaint`, `MC_uicPaint`
### MC_uicPaint
**설명**
지정한 컴포넌트를 그린다.
실제 화면 프레임 버퍼에 컴포넌트의 내용을 그려준다. 이 함수는 응용 프로그램 의 paintClet 함수에서 각각의 컴포넌트 별로 호출되어야 한다. `pgc` 가 지정하는 클리핑 영역은 변경하지 않고 pgc 의 일부 내용은 컴포넌트에 따라서 변경 될 수 있다.
**프로토타입**
```c
void MC_uicPaint(MC_UicComponent cc, MC_GrpContext *pgc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `pgc` - [in] 사용할 그래픽 컨텍스트
**부작용**
없음
**참고 항목**
없음
### MC_uicGetClassName
**설명**
컴포넌트의 클래스 이름을 얻어 온다.
cc 가 가리키는 컴포넌트에 대응하는 클래스 이름을 "C"문자열로 돌려받다. 돌려 받은 값은 변경될 수 없다.
**프로토타입**
```c
M_Uint8* MC_uicGetClassName(MC_UicComponent cc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
**반환 값**
컴포넌트의 클래스 이름
부적합한 매개변수값의 사용으로 인한 반환되는 에러값으로 NULL 값을 반환한다.
**부작용**
없음
**참고 항목**
없음
### MC_uicIsInstance
**설명**
컴포넌트가 지정된 클래스에 상속 받은 클래스인지 여부를 돌려준다.
**프로토타입**
```c
M_Uint32 MC_uicIsInstance(MC_UicComponent cc, M_Uint8* pcls)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `pcls` - [in] 컴포넌트 클래스 이름 문자열
**반환 값**
컴포넌트가 지정된 클래스의 인스턴스이면 1, 그렇지 않으면 0
**부작용**
없음
**참고 항목**
없음
### MC_uicHandleEvent
**설명**
컴포넌트 별로 이벤트를 처리한다.
지정한 컴포넌트에게 이벤트를 처리할 것을 요청한다. 이벤트가 처리되었다면 1 을 돌려주고 그렇지 않으면 0 을 돌려준다.
type 과 param1, param2 는 `handleCletEvent` 함수에서 넘어오는 이벤트 관련 매개 변수를 그대로 넘긴다.
**프로토타입**
```c
M_Int32 MC_uicHandleEvent(MC_UicCompeont cc, M_Int32 type, M_Int32 param1, M_Int32 param2)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `type` - [in] 이벤트 타입
- `param1` - [in] 이벤트 매개 변수 1
- `param2` - [in] 이벤트 매개 변수 2
**반환 값**
컴포넌트 내에서 처리 여부
**부작용**
없음
**참고 항목**
없음
### MC_uicConfigure
**설명**
컴포넌트의 크기를 위치와 지정한다.
지정된 컴포넌트를 (x, y)가 가르치는 위치에 두고,폭 w, 높이 h 로 크기를 결정 한다. `mask & MC_UIC_POS_MASK가` 0 이 아니면 (x, y)에 가르치는 위치로 이동이 되며, `mask & MC_UIC_SIZE_MASK` 가 0 이 아니면 크기 (w, h)로 지정된다.
w 나 h 가 0 이하인 경우는 이 함수는 작동하지 않는다.
**프로토타입**
```c
void MC_uicConfigure(MC_UicComponent cc, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h, M_Int32 mask)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `x` - [in] 컴포넌트의 화면상에서의 x 축 좌표
- `y` - [in] 컴포넌트의 화면상에서의 y 축 좌표
- `w` - [in] 컴포넌트의 폭
- `h` - [in] 컴포넌트의 높이
- `mask` - [in] 컴포넌트 크기만 변경할 것인지 높이만 변경할 것인지 여부; `MC_UIC_SIZE_MASK`나 `MC_UIC_POS_MASK`나 두 값이 OR 된 값
**부작용**
없음
**참고 항목**
없음
### MC_uicGetGeometry
**설명**
컴포넌트의 크기와 위치를 가져온다.
지정된 컴포넌트의 위치를 px, py 가 가리키는 변수에 저장하고, pw, ph 에 크기를 저장한다. 만일 파라미터 중 하나가 NULL 이면, 해당하는 값을 복사하지 않는다.
**프로토타입**
```c
void MC_uicGetGeometry(MC_UicComponent cc, M_Int32* px, M_Int32* py, M_Int32* pw, M_Int32* ph)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `px` - [out] 컴포넌트의 화면상의 x 값을 저장할 포인터
- `py` - [out] 컴포넌트의 화면상의 y 값을 저장할 포인터
- `pw` - [out] 컴포넌트의 폭을 저장할 포인터
- `ph` - [out] 컴포넌트의 높이를 저장할 포인터
**부작용**
없음
**참고 항목**
없음
### MC_uicSetEnable
**설명**
컴포넌트를 입력가능/불가능하게 만든다.
enable 에 따라서 컴포넌트가 입력을 받거나 받을 수 없도록 한다.
기본적으로 컴포넌트가 생성되면 입력을 받지 않는(Enable 이 FALSE 설정됨) 상태 로 생성 된다. 그러므로 입력을 받게 하려면 이 함수를 이용하여 활성화 시켜야 한다.
**프로토타입**
```c
void MC_uicSetEnable(MC_UicComponent cc, M_Int32 enable)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `enable` - [in] 1 이면 입력가능, 0 이면 입력 불가능
**부작용**
없음
**참고 항목**
없음
### MC_uicSetCallback
**설명**
컴포넌트에 콜백 함수를 지정한다.
특정 이벤트가 발생하면, 이벤트를 컴포넌트에서 다 처리하고 난 후에 콜백 함수 를 호출한다.
`clientData` 는 콜백 함수의 세번째 매개 변수가 된다. 콜백 함수가 불려질 특정 이벤트는 다음과 같다.
```c
MC_UIC_DESTROY_CALLBACK MC_UIC_PAINT_CALLBACK MC_UIC_SELECT_CALLBACK MC_UIC_CHANGE_CALLBACK MC_UIC_KEY_CALLBACK
```
**프로토타입**
```c
MC_UicCallbackProc MC_uicSetCallback( MC_UicComponent cc, M_Int32 idx, MC_UicCallbackProc proc, M_Int32 clientData)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 콜백 함수가 불려질 특정 이벤트 `MC_UIC_PAINT_CALLBACK`,`MC_UIC_SELECT_CALLBACK`
- `proc` - [in] 콜백 함수의 포인터
- `clientData` - [in] 콜백 함수의 매개 변수
**반환 값**
이전에 지정되었던 콜백 함수. 만일 이전에 지정된 내용이 없다면, NULL 을 돌려 준다.
**부작용**
없음
**참고 항목**
없음
### MC_uicSetEventHandler
**설명**
컴포넌트에 이벤트 핸들러를 지정한다.
이벤트 핸들러가 지정되어 있으면, 컴포넌트의 모든 이벤트에 대해서 이벤트 핸들러를 호출해 준다. 이벤트 핸들러의 결과 값에 따라서 이벤트를 계속 처리할지 안 할지 여부를 결정한다.
**프로토타입**
```c
MC_UicEventHandlerProc MC_uicSetEventHandler( MC_UicComponent cc, MC_UicEventHandlerProc handler)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `handler` - [in] 이벤트 핸들러
**반환 값**
이전에 지정되었던 이벤트 핸들러. 만일 이전에 지정된 내용이 없다면 NULL 을 돌 려준다.
**부작용**
없음
**참고 항목**
없음
### MC_uicSetFont
**설명**
컴포넌트의 폰트를 지정한다.
fontid 가 지정하는 폰트 아이디로 컴포넌트의 폰트를 지정한다.
**프로토타입**
```c
M_Int32 MC_uicSetFont(MC_UicComponent cc, M_Int32 fontid)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `fontid` - [in] `MC_grpGetFont` 의 반환 값으로 폰트 식별자.
**반환 값**
이전에 지정되었던 폰트 식별자.
**부작용**
없음
**참고 항목**
없음
### MC_uicGetFont
**설명**
컴포넌트의 폰트를 돌려준다.
**프로토타입**
```c
M_Int32 MC_uicGetFont(MC_UicComponent cc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
**반환 값**
현재 지정된 폰트 식별자.
**부작용**
없음
**참고 항목**
없음
### MC_uicSetFgColor
**설명**
컴포넌트의 Foreground 색상을 설정합니다 를 설정합니다.
**프로토타입**
```c
void MC_uicSetFgColor(MC_UicComponent cc, M_Int32 nColor);
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `nColor` - 색상값(0xRRGGBB)
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MC_uicSetBgColor
**설명**
컴포넌트의 Background 색상을 설정합니다 를 설정합니다.
**프로토타입**
```c
void MC_uicSetBgColor(MC_UicComponent cc, M_Int32 nColor);
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `nColor` - 색상값(0xRRGGBB)
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MC_uicSetLabel
**설명**
라벨컴포넌트의 문자열을 변경 합니다.
지정된 컴포넌트가 레이블 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는 다.
**프로토타입**
```c
void MC_uicSetLabel(MC_UicComponent cc, M_Uint8 *psz)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `psz` - [in] 변경될 문자열
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MC_uicGetLabel
**설명**
라벨 컴포넌트의 문자열을 얻어옵니다.
지정된 컴포넌트가 라벨 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Uint8* MC_uicGetLabel(MC_UicComponent cc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
**반환 값**
현재 지정되어있는 문자열.
**부작용**
없음
**참고 항목**
없음
### MC_uicSetlabelAlignment
**설명**
라벨콤포넌트의 문자열 정렬방식을 설정합니다.
`MC_ALIGN_LEFT`, `MC_ALIGN_RIGHT`, `MC_ALIGN_CENTER` 중 하나의 값을 사용할 수 있으며 각각 좌측정렬, 우측정렬, 중앙정렬을 의미 합니다.
지정된 컴포넌트가 라벨 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_uicSetlabelAlignment(MC_UicComponent cc, M_Int32 align)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `align` - [in] 라벨 컴포넌트의 문자열의 정렬방식 `MC_ALIGN_LEFT`, `MC_ALIGN_RIGHT`, `MC_ALIGN_CENTER` 중 하나를 사용합니다.
**반환 값**
이전에 지정된 값이 넘어 온다.
**부작용**
없음
**참고 항목**
없음
### MC_uicSetTimeMask
**설명**
타임 컴포넌트 형태를 지정한다.
`(mask & MC_UIC_TIME_MASK)`이 0 이 아니면 시간이 출력되고, `(mask & MC_UIC_DATE_MASK)`이 0 이 아니면 날짜가 출력된다.
지정된 컴포넌트가 타임 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_uicSetTimeMask(MC_UicComponent cc, M_Int32 mask)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `mask` - [in] 타임 컴포넌트의 매스크, `MC_UIC_TIME_MASK` 나 `MC_UIC_DATE_MASK` 혹은 둘을 OR 한 값.
**반환 값**
이전에 지정된 값이 넘어 온다.
**부작용**
없음
**참고 항목**
없음
### MC_uicSetTime
**설명**
타임 컴포넌트에 시간을 지정한다.
지정된 컴포넌트가 타임 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다. 이때 pd 는 표준 C 라이브러리 `time.h` 에서 정의된 tm 구조체 이다.
**프로토타입**
```c
void MC_uicSetTime(MC_UicComponent cc, struct tm* pd)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `pd` - [in] 지정할 날짜. `time.h` 참조
**부작용**
없음
**참고 항목**
없음
### MC_uicSetTimeLong
**설명**
타임 컴포넌트에 시간을 지정한다.
지정된 컴포넌트가 타임 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다. 이때 time 은 표준 C 라이브러리의 time.h 에서 정의된 time()함수에서 구해진 time_t 형태의 값이다.
**프로토타입**
```c
void MC_uicSetTimeLong(MC_UicComponent cc, time_t time)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `time` - [in] 지정할 날짜와 시간. `time.h` 참조
**부작용**
없음
**참고 항목**
없음
### MC_uicGetTime
**설명**
타임 컴포넌트에서 시간/날짜를 얻어 온다.
전달하는 포인터에 각각 내용을 채워준다. 만일 포인터가 NULL 을 가리키면 해당 되는 값은 복사되지 않는다.
지정된 컴포넌트가 타임 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다. 받아오는 날짜는 표준 C 라이브러리의 time.h 에 정의된 tm 구조체의 형태이다.
**프로토타입**
```c
void MC_uicGetTime(MC_UicComponet cc, struct tm* pd)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `pd` - [out] 받아올 날짜.
**부작용**
없음
**참고 항목**
없음
### MC_uicAddMenuItem
**설명**
메뉴 컴포넌트에 메뉴 아이템을 하나 추가한다.
지정된 컴포넌트가 메뉴 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다. 넘기는 이미지는 메뉴 항목이 삭제될때 내부에서 파괴한다.
**프로토타입**
```c
M_Int32 MC_uicAddMenuItem(MC_Component cc, M_Uint8* psz, MC_GrpImage img)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `psz` - [in] 메뉴 아이템을 나타내는 문자열
- `img` - [in] 메뉴 아이템의 이미지
**반환 값**
메뉴의 인덱스(0 부터 시작된다.)
**부작용**
없음
**참고 항목**
없음
### MC_uicGetMenuItem
**설명**
메뉴 아이템을 가져 온다.
지정된 컴포넌트가 메뉴 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_uicGetMenuItem(MC_Component cc, M_Uint32 idx, M_Uint8* psz, M_Int32 buflen, MC_GrpImage* img)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 가져올 메뉴 아이템의 인덱스
- `psz` - [out] 메뉴 아이템을 나타나는 문자열이 복사될 버퍼
- `buflen` - [in] 버퍼의 크기
- `img` - [out] 메뉴 아이템의 이미지
**반환 값**
성공
- 1
실패
- 0 이하면 실패
- `M_E_SHOFTBUF`: psz 으로 넘기는 버퍼 크기가 작은 경우
**부작용**
없음
**참고 항목**
없음
### MC_uicRemoveMenuItem
**설명**
지정된 메뉴 아이템을 삭제한다.
idx 가 가리키는 메뉴 아이템을 삭제한다.
지정된 컴포넌트가 메뉴 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_uicRemoveMenuItem(MC_Component cc, M_Uint32 idx)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 삭제할 메뉴 아이템의 인덱스
**반환 값**
성공
- 1
실패
- 0
**부작용**
없음
**참고 항목**
없음
### MC_uicSetActiveMenuItem
**설명**
지정된 메뉴 아이템을 활성화시킨다.
지정된 컴포넌트가 메뉴 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다. 만일 idx 값이 메뉴 항목의 범위를 벗어 나면, 이 함수는 아무런 역할을 하지 않 는다. 만일 선택되지 않은 상태로 두려면 idx 을 -1 로 지정하시면 된다.
**프로토타입**
```c
M_Int32 MC_uicSetActiveMenuItem(MC_Component cc, M_Int32 idx)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 메뉴 아이템의 인덱스
**반환 값**
이전에 활성화되었던 메뉴의 인덱스를 넘겨준다.
**부작용**
없음
**참고 항목**
없음
### MC_uicGetActiveMenuItem
**설명**
활성화된 메뉴 아이템을 인덱스를 돌려준다.
지정된 컴포넌트가 메뉴 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_uicGetActiveMenuItem(MC_Component cc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
**반환 값**
활성화된 메뉴 아이템의 인덱스
-1 : 활성화된 메뉴가 없는 경우
**부작용**
없음
**참고 항목**
없음
### MC_uicInsertText
**설명**
텍스트 컴포넌트에 문자열을 추가한다.
cc 가 가리키는 텍스트 컴포넌트의 idx 부분부터 시작하여 psz 의 내용을 len 만큼 삽입한다. idx 가 0 이하 이면 맨 앞이 추가되고, `M_CuicGetMaxTextSize()`로 넘어 오는 값 이상 이면 맨 뒤에 추가가 된다.
문자열은 내부에서 복사되므로 이 함수가 종료되고 나서 psz 가 가리키는 내용은 변경되어도 된다.
지정된 컴포넌트가 텍스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는 다.
**프로토타입**
```c
M_Int32 MC_uicInsertText(MC_Component cc, M_Int32 idx, M_Uint8* psz, M_Int32 len)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 문자열을 입력할 위치; 0 부터 맨 마지막 문자열까지 된다.
- `psz` - [in] 복사될 문자열
- `len` - [in] 문자열의 길이
**반환 값**
컴포넌트에 복사된 문자열의 길이
메모리가 부족한 경우 len 보다 작은 값이 나올 수 있다.
**부작용**
없음
**참고 항목**
없음
### MC_uicDeleteText
**설명**
텍스트 컴포넌트의 특정 부분의 문자열을 삭제한다.
cc 가 가리키는 텍스트 컴포넌트의 idx 부분부터 시작하여 길이가 len 만큼을 삭제한 다.
만일 len 이 -1 이면 idx 부터 문장 끝부분 까지가 삭제된다.
idx 가 내부 문자열의 범위를 벗어 나거나 len 이 0 보다 작으면 이 함수는 아무런 역할을 하지 않는다.
지정된 컴포넌트가 텍스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
void MC_uicDeleteText(MC_Component cc, M_Int32 idx, M_Int32 len)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 삭제할 문자열의 시작 위치
- `len` - [in] 문자열의 길이
**부작용**
없음
**참고 항목**
없음
### MC_uicGetMaxTextSize
**설명**
텍스트 컴포넌트의 최대 문자열 크기를 얻어온다. 바이트 단위의 최대 문자열 크기를 돌려준다.
지정된 컴포넌트가 텍스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_uicGetMaxTextSize(MC_Component cc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
**반환 값**
최대 문자열 크기
**부작용**
없음
**참고 항목**
없음
### MC_uicSetMaxTextSize
**설명**
텍스트 컴포넌트의 최대 문자열 크기를 지정한다. 바이트 단위의 최대 문자열 크기를 지정한다.
지정된 컴포넌트가 텍스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다. 기본 크기는 256 바이트 이다.
만일 이함수를 부를때 내부 문자열이 새로 정의된 max 보다 작다면, 내부 버퍼의 내용은 max 크기로 짤려진다.
**프로토타입**
```c
M_Int32 MC_uicSetMaxTextSize(MC_Component cc, M_Int32 max)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `max` - [in] 최대 문자열 크기(바이트 단위)
**반환 값**
이전의 최대 문자열 크기; 메모리가 부족할때 `M_E_NOMEMORY` 가 돌려짐
**부작용**
없음
**참고 항목**
없음
### MC_uicGetTextSize
**설명**
텍스트 컴포넌트의 내부의 문자열 길이를 얻어 온다.
지정된 컴포넌트가 텍스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는 다.
**프로토타입**
```c
M_Int32 MC_uicGetTextSize(MC_Component cc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
**반환 값**
현재 문자열 길이
**부작용**
없음
**참고 항목**
없음
### MC_uicGetText
**설명**
텍스트 컴포넌트의 내부의 문자열을 돌려준다.
cc 가 가리키는 컴포넌트의 내부 문자열의 idx 의 부분 부터 pszBuf 에 len 만큼 복사해준다.
idx 는 문자열의 범위를 벗어 나지 못하며, 만일 idx 가 0 보다 작은 경우에는 0 으로 보정되며, idx 가 문자열 보다 큰경우에는 아무런 내용도 복사하지 않으며 0 을 돌려준다.
지정된 컴포넌트가 텍스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다.
**프로토타입**
```c
M_Int32 MC_uicGetText(MC_Component cc, M_Int32 idx, M_Uint8* pszBuf, M_Int32 len)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 문자열의 시작 인덱스
- `psz` - [out] 복사될 버퍼
- `len` - [in] 버퍼의 크기
**반환 값**
복사된 문자열의 길이
**부작용**
없음
**참고 항목**
없음
### MC_uicAddListItem
**설명**
리스트 컴포넌트에 리스트 아이템을 하나 추가한다.
지정된 컴포넌트가 리스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는 다.
넘기는 이미지는 리스트 항목이 삭제될 때 내부에서 파괴한다.
**프로토타입**
```c
M_Int32 MC_uicAddListItem(MC_Component cc, M_Uint8* psz, MC_GrpImage img)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `psz` - [in] 리스트 아이템을 나타내는 문자열
- `img` - [in] 리스트 아이템의 이미지
**반환 값**
리스트의 인덱스(0 부터 시작된다.)
**부작용**
없음
**참고 항목**
없음
### MC_uicGetListItem
**설명**
리스트 아이템을 가져 온다.
지정된 컴포넌트가 리스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는 다.
**프로토타입**
```c
M_Int32 MC_uicGetListItem(MC_Component cc, M_Uint32 idx, M_Uint8* psz, M_Int32 buflen, MC_GrpImage* img)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 가져올 리스트 아이템의 인덱스
- `psz` - [out] 리스트 아이템을 나타나는 문자열이 복사될 버퍼
- `buflen` - [in] 버퍼의 크기
- `img` - [out] 리스트 아이템의 이미지
**반환 값**
성공
- 1
실패
- 0 이하면 실패
- `M_E_SHOFTBUF` - psz 으로 넘기는 버퍼 크기가 작은 경우
**부작용**
없음
**참고 항목**
없음
### MC_uicRemoveListItem
**설명**
지정된 리스트 아이템을 삭제한다.
idx 가 가리키는 리스트 아이템을 삭제한다.
지정된 컴포넌트가 리스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는 다.
**프로토타입**
```c
M_Int32 MC_uicRemoveListItem(MC_Component cc, M_Uint32 idx)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 삭제할 리스트 아이템의 인덱스
**반환 값**
성공
- 1
실패
- 0
**부작용**
없음
**참고 항목**
없음
### MC_uicSetActiveListItem
**설명**
지정된 리스트 아이템을 활성화시킨다.
지정된 컴포넌트가 리스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는다. 만일 idx 값이 리스트 항목의 범위를 벗어 나면, 이 함수는 아무런 역할을 하지 않는다. 만일 선택되지 않은 상태로 두려면 idx 을 -1 로 지정하시면 된다.
**프로토타입**
```c
M_Int32 MC_uicSetActiveListItem(MC_Component cc, M_Int32 idx)
```
**매개 변수**
- `cc` - [in] 컴포넌트
- `idx` - [in] 리스트 아이템의 인덱스
**반환 값**
이전에 활성화되었던 리스트의 인덱스를 넘겨준다.
**부작용**
없음
**참고 항목**
없음
### MC_uicGetActiveListItem
**설명**
활성화된 리스트 아이템을 인덱스를 돌려준다.
지정된 컴포넌트가 리스트 컴포넌트가 아니면 이 함수는 아무런 역할을 하지 않는 다.
**프로토타입**
```c
M_Int32 MC_uicGetActiveListItem(MC_Component cc)
```
**매개 변수**
- `cc` - [in] 컴포넌트
**반환 값**
셩공
- 활성화된 리스트 아이템의 인덱스
실패
- `-1` - 활성화된 리스트가 없는 경우
**부작용**
없음
**참고 항목**
없음
---
title: "5.1.10 UTILITY"
---
각종 유틸리티 함수를 정의하였다.
### MC_utilHtonl
**설명**
M_Int32 타입의 값의 Host Byte Odering 을 Network Byte Odering 으로 전환한다.
**프로토타입**
```c
M_Int32 MC_utilHtonl(M_Int32 val)
```
**반환 값**
정수값
**부작용**
없음
**참고 항목**
없음
### MC_utilHtons
**설명**
M_Int16 타입의 값의 Host Byte Odering 을 Network Byte Odering 으로 전환한다.
**프로토타입**
```c
M_Int16 MC_utilHtons(M_Int16 val)
```
**반환 값**
정수값
**부작용**
없음
**참고 항목**
없음
### MC_utilNtohl
**설명**
M_Int32 타입의 값의 Network Byte Ordering 을 Host Byte Ordering 으로 전환한다.
**프로토타입**
```c
M_Int32 MC_utilNtohl(M_Int32 val)
```
**반환 값**
정수값
**부작용**
없음
**참고 항목**
없음
### MC_utilNtohs
**설명**
M_Int16 타입의 값의 Network Byte Ordering 을 Host Byte Ordering 으로 전환한다.
**프로토타입**
```c
M_Int16 MC_utilNtohs(M_Int16 val)
```
**반환 값**
정수값
**부작용**
없음
**참고 항목**
없음
### MC_utilInetAddrInt
**설명**
문자열로 된 IP 주소로 부터 정수형의 IP 값을 얻다. 리턴되는 IP 값은 Network Byte Ordering 이다.
**프로토타입**
```c
M_int32 MC_utilInetAddrInt(M_Byte* addr)
```
**반환 값**
성공
- `-1` 이 아닌 값
실패
- `-1`
**부작용**
없음
**참고 항목**
없음
### MC_utilInetAddrStr
**설명**
정수형의 IP 값으로 부터 IP 문자열을 얻다. 정수형 값은 Network Byte Ordering 이어야 한다.
**프로토타입**
```c
void MC_utilInetAddrStr(M_Int32 ip, M_Byte* addr)
```
**매개 변수**
- `ip` - 정수형의 IP 주소
- `addr` - IP 문자열이 저장될 버퍼
**부작용**
없음
**참고 항목**
없음
---
title: "CLDC 1.1 규격"
---
**Connected Limited Device Configuration (CLDC) Specification Version 1.1** —
Sun Microsystems 가 2003년 3월 발표한 JSR-139 규격의 한국어 번역본을 정리했습니다.
WIPI 1.2.1 의 자바 언어 지원은 본 규격을 기준으로 합니다 ([platform.md 3.9.1 참조](../overview/platform.md)).
| 항목 | 내용 |
|---|---|
| [규격서](spec.md) | CLDC 1.1 본문 — 가상 머신/라이브러리/보안 요구 사항 |
| [바이트 코드 검사기](verifier.md) | CLDC 부록 1 — KVM 런타임 유형 검사기 규격 (Prolog 절 형식 규격) |
| [Java API](java-api/index.md) | CLDC 핵심 라이브러리 — `java.io`, `java.lang`, `java.lang.ref`, `java.util`, `javax.microedition.io` (5 패키지, 81 클래스) |
원본:
- `vendor/cldc-1_1-fr-spec-ko/CLDCSpecification1.1.pdf` — 한국어 PDF 규격서 (58페이지)
- `vendor/cldc-1_1-fr-spec-ko/Appendix1-verifier.pdf` — 한국어 PDF 바이트 코드 유형 검사기 (68페이지)
- `vendor/cldc-1_1-fr-spec-ko/Appendix2-javadocs.zip` — CLDC API JavaDoc HTML
---
title: "Java API Reference"
---
JavaDoc HTML 을 Markdown 으로 재구성한 레퍼런스입니다.
## 패키지 목록
- [`java.io`](java/io/index.md) (18 classes)
- [`java.lang`](java/lang/index.md) (41 classes)
- [`java.lang.ref`](java/lang/ref/index.md) (2 classes)
- [`java.util`](java/util/index.md) (10 classes)
- [`javax.microedition.io`](javax/microedition/io/index.md) (10 classes)
---
title: "Class ByteArrayInputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.InputStream
|
+--java.io.ByteArrayInputStream
```
## 설명
**extends InputStream:**
`ByteArrayInputStream`에는
스트림에서 읽을 수 있는
바이트가 포함되는 내부 버퍼가 있습니다.
내부 카운터는 `read`
메소드에서 제공할 다음 바이트를 추적합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `protected byte[] buf` — 스트림을 만든 사람이 제공한 바이트 배열.
- `protected int count` — 입력 스트림 버퍼의 마지막 유효 문자에 1을 더한 색인.
- `protected int mark` — 스트림에서 현재 표시된 위치.
- `protected int pos` — 입력 스트림 버퍼에서 읽을 다음 문자의 색인.
## 생성자 요약
- ByteArrayInputStream (byte[] buf) buf 를 버퍼 배열로 사용하도록 ByteArrayInputStream 을
만듭니다.
- ByteArrayInputStream (byte[] buf,
int offset,
int length) buf 를 버퍼 배열로 사용하는 ByteArrayInputStream 을 만듭니다.
## 메서드 요약
- `int available ()` — 차단되지 않고 이 입력 스트림에서 읽을 수 있는 바이트 수를 반환합니다.
- `void close ()` — 이 입력 스트림을 닫고 스트림과 연결된 시스템 자원을 해제합니다.
- `void mark (int readAheadLimit)` — 스트림에서 현재 표시된 위치를 설정합니다.
- `boolean markSupported ()` — ByteArrayInputStream이 표시/재설정을 지원하는지 테스트합니다.
- `int read ()` — 이 입력 스트림에서 다음 바이트의 데이터를 읽습니다.
- `int read (byte[] b, int off, int len)` — 이 입력 스트림에서 최대 len 바이트의 데이터를 바이트 배열로 읽어 옵니다.
- `void reset ()` — 버퍼를 표시된 위치로 재설정합니다.
- `long skip (long n)` — 이 입력 스트림에서 n 바이트의 입력을 건너뜁니다.
## 필드 상세
### buf
```java
protected byte[] buf
```
- 스트림을 만든 사람이 제공한 바이트 배열.
`buf[0]`에서
`buf[count-1]`까지의
요소가 스트림에서 읽을 수 있는
유일한 바이트입니다. `buf[pos]` 요소는
읽을 다음 바이트입니다.
### pos
```java
protected int pos
```
- 입력 스트림 버퍼에서 읽을 다음 문자의 색인.
이 값은 항상 음수가 아니고
`count` 값보다 크지 않아야 합니다.
입력 스트림 버퍼에서 읽을 다음 바이트는
`buf[pos]`입니다.
### mark
```java
protected int mark
```
**Since:**
- JDK1.1
### count
```java
protected int count
```
- 입력 스트림 버퍼의 마지막 유효 문자에 1을 더한 색인.
이 값은 항상 음수가 아니고
`buf` 길이보다
크지 않아야 합니다.
입력 스트림 버퍼에서 읽을 수 있는
`buf` 내의
마지막 바이트 위치보다 1만큼 큽니다.
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf)
```
- `buf`를 버퍼 배열로 사용하도록
`ByteArrayInputStream`을
만듭니다.
버퍼 배열은 복사되지 않습니다.
`pos`의 초기 값은
`0`이고
`count`의 초기 값은
`buf` 길이입니다.
**Parameters:**
- `buf` - 입력 버퍼
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf,
int offset,
int length)
```
- `buf`를 버퍼 배열로 사용하는 `ByteArrayInputStream`을 만듭니다.
`pos`의 초기 값은
`offset`이고
`count`의 초기 값은
`offset+length`입니다.
버퍼 배열은 복사되지 않습니다.
결과로 만들어진 입력 스트림에서 단순히 바이트를 읽으면
`buf[pos]`에서
`buf[pos+len-1]`까지의 요소를 읽습니다.
하지만 `reset` 작업을 수행하면
`buf[0]`에서
`buf[pos-1]`까지의
바이트를 입력할 수 있게 됩니다.
**Parameters:**
- `length` - 버퍼에서 읽을 최대 바이트 수
### read
```java
public int read()
```
**Specified by:**
- `read` in class `InputStream`
**Returns:**
- 다음 바이트의 데이터 또는 스트림 끝에 도달한 경우
`-1`
### read
```java
public int read(byte[] b,
int off,
int len)
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수
또는 스트림 끝에 도달하여 더 이상
데이터가 없는 경우 `-1`
**See Also:**
- ``InputStream.read()``
### skip
```java
public long skip(long n)
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
### available
```java
public int available()
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 차단되지 않고 입력 스트림에서 읽을 수 있는
바이트 수
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 이 true 유형이 mark 메소드와 reset 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**Since:**
- JDK1.1
**See Also:**
- ``InputStream.mark(int)``,
``InputStream.reset()``
### mark
```java
public void mark(int readAheadLimit)
```
**Overrides:**
- `mark` in class `InputStream`
**Parameters:**
- `readAheadLimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**Since:**
- JDK1.1
**See Also:**
- ``InputStream.reset()``
### reset
```java
public void reset()
```
**Overrides:**
- `reset` in class `InputStream`
**See Also:**
- ``InputStream.mark(int)``,
``IOException``
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 생성자 상세
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf)
```
- `buf`를 버퍼 배열로 사용하도록
`ByteArrayInputStream`을
만듭니다.
버퍼 배열은 복사되지 않습니다.
`pos`의 초기 값은
`0`이고
`count`의 초기 값은
`buf` 길이입니다.
**Parameters:**
- `buf` - 입력 버퍼
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf,
int offset,
int length)
```
- `buf`를 버퍼 배열로 사용하는 `ByteArrayInputStream`을 만듭니다.
`pos`의 초기 값은
`offset`이고
`count`의 초기 값은
`offset+length`입니다.
버퍼 배열은 복사되지 않습니다.
결과로 만들어진 입력 스트림에서 단순히 바이트를 읽으면
`buf[pos]`에서
`buf[pos+len-1]`까지의 요소를 읽습니다.
하지만 `reset` 작업을 수행하면
`buf[0]`에서
`buf[pos-1]`까지의
바이트를 입력할 수 있게 됩니다.
**Parameters:**
- `length` - 버퍼에서 읽을 최대 바이트 수
### read
```java
public int read()
```
**Specified by:**
- `read` in class `InputStream`
**Returns:**
- 다음 바이트의 데이터 또는 스트림 끝에 도달한 경우
`-1`
### read
```java
public int read(byte[] b,
int off,
int len)
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수
또는 스트림 끝에 도달하여 더 이상
데이터가 없는 경우 `-1`
**See Also:**
- ``InputStream.read()``
### skip
```java
public long skip(long n)
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
### available
```java
public int available()
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 차단되지 않고 입력 스트림에서 읽을 수 있는
바이트 수
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 이 true 유형이 mark 메소드와 reset 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**Since:**
- JDK1.1
**See Also:**
- ``InputStream.mark(int)``,
``InputStream.reset()``
### mark
```java
public void mark(int readAheadLimit)
```
**Overrides:**
- `mark` in class `InputStream`
**Parameters:**
- `readAheadLimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**Since:**
- JDK1.1
**See Also:**
- ``InputStream.reset()``
### reset
```java
public void reset()
```
**Overrides:**
- `reset` in class `InputStream`
**See Also:**
- ``InputStream.mark(int)``,
``IOException``
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### read
```java
public int read()
```
**Specified by:**
- `read` in class `InputStream`
**Returns:**
- 다음 바이트의 데이터 또는 스트림 끝에 도달한 경우
`-1`
### read
```java
public int read(byte[] b,
int off,
int len)
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수
또는 스트림 끝에 도달하여 더 이상
데이터가 없는 경우 `-1`
**See Also:**
- ``InputStream.read()``
### skip
```java
public long skip(long n)
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
### available
```java
public int available()
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 차단되지 않고 입력 스트림에서 읽을 수 있는
바이트 수
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 이 true 유형이 mark 메소드와 reset 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**Since:**
- JDK1.1
**See Also:**
- ``InputStream.mark(int)``,
``InputStream.reset()``
### mark
```java
public void mark(int readAheadLimit)
```
**Overrides:**
- `mark` in class `InputStream`
**Parameters:**
- `readAheadLimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**Since:**
- JDK1.1
**See Also:**
- ``InputStream.reset()``
### reset
```java
public void reset()
```
**Overrides:**
- `reset` in class `InputStream`
**See Also:**
- ``InputStream.mark(int)``,
``IOException``
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class ByteArrayOutputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
|
+--java.io.ByteArrayOutputStream
```
## 설명
**extends OutputStream:**
이 클래스는 데이터를 바이트 배열에 쓰는
출력 스트림을 구현합니다.
데이터를 버퍼에 쓰면 버퍼가 자동으로 커집니다.
데이터는 `toByteArray()`와
`toString()`을 사용하여 검색할 수 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `protected byte[] buf` — 데이터가 저장되는 버퍼
- `protected int count` — 버퍼에 있는 유효 바이트 수
## 생성자 요약
- ByteArrayOutputStream () 새로운 바이트 배열 출력 스트림을 만듭니다.
- ByteArrayOutputStream (int size) 지정된 크기(바이트)의 버퍼 용량을 가진
새로운 바이트 배열 출력 스트림을 만듭니다.
## 메서드 요약
- `void close ()` — 이 출력 스트림을 닫고 스트림과 연결된 시스템 자원을 해제합니다.
- `void reset ()` — 출력 스트림에 현재 축적된 모든 출력이 삭제되도록 바이트 배열 출력 스트림의 count 필드를 0으로 재설정합니다.
- `int size ()` — 버퍼의 현재 크기를 반환합니다.
- `byte[] toByteArray ()` — 새로 할당된 바이트 배열을 만듭니다.
- `String toString ()` — 플랫폼의 기본 문자 인코딩에 따라 바이트를 문자로 변환하여 버퍼 내용을 문자열로 변환합니다.
- `void write (byte[] b, int off, int len)` — off 오프셋에서 시작하여 지정된 바이트 배열의 len 바이트를 이 바이트 배열 출력 스트림에 씁니다.
- `void write (int b)` — 지정된 바이트를 이 바이트 배열 출력 스트림에 씁니다.
## 필드 상세
### buf
```java
protected byte[] buf
```
- 데이터가 저장되는 버퍼
### count
```java
protected int count
```
- 버퍼에 있는 유효 바이트 수
### ByteArrayOutputStream
```java
public ByteArrayOutputStream()
```
- 새로운 바이트 배열 출력 스트림을 만듭니다.
초기 버퍼 용량은 32바이트지만 필요한 경우 크기가 증가합니다.
### ByteArrayOutputStream
```java
public ByteArrayOutputStream(int size)
```
- 지정된 크기(바이트)의 버퍼 용량을 가진
새로운 바이트 배열 출력 스트림을 만듭니다.
**Parameters:**
- `size` - 초기 크기
**Throws:**
- `IllegalArgumentException` - 크기가 음수인 경우
### write
```java
public void write(int b)
```
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 바이트
### write
```java
public void write(byte[] b,
int off,
int len)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
### reset
```java
public void reset()
```
**See Also:**
- ``ByteArrayInputStream.count``
### toByteArray
```java
public byte[] toByteArray()
```
**Returns:**
- 이 출력 스트림의 현재 내용(바이트 배열)
**See Also:**
- ``size()``
### size
```java
public int size()
```
**Returns:**
- 이 출력 스트림의 유효 바이트 수인 `count`
필드 값
**See Also:**
- ``count``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 버퍼 내용이 변환된 문자열
**Since:**
- JDK1.1
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 생성자 상세
### ByteArrayOutputStream
```java
public ByteArrayOutputStream()
```
- 새로운 바이트 배열 출력 스트림을 만듭니다.
초기 버퍼 용량은 32바이트지만 필요한 경우 크기가 증가합니다.
### ByteArrayOutputStream
```java
public ByteArrayOutputStream(int size)
```
- 지정된 크기(바이트)의 버퍼 용량을 가진
새로운 바이트 배열 출력 스트림을 만듭니다.
**Parameters:**
- `size` - 초기 크기
**Throws:**
- `IllegalArgumentException` - 크기가 음수인 경우
### write
```java
public void write(int b)
```
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 바이트
### write
```java
public void write(byte[] b,
int off,
int len)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
### reset
```java
public void reset()
```
**See Also:**
- ``ByteArrayInputStream.count``
### toByteArray
```java
public byte[] toByteArray()
```
**Returns:**
- 이 출력 스트림의 현재 내용(바이트 배열)
**See Also:**
- ``size()``
### size
```java
public int size()
```
**Returns:**
- 이 출력 스트림의 유효 바이트 수인 `count`
필드 값
**See Also:**
- ``count``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 버퍼 내용이 변환된 문자열
**Since:**
- JDK1.1
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### write
```java
public void write(int b)
```
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 바이트
### write
```java
public void write(byte[] b,
int off,
int len)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
### reset
```java
public void reset()
```
**See Also:**
- ``ByteArrayInputStream.count``
### toByteArray
```java
public byte[] toByteArray()
```
**Returns:**
- 이 출력 스트림의 현재 내용(바이트 배열)
**See Also:**
- ``size()``
### size
```java
public int size()
```
**Returns:**
- 이 출력 스트림의 유효 바이트 수인 `count`
필드 값
**See Also:**
- ``count``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 버퍼 내용이 변환된 문자열
**Since:**
- JDK1.1
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Interface DataInput"
---
`package java.io`
```text
public void readFully(byte[] b)
throws IOException
```
## 설명
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFully
**Parameters:**
- `len` - 읽을 바이트 수를 지정하는 정수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skipBytes
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readBoolean
**Returns:**
- 읽은 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readByte
**Returns:**
- 읽은 8비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedByte
**Returns:**
- 읽은 부호 없는 8비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readShort
**Returns:**
- 읽은 16비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedShort
**Returns:**
- 읽은 부호 없는 16비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readChar
**Returns:**
- 읽은 유니코드 `char`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readInt
**Returns:**
- 읽은 `int` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readLong
**Returns:**
- 읽은 `long` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFloat
**Returns:**
- 읽은 `float` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### readDouble
**Returns:**
- 읽은 `double` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### readUTF
**Returns:**
- 유니코드 문자열
**Throws:**
- `UTFDataFormatException` - 바이트가 문자열의 유효한
UTF-8 인코딩을 나타내지 않는 경우
## 메서드 요약
- `boolean readBoolean ()` — 1바이트의 입력을 읽어 이 바이트가 0이 아니면 true , 0이면 false 를 반환합니다.
- `byte readByte ()` — 1바이트의 입력을 읽고 반환합니다.
- `char readChar ()` — 입력 char 를 읽고 char 값을 반환합니다.
- `double readDouble ()` — 8바이트의 입력을 읽고 double 값을 반환합니다.
- `float readFloat ()` — 4바이트의 입력을 읽고 float 값을 반환합니다.
- `void readFully (byte[] b)` — 입력 스트림에서 일부 바이트를 읽어 버퍼 배열 b 에 저장합니다.
- `void readFully (byte[] b, int off, int len)` — 입력 스트림에서 len 바이트를 읽습니다.
- `int readInt ()` — 4바이트의 입력을 읽고 int 값을 반환합니다.
- `long readLong ()` — 8바이트의 입력을 읽고 long 값을 반환합니다.
- `short readShort ()` — 2바이트의 입력을 읽고 short 값을 반환합니다.
- `int readUnsignedByte ()` — 1바이트의 입력을 읽고 int 유형으로 zero-extend하여 0 에서 255 사이의 결과 값을 반환합니다.
- `int readUnsignedShort ()` — 2바이트의 입력을 읽고 int 유형으로 zero-extend하여 0 에서 65535 사이의 int 값을 반환합니다.
- `String readUTF ()` — 수정된 UTF-8 형식을 사용하여 인코딩된 문자열을 읽습니다.
- `int skipBytes (int n)` — 건너뛴 바이트를 삭제하면서 입력 스트림에서 n 바이트의 데이터를 건너뛰려고 시도합니다.
## 메서드 상세
### readFully
```java
public void readFully(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFully
```java
public void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽을 바이트 수를 지정하는 정수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skipBytes
```java
public int skipBytes(int n)
throws IOException
```
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readBoolean
```java
public boolean readBoolean()
throws IOException
```
**Returns:**
- 읽은 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readByte
```java
public byte readByte()
throws IOException
```
**Returns:**
- 읽은 8비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedByte
```java
public int readUnsignedByte()
throws IOException
```
**Returns:**
- 읽은 부호 없는 8비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readShort
```java
public short readShort()
throws IOException
```
**Returns:**
- 읽은 16비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedShort
```java
public int readUnsignedShort()
throws IOException
```
**Returns:**
- 읽은 부호 없는 16비트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readChar
```java
public char readChar()
throws IOException
```
**Returns:**
- 읽은 유니코드 `char`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readInt
```java
public int readInt()
throws IOException
```
**Returns:**
- 읽은 `int` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readLong
```java
public long readLong()
throws IOException
```
**Returns:**
- 읽은 `long` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFloat
```java
public float readFloat()
throws IOException
```
**Returns:**
- 읽은 `float` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### readDouble
```java
public double readDouble()
throws IOException
```
**Returns:**
- 읽은 `double` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### readUTF
```java
public String readUTF()
throws IOException
```
**Returns:**
- 유니코드 문자열
**Throws:**
- `UTFDataFormatException` - 바이트가 문자열의 유효한
UTF-8 인코딩을 나타내지 않는 경우
---
title: "Class DataInputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.InputStream
|
+--java.io.DataInputStream
```
## 설명
**All Implemented Interfaces:**
- `DataInput`
**implements DataInput:**
데이터 입력 스트림은
응용 프로그램이 시스템에 독립적인 방법으로
기본 입력 스트림에서 프리미티브 Java 데이터 유형을 읽을 수 있도록 합니다.
응용 프로그램은 데이터 출력 스트림을 사용하여 나중에 데이터 입력 스트림이 읽을 수 있도록 데이터를 씁니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``DataOutputStream``
## 필드 요약
- `protected InputStream in` — 입력 스트림
## 생성자 요약
- DataInputStream ( InputStream in) DataInputStream 을 만들고,
나중에 사용할 수 있도록 그 인자인 입력 스트림 in 을 저장합니다.
## 메서드 요약
- `int available ()` — 차단되지 않고 이 입력 스트림에서 읽을 수 있는 바이트 수를 반환합니다.
- `void close ()` — 이 입력 스트림을 닫고 스트림과 연결된 시스템 자원을 해제합니다.
- `void mark (int readlimit)` — 이 입력 스트림에서의 현재 위치를 표시합니다.
- `boolean markSupported ()` — 이 입력 스트림이 mark 및 reset 메소드를 지원하는지 테스트합니다.
- `int read ()` — 이 입력 스트림에서 다음 바이트의 데이터를 읽습니다.
- `int read (byte[] b)` — DataInput 의 read 메소드 일반 계약을 참조하십시오.
- `int read (byte[] b, int off, int len)` — 이 입력 스트림에서 최대 len 바이트의 데이터를 바이트 배열로 읽어 옵니다.
- `boolean readBoolean ()` — DataInput 의 readBoolean 메소드 일반 계약을 참조하십시오.
- `byte readByte ()` — DataInput 의 readByte 메소드 일반 계약을 참조하십시오.
- `char readChar ()` — DataInput 의 readChar 메소드 일반 계약을 참조하십시오.
- `double readDouble ()` — DataInput 의 readDouble 메소드 일반 계약을 참조하십시오.
- `float readFloat ()` — DataInput 의 readFloat 메소드 일반 계약을 참조하십시오.
- `void readFully (byte[] b)` — DataInput 의 readFully 메소드 일반 계약을 참조하십시오.
- `void readFully (byte[] b, int off, int len)` — DataInput 의 readFully 메소드 일반 계약을 참조하십시오.
- `int readInt ()` — DataInput 의 readInt 메소드 일반 계약을 참조하십시오.
- `long readLong ()` — DataInput 의 readLong 메소드 일반 계약을 참조하십시오.
- `short readShort ()` — DataInput 의 readShort 메소드 일반 계약을 참조하십시오.
- `int readUnsignedByte ()` — DataInput 의 readUnsignedByte 메소드 일반 계약을 참조하십시오.
- `int readUnsignedShort ()` — DataInput 의 readUnsignedShort 메소드 일반 계약을 참조하십시오.
- `String readUTF ()` — DataInput 의 readUTF 메소드 일반 계약을 참조하십시오.
- `static String readUTF ( DataInput in)` — 스트림 in 에서 Java로 수정된 UTF-8 형식으로 인코딩된 유니코드 문자열의 표현을 읽습니다.
- `void reset ()` — 이 입력 스트림에서 mark 메소드를 마지막으로 호출했을 때의 위치에 다시 스트림을 놓습니다.
- `long skip (long n)` — 입력 스트림에서 n 바이트의 데이터를 건너뛰어 무시합니다.
- `int skipBytes (int n)` — DataInput 의 skipBytes 메소드 일반 계약을 참조하십시오.
## 필드 상세
### in
```java
protected InputStream in
```
- 입력 스트림
### DataInputStream
```java
public DataInputStream(InputStream in)
```
- `DataInputStream`을 만들고,
나중에 사용할 수 있도록 그 인자인 입력 스트림
`in`을 저장합니다.
**Parameters:**
- `in` - 입력 스트림
### read
```java
public int read()
throws IOException
```
**Specified by:**
- `read` in class `InputStream`
**Returns:**
- 다음 바이트의 데이터 또는 스트림의 끝에 도달한 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public final int read(byte[] b)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``InputStream.read(byte[], int, int)``
### read
```java
public final int read(byte[] b,
int off,
int len)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``InputStream.read()``
### readFully
```java
public final void readFully(byte[] b)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFully
```java
public final void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `len` - 읽을 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skipBytes
```java
public final int skipBytes(int n)
throws IOException
```
**Specified by:**
- `skipBytes` in interface `DataInput`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readBoolean
```java
public final boolean readBoolean()
throws IOException
```
**Specified by:**
- `readBoolean` in interface `DataInput`
**Returns:**
- 읽은 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readByte
```java
public final byte readByte()
throws IOException
```
**Specified by:**
- `readByte` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 바이트(부호 있는
8비트 `byte`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedByte
```java
public final int readUnsignedByte()
throws IOException
```
**Specified by:**
- `readUnsignedByte` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 바이트
(부호 없는 8비트 숫자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readShort
```java
public final short readShort()
throws IOException
```
**Specified by:**
- `readShort` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(부호 있는 16비트 숫자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedShort
```java
public final int readUnsignedShort()
throws IOException
```
**Specified by:**
- `readUnsignedShort` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(부호 없는 16비트 정수)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readChar
```java
public final char readChar()
throws IOException
```
**Specified by:**
- `readChar` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(유니코드 문자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readInt
```java
public final int readInt()
throws IOException
```
**Specified by:**
- `readInt` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 4바이트
(`int`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readLong
```java
public final long readLong()
throws IOException
```
**Specified by:**
- `readLong` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 8바이트
(`long`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFloat
```java
public final float readFloat()
throws IOException
```
**Specified by:**
- `readFloat` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 4바이트
(`float`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``readInt()``,
``Float.intBitsToFloat(int)``
### readDouble
```java
public final double readDouble()
throws IOException
```
**Specified by:**
- `readDouble` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 8바이트
(`double`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``readLong()``,
``Double.longBitsToDouble(long)``
### readUTF
```java
public final String readUTF()
throws IOException
```
**Specified by:**
- `readUTF` in interface `DataInput`
**Returns:**
- 유니코드 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``readUTF(java.io.DataInput)``
### readUTF
```java
public static final String readUTF(DataInput in)
throws IOException
```
**Parameters:**
- `in` - 데이터 입력 스트림
**Returns:**
- 유니코드 문자열
**Throws:**
- `UTFDataFormatException` - 바이트가 유니코드 문자열의
유효한 UTF-8 인코딩을 나타내지 않는 경우
**See Also:**
- ``readUnsignedShort()``
### skip
```java
public long skip(long n)
throws IOException
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### available
```java
public int available()
throws IOException
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 차단되지 않고 입력 스트림에서
읽을 수 있는 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
**Parameters:**
- `readlimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**See Also:**
- ``InputStream.reset()``
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `InputStream`
**Throws:**
- `IOException` - 스트림이 표시되어 있지 않거나
표시가 무효화된 경우
**See Also:**
- ``InputStream.mark(int)``,
``IOException``
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 이 입력 유형이 `mark` 및
`reset` 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**See Also:**
- ``InputStream.mark(int)``,
``InputStream.reset()``
## 생성자 상세
### DataInputStream
```java
public DataInputStream(InputStream in)
```
- `DataInputStream`을 만들고,
나중에 사용할 수 있도록 그 인자인 입력 스트림
`in`을 저장합니다.
**Parameters:**
- `in` - 입력 스트림
### read
```java
public int read()
throws IOException
```
**Specified by:**
- `read` in class `InputStream`
**Returns:**
- 다음 바이트의 데이터 또는 스트림의 끝에 도달한 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public final int read(byte[] b)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``InputStream.read(byte[], int, int)``
### read
```java
public final int read(byte[] b,
int off,
int len)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``InputStream.read()``
### readFully
```java
public final void readFully(byte[] b)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFully
```java
public final void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `len` - 읽을 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skipBytes
```java
public final int skipBytes(int n)
throws IOException
```
**Specified by:**
- `skipBytes` in interface `DataInput`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readBoolean
```java
public final boolean readBoolean()
throws IOException
```
**Specified by:**
- `readBoolean` in interface `DataInput`
**Returns:**
- 읽은 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readByte
```java
public final byte readByte()
throws IOException
```
**Specified by:**
- `readByte` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 바이트(부호 있는
8비트 `byte`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedByte
```java
public final int readUnsignedByte()
throws IOException
```
**Specified by:**
- `readUnsignedByte` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 바이트
(부호 없는 8비트 숫자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readShort
```java
public final short readShort()
throws IOException
```
**Specified by:**
- `readShort` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(부호 있는 16비트 숫자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedShort
```java
public final int readUnsignedShort()
throws IOException
```
**Specified by:**
- `readUnsignedShort` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(부호 없는 16비트 정수)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readChar
```java
public final char readChar()
throws IOException
```
**Specified by:**
- `readChar` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(유니코드 문자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readInt
```java
public final int readInt()
throws IOException
```
**Specified by:**
- `readInt` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 4바이트
(`int`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readLong
```java
public final long readLong()
throws IOException
```
**Specified by:**
- `readLong` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 8바이트
(`long`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFloat
```java
public final float readFloat()
throws IOException
```
**Specified by:**
- `readFloat` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 4바이트
(`float`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``readInt()``,
``Float.intBitsToFloat(int)``
### readDouble
```java
public final double readDouble()
throws IOException
```
**Specified by:**
- `readDouble` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 8바이트
(`double`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``readLong()``,
``Double.longBitsToDouble(long)``
### readUTF
```java
public final String readUTF()
throws IOException
```
**Specified by:**
- `readUTF` in interface `DataInput`
**Returns:**
- 유니코드 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``readUTF(java.io.DataInput)``
### readUTF
```java
public static final String readUTF(DataInput in)
throws IOException
```
**Parameters:**
- `in` - 데이터 입력 스트림
**Returns:**
- 유니코드 문자열
**Throws:**
- `UTFDataFormatException` - 바이트가 유니코드 문자열의
유효한 UTF-8 인코딩을 나타내지 않는 경우
**See Also:**
- ``readUnsignedShort()``
### skip
```java
public long skip(long n)
throws IOException
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### available
```java
public int available()
throws IOException
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 차단되지 않고 입력 스트림에서
읽을 수 있는 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
**Parameters:**
- `readlimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**See Also:**
- ``InputStream.reset()``
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `InputStream`
**Throws:**
- `IOException` - 스트림이 표시되어 있지 않거나
표시가 무효화된 경우
**See Also:**
- ``InputStream.mark(int)``,
``IOException``
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 이 입력 유형이 `mark` 및
`reset` 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**See Also:**
- ``InputStream.mark(int)``,
``InputStream.reset()``
## 메서드 상세
### read
```java
public int read()
throws IOException
```
**Specified by:**
- `read` in class `InputStream`
**Returns:**
- 다음 바이트의 데이터 또는 스트림의 끝에 도달한 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public final int read(byte[] b)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``InputStream.read(byte[], int, int)``
### read
```java
public final int read(byte[] b,
int off,
int len)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``InputStream.read()``
### readFully
```java
public final void readFully(byte[] b)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFully
```java
public final void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `len` - 읽을 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skipBytes
```java
public final int skipBytes(int n)
throws IOException
```
**Specified by:**
- `skipBytes` in interface `DataInput`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readBoolean
```java
public final boolean readBoolean()
throws IOException
```
**Specified by:**
- `readBoolean` in interface `DataInput`
**Returns:**
- 읽은 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readByte
```java
public final byte readByte()
throws IOException
```
**Specified by:**
- `readByte` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 바이트(부호 있는
8비트 `byte`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedByte
```java
public final int readUnsignedByte()
throws IOException
```
**Specified by:**
- `readUnsignedByte` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 바이트
(부호 없는 8비트 숫자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readShort
```java
public final short readShort()
throws IOException
```
**Specified by:**
- `readShort` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(부호 있는 16비트 숫자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readUnsignedShort
```java
public final int readUnsignedShort()
throws IOException
```
**Specified by:**
- `readUnsignedShort` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(부호 없는 16비트 정수)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readChar
```java
public final char readChar()
throws IOException
```
**Specified by:**
- `readChar` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 2바이트
(유니코드 문자)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readInt
```java
public final int readInt()
throws IOException
```
**Specified by:**
- `readInt` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 4바이트
(`int`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readLong
```java
public final long readLong()
throws IOException
```
**Specified by:**
- `readLong` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 8바이트
(`long`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### readFloat
```java
public final float readFloat()
throws IOException
```
**Specified by:**
- `readFloat` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 4바이트
(`float`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``readInt()``,
``Float.intBitsToFloat(int)``
### readDouble
```java
public final double readDouble()
throws IOException
```
**Specified by:**
- `readDouble` in interface `DataInput`
**Returns:**
- 이 입력 스트림의 다음 8바이트
(`double`)
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``readLong()``,
``Double.longBitsToDouble(long)``
### readUTF
```java
public final String readUTF()
throws IOException
```
**Specified by:**
- `readUTF` in interface `DataInput`
**Returns:**
- 유니코드 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``readUTF(java.io.DataInput)``
### readUTF
```java
public static final String readUTF(DataInput in)
throws IOException
```
**Parameters:**
- `in` - 데이터 입력 스트림
**Returns:**
- 유니코드 문자열
**Throws:**
- `UTFDataFormatException` - 바이트가 유니코드 문자열의
유효한 UTF-8 인코딩을 나타내지 않는 경우
**See Also:**
- ``readUnsignedShort()``
### skip
```java
public long skip(long n)
throws IOException
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### available
```java
public int available()
throws IOException
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 차단되지 않고 입력 스트림에서
읽을 수 있는 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
**Parameters:**
- `readlimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**See Also:**
- ``InputStream.reset()``
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `InputStream`
**Throws:**
- `IOException` - 스트림이 표시되어 있지 않거나
표시가 무효화된 경우
**See Also:**
- ``InputStream.mark(int)``,
``IOException``
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 이 입력 유형이 `mark` 및
`reset` 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**See Also:**
- ``InputStream.mark(int)``,
``InputStream.reset()``
---
title: "Interface DataOutput"
---
`package java.io`
```text
public void write(int b)
throws IOException
```
## 설명
**Parameters:**
- `b` - 기록되는 바이트
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
**Parameters:**
- `b` - 데이터
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
**Parameters:**
- `len` - 기록할 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeBoolean
**Parameters:**
- `v` - 기록되는 부울
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeByte
**Parameters:**
- `v` - 기록되는 바이트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeShort
**Parameters:**
- `v` - 기록되는 `short` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeChar
**Parameters:**
- `v` - 기록되는 `char` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeInt
**Parameters:**
- `v` - 기록되는 `int` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeLong
**Parameters:**
- `v` - 기록되는 `long` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeFloat
**Parameters:**
- `v` - 기록되는 `float` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### writeDouble
**Parameters:**
- `v` - 기록되는 `double` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### writeChars
**Parameters:**
- `s` - 기록되는 문자열 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeUTF
**Parameters:**
- `s` - 기록되는 문자열 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 요약
- `void write (byte[] b)` — 배열 b 의 모든 바이트를 출력 스트림에 씁니다.
- `void write (byte[] b, int off, int len)` — 배열 b 의 len 바이트를 출력 스트림에 씁니다.
- `void write (int b)` — 인자 b 의 하위 8비트를 출력 스트림에 씁니다.
- `void writeBoolean (boolean v)` — boolean 값을 이 출력 스트림에 씁니다.
- `void writeByte (int v)` — 인자 v 의 하위 8비트를 출력 스트림에 씁니다.
- `void writeChar (int v)` — 2바이트로 이루어진 char 값을 출력 스트림에 씁니다.
- `void writeChars ( String s)` — s 문자열의 모든 문자를 순서대로 문자당 2바이트씩 출력 스트림에 씁니다.
- `void writeDouble (double v)` — 8바이트로 이루어진 double 값을 출력 스트림에 씁니다.
- `void writeFloat (float v)` — 4바이트로 이루어진 float 값을 출력 스트림에 씁니다.
- `void writeInt (int v)` — 4바이트로 이루어진 int 값을 출력 스트림에 씁니다.
- `void writeLong (long v)` — 4바이트로 이루어진 long 값을 출력 스트림에 씁니다.
- `void writeShort (int v)` — 인자 값을 나타내기 위해 2바이트를 출력 스트림에 씁니다.
- `void writeUTF ( String s)` — 2바이트의 길이 정보를 출력 스트림에 쓰고 그 다음에 s 문자열에 있는 모든 문자의 Java로 수정된 UTF 표현이 나옵니다.
## 메서드 상세
### write
```java
public void write(int b)
throws IOException
```
**Parameters:**
- `b` - 기록되는 바이트
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 데이터
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeBoolean
```java
public void writeBoolean(boolean v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 부울
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeByte
```java
public void writeByte(int v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 바이트 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeShort
```java
public void writeShort(int v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 `short` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeChar
```java
public void writeChar(int v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 `char` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeInt
```java
public void writeInt(int v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 `int` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeLong
```java
public void writeLong(long v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 `long` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeFloat
```java
public void writeFloat(float v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 `float` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### writeDouble
```java
public void writeDouble(double v)
throws IOException
```
**Parameters:**
- `v` - 기록되는 `double` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
### writeChars
```java
public void writeChars(String s)
throws IOException
```
**Parameters:**
- `s` - 기록되는 문자열 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeUTF
```java
public void writeUTF(String s)
throws IOException
```
**Parameters:**
- `s` - 기록되는 문자열 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class DataOutputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
|
+--java.io.DataOutputStream
```
## 설명
**All Implemented Interfaces:**
- `DataOutput`
**implements DataOutput:**
데이터 출력 스트림은 응용 프로그램이 이식 가능한 방법으로
프리미티브 Java 데이터 유형을 출력 스트림에 쓸 수 있도록 합니다.
그런 다음 응용 프로그램은 데이터 입력 스트림을 사용하여 다시 데이터를 읽어올 수 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``DataInputStream``
## 필드 요약
- `protected OutputStream out` — 출력 스트림
## 생성자 요약
- DataOutputStream ( OutputStream out) 새로운 데이터 출력 스트림을 만들어 지정된
기본 출력 스트림에 데이터를 씁니다.
## 메서드 요약
- `void close ()` — 이 출력 스트림을 닫고 스트림과 연결된 모든 시스템 자원을 해제합니다.
- `void flush ()` — 이 데이터 출력 스트림을 플러시합니다.
- `void write (byte[] b, int off, int len)` — off 오프셋에서 시작하여 지정된 바이트 배열의 len 바이트를 기본 출력 스트림에 씁니다.
- `void write (int b)` — 지정된 바이트(인자 b 의 하위 8비트)를 기본 출력 스트림에 씁니다.
- `void writeBoolean (boolean v)` — boolean 을 1바이트 값으로 기본 출력 스트림에 씁니다.
- `void writeByte (int v)` — byte 를 1바이트 값으로 기본 출력 스트림에 씁니다.
- `void writeChar (int v)` — char 를 2바이트 값으로 기본 출력 스트림에 상위 바이트부터 씁니다.
- `void writeChars ( String s)` — 문자열을 문자 시퀀스로 기본 출력 스트림에 씁니다.
- `void writeDouble (double v)` — Double 클래스의 doubleToLongBits 메소드를 사용하여 double 인자를 long 으로 변환한 다음, long 값을 8바이트로 기본 출력 스트림에 씁니다.
- `void writeFloat (float v)` — Float 클래스의 floatToIntBits 메소드를 사용하여 float 인자를 int 로 변환한 다음, int 값을 4바이트로 기본 출력 스트림에 씁니다.
- `void writeInt (int v)` — int 를 4바이트로 기본 출력 스트림에 상위 바이트부터 씁니다.
- `void writeLong (long v)` — long 을 8바이트로 기본 출력 스트림에 상위 바이트부터 씁니다.
- `void writeShort (int v)` — short 를 2바이트로 기본 출력 스트림에 상위 바이트부터 씁니다.
- `void writeUTF ( String str)` — 시스템 독립적인 방법으로 utf-8 인코딩을 사용하여 문자열을 기본 출력 스트림에 씁니다.
## 필드 상세
### out
```java
protected OutputStream out
```
- 출력 스트림
### DataOutputStream
```java
public DataOutputStream(OutputStream out)
```
- 새로운 데이터 출력 스트림을 만들어 지정된
기본 출력 스트림에 데이터를 씁니다.
**Parameters:**
- `out` - 기본 출력 스트림, 추후 사용을 위해
저장
### write
```java
public void write(int b)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 `byte`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeBoolean
```java
public final void writeBoolean(boolean v)
throws IOException
```
**Specified by:**
- `writeBoolean` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeByte
```java
public final void writeByte(int v)
throws IOException
```
**Specified by:**
- `writeByte` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `byte` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeShort
```java
public final void writeShort(int v)
throws IOException
```
**Specified by:**
- `writeShort` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `short`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeChar
```java
public final void writeChar(int v)
throws IOException
```
**Specified by:**
- `writeChar` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `char` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeInt
```java
public final void writeInt(int v)
throws IOException
```
**Specified by:**
- `writeInt` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `int`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeLong
```java
public final void writeLong(long v)
throws IOException
```
**Specified by:**
- `writeLong` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `long`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeFloat
```java
public final void writeFloat(float v)
throws IOException
```
**Specified by:**
- `writeFloat` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `float` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``Float.floatToIntBits(float)``
### writeDouble
```java
public final void writeDouble(double v)
throws IOException
```
**Specified by:**
- `writeDouble` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `double` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``Double.doubleToLongBits(double)``
### writeChars
```java
public final void writeChars(String s)
throws IOException
```
**Specified by:**
- `writeChars` in interface `DataOutput`
**Parameters:**
- `s` - 기록되는 `String` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``writeChar(int)``
### writeUTF
```java
public final void writeUTF(String str)
throws IOException
```
**Specified by:**
- `writeUTF` in interface `DataOutput`
**Parameters:**
- `str` - 기록되는 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 생성자 상세
### DataOutputStream
```java
public DataOutputStream(OutputStream out)
```
- 새로운 데이터 출력 스트림을 만들어 지정된
기본 출력 스트림에 데이터를 씁니다.
**Parameters:**
- `out` - 기본 출력 스트림, 추후 사용을 위해
저장
### write
```java
public void write(int b)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 `byte`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeBoolean
```java
public final void writeBoolean(boolean v)
throws IOException
```
**Specified by:**
- `writeBoolean` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeByte
```java
public final void writeByte(int v)
throws IOException
```
**Specified by:**
- `writeByte` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `byte` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeShort
```java
public final void writeShort(int v)
throws IOException
```
**Specified by:**
- `writeShort` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `short`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeChar
```java
public final void writeChar(int v)
throws IOException
```
**Specified by:**
- `writeChar` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `char` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeInt
```java
public final void writeInt(int v)
throws IOException
```
**Specified by:**
- `writeInt` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `int`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeLong
```java
public final void writeLong(long v)
throws IOException
```
**Specified by:**
- `writeLong` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `long`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeFloat
```java
public final void writeFloat(float v)
throws IOException
```
**Specified by:**
- `writeFloat` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `float` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``Float.floatToIntBits(float)``
### writeDouble
```java
public final void writeDouble(double v)
throws IOException
```
**Specified by:**
- `writeDouble` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `double` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``Double.doubleToLongBits(double)``
### writeChars
```java
public final void writeChars(String s)
throws IOException
```
**Specified by:**
- `writeChars` in interface `DataOutput`
**Parameters:**
- `s` - 기록되는 `String` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``writeChar(int)``
### writeUTF
```java
public final void writeUTF(String str)
throws IOException
```
**Specified by:**
- `writeUTF` in interface `DataOutput`
**Parameters:**
- `str` - 기록되는 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### write
```java
public void write(int b)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 `byte`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeBoolean
```java
public final void writeBoolean(boolean v)
throws IOException
```
**Specified by:**
- `writeBoolean` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `boolean` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeByte
```java
public final void writeByte(int v)
throws IOException
```
**Specified by:**
- `writeByte` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `byte` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeShort
```java
public final void writeShort(int v)
throws IOException
```
**Specified by:**
- `writeShort` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `short`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeChar
```java
public final void writeChar(int v)
throws IOException
```
**Specified by:**
- `writeChar` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `char` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeInt
```java
public final void writeInt(int v)
throws IOException
```
**Specified by:**
- `writeInt` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `int`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeLong
```java
public final void writeLong(long v)
throws IOException
```
**Specified by:**
- `writeLong` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `long`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### writeFloat
```java
public final void writeFloat(float v)
throws IOException
```
**Specified by:**
- `writeFloat` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `float` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``Float.floatToIntBits(float)``
### writeDouble
```java
public final void writeDouble(double v)
throws IOException
```
**Specified by:**
- `writeDouble` in interface `DataOutput`
**Parameters:**
- `v` - 기록되는 `double` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``Double.doubleToLongBits(double)``
### writeChars
```java
public final void writeChars(String s)
throws IOException
```
**Specified by:**
- `writeChars` in interface `DataOutput`
**Parameters:**
- `s` - 기록되는 `String` 값
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``writeChar(int)``
### writeUTF
```java
public final void writeUTF(String str)
throws IOException
```
**Specified by:**
- `writeUTF` in interface `DataOutput`
**Parameters:**
- `str` - 기록되는 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class EOFException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.EOFException
```
## 설명
**extends IOException:**
입력 중에 예기치 않게 파일 또는
스트림의 끝에 도달하였음을 나타냅니다.
이 예외는 주로 데이터 입력 스트림에서 사용됩니다.
일반적으로 데이터 입력 스트림은 특정 형식의 이진 파일을 예상하며
스트림의 끝에 도달하는 경우는 거의 없습니다.
다른 입력 스트림은 대부분 스트림의 끝에서 특수 값을 반환합니다.
파일의 끝에 도달할 때 예외를 발생시키지 않고
고유 값(예: `-1`)을
반환하는 입력 작업도 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``DataInputStream``,
``IOException``
## 생성자 요약
- EOFException () null 을 오류 세부 정보 메시지로 사용하여 EOFException 을 구성합니다.
- EOFException ( String s) 지정한 세부 정보 메시지를 사용하여 EOFException 을 구성합니다.
## 생성자 상세
### EOFException
```java
public EOFException()
```
- `null`을 오류 세부 정보 메시지로 사용하여
`EOFException`을 구성합니다.
### EOFException
```java
public EOFException(String s)
```
- 지정한 세부 정보 메시지를 사용하여
`EOFException`을 구성합니다.
문자열 `s`는 나중에 `java.lang.Throwable` 클래스의
`Throwable.getMessage()` 메소드로 검색할 수 있습니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class IOException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
```
## 설명
**Direct Known Subclasses:**
- `ConnectionNotFoundException`, `EOFException`, `InterruptedIOException`, `UnsupportedEncodingException`, `UTFDataFormatException`
**extends Exception:**
일종의 I/O 예외가 발생했음을 나타냅니다.
이 클래스는 실패 또는 인터럽트된 I/O 작업에서
생성되는 일반 예외 클래스입니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``InputStream``,
``OutputStream``
## 생성자 요약
- IOException () null 을 오류 세부 정보 메시지로 사용하여 IOException 을 구성합니다.
- IOException ( String s) 지정한 세부 정보 메시지를 사용하여 IOException 을 구성합니다.
## 생성자 상세
### IOException
```java
public IOException()
```
- `null`을 오류 세부 정보 메시지로 사용하여
`IOException`을 구성합니다.
### IOException
```java
public IOException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `IOException`을 구성합니다.
오류 메시지 문자열 `s`는 나중에 `java.lang.Throwable` 클래스의
`Throwable.getMessage()` 메소드로
검색할 수 있습니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class InputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.InputStream
```
## 설명
**Direct Known Subclasses:**
- `ByteArrayInputStream`, `DataInputStream`
**extends Object:**
이 추상 클래스는 바이트 입력 스트림을 나타내는
모든 클래스의 수퍼 클래스입니다.
`InputStream`의 서브 클래스를 정의할 필요가 있는
응용 프로그램은 항상 다음 입력 바이트를 반환하는 메소드를 제공해야 합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``ByteArrayInputStream``,
``DataInputStream``,
``read()``,
``OutputStream``
## 생성자 요약
- InputStream ()
## 메서드 요약
- `int available ()` — 이 입력 스트림에 대한 메소드의 다음 호출자가 차단되지 않고 이 입력 스트림에서 읽거나 건너뛸 수 있는 바이트 수를 반환합니다.
- `void close ()` — 이 입력 스트림을 닫고 스트림과 연결된 시스템 자원을 해제합니다.
- `void mark (int readlimit)` — 이 입력 스트림에서의 현재 위치를 표시합니다.
- `boolean markSupported ()` — 이 입력 스트림이 mark 및 reset 메소드를 지원하는지 테스트합니다.
- `abstract int read ()` — 이 입력 스트림에서 다음 바이트의 데이터를 읽습니다.
- `int read (byte[] b)` — 입력 스트림에서 일부 바이트를 읽어 버퍼 배열 b 에 저장합니다.
- `int read (byte[] b, int off, int len)` — 입력 스트림에서 최대 len 바이트의 데이터를 바이트 배열로 읽어 옵니다.
- `void reset ()` — 이 입력 스트림에서 mark 메소드를 마지막으로 호출했을 때의 위치에 다시 스트림을 놓습니다.
- `long skip (long n)` — 이 입력 스트림에서 n 바이트의 데이터를 건너뛰어 무시합니다.
## 생성자 상세
### InputStream
```java
public InputStream()
```
### read
```java
public abstract int read()
throws IOException
```
**Returns:**
- 다음 바이트의 데이터 또는
스트림의 끝에 도달한 경우 `-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public int read(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``read(byte[], int, int)``
### read
```java
public int read(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``read()``
### skip
```java
public long skip(long n)
throws IOException
```
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### available
```java
public int available()
throws IOException
```
**Returns:**
- 차단되지 않고 입력 스트림에서
읽을 수 있는 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### mark
```java
public void mark(int readlimit)
```
**Parameters:**
- `readlimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**See Also:**
- ``reset()``
### reset
```java
public void reset()
throws IOException
```
**Throws:**
- `IOException` - 이 스트림이 표시되어 있지 않거나
표시가 무효화된 경우
**See Also:**
- ``mark(int)``,
``IOException``
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 이 true 유형이 mark 메소드와 reset 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**See Also:**
- ``mark(int)``,
``reset()``
## 메서드 상세
### read
```java
public abstract int read()
throws IOException
```
**Returns:**
- 다음 바이트의 데이터 또는
스트림의 끝에 도달한 경우 `-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public int read(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 데이터를 읽어들이는 버퍼
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``read(byte[], int, int)``
### read
```java
public int read(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽는 최대 바이트 수
**Returns:**
- 버퍼로 읽어들인 총 바이트 수 또는
스트림의 끝에 도달하여 더 이상 데이터가 없는 경우
`-1`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``read()``
### skip
```java
public long skip(long n)
throws IOException
```
**Parameters:**
- `n` - 건너뛸 바이트 수
**Returns:**
- 건너뛴 실제 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### available
```java
public int available()
throws IOException
```
**Returns:**
- 차단되지 않고 입력 스트림에서
읽을 수 있는 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### mark
```java
public void mark(int readlimit)
```
**Parameters:**
- `readlimit` - 표시 위치가 무효화될 때까지 읽을 수 있는
최대 바이트 수 한계
**See Also:**
- ``reset()``
### reset
```java
public void reset()
throws IOException
```
**Throws:**
- `IOException` - 이 스트림이 표시되어 있지 않거나
표시가 무효화된 경우
**See Also:**
- ``mark(int)``,
``IOException``
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 이 true 유형이 mark 메소드와 reset 메소드를 지원하면
`true`, 지원하지 않으면 `false`
**See Also:**
- ``mark(int)``,
``reset()``
---
title: "Class InputStreamReader"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Reader
|
+--java.io.InputStreamReader
```
## 설명
**extends Reader:**
InputStreamReader가 바이트 스트림에서 문자 스트림으로의
브릿지 역할을 하는 경우 바이트를 읽어 문자로 변환합니다.
사용할 인코딩을 이름으로 지정하거나
플랫폼의 기본 인코딩을 사용할 수 있습니다.
InputStreamReader의 read() 메소드 중 하나를 호출할 때마다
기본 바이트 입력 스트림에서 1바이트 이상이 읽혀질 수 있습니다.
바이트에서 문자로의 효율적 변환을 위해 기본 스트림에서
현재 읽기 작업에 필요한 것보다
많은 바이트를 미리 읽을 수도 있습니다.
**Since:**
- CLDC 1.0
**See Also:**
- ``Reader``,
``UnsupportedEncodingException``
## 필드 요약
## 생성자 요약
- InputStreamReader ( InputStream is) 기본 문자 인코딩을 사용하는 InputStreamReader를 만듭니다.
- InputStreamReader ( InputStream is, String enc) 명명된 문자 인코딩을 사용하는 InputStreamReader를 만듭니다.
## 메서드 요약
- `void close ()` — 스트림을 닫습니다.
- `void mark (int readAheadLimit)` — 스트림에서의 현재 위치를 표시합니다.
- `boolean markSupported ()` — 이 스트림이 mark() 작업을 지원하는지 알려줍니다.
- `int read ()` — 단일 문자를 읽습니다.
- `int read (char[] cbuf, int off, int len)` — 문자를 배열의 일부로 읽어 옵니다.
- `boolean ready ()` — 이 스트림을 읽을 준비가 되었는지 알려줍니다.
- `void reset ()` — 스트림을 재설정합니다.
- `long skip (long n)` — 문자를 건너뜁니다.
## 생성자 상세
### InputStreamReader
```java
public InputStreamReader(InputStream is)
```
- 기본 문자 인코딩을 사용하는 InputStreamReader를 만듭니다.
**Parameters:**
- `is` - InputStream
### InputStreamReader
```java
public InputStreamReader(InputStream is,
String enc)
throws UnsupportedEncodingException
```
- 명명된 문자 인코딩을 사용하는 InputStreamReader를 만듭니다.
**Parameters:**
- `enc` - 지원되는 문자 인코딩 이름
**Throws:**
- `UnsupportedEncodingException` - 명명된 인코딩이 지원되지 않는 경우
### read
```java
public int read()
throws IOException
```
**Overrides:**
- `read` in class `Reader`
**Returns:**
- 읽은 문자 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public int read(char[] cbuf,
int off,
int len)
throws IOException
```
**Specified by:**
- `read` in class `Reader`
**Parameters:**
- `len` - 읽을 최대 문자 수
**Returns:**
- 읽은 문자 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skip
```java
public long skip(long n)
throws IOException
```
**Overrides:**
- `skip` in class `Reader`
**Parameters:**
- `n` - 건너뛸 문자 수
**Returns:**
- 실제로 건너뛴 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### ready
```java
public boolean ready()
throws IOException
```
**Overrides:**
- `ready` in class `Reader`
**Returns:**
- 다음 read()가 입력을 위해 차단되지 않으면 true,
차단되면 false입니다. false를 반환해도
다음 읽기가 반드시 차단되는 것은 아닙니다.
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `Reader`
**Returns:**
- 이 스트림만 표시 작업을 지원하면 true입니다.
### mark
```java
public void mark(int readAheadLimit)
throws IOException
```
**Overrides:**
- `mark` in class `Reader`
**Parameters:**
- `readAheadLimit` - 표시가 유지되는 동안 읽을 수 있는
문자 수 제한.
이렇게 많은 문자를 읽은 후 스트림을 재설정하려고
하면 실패할 수도 있습니다.
**Throws:**
- `IOException` - 스트림이 mark()를 지원하지 않거나
다른 I/O 오류가 발생한 경우
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `Reader`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Specified by:**
- `close` in class `Reader`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### read
```java
public int read()
throws IOException
```
**Overrides:**
- `read` in class `Reader`
**Returns:**
- 읽은 문자 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public int read(char[] cbuf,
int off,
int len)
throws IOException
```
**Specified by:**
- `read` in class `Reader`
**Parameters:**
- `len` - 읽을 최대 문자 수
**Returns:**
- 읽은 문자 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skip
```java
public long skip(long n)
throws IOException
```
**Overrides:**
- `skip` in class `Reader`
**Parameters:**
- `n` - 건너뛸 문자 수
**Returns:**
- 실제로 건너뛴 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### ready
```java
public boolean ready()
throws IOException
```
**Overrides:**
- `ready` in class `Reader`
**Returns:**
- 다음 read()가 입력을 위해 차단되지 않으면 true,
차단되면 false입니다. false를 반환해도
다음 읽기가 반드시 차단되는 것은 아닙니다.
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `Reader`
**Returns:**
- 이 스트림만 표시 작업을 지원하면 true입니다.
### mark
```java
public void mark(int readAheadLimit)
throws IOException
```
**Overrides:**
- `mark` in class `Reader`
**Parameters:**
- `readAheadLimit` - 표시가 유지되는 동안 읽을 수 있는
문자 수 제한.
이렇게 많은 문자를 읽은 후 스트림을 재설정하려고
하면 실패할 수도 있습니다.
**Throws:**
- `IOException` - 스트림이 mark()를 지원하지 않거나
다른 I/O 오류가 발생한 경우
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `Reader`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Specified by:**
- `close` in class `Reader`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class InterruptedIOException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.InterruptedIOException
```
## 설명
**extends IOException:**
I/O 작업이 중단되었음을 나타냅니다.
`InterruptedIOException`이 발생하여
입력 또는 출력 전송을 수행하는 스레드가 종료되어
전송 작업이 종료되었음을 나타냅니다. ``bytesTransferred`` 필드는
작업이 중단되기 전에 성공적으로
전송된 바이트 수를 표시합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``InputStream``,
``OutputStream``
## 필드 요약
- `int bytesTransferred` — 작업이 중단되기 전에 I/O 작업의 일부로 전송된 바이트 수를 보고합니다.
## 생성자 요약
- InterruptedIOException () null 을 오류 세부 정보 메시지로 사용하여 InterruptedIOException 을 구성합니다.
- InterruptedIOException ( String s) 지정한 세부 정보 메시지를 사용하여 InterruptedIOException 을 구성합니다.
## 필드 상세
### bytesTransferred
```java
public int bytesTransferred
```
- 작업이 중단되기 전에 I/O 작업의 일부로
전송된 바이트 수를 보고합니다.
### InterruptedIOException
```java
public InterruptedIOException()
```
- `null`을 오류 세부 정보 메시지로 사용하여
`InterruptedIOException`을 구성합니다.
### InterruptedIOException
```java
public InterruptedIOException(String s)
```
- 지정한 세부 정보 메시지를 사용하여
`InterruptedIOException`을 구성합니다.
문자열 `s`는 나중에 `java.lang.Throwable` 클래스의
`Throwable.getMessage()`
메소드로 검색할 수 있습니다.
**Parameters:**
- `s` - 세부 정보 메시지
## 생성자 상세
### InterruptedIOException
```java
public InterruptedIOException()
```
- `null`을 오류 세부 정보 메시지로 사용하여
`InterruptedIOException`을 구성합니다.
### InterruptedIOException
```java
public InterruptedIOException(String s)
```
- 지정한 세부 정보 메시지를 사용하여
`InterruptedIOException`을 구성합니다.
문자열 `s`는 나중에 `java.lang.Throwable` 클래스의
`Throwable.getMessage()`
메소드로 검색할 수 있습니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class OutputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
```
## 설명
**Direct Known Subclasses:**
- `ByteArrayOutputStream`, `DataOutputStream`, `PrintStream`
**extends Object:**
이 추상 클래스는 바이트 출력 스트림을 나타내는
모든 클래스의 수퍼 클래스입니다.
출력 스트림은 출력 바이트를 받아서 싱크로 보냅니다.
`OutputStream`의 서브 클래스를 정의할 필요가 있는
응용 프로그램은 항상 최소 1바이트 이상의 출력을 쓰는
메소드를 제공해야 합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``ByteArrayOutputStream``,
``DataOutputStream``,
``InputStream``,
``write(int)``
## 생성자 요약
- OutputStream ()
## 메서드 요약
- `void close ()` — 이 출력 스트림을 닫고 스트림과 연결된 시스템 자원을 해제합니다.
- `void flush ()` — 이 출력 스트림을 플러시하고 버퍼된 출력 바이트를 모두 씁니다.
- `void write (byte[] b)` — 지정된 바이트 배열의 b.length 바이트를 이 출력 스트림에 씁니다.
- `void write (byte[] b, int off, int len)` — off 오프셋에서 시작하여 지정된 바이트 배열의 len 바이트를 이 출력 스트림에 씁니다.
- `abstract void write (int b)` — 지정된 바이트를 이 출력 스트림에 씁니다.
## 생성자 상세
### OutputStream
```java
public OutputStream()
```
### write
```java
public abstract void write(int b)
throws IOException
```
**Parameters:**
- `b` - `byte`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
특히 출력 스트림이 닫힌 경우 `IOException`이
발생합니다.
### write
```java
public void write(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 데이터
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``write(byte[], int, int)``
### write
```java
public void write(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
특히 출력 스트림이 닫힌 경우
`IOException`이 발생합니다.
### flush
```java
public void flush()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### write
```java
public abstract void write(int b)
throws IOException
```
**Parameters:**
- `b` - `byte`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
특히 출력 스트림이 닫힌 경우 `IOException`이
발생합니다.
### write
```java
public void write(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 데이터
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
**See Also:**
- ``write(byte[], int, int)``
### write
```java
public void write(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 바이트 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
특히 출력 스트림이 닫힌 경우
`IOException`이 발생합니다.
### flush
```java
public void flush()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class OutputStreamWriter"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Writer
|
+--java.io.OutputStreamWriter
```
## 설명
**extends Writer:**
OutputStreamWriter가 문자 스트림에서 바이트 스트림으로의
브릿지 역할을 하는 경우 기록된 문자를 바이트로 변환합니다.
사용할 인코딩을 이름으로 지정하거나
플랫폼의 기본 인코딩을 사용할 수 있습니다.
write() 메소드를 호출할 때마다 지정된 문자에 대해
인코딩 변환기가 호출됩니다.
결과로 나온 바이트는 버퍼에 축적된 후 기본 출력 스트림에 기록됩니다.
이 버퍼의 크기를 지정할 수도 있지만 기본적으로 버퍼는 대부분의 용도로
사용할 수 있을 만큼 크게 할당되어 있습니다.
write() 메소드로 전달된 문자는 버퍼되지 않습니다.
**Since:**
- CLDC 1.0
**See Also:**
- ``Writer``,
``UnsupportedEncodingException``
## 필드 요약
## 생성자 요약
- OutputStreamWriter ( OutputStream os) 기본 문자 인코딩을 사용하는 OutputStreamWriter를 만듭니다.
- OutputStreamWriter ( OutputStream os, String enc) 명명된 문자 인코딩을 사용하는 OutputStreamWriter를 만듭니다.
## 메서드 요약
- `void close ()` — 스트림을 닫습니다.
- `void flush ()` — 스트림을 플러시합니다.
- `void write (char[] cbuf, int off, int len)` — 문자 배열의 일부를 씁니다.
- `void write (int c)` — 단일 문자를 씁니다.
- `void write ( String str, int off, int len)` — 문자열의 일부를 씁니다.
## 생성자 상세
### OutputStreamWriter
```java
public OutputStreamWriter(OutputStream os)
```
- 기본 문자 인코딩을 사용하는 OutputStreamWriter를 만듭니다.
**Parameters:**
- `os` - OutputStream
### OutputStreamWriter
```java
public OutputStreamWriter(OutputStream os,
String enc)
throws UnsupportedEncodingException
```
- 명명된 문자 인코딩을 사용하는 OutputStreamWriter를 만듭니다.
**Parameters:**
- `enc` - 지원되는 문자 인코딩 이름
**Throws:**
- `UnsupportedEncodingException` - 명명된 인코딩이 지원되지 않는 경우
### write
```java
public void write(int c)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `c` - 기록되는 문자를 지정하는 int
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(char[] cbuf,
int off,
int len)
throws IOException
```
**Specified by:**
- `write` in class `Writer`
**Parameters:**
- `len` - 기록되는 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str,
int off,
int len)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 기록되는 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public void flush()
throws IOException
```
**Specified by:**
- `flush` in class `Writer`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Specified by:**
- `close` in class `Writer`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### write
```java
public void write(int c)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `c` - 기록되는 문자를 지정하는 int
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(char[] cbuf,
int off,
int len)
throws IOException
```
**Specified by:**
- `write` in class `Writer`
**Parameters:**
- `len` - 기록되는 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str,
int off,
int len)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 기록되는 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public void flush()
throws IOException
```
**Specified by:**
- `flush` in class `Writer`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public void close()
throws IOException
```
**Specified by:**
- `close` in class `Writer`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class PrintStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
|
+--java.io.PrintStream
```
## 설명
**extends OutputStream:**
`PrintStream`은 다양한 데이터 값 표현의
편리한 인쇄 기능 등을 다른 출력 스트림에 추가합니다.
다른 두 가지 기능도 제공합니다.
다른 출력 스트림과 달리 `PrintStream`은
`IOException`을 발생시키지 않습니다.
예외적인 상황이 발생하면 `checkError` 메소드를 통해 테스트할 수 있는 내부 플래그만 설정됩니다.
`PrintStream`에서 인쇄하는 모든 문자는
플랫폼의 기본 문자 인코딩을 사용하여 바이트로 변환됩니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- PrintStream ( OutputStream out) 새로운 인쇄 스트림을 만듭니다.
## 메서드 요약
- `boolean checkError ()` — 스트림을 플러시하고 오류 상태를 확인합니다.
- `void close ()` — 스트림을 닫습니다.
- `void flush ()` — 스트림을 플러시합니다.
- `void print (boolean b)` — 부울 값을 인쇄합니다.
- `void print (char c)` — 문자를 인쇄합니다.
- `void print (char[] s)` — 문자 배열을 인쇄합니다.
- `void print (double d)` — 배정도 부동 소수점 숫자를 인쇄합니다.
- `void print (float f)` — 부동 소수점 숫자를 인쇄합니다.
- `void print (int i)` — 정수를 인쇄합니다.
- `void print (long l)` — long 정수를 인쇄합니다.
- `void print ( Object obj)` — 객체를 인쇄합니다.
- `void print ( String s)` — 문자열을 인쇄합니다.
- `void println ()` — 행 구분자 문자열을 기록하여 현재 행을 종료합니다.
- `void println (boolean x)` — 부울을 인쇄하고 행을 종료합니다.
- `void println (char x)` — 문자를 인쇄하고 행을 종료합니다.
- `void println (char[] x)` — 문자 배열을 인쇄하고 행을 종료합니다.
- `void println (double x)` — double을 인쇄하고 행을 종료합니다.
- `void println (float x)` — float를 인쇄하고 행을 종료합니다.
- `void println (int x)` — 정수를 인쇄하고 행을 종료합니다.
- `void println (long x)` — long을 인쇄하고 행을 종료합니다.
- `void println ( Object x)` — 객체를 인쇄하고 행을 종료합니다.
- `void println ( String x)` — 문자열을 인쇄하고 행을 종료합니다.
- `protected void setError ()` — 스트림의 오류 상태를 true 로 설정합니다.
- `void write (byte[] buf, int off, int len)` — off 오프셋에서 시작하여 지정된 바이트 배열의 len 바이트를 이 스트림에 씁니다.
- `void write (int b)` — 지정된 바이트를 이 스트림에 씁니다.
## 생성자 상세
### PrintStream
```java
public PrintStream(OutputStream out)
```
- 새로운 인쇄 스트림을 만듭니다. 이 스트림은 자동으로 플러시되지 않습니다.
**Parameters:**
- `out` - 값과 객체가 인쇄되는
출력 스트림
### flush
```java
public void flush()
```
**Overrides:**
- `flush` in class `OutputStream`
**See Also:**
- ``OutputStream.flush()``
### close
```java
public void close()
```
**Overrides:**
- `close` in class `OutputStream`
**See Also:**
- ``OutputStream.close()``
### checkError
```java
public boolean checkError()
```
**Returns:**
- 이 스트림에서
`IOException`이 발생하거나
`setError` 메소드가 호출된 경우에만 true
### setError
```java
protected void setError()
```
**Since:**
- JDK1.1
### write
```java
public void write(int b)
```
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 바이트
**See Also:**
- ``print(char)``,
``println(char)``
### write
```java
public void write(byte[] buf,
int off,
int len)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
### print
```java
public void print(boolean b)
```
**Parameters:**
- `b` - 인쇄되는 `boolean`
### print
```java
public void print(char c)
```
**Parameters:**
- `c` - 인쇄되는 `char`
### print
```java
public void print(int i)
```
**Parameters:**
- `i` - 인쇄되는 `int`
**See Also:**
- ``Integer.toString(int)``
### print
```java
public void print(long l)
```
**Parameters:**
- `l` - 인쇄되는 `long`
**See Also:**
- ``Long.toString(long)``
### print
```java
public void print(float f)
```
**Parameters:**
- `f` - 인쇄되는 `float`
**Since:**
- CLDC 1.1
**See Also:**
- ``Float.toString(float)``
### print
```java
public void print(double d)
```
**Parameters:**
- `d` - 인쇄되는 `double`
**Since:**
- CLDC 1.1
**See Also:**
- ``Double.toString(double)``
### print
```java
public void print(char[] s)
```
**Parameters:**
- `s` - 인쇄되는 문자 배열
**Throws:**
- `NullPointerException` - `s`가 `null`인 경우
### print
```java
public void print(String s)
```
**Parameters:**
- `s` - 인쇄되는 `String`
### print
```java
public void print(Object obj)
```
**Parameters:**
- `obj` - 인쇄되는 `Object`
**See Also:**
- ``Object.toString()``
### println
```java
public void println()
```
행 구분자 문자열을 기록하여 현재 행을 종료합니다.
행 구분자 문자열은 시스템 등록 정보 line.separator 로
정의되며 반드시 단일 개행 문자( '\n' )를
사용할 필요는 없습니다.
### println
```java
public void println(boolean x)
```
**Parameters:**
- `x` - 인쇄되는 `boolean`
### println
```java
public void println(char x)
```
**Parameters:**
- `x` - 인쇄되는 `char`
### println
```java
public void println(int x)
```
**Parameters:**
- `x` - 인쇄되는 `int`
### println
```java
public void println(long x)
```
**Parameters:**
- `x` - 인쇄되는 `long`
### println
```java
public void println(float x)
```
**Parameters:**
- `x` - 인쇄되는 `float`
**Since:**
- CLDC 1.1
### println
```java
public void println(double x)
```
**Parameters:**
- `x` - 인쇄되는 `double`
**Since:**
- CLDC 1.1
### println
```java
public void println(char[] x)
```
**Parameters:**
- `x` - 인쇄할 문자 배열
### println
```java
public void println(String x)
```
**Parameters:**
- `x` - 인쇄되는 `String`
### println
```java
public void println(Object x)
```
**Parameters:**
- `x` - 인쇄되는 `Object`
## 메서드 상세
### flush
```java
public void flush()
```
**Overrides:**
- `flush` in class `OutputStream`
**See Also:**
- ``OutputStream.flush()``
### close
```java
public void close()
```
**Overrides:**
- `close` in class `OutputStream`
**See Also:**
- ``OutputStream.close()``
### checkError
```java
public boolean checkError()
```
**Returns:**
- 이 스트림에서
`IOException`이 발생하거나
`setError` 메소드가 호출된 경우에만 true
### setError
```java
protected void setError()
```
**Since:**
- JDK1.1
### write
```java
public void write(int b)
```
**Specified by:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 기록되는 바이트
**See Also:**
- ``print(char)``,
``println(char)``
### write
```java
public void write(byte[] buf,
int off,
int len)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 기록할 바이트 수
### print
```java
public void print(boolean b)
```
**Parameters:**
- `b` - 인쇄되는 `boolean`
### print
```java
public void print(char c)
```
**Parameters:**
- `c` - 인쇄되는 `char`
### print
```java
public void print(int i)
```
**Parameters:**
- `i` - 인쇄되는 `int`
**See Also:**
- ``Integer.toString(int)``
### print
```java
public void print(long l)
```
**Parameters:**
- `l` - 인쇄되는 `long`
**See Also:**
- ``Long.toString(long)``
### print
```java
public void print(float f)
```
**Parameters:**
- `f` - 인쇄되는 `float`
**Since:**
- CLDC 1.1
**See Also:**
- ``Float.toString(float)``
### print
```java
public void print(double d)
```
**Parameters:**
- `d` - 인쇄되는 `double`
**Since:**
- CLDC 1.1
**See Also:**
- ``Double.toString(double)``
### print
```java
public void print(char[] s)
```
**Parameters:**
- `s` - 인쇄되는 문자 배열
**Throws:**
- `NullPointerException` - `s`가 `null`인 경우
### print
```java
public void print(String s)
```
**Parameters:**
- `s` - 인쇄되는 `String`
### print
```java
public void print(Object obj)
```
**Parameters:**
- `obj` - 인쇄되는 `Object`
**See Also:**
- ``Object.toString()``
### println
```java
public void println()
```
행 구분자 문자열을 기록하여 현재 행을 종료합니다.
행 구분자 문자열은 시스템 등록 정보 line.separator 로
정의되며 반드시 단일 개행 문자( '\n' )를
사용할 필요는 없습니다.
### println
```java
public void println(boolean x)
```
**Parameters:**
- `x` - 인쇄되는 `boolean`
### println
```java
public void println(char x)
```
**Parameters:**
- `x` - 인쇄되는 `char`
### println
```java
public void println(int x)
```
**Parameters:**
- `x` - 인쇄되는 `int`
### println
```java
public void println(long x)
```
**Parameters:**
- `x` - 인쇄되는 `long`
### println
```java
public void println(float x)
```
**Parameters:**
- `x` - 인쇄되는 `float`
**Since:**
- CLDC 1.1
### println
```java
public void println(double x)
```
**Parameters:**
- `x` - 인쇄되는 `double`
**Since:**
- CLDC 1.1
### println
```java
public void println(char[] x)
```
**Parameters:**
- `x` - 인쇄할 문자 배열
### println
```java
public void println(String x)
```
**Parameters:**
- `x` - 인쇄되는 `String`
### println
```java
public void println(Object x)
```
**Parameters:**
- `x` - 인쇄되는 `Object`
---
title: "Class Reader"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Reader
```
## 설명
**Direct Known Subclasses:**
- `InputStreamReader`
**extends Object:**
문자 스트림을 읽기 위한 추상 클래스.
서브 클래스가 구현해야 하는 유일한 메소드는 read(char[], int, int)와 close()입니다.
그러나 대부분의 서브 클래스는 효율성 증가나 추가 기능 제공, 또는
둘 모두를 위해 여기에 정의된 일부 메소드를 무시합니다.
**Since:**
- JDK1.1, CLDC 1.0
**See Also:**
- ``InputStreamReader``,
``Writer``
## 필드 요약
- `protected Object lock` — 이 스트림에 대한 작업을 동기화하는 데 사용된 객체.
## 생성자 요약
- `protected Reader ()` — 임계 지역이 판독기 자체에서 동기화되는 새로운 문자 스트림 판독기를 만듭니다.
- `protected Reader ( Object lock)` — 임계 지역이 지정된 객체에서 동기화되는 새로운 문자 스트림 판독기를 만듭니다.
## 메서드 요약
- `abstract void close ()` — 스트림을 닫습니다.
- `void mark (int readAheadLimit)` — 스트림에서의 현재 위치를 표시합니다.
- `boolean markSupported ()` — 이 스트림이 mark() 작업을 지원하는지 알려줍니다.
- `int read ()` — 단일 문자를 읽습니다.
- `int read (char[] cbuf)` — 문자를 배열로 읽어 옵니다.
- `abstract int read (char[] cbuf, int off, int len)` — 문자를 배열의 일부로 읽어 옵니다.
- `boolean ready ()` — 이 스트림을 읽을 준비가 되었는지 알려줍니다.
- `void reset ()` — 스트림을 재설정합니다.
- `long skip (long n)` — 문자를 건너뜁니다.
## 필드 상세
### lock
```java
protected Object lock
```
- 이 스트림에 대한 작업을 동기화하는 데
사용된 객체. 효율성 증가를 위해 문자 스트림 객체는 자신 이외의 객체를
사용하여 임계 영역을 보호할 수도 있습니다.
따라서 서브 클래스는 이 필드에 있는 `this` 이외의
객체나 동기화된 메소드를 사용해야 합니다.
### Reader
```java
protected Reader()
```
- 임계 지역이 판독기 자체에서 동기화되는
새로운 문자 스트림 판독기를 만듭니다.
### Reader
```java
protected Reader(Object lock)
```
- 임계 지역이 지정된 객체에서 동기화되는
새로운 문자 스트림 판독기를 만듭니다.
**Parameters:**
- `lock` - 동기화되는 객체
### read
```java
public int read()
throws IOException
```
**Returns:**
- 0에서 65535(`0x00-0xffff`)
사이의 정수로 읽은 문자 또는 스트림 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public int read(char[] cbuf)
throws IOException
```
**Parameters:**
- `cbuf` - 대상 버퍼
**Returns:**
- 읽은 바이트 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public abstract int read(char[] cbuf,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽을 최대 문자 수
**Returns:**
- 읽은 문자 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skip
```java
public long skip(long n)
throws IOException
```
**Parameters:**
- `n` - 건너뛸 문자 수
**Returns:**
- 실제로 건너뛴 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### ready
```java
public boolean ready()
throws IOException
```
**Returns:**
- 다음 read()가 입력을 위해 차단되지 않으면 true,
차단되면 false입니다. false를 반환해도
다음 읽기가 반드시 차단되는 것은 아닙니다.
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 이 스트림만 표시 작업을 지원하면 true입니다.
### mark
```java
public void mark(int readAheadLimit)
throws IOException
```
**Parameters:**
- `readAheadLimit` - 표시가 유지되는 동안 읽을 수 있는 문자 수 제한
이렇게 많은 문자를 읽은 후 스트림을
재설정하려고 하면
실패할 수도 있습니다.
**Throws:**
- `IOException` - 스트림이 mark()를 지원하지 않거나
다른 I/O 오류가 발생한 경우
### reset
```java
public void reset()
throws IOException
```
**Throws:**
- `IOException` - 스트림이 표시되어 있지 않거나
표시가 무효화된 경우, 또는
스트림이 reset()을
지원하지 않거나 다른 I/O 오류가 발생한 경우
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 생성자 상세
### Reader
```java
protected Reader()
```
- 임계 지역이 판독기 자체에서 동기화되는
새로운 문자 스트림 판독기를 만듭니다.
### Reader
```java
protected Reader(Object lock)
```
- 임계 지역이 지정된 객체에서 동기화되는
새로운 문자 스트림 판독기를 만듭니다.
**Parameters:**
- `lock` - 동기화되는 객체
### read
```java
public int read()
throws IOException
```
**Returns:**
- 0에서 65535(`0x00-0xffff`)
사이의 정수로 읽은 문자 또는 스트림 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public int read(char[] cbuf)
throws IOException
```
**Parameters:**
- `cbuf` - 대상 버퍼
**Returns:**
- 읽은 바이트 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public abstract int read(char[] cbuf,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽을 최대 문자 수
**Returns:**
- 읽은 문자 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skip
```java
public long skip(long n)
throws IOException
```
**Parameters:**
- `n` - 건너뛸 문자 수
**Returns:**
- 실제로 건너뛴 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### ready
```java
public boolean ready()
throws IOException
```
**Returns:**
- 다음 read()가 입력을 위해 차단되지 않으면 true,
차단되면 false입니다. false를 반환해도
다음 읽기가 반드시 차단되는 것은 아닙니다.
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 이 스트림만 표시 작업을 지원하면 true입니다.
### mark
```java
public void mark(int readAheadLimit)
throws IOException
```
**Parameters:**
- `readAheadLimit` - 표시가 유지되는 동안 읽을 수 있는 문자 수 제한
이렇게 많은 문자를 읽은 후 스트림을
재설정하려고 하면
실패할 수도 있습니다.
**Throws:**
- `IOException` - 스트림이 mark()를 지원하지 않거나
다른 I/O 오류가 발생한 경우
### reset
```java
public void reset()
throws IOException
```
**Throws:**
- `IOException` - 스트림이 표시되어 있지 않거나
표시가 무효화된 경우, 또는
스트림이 reset()을
지원하지 않거나 다른 I/O 오류가 발생한 경우
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### read
```java
public int read()
throws IOException
```
**Returns:**
- 0에서 65535(`0x00-0xffff`)
사이의 정수로 읽은 문자 또는 스트림 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public int read(char[] cbuf)
throws IOException
```
**Parameters:**
- `cbuf` - 대상 버퍼
**Returns:**
- 읽은 바이트 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### read
```java
public abstract int read(char[] cbuf,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽을 최대 문자 수
**Returns:**
- 읽은 문자 수 또는 스트림의 끝에
도달한 경우 -1
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### skip
```java
public long skip(long n)
throws IOException
```
**Parameters:**
- `n` - 건너뛸 문자 수
**Returns:**
- 실제로 건너뛴 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### ready
```java
public boolean ready()
throws IOException
```
**Returns:**
- 다음 read()가 입력을 위해 차단되지 않으면 true,
차단되면 false입니다. false를 반환해도
다음 읽기가 반드시 차단되는 것은 아닙니다.
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 이 스트림만 표시 작업을 지원하면 true입니다.
### mark
```java
public void mark(int readAheadLimit)
throws IOException
```
**Parameters:**
- `readAheadLimit` - 표시가 유지되는 동안 읽을 수 있는 문자 수 제한
이렇게 많은 문자를 읽은 후 스트림을
재설정하려고 하면
실패할 수도 있습니다.
**Throws:**
- `IOException` - 스트림이 mark()를 지원하지 않거나
다른 I/O 오류가 발생한 경우
### reset
```java
public void reset()
throws IOException
```
**Throws:**
- `IOException` - 스트림이 표시되어 있지 않거나
표시가 무효화된 경우, 또는
스트림이 reset()을
지원하지 않거나 다른 I/O 오류가 발생한 경우
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class UTFDataFormatException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.UTFDataFormatException
```
## 설명
**extends IOException:**
데이터 입력 스트림이나 데이터 입력 스트림을 구현하는 클래스에서
형식이 잘못된 UTF-8 문자열을 읽었음을 나타냅니다.
UTF-8 문자열을 읽고 쓰는 형식에 대해서는 `writeUTF`
메소드를 참조하십시오.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``DataInput``,
``DataInputStream.readUTF(java.io.DataInput)``,
``IOException``
## 생성자 요약
- UTFDataFormatException () null 을 오류 세부 정보 메시지로 사용하여 UTFDataFormatException 을 구성합니다.
- UTFDataFormatException ( String s) 지정한 세부 정보 메시지를 사용하여 UTFDataFormatException 을 구성합니다.
## 생성자 상세
### UTFDataFormatException
```java
public UTFDataFormatException()
```
- `null`을 오류 세부 정보 메시지로 사용하여
`UTFDataFormatException`을 구성합니다.
### UTFDataFormatException
```java
public UTFDataFormatException(String s)
```
- 지정한 세부 정보 메시지를 사용하여
`UTFDataFormatException`을 구성합니다.
문자열 `s`는 나중에 `java.lang.Throwable`
클래스의 `Throwable.getMessage()` 메소드로
검색할 수 있습니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class UnsupportedEncodingException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.UnsupportedEncodingException
```
## 설명
**extends IOException:**
문자 인코딩은 지원되지 않습니다.
**Since:**
- JDK1.1, CLDC 1.0
## 생성자 요약
- UnsupportedEncodingException () 세부 정보 메시지 없이 UnsupportedEncodingException을 구성합니다.
- UnsupportedEncodingException ( String s) 세부 정보 메시지를 사용하여 UnsupportedEncodingException을 구성합니다.
## 생성자 상세
### UnsupportedEncodingException
```java
public UnsupportedEncodingException()
```
- 세부 정보 메시지 없이 UnsupportedEncodingException을 구성합니다.
### UnsupportedEncodingException
```java
public UnsupportedEncodingException(String s)
```
- 세부 정보 메시지를 사용하여 UnsupportedEncodingException을 구성합니다.
**Parameters:**
- `s` - 예외 이유를 설명합니다.
---
title: "Class Writer"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Writer
```
## 설명
**Direct Known Subclasses:**
- `OutputStreamWriter`
**extends Object:**
문자 스트림에 쓰기 위한 추상 클래스
서브 클래스가 구현해야 하는 유일한 메소드는 write(char[], int, int), flush() 및 close()입니다.
그러나 대부분의 서브 클래스는 효율성 증가나 추가 기능 제공, 또는
둘 모두를 위해 여기에 정의된 일부 메소드를 무시합니다.
**Since:**
- JDK1.1, CLDC 1.0
**See Also:**
- ``OutputStreamWriter``,
``Reader``
## 필드 요약
- `protected Object lock` — 이 스트림에 대한 작업을 동기화하는 데 사용된 객체.
## 생성자 요약
- `protected Writer ()` — 임계 지역이 작성기 자체에서 동기화되는 새로운 문자 스트림 작성기를 만듭니다.
- `protected Writer ( Object lock)` — 임계 지역이 지정된 객체에서 동기화되는 새로운 문자 스트림 작성기를 만듭니다.
## 메서드 요약
- `abstract void close ()` — 스트림을 먼저 플러시한 후 닫습니다.
- `abstract void flush ()` — 스트림을 플러시합니다.
- `void write (char[] cbuf)` — 문자 배열을 씁니다.
- `abstract void write (char[] cbuf, int off, int len)` — 문자 배열의 일부를 씁니다.
- `void write (int c)` — 단일 문자를 씁니다.
- `void write ( String str)` — 문자열을 씁니다.
- `void write ( String str, int off, int len)` — 문자열의 일부를 씁니다.
## 필드 상세
### lock
```java
protected Object lock
```
- 이 스트림에 대한 작업을 동기화하는 데 사용된 객체.
효율성 증가를 위해 문자 스트림 객체는 자신 이외의 객체를 사용하여
임계 영역을 보호할 수도 있습니다.
따라서 서브 클래스는 이 필드에 있는 `this` 이외의
객체나 동기화된 메소드를 사용해야 합니다.
### Writer
```java
protected Writer()
```
- 임계 지역이 작성기 자체에서 동기화되는
새로운 문자 스트림 작성기를 만듭니다.
### Writer
```java
protected Writer(Object lock)
```
- 임계 지역이 지정된 객체에서 동기화되는
새로운 문자 스트림 작성기를 만듭니다.
**Parameters:**
- `lock` - 동기화되는 객체
### write
```java
public void write(int c)
throws IOException
```
**Parameters:**
- `c` - 기록되는 문자를 지정하는 int
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(char[] cbuf)
throws IOException
```
**Parameters:**
- `cbuf` - 기록되는 문자 배열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public abstract void write(char[] cbuf,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str)
throws IOException
```
**Parameters:**
- `str` - 기록되는 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public abstract void flush()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 생성자 상세
### Writer
```java
protected Writer()
```
- 임계 지역이 작성기 자체에서 동기화되는
새로운 문자 스트림 작성기를 만듭니다.
### Writer
```java
protected Writer(Object lock)
```
- 임계 지역이 지정된 객체에서 동기화되는
새로운 문자 스트림 작성기를 만듭니다.
**Parameters:**
- `lock` - 동기화되는 객체
### write
```java
public void write(int c)
throws IOException
```
**Parameters:**
- `c` - 기록되는 문자를 지정하는 int
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(char[] cbuf)
throws IOException
```
**Parameters:**
- `cbuf` - 기록되는 문자 배열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public abstract void write(char[] cbuf,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str)
throws IOException
```
**Parameters:**
- `str` - 기록되는 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public abstract void flush()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 상세
### write
```java
public void write(int c)
throws IOException
```
**Parameters:**
- `c` - 기록되는 문자를 지정하는 int
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(char[] cbuf)
throws IOException
```
**Parameters:**
- `cbuf` - 기록되는 문자 배열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public abstract void write(char[] cbuf,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str)
throws IOException
```
**Parameters:**
- `str` - 기록되는 문자열
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### write
```java
public void write(String str,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 기록할 문자 수
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### flush
```java
public abstract void flush()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "package java.io"
---
**See:**
**Description**
## Interface Summary
- [DataInput](DataInput.md) — DataInput 인터페이스는 이진 스트림에서 바이트를 읽어 Java 프리미티브 유형 중 하나로 데이터를 재구성합니다.
- [DataOutput](DataOutput.md) — DataOutput 인터페이스는 Java 프리미티브 유형의 데이터를 일련의 바이트로 변환하여 이진 스트림으로 쓰는 기능을 제공합니다.
## Class Summary
- [ByteArrayInputStream](ByteArrayInputStream.md) — ByteArrayInputStream 에는 스트림에서 읽을 수 있는 바이트가 포함되는 내부 버퍼가 있습니다.
- [ByteArrayOutputStream](ByteArrayOutputStream.md) — 이 클래스는 데이터를 바이트 배열에 쓰는 출력 스트림을 구현합니다.
- [DataInputStream](DataInputStream.md) — 데이터 입력 스트림은 응용 프로그램이 시스템에 독립적인 방법으로 기본 입력 스트림에서 프리미티브 Java 데이터 유형을 읽을 수 있도록 합니다.
- [DataOutputStream](DataOutputStream.md) — 데이터 출력 스트림은 응용 프로그램이 이식 가능한 방법으로 프리미티브 Java 데이터 유형을 출력 스트림에 쓸 수 있도록 합니다.
- [InputStream](InputStream.md) — 이 추상 클래스는 바이트 입력 스트림을 나타내는 모든 클래스의 수퍼 클래스입니다.
- [InputStreamReader](InputStreamReader.md) — InputStreamReader가 바이트 스트림에서 문자 스트림으로의 브릿지 역할을 하는 경우 바이트를 읽어 문자로 변환합니다.
- [OutputStream](OutputStream.md) — 이 추상 클래스는 바이트 출력 스트림을 나타내는 모든 클래스의 수퍼 클래스입니다.
- [OutputStreamWriter](OutputStreamWriter.md) — OutputStreamWriter가 문자 스트림에서 바이트 스트림으로의 브릿지 역할을 하는 경우 기록된 문자를 바이트로 변환합니다.
- [PrintStream](PrintStream.md) — PrintStream 은 다양한 데이터 값 표현의 편리한 인쇄 기능 등을 다른 출력 스트림에 추가합니다.
- [Reader](Reader.md) — 문자 스트림을 읽기 위한 추상 클래스.
- [Writer](Writer.md) — 문자 스트림에 쓰기 위한 추상 클래스 서브 클래스가 구현해야 하는 유일한 메소드는 write(char[], int, int), flush() 및 close()입니다.
## Exception Summary
- [EOFException](EOFException.md) — 입력 중에 예기치 않게 파일 또는 스트림의 끝에 도달하였음을 나타냅니다.
- [InterruptedIOException](InterruptedIOException.md) — I/O 작업이 중단되었음을 나타냅니다.
- [IOException](IOException.md) — 일종의 I/O 예외가 발생했음을 나타냅니다.
- [UnsupportedEncodingException](UnsupportedEncodingException.md) — 문자 인코딩은 지원되지 않습니다.
- [UTFDataFormatException](UTFDataFormatException.md) — 데이터 입력 스트림이나 데이터 입력 스트림을 구현하는 클래스에서 형식이 잘못된 UTF-8 문자열을 읽었음을 나타냅니다.
---
title: "Class ArithmeticException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.ArithmeticException
```
## 설명
**extends RuntimeException:**
예외적인 연산 조건에서 발생합니다.
예를 들어, 정수를 "0으로 나누면"
이 클래스의 인스턴스가 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- ArithmeticException () 세부 정보 메시지 없이 ArithmeticException 을
구성합니다.
- ArithmeticException ( String s) 지정한 세부 정보 메시지를 사용하여 ArithmeticException 을
구성합니다.
## 생성자 상세
### ArithmeticException
```java
public ArithmeticException()
```
- 세부 정보 메시지 없이 `ArithmeticException`을
구성합니다.
### ArithmeticException
```java
public ArithmeticException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `ArithmeticException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class ArrayIndexOutOfBoundsException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
|
+--java.lang.ArrayIndexOutOfBoundsException
```
## 설명
**extends IndexOutOfBoundsException:**
유효하지 않은 색인으로 배열을 액세스했음을 나타냅니다.
색인이 음수이거나 배열 크기보다
크거나 같습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- ArrayIndexOutOfBoundsException () 세부 정보 메시지 없이 ArrayIndexOutOfBoundsException 을
구성합니다.
- ArrayIndexOutOfBoundsException (int index) 유효하지 않은 색인을 나타내는 인자를 사용하여 새로운 ArrayIndexOutOfBoundsException 클래스를 구성합니다.
- ArrayIndexOutOfBoundsException ( String s) 지정한 세부 정보 메시지를 사용하여 ArrayIndexOutOfBoundsException 클래스를
구성합니다.
## 생성자 상세
### ArrayIndexOutOfBoundsException
```java
public ArrayIndexOutOfBoundsException()
```
- 세부 정보 메시지 없이 `ArrayIndexOutOfBoundsException`을
구성합니다.
### ArrayIndexOutOfBoundsException
```java
public ArrayIndexOutOfBoundsException(int index)
```
- 유효하지 않은 색인을 나타내는 인자를 사용하여 새로운 `ArrayIndexOutOfBoundsException`
클래스를 구성합니다.
**Parameters:**
- `index` - 유효하지 않은 색인
### ArrayIndexOutOfBoundsException
```java
public ArrayIndexOutOfBoundsException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `ArrayIndexOutOfBoundsException` 클래스를
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class ArrayStoreException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.ArrayStoreException
```
## 설명
**extends RuntimeException:**
잘못된 유형의 객체를 객체 배열에 저장하려고 시도했음을
나타냅니다. 예를 들어,
다음 코드는 `ArrayStoreException`을 생성합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- ArrayStoreException () 세부 정보 메시지 없이 ArrayStoreException 을 구성합니다.
- ArrayStoreException ( String s) 지정한 세부 정보 메시지를 사용하여 ArrayStoreException 을
구성합니다.
## 생성자 상세
### ArrayStoreException
```java
public ArrayStoreException()
```
- 세부 정보 메시지 없이 `ArrayStoreException`을 구성합니다.
### ArrayStoreException
```java
public ArrayStoreException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `ArrayStoreException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Boolean"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Boolean
```
## 설명
**extends Object:**
Boolean 클래스는 프리미티브 유형의
`boolean` 값을 객체에 포함합니다.
`Boolean` 유형의 객체에는 유형이
`boolean`인 단일 필드가 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `static Boolean FALSE` — 프리미티브 값 false 에 해당하는 Boolean 객체
- `static Boolean TRUE` — 프리미티브 값 true 에 해당하는 Boolean 객체
## 생성자 요약
- Boolean (boolean value) value 인자를 나타내는 Boolean 객체를 할당합니다.
## 메서드 요약
- `boolean booleanValue ()` — 이 Boolean 객체의 값을 부울 프리미티브로 반환합니다.
- `boolean equals ( Object obj)` — 인자가 null 이 아니고 이 객체와 동일한 boolean 값을 나타내는 Boolean 객체인 경우에만 true 를 반환합니다.
- `int hashCode ()` — 이 Boolean 객체의 해시 코드를 반환합니다.
- `String toString ()` — 이 부울 값을 나타내는 문자열 객체를 반환합니다.
## 필드 상세
### TRUE
```java
public static final Boolean TRUE
```
- 프리미티브 값 `true`에 해당하는
`Boolean` 객체
### FALSE
```java
public static final Boolean FALSE
```
- 프리미티브 값 `false`에 해당하는 `Boolean`
객체
### Boolean
```java
public Boolean(boolean value)
```
- `value` 인자를 나타내는
`Boolean` 객체를 할당합니다.
**Parameters:**
- `value` - `Boolean` 값
### booleanValue
```java
public boolean booleanValue()
```
**Returns:**
- 이 객체의 프리미티브 `boolean` 값
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체가 `true`를 나타내면 정수
`1231`, 객체가 `false`를 나타내면
정수 `1237`
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- Boolean 객체가 동일한 값을 나타내면 `true`,
그렇지 않으면 `false`
**See Also:**
- ``hashCode()``,
``Hashtable``
## 생성자 상세
### Boolean
```java
public Boolean(boolean value)
```
- `value` 인자를 나타내는
`Boolean` 객체를 할당합니다.
**Parameters:**
- `value` - `Boolean` 값
### booleanValue
```java
public boolean booleanValue()
```
**Returns:**
- 이 객체의 프리미티브 `boolean` 값
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체가 `true`를 나타내면 정수
`1231`, 객체가 `false`를 나타내면
정수 `1237`
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- Boolean 객체가 동일한 값을 나타내면 `true`,
그렇지 않으면 `false`
**See Also:**
- ``hashCode()``,
``Hashtable``
## 메서드 상세
### booleanValue
```java
public boolean booleanValue()
```
**Returns:**
- 이 객체의 프리미티브 `boolean` 값
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체가 `true`를 나타내면 정수
`1231`, 객체가 `false`를 나타내면
정수 `1237`
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- Boolean 객체가 동일한 값을 나타내면 `true`,
그렇지 않으면 `false`
**See Also:**
- ``hashCode()``,
``Hashtable``
---
title: "Class Byte"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Byte
```
## 설명
**extends Object:**
Byte 클래스는 바이트 값의 표준 래퍼입니다.
**Since:**
- JDK1.1, CLDC 1.0
## 필드 요약
- `static byte MAX_VALUE` — Byte가 가질 수 있는 최대값
- `static byte MIN_VALUE` — Byte가 가질 수 있는 최소값
## 생성자 요약
- Byte (byte value) 지정된 바이트 값으로 초기화되는 Byte 객체를 구성합니다.
## 메서드 요약
- `byte byteValue ()` — 이 Byte 값을 바이트로 반환합니다.
- `boolean equals ( Object obj)` — 이 객체를 지정된 객체와 비교합니다.
- `int hashCode ()` — 이 Byte의 해시 코드를 반환합니다.
- `static byte parseByte ( String s)` — 지정된 문자열이 한 바이트를 나타내는 경우 해당 바이트의 값을 반환합니다.
- `static byte parseByte ( String s, int radix)` — 지정된 문자열이 한 바이트를 나타내는 경우 해당 바이트의 값을 반환합니다.
- `String toString ()` — 이 Byte의 값을 나타내는 문자열 객체를 반환합니다.
## 필드 상세
### MIN_VALUE
```java
public static final byte MIN_VALUE
```
**See Also:**
- `Constant Field Values`
### MAX_VALUE
```java
public static final byte MAX_VALUE
```
**See Also:**
- `Constant Field Values`
### Byte
```java
public Byte(byte value)
```
- 지정된 바이트 값으로 초기화되는 Byte 객체를 구성합니다.
**Parameters:**
- `value` - Byte의 초기값
### parseByte
```java
public static byte parseByte(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 해당 바이트를 포함하는 문자열
**Returns:**
- 구문 분석된 바이트 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
바이트가 없는 경우
### parseByte
```java
public static byte parseByte(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 구문 분석된 바이트 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 이 Byte 값(바이트)
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 true, 다르면 false
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 생성자 상세
### Byte
```java
public Byte(byte value)
```
- 지정된 바이트 값으로 초기화되는 Byte 객체를 구성합니다.
**Parameters:**
- `value` - Byte의 초기값
### parseByte
```java
public static byte parseByte(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 해당 바이트를 포함하는 문자열
**Returns:**
- 구문 분석된 바이트 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
바이트가 없는 경우
### parseByte
```java
public static byte parseByte(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 구문 분석된 바이트 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 이 Byte 값(바이트)
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 true, 다르면 false
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 메서드 상세
### parseByte
```java
public static byte parseByte(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 해당 바이트를 포함하는 문자열
**Returns:**
- 구문 분석된 바이트 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
바이트가 없는 경우
### parseByte
```java
public static byte parseByte(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 구문 분석된 바이트 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 이 Byte 값(바이트)
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 true, 다르면 false
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
---
title: "Class Character"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Character
```
## 설명
**extends Object:**
Character 클래스는 프리미티브 유형의 `char` 값을
객체에 포함합니다. `Character` 유형의 객체에는
유형이 `char`인 단일 필드가 있습니다.
이 클래스는 문자 유형을 확인하고 문자를 대문자에서 소문자로,
또는 그 반대로 변환하기 위한 여러 메소드도
제공합니다.
문자 정보는 유니코드 표준, 버전 3.0을 기반으로 합니다.
하지만 풋프린트를 줄이기 위해 기본적으로 CLDC의 문자 등록 정보와
대소문자 변환 작업은 ISO Latin-1 범위의 문자에 대해서만
사용할 수 있습니다. 필요하면 다른 유니코드 문자 블록도
지원할 수 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `static int MAX_RADIX` — 문자열과의 변환에 사용할 수 있는 최대 기수
- `static char MAX_VALUE` — 이 필드의 상수 값은 char 유형의 최대값입니다.
- `static int MIN_RADIX` — 문자열과의 변환에 사용할 수 있는 최소 기수
- `static char MIN_VALUE` — 이 필드의 상수 값은 char 유형의 최소값입니다.
## 생성자 요약
- Character (char value) Character 객체를 구성하고 프리미티브 value 인자를 나타내도록 초기화합니다.
## 메서드 요약
- `char charValue ()` — 이 Character 객체 값을 반환합니다.
- `static int digit (char ch, int radix)` — 문자 ch 의 숫자 값을 지정된 기수로 반환합니다.
- `boolean equals ( Object obj)` — 이 객체를 지정된 객체와 비교합니다.
- `int hashCode ()` — 이 Character의 해시 코드를 반환합니다.
- `static boolean isDigit (char ch)` — 지정된 문자가 숫자인지 확인합니다.
- `static boolean isLowerCase (char ch)` — 지정된 문자가 소문자인지 확인합니다.
- `static boolean isUpperCase (char ch)` — 지정된 문자가 대문자인지 확인합니다.
- `static char toLowerCase (char ch)` — 지정된 문자는 해당 소문자로 매핑됩니다.
- `String toString ()` — 이 문자의 값을 나타내는 문자열 객체를 반환합니다.
- `static char toUpperCase (char ch)` — 문자 인자를 대문자로 변환합니다.
## 필드 상세
### MIN_RADIX
```java
public static final int MIN_RADIX
```
**See Also:**
- ``Integer.toString(int, int)``,
``Integer.valueOf(java.lang.String)``,
`Constant Field Values`
### MAX_RADIX
```java
public static final int MAX_RADIX
```
**See Also:**
- ``Integer.toString(int, int)``,
``Integer.valueOf(java.lang.String)``,
`Constant Field Values`
### MIN_VALUE
```java
public static final char MIN_VALUE
```
**Since:**
- JDK1.0.2
**See Also:**
- `Constant Field Values`
### MAX_VALUE
```java
public static final char MAX_VALUE
```
**Since:**
- JDK1.0.2
**See Also:**
- `Constant Field Values`
### Character
```java
public Character(char value)
```
- `Character` 객체를 구성하고 프리미티브
`value` 인자를 나타내도록 초기화합니다.
**Parameters:**
- `value` - 새로운 `Character` 객체 값
### charValue
```java
public char charValue()
```
**Returns:**
- 이 객체가 나타내는 프리미티브 `char`
값
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 문자열 표현
### isLowerCase
```java
public static boolean isLowerCase(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 소문자이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### isUpperCase
```java
public static boolean isUpperCase(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 대문자이면 `true`,
그렇지 않으면 `false`
**Since:**
- 1.0
**See Also:**
- ``isLowerCase(char)``,
``toUpperCase(char)``
### isDigit
```java
public static boolean isDigit(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 숫자이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### toLowerCase
```java
public static char toLowerCase(char ch)
```
**Parameters:**
- `ch` - 변환되는 문자
**Returns:**
- 문자에 해당 소문자가 있으면 소문자,
없으면 문자 자체
**Since:**
- JDK1.0
**See Also:**
- ``isLowerCase(char)``,
``isUpperCase(char)``,
``toUpperCase(char)``
### toUpperCase
```java
public static char toUpperCase(char ch)
```
**Parameters:**
- `ch` - 변환되는 문자
**Returns:**
- 문자에 해당 대문자가 있으면 대문자,
없으면 문자 자체
**Since:**
- JDK1.0
**See Also:**
- ``isLowerCase(char)``,
``isUpperCase(char)``,
``toLowerCase(char)``
### digit
```java
public static int digit(char ch,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 문자가 나타내는 지정된 기수의
숫자 값
**Since:**
- JDK1.0
**See Also:**
- ``isDigit(char)``
## 생성자 상세
### Character
```java
public Character(char value)
```
- `Character` 객체를 구성하고 프리미티브
`value` 인자를 나타내도록 초기화합니다.
**Parameters:**
- `value` - 새로운 `Character` 객체 값
### charValue
```java
public char charValue()
```
**Returns:**
- 이 객체가 나타내는 프리미티브 `char`
값
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 문자열 표현
### isLowerCase
```java
public static boolean isLowerCase(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 소문자이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### isUpperCase
```java
public static boolean isUpperCase(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 대문자이면 `true`,
그렇지 않으면 `false`
**Since:**
- 1.0
**See Also:**
- ``isLowerCase(char)``,
``toUpperCase(char)``
### isDigit
```java
public static boolean isDigit(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 숫자이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### toLowerCase
```java
public static char toLowerCase(char ch)
```
**Parameters:**
- `ch` - 변환되는 문자
**Returns:**
- 문자에 해당 소문자가 있으면 소문자,
없으면 문자 자체
**Since:**
- JDK1.0
**See Also:**
- ``isLowerCase(char)``,
``isUpperCase(char)``,
``toUpperCase(char)``
### toUpperCase
```java
public static char toUpperCase(char ch)
```
**Parameters:**
- `ch` - 변환되는 문자
**Returns:**
- 문자에 해당 대문자가 있으면 대문자,
없으면 문자 자체
**Since:**
- JDK1.0
**See Also:**
- ``isLowerCase(char)``,
``isUpperCase(char)``,
``toLowerCase(char)``
### digit
```java
public static int digit(char ch,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 문자가 나타내는 지정된 기수의
숫자 값
**Since:**
- JDK1.0
**See Also:**
- ``isDigit(char)``
## 메서드 상세
### charValue
```java
public char charValue()
```
**Returns:**
- 이 객체가 나타내는 프리미티브 `char`
값
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 문자열 표현
### isLowerCase
```java
public static boolean isLowerCase(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 소문자이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### isUpperCase
```java
public static boolean isUpperCase(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 대문자이면 `true`,
그렇지 않으면 `false`
**Since:**
- 1.0
**See Also:**
- ``isLowerCase(char)``,
``toUpperCase(char)``
### isDigit
```java
public static boolean isDigit(char ch)
```
**Parameters:**
- `ch` - 테스트되는 문자
**Returns:**
- 문자가 숫자이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### toLowerCase
```java
public static char toLowerCase(char ch)
```
**Parameters:**
- `ch` - 변환되는 문자
**Returns:**
- 문자에 해당 소문자가 있으면 소문자,
없으면 문자 자체
**Since:**
- JDK1.0
**See Also:**
- ``isLowerCase(char)``,
``isUpperCase(char)``,
``toUpperCase(char)``
### toUpperCase
```java
public static char toUpperCase(char ch)
```
**Parameters:**
- `ch` - 변환되는 문자
**Returns:**
- 문자에 해당 대문자가 있으면 대문자,
없으면 문자 자체
**Since:**
- JDK1.0
**See Also:**
- ``isLowerCase(char)``,
``isUpperCase(char)``,
``toLowerCase(char)``
### digit
```java
public static int digit(char ch,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 문자가 나타내는 지정된 기수의
숫자 값
**Since:**
- JDK1.0
**See Also:**
- ``isDigit(char)``
---
title: "Class Class"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Class
```
## 설명
**extends Object:**
`Class` 클래스의 인스턴스는 실행 중인 Java 응용 프로그램의
클래스와 인터페이스를 나타냅니다. 또한 모든 배열은 `Class`
객체로 반영되는 클래스에 속합니다. 이 객체는 동일한 요소 유형과 차원 수를
가진 모든 배열에 공유됩니다.
`Class`에는 공개 구성자가 없습니다. `Class`
객체는 클래스를 로드할 때 Java 가상 머신이 자동으로
구성합니다.
다음 예에서는 `Class` 객체를 사용하여 객체의 클래스 이름을
인쇄합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 메서드 요약
- `static Class forName ( String className)` — 지정된 문자열 이름을 가진 클래스와 연결된 Class 객체를 반환합니다.
- `String getName ()` — 이 Class 객체가 나타내는 엔티티(클래스, 인터페이스, 배열 클래스, 프리미티브 유형 또는 void)의 정규화된 이름을 String 으로 반환합니다.
- `InputStream getResourceAsStream ( String name)` — 응용 프로그램의 JAR 파일에서 지정된 이름을 가진 자원을 찾습니다.
- `boolean isArray ()` — 이 Class 객체가 배열 클래스를 나타내는지 확인합니다.
- `boolean isAssignableFrom ( Class cls)` — Class 객체에서 나타내는 클래스 또는 인스턴스가 지정된 Class 매개 변수에서 나타내는 클래스 또는 인터페이스와 동일하거나 그 수퍼 클래스 또는 상위 인터페이스인지 확인합니다.
- `boolean isInstance ( Object obj)` — 지정된 Object 가 이 Class 에서 나타내는 객체와 할당이 호환되는지 확인합니다.
- `boolean isInterface ()` — 지정된 Class 객체가 인터페이스 유형을 나타내는지 확인합니다.
- `Object newInstance ()` — 클래스의 새 인스턴스를 만듭니다.
- `String toString ()` — 객체를 문자열로 변환합니다.
## 메서드 상세
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 클래스 객체의 문자열 표현
### forName
```java
public static Class forName(String className)
throws ClassNotFoundException
```
**Parameters:**
- `className` - 원하는 클래스의 정규화된 이름
**Returns:**
- 지정된 이름을 가진 클래스의 `Class`
객체
**Throws:**
- `Error` - 다른 어떤 이유로 인해 함수가 실패한 경우
**Since:**
- JDK1.0
### newInstance
```java
public Object newInstance()
throws InstantiationException,
IllegalAccessException
```
**Returns:**
- 이 객체가 나타내는 클래스의 새로 할당된 인스턴스.
빈 인자 목록을 가진 `new` 표현식과
같은 방식으로 수행됩니다.
**Throws:**
- `InstantiationException` - 응용 프로그램이 추상 클래스나
인터페이스를 인스턴스화하려고 시도하거나 다른 어떤 이유로
인해 인스턴스화가 실패한 경우
**Since:**
- JDK1.0
### isInstance
```java
public boolean isInstance(Object obj)
```
**Parameters:**
- `obj` - 확인할 객체
**Returns:**
- `obj`가 이 클래스의 인스턴스이면 true
**Since:**
- JDK1.1
### isAssignableFrom
```java
public boolean isAssignableFrom(Class cls)
```
**Parameters:**
- `cls` - 확인되는 `Class` 객체
**Returns:**
- `cls` 유형의 객체를 이 클래스의 객체에
할당할 수 있는지 여부를 나타내는 `boolean` 값
**Throws:**
- `NullPointerException` - 지정된 Class 매개 변수가
null인 경우
**Since:**
- JDK1.1
### isInterface
```java
public boolean isInterface()
```
**Returns:**
- 이 객체가 인터페이스를 나타내면 `true`,
그렇지 않으면 `false`
### isArray
```java
public boolean isArray()
```
**Returns:**
- 이 객체가 배열 클래스를 나타내면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.1
### getName
```java
public String getName()
```
**Returns:**
- 이 객체가 나타내는 클래스 또는 인터페이스의
정규화된 이름
### getResourceAsStream
```java
public InputStream getResourceAsStream(String name)
```
**Parameters:**
- `name` - 원하는 자원 이름
**Returns:**
- `java.io.InputStream` 객체
---
title: "Class ClassCastException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.ClassCastException
```
## 설명
**extends RuntimeException:**
코드가 객체를 인스턴스가 아닌 서브 클래스로 캐스트하려고 시도했음을
나타냅니다. 예를 들어, 다음 코드는 `ClassCastException`을
생성합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- ClassCastException () 세부 정보 메시지 없이 ClassCastException 을 구성합니다.
- ClassCastException ( String s) 지정한 세부 정보 메시지를 사용하여 ClassCastException 을
구성합니다.
## 생성자 상세
### ClassCastException
```java
public ClassCastException()
```
- 세부 정보 메시지 없이 `ClassCastException`을 구성합니다.
### ClassCastException
```java
public ClassCastException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `ClassCastException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class ClassNotFoundException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.ClassNotFoundException
```
## 설명
**extends Exception:**
응용 프로그램이 `Class` 클래스의 `forName`
메소드를 사용하여 문자열 이름을 통해 클래스를 로드하려고
시도하지만 지정된 이름을 가진 클래스 정의를 찾을 수 없을 때 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Class.forName(java.lang.String)``
## 생성자 요약
- ClassNotFoundException () 세부 정보 메시지 없이 ClassNotFoundException 을 구성합니다.
- ClassNotFoundException ( String s) 지정한 세부 정보 메시지를 사용하여 ClassNotFoundException 을
구성합니다.
## 생성자 상세
### ClassNotFoundException
```java
public ClassNotFoundException()
```
- 세부 정보 메시지 없이 `ClassNotFoundException`을 구성합니다.
### ClassNotFoundException
```java
public ClassNotFoundException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `ClassNotFoundException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Double"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Double
```
## 설명
**extends Object:**
Double 클래스는 프리미티브 유형의 `double`
값을 객체에 포함합니다. `Double` 유형의 객체에는
유형이 `double`인 단일 필드가
있습니다.
또한, 이 클래스는 `double`을 `String`으로,
`String`을 `double`로 변환하는
여러 메소드와, `double`을 처리하는 데
유용한 다른 상수와 메소드를
제공합니다.
**Since:**
- JDK1.0, CLDC 1.1
## 필드 요약
- `static double MAX_VALUE` — double 유형의 최대 양수 값.
- `static double MIN_VALUE` — double 유형의 최소 양수 값.
- `static double NaN` — double 유형의 NaN (Not-a-Number) 값.
- `static double NEGATIVE_INFINITY` — double 유형의 음의 무한대.
- `static double POSITIVE_INFINITY` — double 유형의 양의 무한대.
## 생성자 요약
- Double (double value) 프리미티브 double 인자를 나타내는 새로 할당된 Double 객체를 구성합니다.
## 메서드 요약
- `byte byteValue ()` — 이 Double 값을 byte로 반환합니다(byte로 캐스트).
- `static long doubleToLongBits (double value)` — IEEE 754 부동 소수점 "double 형식" 비트 레이아웃에 따라 지정된 부동 소수점 값의 표현을 반환합니다.
- `double doubleValue ()` — 이 Double의 double 값을 반환합니다.
- `boolean equals ( Object obj)` — 이 객체를 지정된 객체와 비교합니다.
- `float floatValue ()` — 이 Double의 float 값을 반환합니다.
- `int hashCode ()` — 이 Double 객체의 해시 코드를 반환합니다.
- `int intValue ()` — 이 Double의 정수 값을 반환합니다(int로 캐스트).
- `boolean isInfinite ()` — 이 Double 값의 크기가 무한히 크면 true를 반환합니다.
- `static boolean isInfinite (double v)` — 지정된 숫자의 크기가 무한히 크면 true를 반환합니다.
- `boolean isNaN ()` — 이 Double 값이 특수 NaN (Not-a-Number) 값이면 true를 반환합니다.
- `static boolean isNaN (double v)` — 지정된 숫자가 특수 NaN (Not-a-Number) 값이면 true를 반환합니다.
- `static double longBitsToDouble (long bits)` — 지정된 비트 표현에 해당하는 double-float를 반환합니다.
- `long longValue ()` — 이 Double의 long 값을 반환합니다(long으로 캐스트).
- `static double parseDouble ( String s)` — Double 클래스의 valueOf 메소드와 같이 지정된 String 이 나타내는 값으로 초기화된 새 double을 반환합니다.
- `short shortValue ()` — 이 Double 값을 short로 반환합니다(short로 캐스트).
- `String toString ()` — 이 Double 객체의 String 표현을 반환합니다.
- `static String toString (double d)` — double 인자의 문자열 표현을 만듭니다.
- `static Double valueOf ( String s)` — 지정된 문자열이 나타내는 값으로 초기화된 새 Double 객체를 반환합니다.
## 필드 상세
### POSITIVE_INFINITY
```java
public static final double POSITIVE_INFINITY
```
**See Also:**
- `Constant Field Values`
### NEGATIVE_INFINITY
```java
public static final double NEGATIVE_INFINITY
```
**See Also:**
- `Constant Field Values`
### NaN
```java
public static final double NaN
```
**See Also:**
- `Constant Field Values`
### MAX_VALUE
```java
public static final double MAX_VALUE
```
**See Also:**
- `Constant Field Values`
### MIN_VALUE
```java
public static final double MIN_VALUE
```
- `double` 유형의 최소 양수 값.
`Double.longBitsToDouble(0x1L)`에서 반환하는 값과
같습니다.
### Double
```java
public Double(double value)
```
- 프리미티브 `double` 인자를 나타내는 새로 할당된
`Double` 객체를 구성합니다.
**Parameters:**
- `value` - `Double`이 나타내는 값
### toString
```java
public static String toString(double d)
```
**Parameters:**
- `d` - 변환되는 `double`
**Returns:**
- 인자의 문자열 표현
### valueOf
```java
public static Double valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 값으로 초기화된 새로 구성된
`Double`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
숫자가 없는 경우
### parseDouble
```java
public static double parseDouble(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 double 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한 double이
없는 경우
**Since:**
- JDK1.2
**See Also:**
- ``valueOf(String)``
### isNaN
```java
public static boolean isNaN(double v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public static boolean isInfinite(double v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자 값이 양의 무한대이거나 음의 무한대이면
`true`, 그렇지 않으면 `false`
### isNaN
```java
public boolean isNaN()
```
**Returns:**
- 이 객체가 나타내는 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public boolean isInfinite()
```
**Returns:**
- 이 객체가 나타내는 값이 양의 무한대이거나
음의 무한대이면 `true`,
그렇지 않으면 `false`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 `String` 표현
**See Also:**
- ``toString(double)``
### byteValue
```java
public byte byteValue()
```
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`int` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- JDK1.0
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 `hash code` 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### doubleToLongBits
```java
public static long doubleToLongBits(double value)
```
**Parameters:**
- `value` - 배정도 부동 소수점 숫자
**Returns:**
- 부동 소수점 숫자를 나타내는 비트
### longBitsToDouble
```java
public static double longBitsToDouble(long bits)
```
**Parameters:**
- `bits` - 모든 `long` 정수
**Returns:**
- 동일한 비트 패턴을 가진 `double`
부동 소수점 값
## 생성자 상세
### Double
```java
public Double(double value)
```
- 프리미티브 `double` 인자를 나타내는 새로 할당된
`Double` 객체를 구성합니다.
**Parameters:**
- `value` - `Double`이 나타내는 값
### toString
```java
public static String toString(double d)
```
**Parameters:**
- `d` - 변환되는 `double`
**Returns:**
- 인자의 문자열 표현
### valueOf
```java
public static Double valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 값으로 초기화된 새로 구성된
`Double`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
숫자가 없는 경우
### parseDouble
```java
public static double parseDouble(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 double 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한 double이
없는 경우
**Since:**
- JDK1.2
**See Also:**
- ``valueOf(String)``
### isNaN
```java
public static boolean isNaN(double v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public static boolean isInfinite(double v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자 값이 양의 무한대이거나 음의 무한대이면
`true`, 그렇지 않으면 `false`
### isNaN
```java
public boolean isNaN()
```
**Returns:**
- 이 객체가 나타내는 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public boolean isInfinite()
```
**Returns:**
- 이 객체가 나타내는 값이 양의 무한대이거나
음의 무한대이면 `true`,
그렇지 않으면 `false`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 `String` 표현
**See Also:**
- ``toString(double)``
### byteValue
```java
public byte byteValue()
```
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`int` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- JDK1.0
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 `hash code` 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### doubleToLongBits
```java
public static long doubleToLongBits(double value)
```
**Parameters:**
- `value` - 배정도 부동 소수점 숫자
**Returns:**
- 부동 소수점 숫자를 나타내는 비트
### longBitsToDouble
```java
public static double longBitsToDouble(long bits)
```
**Parameters:**
- `bits` - 모든 `long` 정수
**Returns:**
- 동일한 비트 패턴을 가진 `double`
부동 소수점 값
## 메서드 상세
### toString
```java
public static String toString(double d)
```
**Parameters:**
- `d` - 변환되는 `double`
**Returns:**
- 인자의 문자열 표현
### valueOf
```java
public static Double valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 값으로 초기화된 새로 구성된
`Double`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
숫자가 없는 경우
### parseDouble
```java
public static double parseDouble(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 double 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한 double이
없는 경우
**Since:**
- JDK1.2
**See Also:**
- ``valueOf(String)``
### isNaN
```java
public static boolean isNaN(double v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public static boolean isInfinite(double v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자 값이 양의 무한대이거나 음의 무한대이면
`true`, 그렇지 않으면 `false`
### isNaN
```java
public boolean isNaN()
```
**Returns:**
- 이 객체가 나타내는 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public boolean isInfinite()
```
**Returns:**
- 이 객체가 나타내는 값이 양의 무한대이거나
음의 무한대이면 `true`,
그렇지 않으면 `false`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 `String` 표현
**See Also:**
- ``toString(double)``
### byteValue
```java
public byte byteValue()
```
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`int` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- JDK1.0
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `double` 값
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 `hash code` 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### doubleToLongBits
```java
public static long doubleToLongBits(double value)
```
**Parameters:**
- `value` - 배정도 부동 소수점 숫자
**Returns:**
- 부동 소수점 숫자를 나타내는 비트
### longBitsToDouble
```java
public static double longBitsToDouble(long bits)
```
**Parameters:**
- `bits` - 모든 `long` 정수
**Returns:**
- 동일한 비트 패턴을 가진 `double`
부동 소수점 값
---
title: "Class Error"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Error
```
## 설명
**Direct Known Subclasses:**
- `NoClassDefFoundError`, `VirtualMachineError`
**extends Throwable:**
`Error`는 합리적 응용 프로그램이라면 파악하려고
시도해서는 안 되는 심각한 문제를 나타내는 `Throwable`의
서브 클래스입니다. 대부분의 이러한 오류는 비정상적 동작입니다.
메소드는 `throws` 절에 `Error`의 서브
클래스를 선언할 필요가 없습니다. 이러한 오류는 발생해서는 안 되는
비정상적 동작이기 때문에 메소드 실행 중에 발생할 수는 있지만
파악되지 않습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- Error () 지정한 세부 정보 메시지 없이 Error 를 구성합니다.
- Error ( String s) 지정한 세부 정보 메시지를 사용하여 Error를 구성합니다.
## 생성자 상세
### Error
```java
public Error()
```
- 지정한 세부 정보 메시지 없이 `Error`를 구성합니다.
### Error
```java
public Error(String s)
```
- 지정한 세부 정보 메시지를 사용하여 Error를 구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Exception"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
```
## 설명
**Direct Known Subclasses:**
- `ClassNotFoundException`, `IllegalAccessException`, `InstantiationException`, `InterruptedException`, `IOException`, `RuntimeException`
**extends Throwable:**
`Exception` 클래스와 해당 서브 클래스는 합리적
응용 프로그램이라면 파악해야 하는 동작을 나타내는
`Throwable`의 한 형태입니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Error``
## 생성자 요약
- Exception () 지정한 세부 정보 메시지 없이 Exception 을 구성합니다.
- Exception ( String s) 지정한 세부 정보 메시지를 사용하여 Exception 을 구성합니다.
## 생성자 상세
### Exception
```java
public Exception()
```
- 지정한 세부 정보 메시지 없이 `Exception`을 구성합니다.
### Exception
```java
public Exception(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `Exception`을 구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Float"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Float
```
## 설명
**extends Object:**
Float 클래스는 프리미티브 유형의 `float` 값을 객체에
포함합니다. `Float` 유형의 객체에는 유형이
`float`인 단일 필드가 있습니다.
또한, 이 클래스는 `float`를 `String`으로,
`String`을 `float`로 변환하는
여러 메소드와, `double`을
처리하는 데 유용한 다른 상수와 메소드를
제공합니다.
**Since:**
- JDK1.0, CLDC 1.1
## 필드 요약
- `static float MAX_VALUE` — float 유형의 최대 양수 값.
- `static float MIN_VALUE` — float 유형의 최소 양수 값.
- `static float NaN` — float 유형의 NaN (Not-a-Number) 값.
- `static float NEGATIVE_INFINITY` — float 유형의 음의 무한대.
- `static float POSITIVE_INFINITY` — float 유형의 양의 무한대.
## 생성자 요약
- Float (double value) float 유형으로 변환된 인자를 나타내는
새로 할당된 Float 객체를 구성합니다.
- Float (float value) 프리미티브 float 인자를 나타내는
새로 할당된 Float 객체를 구성합니다.
## 메서드 요약
- `byte byteValue ()` — 이 Float 값을 바이트로 반환합니다(byte로 캐스트).
- `double doubleValue ()` — 이 Float 객체의 double 값을 반환합니다.
- `boolean equals ( Object obj)` — 이 객체를 다른 객체와 비교합니다.
- `static int floatToIntBits (float value)` — 단일 float 값의 비트 표현을 반환합니다.
- `float floatValue ()` — 이 Float 객체의 float 값을 반환합니다.
- `int hashCode ()` — 이 Float 객체의 해시 코드를 반환합니다.
- `static float intBitsToFloat (int bits)` — 지정된 비트 표현에 해당하는 single-float를 반환합니다.
- `int intValue ()` — 이 Float의 정수 값을 반환합니다(int로 캐스트).
- `boolean isInfinite ()` — 이 Float 값의 크기가 무한히 크면 true를 반환합니다.
- `static boolean isInfinite (float v)` — 지정된 숫자의 크기가 무한히 크면 true를 반환합니다.
- `boolean isNaN ()` — 이 Float 값이 NaN (Not-a-Number)이면 true를 반환합니다.
- `static boolean isNaN (float v)` — 지정된 숫자가 특수 NaN (Not-a-Number) 값이면 true를 반환합니다.
- `long longValue ()` — 이 Float의 long 값을 반환합니다(long으로 캐스트).
- `static float parseFloat ( String s)` — 지정된 String 이 나타내는 값으로 초기화된 새 float를 반환합니다.
- `short shortValue ()` — 이 Float 값을 short로 반환합니다(short로 캐스트).
- `String toString ()` — 이 Float 객체의 String 표현을 반환합니다.
- `static String toString (float f)` — 지정된 float 값의 문자열 표현을 반환합니다.
- `static Float valueOf ( String s)` — 지정된 문자열이 나타내는 부동 소수점 값을 반환합니다.
## 필드 상세
### POSITIVE_INFINITY
```java
public static final float POSITIVE_INFINITY
```
**See Also:**
- `Constant Field Values`
### NEGATIVE_INFINITY
```java
public static final float NEGATIVE_INFINITY
```
**See Also:**
- `Constant Field Values`
### NaN
```java
public static final float NaN
```
**See Also:**
- `Constant Field Values`
### MAX_VALUE
```java
public static final float MAX_VALUE
```
**See Also:**
- `Constant Field Values`
### MIN_VALUE
```java
public static final float MIN_VALUE
```
**See Also:**
- `Constant Field Values`
### Float
```java
public Float(float value)
```
- 프리미티브 `float` 인자를 나타내는
새로 할당된 `Float` 객체를 구성합니다.
**Parameters:**
- `value` - `Float`가 나타내는 값
### Float
```java
public Float(double value)
```
- `float` 유형으로 변환된 인자를 나타내는
새로 할당된 `Float` 객체를 구성합니다.
**Parameters:**
- `value` - `Float`가 나타내는 값
### toString
```java
public static String toString(float f)
```
**Parameters:**
- `f` - 변환되는 float
**Returns:**
- 인자의 문자열 표현
### valueOf
```java
public static Float valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석
가능한 정수가 없는 경우
### parseFloat
```java
public static float parseFloat(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 float 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
float가 없는 경우
**Since:**
- JDK1.2
### isNaN
```java
public static boolean isNaN(float v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자가 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public static boolean isInfinite(float v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자가 양의 무한대이거나 음의 무한대이면
`true`, 그렇지 않으면 `false`
### isNaN
```java
public boolean isNaN()
```
**Returns:**
- 이 객체가 나타내는 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public boolean isInfinite()
```
**Returns:**
- 이 객체가 나타내는 값이 양의 무한대이거나
음의 무한대이면 `true`,
그렇지 않으면 `false`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 `String` 표현
**See Also:**
- ``toString(float)``
### byteValue
```java
public byte byteValue()
```
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`int` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교되는 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``floatToIntBits(float)``
### floatToIntBits
```java
public static int floatToIntBits(float value)
```
**Parameters:**
- `value` - 부동 소수점 숫자
**Returns:**
- 부동 소수점 숫자를 나타내는 비트
### intBitsToFloat
```java
public static float intBitsToFloat(int bits)
```
**Parameters:**
- `bits` - 정수
**Returns:**
- 동일한 비트 패턴을 가진 단일 형식의
부동 소수점 값
## 생성자 상세
### Float
```java
public Float(float value)
```
- 프리미티브 `float` 인자를 나타내는
새로 할당된 `Float` 객체를 구성합니다.
**Parameters:**
- `value` - `Float`가 나타내는 값
### Float
```java
public Float(double value)
```
- `float` 유형으로 변환된 인자를 나타내는
새로 할당된 `Float` 객체를 구성합니다.
**Parameters:**
- `value` - `Float`가 나타내는 값
### toString
```java
public static String toString(float f)
```
**Parameters:**
- `f` - 변환되는 float
**Returns:**
- 인자의 문자열 표현
### valueOf
```java
public static Float valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석
가능한 정수가 없는 경우
### parseFloat
```java
public static float parseFloat(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 float 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
float가 없는 경우
**Since:**
- JDK1.2
### isNaN
```java
public static boolean isNaN(float v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자가 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public static boolean isInfinite(float v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자가 양의 무한대이거나 음의 무한대이면
`true`, 그렇지 않으면 `false`
### isNaN
```java
public boolean isNaN()
```
**Returns:**
- 이 객체가 나타내는 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public boolean isInfinite()
```
**Returns:**
- 이 객체가 나타내는 값이 양의 무한대이거나
음의 무한대이면 `true`,
그렇지 않으면 `false`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 `String` 표현
**See Also:**
- ``toString(float)``
### byteValue
```java
public byte byteValue()
```
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`int` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교되는 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``floatToIntBits(float)``
### floatToIntBits
```java
public static int floatToIntBits(float value)
```
**Parameters:**
- `value` - 부동 소수점 숫자
**Returns:**
- 부동 소수점 숫자를 나타내는 비트
### intBitsToFloat
```java
public static float intBitsToFloat(int bits)
```
**Parameters:**
- `bits` - 정수
**Returns:**
- 동일한 비트 패턴을 가진 단일 형식의
부동 소수점 값
## 메서드 상세
### toString
```java
public static String toString(float f)
```
**Parameters:**
- `f` - 변환되는 float
**Returns:**
- 인자의 문자열 표현
### valueOf
```java
public static Float valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석
가능한 정수가 없는 경우
### parseFloat
```java
public static float parseFloat(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 float 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
float가 없는 경우
**Since:**
- JDK1.2
### isNaN
```java
public static boolean isNaN(float v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자가 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public static boolean isInfinite(float v)
```
**Parameters:**
- `v` - 테스트되는 값
**Returns:**
- 인자가 양의 무한대이거나 음의 무한대이면
`true`, 그렇지 않으면 `false`
### isNaN
```java
public boolean isNaN()
```
**Returns:**
- 이 객체가 나타내는 값이 NaN이면 `true`,
NaN이 아니면 `false`
### isInfinite
```java
public boolean isInfinite()
```
**Returns:**
- 이 객체가 나타내는 값이 양의 무한대이거나
음의 무한대이면 `true`,
그렇지 않으면 `false`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 객체의 `String` 표현
**See Also:**
- ``toString(float)``
### byteValue
```java
public byte byteValue()
```
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`int` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `float` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교되는 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``floatToIntBits(float)``
### floatToIntBits
```java
public static int floatToIntBits(float value)
```
**Parameters:**
- `value` - 부동 소수점 숫자
**Returns:**
- 부동 소수점 숫자를 나타내는 비트
### intBitsToFloat
```java
public static float intBitsToFloat(int bits)
```
**Parameters:**
- `bits` - 정수
**Returns:**
- 동일한 비트 패턴을 가진 단일 형식의
부동 소수점 값
---
title: "Class IllegalAccessException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.IllegalAccessException
```
## 설명
**extends Exception:**
응용 프로그램이 클래스를 로드하려고 시도하지만
클래스가 공용이 아니고
다른 패키지에 있기 때문에 현재 실행 중인 메소드가 지정된
클래스의 정의에 액세스할 수 없을 때 발생합니다.
이 클래스의 인스턴스는 응용 프로그램이
`Class` 클래스의 `newInstance`
메소드를 사용하여 클래스의 인스턴스를 만들려고 시도하지만
인자가 0인 해당 구성자를 현재 메소드가 액세스할 수 없는 경우에도
발생할 수 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Class.forName(java.lang.String)``,
``Class.newInstance()``
## 생성자 요약
- IllegalAccessException () 세부 정보 메시지 없이 IllegalAccessException 을
구성합니다.
- IllegalAccessException ( String s) 세부 정보 메시지를 사용하여 IllegalAccessException 을 구성합니다.
## 생성자 상세
### IllegalAccessException
```java
public IllegalAccessException()
```
- 세부 정보 메시지 없이 `IllegalAccessException`을
구성합니다.
### IllegalAccessException
```java
public IllegalAccessException(String s)
```
- 세부 정보 메시지를 사용하여 `IllegalAccessException`을 구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class IllegalArgumentException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalArgumentException
```
## 설명
**Direct Known Subclasses:**
- `IllegalThreadStateException`, `NumberFormatException`
**extends RuntimeException:**
메소드에 유효하지 않거나 잘못된 인자가
전달되었음을 나타냅니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Thread.setPriority(int)``
## 생성자 요약
- IllegalArgumentException () 세부 정보 메시지 없이 IllegalArgumentException 을
구성합니다.
- IllegalArgumentException ( String s) 지정한 세부 정보 메시지를 사용하여 IllegalArgumentException 을
구성합니다.
## 생성자 상세
### IllegalArgumentException
```java
public IllegalArgumentException()
```
- 세부 정보 메시지 없이 `IllegalArgumentException`을
구성합니다.
### IllegalArgumentException
```java
public IllegalArgumentException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `IllegalArgumentException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class IllegalMonitorStateException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalMonitorStateException
```
## 설명
**extends RuntimeException:**
스레드가 객체의 모니터에서 대기하거나,
지정된 모니터를 소유하지 않고 객체의 모니터에서 대기 중인
다른 스레드에게 알리려고 시도했음을 나타냅니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Object.notify()``,
``Object.notifyAll()``,
``Object.wait()``,
``Object.wait(long)``,
``Object.wait(long, int)``
## 생성자 요약
- IllegalMonitorStateException () 세부 정보 메시지 없이 IllegalMonitorStateException 을
구성합니다.
- IllegalMonitorStateException ( String s) 지정한 세부 정보 메시지를 사용하여 IllegalMonitorStateException 을
구성합니다.
## 생성자 상세
### IllegalMonitorStateException
```java
public IllegalMonitorStateException()
```
- 세부 정보 메시지 없이 `IllegalMonitorStateException`을
구성합니다.
### IllegalMonitorStateException
```java
public IllegalMonitorStateException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `IllegalMonitorStateException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class IllegalThreadStateException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalArgumentException
|
+--java.lang.IllegalThreadStateException
```
## 설명
**extends IllegalArgumentException:**
스레드가 요청된 작업에 적합한 상태가 아님을 나타냅니다.
예를 들어, `Thread` 클래스의
`suspend` 및 `resume`
메소드를 참조하십시오.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- IllegalThreadStateException () 세부 정보 메시지 없이 IllegalThreadStateException 을
구성합니다.
- IllegalThreadStateException ( String s) 지정한 세부 정보 메시지를 사용하여 IllegalThreadStateException 을
구성합니다.
## 생성자 상세
### IllegalThreadStateException
```java
public IllegalThreadStateException()
```
- 세부 정보 메시지 없이 `IllegalThreadStateException`을
구성합니다.
### IllegalThreadStateException
```java
public IllegalThreadStateException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `IllegalThreadStateException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class IndexOutOfBoundsException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
```
## 설명
**Direct Known Subclasses:**
- `ArrayIndexOutOfBoundsException`, `StringIndexOutOfBoundsException`
**extends RuntimeException:**
배열, 문자열 또는 벡터 등에 대한 색인이
범위를 벗어났음을 나타냅니다.
응용 프로그램은 유사한 예외를 나타내기 위해 이 클래스의 서브 클래스를 구성할 수 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- IndexOutOfBoundsException () 세부 정보 메시지 없이 IndexOutOfBoundsException 을
구성합니다.
- IndexOutOfBoundsException ( String s) 지정한 세부 정보 메시지를 사용하여 IndexOutOfBoundsException 을
구성합니다.
## 생성자 상세
### IndexOutOfBoundsException
```java
public IndexOutOfBoundsException()
```
- 세부 정보 메시지 없이 `IndexOutOfBoundsException`을
구성합니다.
### IndexOutOfBoundsException
```java
public IndexOutOfBoundsException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `IndexOutOfBoundsException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class InstantiationException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.InstantiationException
```
## 설명
**extends Exception:**
응용 프로그램이 `Class` 클래스의
`newInstance` 메소드를 사용하여
클래스의 인스턴스를 만들려고 시도하지만 지정된 클래스 객체가
인터페이스이거나 추상 클래스여서 인스턴스화할 수 없을 때 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Class.newInstance()``
## 생성자 요약
- InstantiationException () 세부 정보 메시지 없이 InstantiationException 을 구성합니다.
- InstantiationException ( String s) 지정한 세부 정보 메시지를 사용하여 InstantiationException 을
구성합니다.
## 생성자 상세
### InstantiationException
```java
public InstantiationException()
```
- 세부 정보 메시지 없이 `InstantiationException`을 구성합니다.
### InstantiationException
```java
public InstantiationException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `InstantiationException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Integer"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Integer
```
## 설명
**extends Object:**
Integer 클래스는 프리미티브 유형의 `int` 값을
객체에 포함합니다. `Integer` 유형의 객체에는 유형이
`int`인 단일 필드가 있습니다.
또한, 이 클래스는 `int`를
`String`으로,
`String`을 `int`로 변환하는 여러 메소드와,
`int`을 처리하는 데 유용한
다른 상수와 메소드를 제공합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `static int MAX_VALUE` — int 유형의 최대값.
- `static int MIN_VALUE` — int 유형의 최소값.
## 생성자 요약
- Integer (int value) 프리미티브 int 인자를 나타내는 새로 할당된 Integer 객체를 구성합니다.
## 메서드 요약
- `byte byteValue ()` — 이 정수 값을 바이트로 반환합니다.
- `double doubleValue ()` — 이 정수 값을 double 로 반환합니다.
- `boolean equals ( Object obj)` — 이 객체를 지정된 객체와 비교합니다.
- `float floatValue ()` — 이 정수 값을 float 로 반환합니다.
- `int hashCode ()` — 이 정수의 해시 코드를 반환합니다.
- `int intValue ()` — 이 정수 값을 int로 반환합니다.
- `long longValue ()` — 이 정수 값을 long 으로 반환합니다.
- `static int parseInt ( String s)` — 문자열 인자를 부호 있는 십진 정수로 구문 분석합니다.
- `static int parseInt ( String s, int radix)` — 문자열 인자를 두 번째 인자로 지정된 기수의 부호 있는 정수로 구문 분석합니다.
- `short shortValue ()` — 이 정수 값을 short로 반환합니다.
- `static String toBinaryString (int i)` — 정수 인자의 문자열 표현을 기수 2의 부호 없는 정수로 만듭니다.
- `static String toHexString (int i)` — 정수 인자의 문자열 표현을 기수 16의 부호 없는 정수로 만듭니다.
- `static String toOctalString (int i)` — 정수 인자의 문자열 표현을 기수 8의 부호 없는 정수로 만듭니다.
- `String toString ()` — 이 정수의 값을 나타내는 문자열 객체를 반환합니다.
- `static String toString (int i)` — 지정된 정수를 나타내는 새 문자열 객체를 반환합니다.
- `static String toString (int i, int radix)` — 두 번째 인자로 지정된 기수에 첫 번째 인자의 문자열 표현을 만듭니다.
- `static Integer valueOf ( String s)` — 지정된 문자열 값으로 초기화된 새 정수 객체를 반환합니다.
- `static Integer valueOf ( String s, int radix)` — 지정된 문자열 값으로 초기화된 새 정수 객체를 반환합니다.
## 필드 상세
### MIN_VALUE
```java
public static final int MIN_VALUE
```
**See Also:**
- `Constant Field Values`
### MAX_VALUE
```java
public static final int MAX_VALUE
```
**See Also:**
- `Constant Field Values`
### Integer
```java
public Integer(int value)
```
- 프리미티브 `int` 인자를 나타내는 새로 할당된
`Integer` 객체를 구성합니다.
**Parameters:**
- `value` - `Integer`가 나타내는 값
### toString
```java
public static String toString(int i,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 지정된 기수를 사용한 인자의 문자열 표현
**See Also:**
- ``Character.MAX_RADIX``,
``Character.MIN_RADIX``
### toHexString
```java
public static String toHexString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 16진수(기수 16) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toOctalString
```java
public static String toOctalString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 8진수(기수 8) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toBinaryString
```java
public static String toBinaryString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 2진수(기수 2) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toString
```java
public static String toString(int i)
```
**Parameters:**
- `i` - 변환되는 정수
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### parseInt
```java
public static int parseInt(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 기수의 문자열 인자가
나타내는 정수
**Throws:**
- `NumberFormatException` - 문자열에
구문 분석 가능한 정수가 없는 경우
### parseInt
```java
public static int parseInt(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 문자열
**Returns:**
- 십진수 인자가 나타내는 정수
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### valueOf
```java
public static Integer valueOf(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 문자열 `s`가 나타내는
정수의 기수
**Returns:**
- 지정된 기수의 문자열 인자가 나타내는 값으로 초기화된
새로 구성된
`Integer`
**Throws:**
- `NumberFormatException` - 문자열을
`int`로 구문 분석할 수 없는 경우
### valueOf
```java
public static Integer valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 값으로 초기화된
새로 구성된 `Integer`
**Throws:**
- `NumberFormatException` - 문자열을 정수로
구문 분석할 수 없는 경우
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 이 정수 값(바이트)
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Returns:**
- 이 정수 값(short)
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 기수 10을 사용한 이 객체 값의
문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- `Integer` 객체가 나타내는
프리미티브 `int` 값과 같은
이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 생성자 상세
### Integer
```java
public Integer(int value)
```
- 프리미티브 `int` 인자를 나타내는 새로 할당된
`Integer` 객체를 구성합니다.
**Parameters:**
- `value` - `Integer`가 나타내는 값
### toString
```java
public static String toString(int i,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 지정된 기수를 사용한 인자의 문자열 표현
**See Also:**
- ``Character.MAX_RADIX``,
``Character.MIN_RADIX``
### toHexString
```java
public static String toHexString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 16진수(기수 16) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toOctalString
```java
public static String toOctalString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 8진수(기수 8) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toBinaryString
```java
public static String toBinaryString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 2진수(기수 2) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toString
```java
public static String toString(int i)
```
**Parameters:**
- `i` - 변환되는 정수
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### parseInt
```java
public static int parseInt(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 기수의 문자열 인자가
나타내는 정수
**Throws:**
- `NumberFormatException` - 문자열에
구문 분석 가능한 정수가 없는 경우
### parseInt
```java
public static int parseInt(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 문자열
**Returns:**
- 십진수 인자가 나타내는 정수
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### valueOf
```java
public static Integer valueOf(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 문자열 `s`가 나타내는
정수의 기수
**Returns:**
- 지정된 기수의 문자열 인자가 나타내는 값으로 초기화된
새로 구성된
`Integer`
**Throws:**
- `NumberFormatException` - 문자열을
`int`로 구문 분석할 수 없는 경우
### valueOf
```java
public static Integer valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 값으로 초기화된
새로 구성된 `Integer`
**Throws:**
- `NumberFormatException` - 문자열을 정수로
구문 분석할 수 없는 경우
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 이 정수 값(바이트)
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Returns:**
- 이 정수 값(short)
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 기수 10을 사용한 이 객체 값의
문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- `Integer` 객체가 나타내는
프리미티브 `int` 값과 같은
이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 메서드 상세
### toString
```java
public static String toString(int i,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 지정된 기수를 사용한 인자의 문자열 표현
**See Also:**
- ``Character.MAX_RADIX``,
``Character.MIN_RADIX``
### toHexString
```java
public static String toHexString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 16진수(기수 16) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toOctalString
```java
public static String toOctalString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 8진수(기수 8) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toBinaryString
```java
public static String toBinaryString(int i)
```
**Parameters:**
- `i` - 정수
**Returns:**
- 2진수(기수 2) 인자가 나타내는
부호 없는 정수 값의 문자열 표현
**Since:**
- JDK1.0.2
### toString
```java
public static String toString(int i)
```
**Parameters:**
- `i` - 변환되는 정수
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### parseInt
```java
public static int parseInt(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 기수의 문자열 인자가
나타내는 정수
**Throws:**
- `NumberFormatException` - 문자열에
구문 분석 가능한 정수가 없는 경우
### parseInt
```java
public static int parseInt(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 문자열
**Returns:**
- 십진수 인자가 나타내는 정수
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### valueOf
```java
public static Integer valueOf(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 문자열 `s`가 나타내는
정수의 기수
**Returns:**
- 지정된 기수의 문자열 인자가 나타내는 값으로 초기화된
새로 구성된
`Integer`
**Throws:**
- `NumberFormatException` - 문자열을
`int`로 구문 분석할 수 없는 경우
### valueOf
```java
public static Integer valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 구문 분석되는 문자열
**Returns:**
- 문자열 인자가 나타내는 값으로 초기화된
새로 구성된 `Integer`
**Throws:**
- `NumberFormatException` - 문자열을 정수로
구문 분석할 수 없는 경우
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 이 정수 값(바이트)
**Since:**
- JDK1.1
### shortValue
```java
public short shortValue()
```
**Returns:**
- 이 정수 값(short)
**Since:**
- JDK1.1
### intValue
```java
public int intValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`long` 유형으로 변환되어
그 변환 결과가 반환됩니다.
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `int` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 기수 10을 사용한 이 객체 값의
문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- `Integer` 객체가 나타내는
프리미티브 `int` 값과 같은
이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
---
title: "Class InterruptedException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.InterruptedException
```
## 설명
**extends Exception:**
스레드가 대기 또는 휴면 상태이거나 오랫동안 중지되어
다른 스레드가 이를 중단한 경우에 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Object.wait()``,
``Object.wait(long)``,
``Object.wait(long, int)``,
``Thread.sleep(long)``
## 생성자 요약
- InterruptedException () 세부 정보 메시지 없이 InterruptedException 을 구성합니다.
- InterruptedException ( String s) 지정한 세부 정보 메시지를 사용하여 InterruptedException 을
구성합니다.
## 생성자 상세
### InterruptedException
```java
public InterruptedException()
```
- 세부 정보 메시지 없이 `InterruptedException`을 구성합니다.
### InterruptedException
```java
public InterruptedException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `InterruptedException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Long"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Long
```
## 설명
**extends Object:**
Long 클래스는 프리미티브 유형의 `long` 값을
객체에 포함합니다. `Long` 유형의 객체에는
유형이 `long`인 단일 필드가 있습니다.
또한, 이 클래스는 `long`을
`String`으로, `String`을
`long`으로 변환하는 여러 메소드와, `long`을
처리하는 데 유용한 다른 상수와
메소드를 제공합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `static long MAX_VALUE` — long 유형의 최대값
- `static long MIN_VALUE` — long 유형의 최소값
## 생성자 요약
- Long (long value) 프리미티브 long 인자를 나타내는 새로 할당된 Long 객체를 구성합니다.
## 메서드 요약
- `double doubleValue ()` — 이 Long 값을 double로 반환합니다.
- `boolean equals ( Object obj)` — 이 객체를 지정된 객체와 비교합니다.
- `float floatValue ()` — 이 Long 값을 float로 반환합니다.
- `int hashCode ()` — 이 Long의 해시 코드를 계산합니다.
- `long longValue ()` — 이 Long 값을 long 값으로 반환합니다.
- `static long parseLong ( String s)` — 문자열 인자를 부호 있는 십진수 long 으로 구문 분석합니다.
- `static long parseLong ( String s, int radix)` — 문자열 인자를 두 번째 인자로 지정된 기수의 부호 있는 long 으로 구문 분석합니다.
- `String toString ()` — 이 Long의 값을 나타내는 문자열 객체를 반환합니다.
- `static String toString (long i)` — 지정된 정수를 나타내는 새 문자열 객체를 반환합니다.
- `static String toString (long i, int radix)` — 두 번째 인자로 지정된 기수에 첫 번째 인자의 문자열 표현을 만듭니다.
## 필드 상세
### MIN_VALUE
```java
public static final long MIN_VALUE
```
**See Also:**
- `Constant Field Values`
### MAX_VALUE
```java
public static final long MAX_VALUE
```
**See Also:**
- `Constant Field Values`
### Long
```java
public Long(long value)
```
- 프리미티브 `long` 인자를 나타내는 새로 할당된
`Long` 객체를 구성합니다.
**Parameters:**
- `value` - `Long`
객체가 나타내는 값
### toString
```java
public static String toString(long i,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 지정된 기수를 사용한 인자의 문자열 표현
**See Also:**
- ``Character.MAX_RADIX``,
``Character.MIN_RADIX``
### toString
```java
public static String toString(long i)
```
**Parameters:**
- `i` - 변환되는 `long`
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### parseLong
```java
public static long parseLong(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 기수의 문자열 인자가 나타내는
`long`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### parseLong
```java
public static long parseLong(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 문자열
**Returns:**
- 십진수 인자가 나타내는 `long`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
`long`이 없는 경우
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 생성자 상세
### Long
```java
public Long(long value)
```
- 프리미티브 `long` 인자를 나타내는 새로 할당된
`Long` 객체를 구성합니다.
**Parameters:**
- `value` - `Long`
객체가 나타내는 값
### toString
```java
public static String toString(long i,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 지정된 기수를 사용한 인자의 문자열 표현
**See Also:**
- ``Character.MAX_RADIX``,
``Character.MIN_RADIX``
### toString
```java
public static String toString(long i)
```
**Parameters:**
- `i` - 변환되는 `long`
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### parseLong
```java
public static long parseLong(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 기수의 문자열 인자가 나타내는
`long`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### parseLong
```java
public static long parseLong(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 문자열
**Returns:**
- 십진수 인자가 나타내는 `long`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
`long`이 없는 경우
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 메서드 상세
### toString
```java
public static String toString(long i,
int radix)
```
**Parameters:**
- `radix` - 기수
**Returns:**
- 지정된 기수를 사용한 인자의 문자열 표현
**See Also:**
- ``Character.MAX_RADIX``,
``Character.MIN_RADIX``
### toString
```java
public static String toString(long i)
```
**Parameters:**
- `i` - 변환되는 `long`
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### parseLong
```java
public static long parseLong(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 기수의 문자열 인자가 나타내는
`long`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
정수가 없는 경우
### parseLong
```java
public static long parseLong(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 문자열
**Returns:**
- 십진수 인자가 나타내는 `long`
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
`long`이 없는 경우
### longValue
```java
public long longValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값
### floatValue
```java
public float floatValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값이
`float` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### doubleValue
```java
public double doubleValue()
```
**Returns:**
- 이 객체가 나타내는 `long` 값이
`double` 유형으로 변환되어
그 변환 결과가 반환됩니다.
**Since:**
- CLDC 1.1
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 기수 10을 사용한 인자의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
---
title: "Class Math"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Math
```
## 설명
**extends Object:**
`Math` 클래스에는 기본 수식 작업을 수행하기 위한
메소드가 포함되어 있습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `static double E` — 자연 로그의 기수인 e 에 가장 가까운 double 값
- `static double PI` — 원주와 지름의 비율인 pi 에 가장 가까운 double 값
## 메서드 요약
- `static double abs (double a)` — double 값의 절대값을 반환합니다.
- `static float abs (float a)` — float 값의 절대값을 반환합니다.
- `static int abs (int a)` — int 값의 절대값을 반환합니다.
- `static long abs (long a)` — long 값의 절대값을 반환합니다.
- `static double ceil (double a)` — 인자보다 작지 않고 연산 정수와 같은 가장 작은(음의 무한대에 가장 가까운) double 값을 반환합니다.
- `static double cos (double a)` — 각도의 삼각 코사인을 반환합니다.
- `static double floor (double a)` — 인자보다 크지 않고 연산 정수와 같은 가장 큰(양의 무한대에 가장 가까운) double 값을 반환합니다.
- `static double max (double a, double b)` — 두 double 값 중에서 큰 값을 반환합니다.
- `static float max (float a, float b)` — 두 float 값 중에서 큰 값을 반환합니다.
- `static int max (int a, int b)` — 두 int 값 중에서 큰 값을 반환합니다.
- `static long max (long a, long b)` — 두 long 값 중에서 큰 값을 반환합니다.
- `static double min (double a, double b)` — 두 double 값 중에서 작은 값을 반환합니다.
- `static float min (float a, float b)` — 두 float 값 중에서 작은 값을 반환합니다.
- `static int min (int a, int b)` — 두 int 값 중에서 작은 값을 반환합니다.
- `static long min (long a, long b)` — 두 long 값 중에서 작은 값을 반환합니다.
- `static double sin (double a)` — 각도의 삼각 사인을 반환합니다.
- `static double sqrt (double a)` — double 값을 올바로 반올림한 양의 제곱근을 반환합니다.
- `static double tan (double a)` — 각도의 삼각 탄젠트를 반환합니다.
- `static double toDegrees (double angrad)` — 라디안 값을 해당 각도로 변환합니다.
- `static double toRadians (double angdeg)` — 각도를 해당 라디안 값으로 변환합니다.
## 필드 상세
### E
```java
public static final double E
```
**Since:**
- CLDC 1.1
**See Also:**
- `Constant Field Values`
### PI
```java
public static final double PI
```
**Since:**
- CLDC 1.1
**See Also:**
- `Constant Field Values`
### sin
```java
public static double sin(double a)
```
**Parameters:**
- `a` - 각도(라디안)
**Returns:**
- 인자의 사인
**Since:**
- CLDC 1.1
### cos
```java
public static double cos(double a)
```
**Parameters:**
- `a` - 각도(라디안)
**Returns:**
- 인자의 코사인
**Since:**
- CLDC 1.1
### tan
```java
public static double tan(double a)
```
**Parameters:**
- `a` - 각도(라디안)
**Returns:**
- 인자의 탄젠트
**Since:**
- CLDC 1.1
### toRadians
```java
public static double toRadians(double angdeg)
```
**Parameters:**
- `angdeg` - 각도(도)
**Returns:**
- `angdeg`에 해당하는
라디안 값
**Since:**
- CLDC 1.1
### toDegrees
```java
public static double toDegrees(double angrad)
```
**Parameters:**
- `angrad` - 각도(라디안)
**Returns:**
- `angrad`에 해당하는
각도
**Since:**
- CLDC 1.1
### sqrt
```java
public static double sqrt(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- `a`의 양의 제곱근.
인자가 NaN이거나 0보다 작으면 결과 값은 NaN입니다.
**Since:**
- CLDC 1.1
### ceil
```java
public static double ceil(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- 인자보다 작지 않고 연산 정수와 같은
가장 작은(음의 무한대에 가장 가까운)
`double` 값
**Since:**
- CLDC 1.1
### floor
```java
public static double floor(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- 인자보다 크지 않고 연산 정수와 같은
가장 큰(양의 무한대에 가장 가까운)
`double` 값
**Since:**
- CLDC 1.1
### abs
```java
public static int abs(int a)
```
**Parameters:**
- `a` - `int` 값
**Returns:**
- 인자의 절대값
**See Also:**
- ``Integer.MIN_VALUE``
### abs
```java
public static long abs(long a)
```
**Parameters:**
- `a` - `long` 값
**Returns:**
- 인자의 절대값
**See Also:**
- ``Long.MIN_VALUE``
### abs
```java
public static float abs(float a)
```
**Parameters:**
- `a` - `float` 값
**Returns:**
- 인자의 절대값
**Since:**
- CLDC 1.1
### abs
```java
public static double abs(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- 인자의 절대값
**Since:**
- CLDC 1.1
### max
```java
public static int max(int a,
int b)
```
**Parameters:**
- `b` - `int` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
**See Also:**
- ``Long.MAX_VALUE``
### max
```java
public static long max(long a,
long b)
```
**Parameters:**
- `b` - `long` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
**See Also:**
- ``Long.MAX_VALUE``
### max
```java
public static float max(float a,
float b)
```
**Parameters:**
- `b` - `float` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
### max
```java
public static double max(double a,
double b)
```
**Parameters:**
- `b` - `double` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
### min
```java
public static int min(int a,
int b)
```
**Parameters:**
- `b` - `int` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**See Also:**
- ``Long.MIN_VALUE``
### min
```java
public static long min(long a,
long b)
```
**Parameters:**
- `b` - `long` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**See Also:**
- ``Long.MIN_VALUE``
### min
```java
public static float min(float a,
float b)
```
**Parameters:**
- `b` - `float` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**Since:**
- CLDC 1.1
### min
```java
public static double min(double a,
double b)
```
**Parameters:**
- `b` - `double` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**Since:**
- CLDC 1.1
## 메서드 상세
### sin
```java
public static double sin(double a)
```
**Parameters:**
- `a` - 각도(라디안)
**Returns:**
- 인자의 사인
**Since:**
- CLDC 1.1
### cos
```java
public static double cos(double a)
```
**Parameters:**
- `a` - 각도(라디안)
**Returns:**
- 인자의 코사인
**Since:**
- CLDC 1.1
### tan
```java
public static double tan(double a)
```
**Parameters:**
- `a` - 각도(라디안)
**Returns:**
- 인자의 탄젠트
**Since:**
- CLDC 1.1
### toRadians
```java
public static double toRadians(double angdeg)
```
**Parameters:**
- `angdeg` - 각도(도)
**Returns:**
- `angdeg`에 해당하는
라디안 값
**Since:**
- CLDC 1.1
### toDegrees
```java
public static double toDegrees(double angrad)
```
**Parameters:**
- `angrad` - 각도(라디안)
**Returns:**
- `angrad`에 해당하는
각도
**Since:**
- CLDC 1.1
### sqrt
```java
public static double sqrt(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- `a`의 양의 제곱근.
인자가 NaN이거나 0보다 작으면 결과 값은 NaN입니다.
**Since:**
- CLDC 1.1
### ceil
```java
public static double ceil(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- 인자보다 작지 않고 연산 정수와 같은
가장 작은(음의 무한대에 가장 가까운)
`double` 값
**Since:**
- CLDC 1.1
### floor
```java
public static double floor(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- 인자보다 크지 않고 연산 정수와 같은
가장 큰(양의 무한대에 가장 가까운)
`double` 값
**Since:**
- CLDC 1.1
### abs
```java
public static int abs(int a)
```
**Parameters:**
- `a` - `int` 값
**Returns:**
- 인자의 절대값
**See Also:**
- ``Integer.MIN_VALUE``
### abs
```java
public static long abs(long a)
```
**Parameters:**
- `a` - `long` 값
**Returns:**
- 인자의 절대값
**See Also:**
- ``Long.MIN_VALUE``
### abs
```java
public static float abs(float a)
```
**Parameters:**
- `a` - `float` 값
**Returns:**
- 인자의 절대값
**Since:**
- CLDC 1.1
### abs
```java
public static double abs(double a)
```
**Parameters:**
- `a` - `double` 값
**Returns:**
- 인자의 절대값
**Since:**
- CLDC 1.1
### max
```java
public static int max(int a,
int b)
```
**Parameters:**
- `b` - `int` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
**See Also:**
- ``Long.MAX_VALUE``
### max
```java
public static long max(long a,
long b)
```
**Parameters:**
- `b` - `long` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
**See Also:**
- ``Long.MAX_VALUE``
### max
```java
public static float max(float a,
float b)
```
**Parameters:**
- `b` - `float` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
### max
```java
public static double max(double a,
double b)
```
**Parameters:**
- `b` - `double` 값
**Returns:**
- `a`와 `b` 중에서 큰 값
### min
```java
public static int min(int a,
int b)
```
**Parameters:**
- `b` - `int` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**See Also:**
- ``Long.MIN_VALUE``
### min
```java
public static long min(long a,
long b)
```
**Parameters:**
- `b` - `long` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**See Also:**
- ``Long.MIN_VALUE``
### min
```java
public static float min(float a,
float b)
```
**Parameters:**
- `b` - `float` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**Since:**
- CLDC 1.1
### min
```java
public static double min(double a,
double b)
```
**Parameters:**
- `b` - `double` 값
**Returns:**
- `a`와 `b` 중에서 작은 값
**Since:**
- CLDC 1.1
---
title: "Class NegativeArraySizeException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.NegativeArraySizeException
```
## 설명
**extends RuntimeException:**
응용 프로그램이 음수 크기를 사용하여 배열을 만들려고 시도하면 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- NegativeArraySizeException () 세부 정보 메시지 없이 NegativeArraySizeException 을
구성합니다.
- NegativeArraySizeException ( String s) 지정한 세부 정보 메시지를 사용하여 NegativeArraySizeException 을
구성합니다.
## 생성자 상세
### NegativeArraySizeException
```java
public NegativeArraySizeException()
```
- 세부 정보 메시지 없이 `NegativeArraySizeException`을
구성합니다.
### NegativeArraySizeException
```java
public NegativeArraySizeException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `NegativeArraySizeException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class NoClassDefFoundError"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Error
|
+--java.lang.NoClassDefFoundError
```
## 설명
**extends Error:**
Java 가상 머신이 클래스 정의를 정상적인 메소드 호출의 일부나
`new` 표현식을 사용한
새 인스턴스 작성 과정의 일부로 로드하려고
시도하지만 클래스 정의를 찾을 수 없는 경우에 발생합니다.
현재 실행 중인 클래스를 컴파일했을 경우
찾고 있던 클래스 정의가 있지만
해당 정의는 찾을 수 없습니다.
**Since:**
- JDK1.0, CLDC 1.1
## 생성자 요약
- NoClassDefFoundError () 세부 정보 메시지 없이 NoClassDefFoundError 를 구성합니다.
- NoClassDefFoundError ( String s) 지정한 세부 정보 메시지를 사용하여 NoClassDefFoundError 를
구성합니다.
## 생성자 상세
### NoClassDefFoundError
```java
public NoClassDefFoundError()
```
- 세부 정보 메시지 없이 `NoClassDefFoundError`를 구성합니다.
### NoClassDefFoundError
```java
public NoClassDefFoundError(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `NoClassDefFoundError`를
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class NullPointerException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.NullPointerException
```
## 설명
**extends RuntimeException:**
객체가 요구되는 경우에 응용 프로그램이 `null`을 사용하려고
시도하면 발생합니다. 다음과 같은 경우가 포함됩니다.
- `null` 객체의 인스턴스 메소드를 호출하는 경우
- `null` 객체의 필드를 액세스하거나 수정하는 경우
- 배열처럼 `null` 길이를 사용하는 경우
- 배열처럼 `null` 슬롯을 액세스하거나
수정하는 경우
- `Throwable` 값처럼 `null`을
발생시키는 경우
응용 프로그램은 이 클래스의 인스턴스를 발생시켜
`null` 객체의 다른 유효하지 않은 사용을 표시합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- NullPointerException () 세부 정보 메시지 없이 NullPointerException 을 구성합니다.
- NullPointerException ( String s) 지정한 세부 정보 메시지를 사용하여 NullPointerException 을
구성합니다.
## 생성자 상세
### NullPointerException
```java
public NullPointerException()
```
- 세부 정보 메시지 없이 `NullPointerException`을 구성합니다.
### NullPointerException
```java
public NullPointerException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `NullPointerException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class NumberFormatException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalArgumentException
|
+--java.lang.NumberFormatException
```
## 설명
**extends IllegalArgumentException:**
응용 프로그램이 문자열을 숫자 유형 중 하나로 변환하려고
시도했지만 해당 문자열의 형식이
잘못되었음을 나타냅니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Integer.toString()``
## 생성자 요약
- NumberFormatException () 세부 정보 메시지 없이 NumberFormatException 을 구성합니다.
- NumberFormatException ( String s) 지정한 세부 정보 메시지를 사용하여 NumberFormatException 을
구성합니다.
## 생성자 상세
### NumberFormatException
```java
public NumberFormatException()
```
- 세부 정보 메시지 없이 `NumberFormatException`을 구성합니다.
### NumberFormatException
```java
public NumberFormatException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `NumberFormatException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Object"
---
`package java.lang`
```text
java.lang.Object
```
## 설명
**public class Object:**
`Object` 클래스는 클래스 계층 구조의 루트입니다. 모든 클래스에는 수퍼 클래스인 `Object`가 있습니다. 배열을 포함한 모든 객체는 이 클래스의 메소드를 구현합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Class``
## 생성자 요약
- Object ()
## 메서드 요약
- `boolean equals ( Object obj)` — 다른 객체가 이 객체와 "같은지" 여부를 나타냅니다.
- `Class getClass ()` — 객체의 런타임 클래스를 반환합니다.
- `int hashCode ()` — 이 객체의 해시 코드 값을 반환합니다.
- `void notify ()` — 이 객체의 모니터에서 대기 중인 문자열 스레드를 실행 가능 상태로 만듭니다.
- `void notifyAll ()` — 이 객체의 모니터에서 대기 중인 모든 스레드를 실행 가능 상태로 만듭니다.
- `String toString ()` — 이 객체의 문자열 표현을 반환합니다.
- `void wait ()` — 다른 스레드가 이 객체의 `notify()` 메소드나 `notifyAll()` 메소드를 호출할 때까지 현재 스레드가 대기하도록 합니다.
- `void wait (long timeout)` — 다른 스레드가 이 객체의 `notify()` 메소드나 `notifyAll()` 메소드를 호출하거나 지정된 시간이 경과할 때까지 현재 스레드가 대기하도록 합니다.
- `void wait (long timeout, int nanos)` — 다른 스레드가 이 객체의 `notify()` 메소드나 `notifyAll()` 메소드를 호출하거나 다른 스레드가 현재 스레드를 중단하거나 특정 실제 시간이 경과할 때까지 현재 스레드가 대기하도록 합니다.
## 생성자 상세
### Object
```java
public Object()
```
### getClass
```java
public final Class getClass()
```
**Returns:**
- 객체의 런타임 클래스를 나타내는 `Class` 유형의 객체
### hashCode
```java
public int hashCode()
```
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Parameters:**
- `obj` - 비교할 참조 객체
**Returns:**
- 이 객체가 obj 인자와 동일하면 `true`, 다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### toString
```java
public String toString()
```
**Returns:**
- 객체의 문자열 표현
### notify
```java
public final void notify()
```
**Throws:**
- `IllegalMonitorStateException` - 현재 스레드가 객체 모니터의 소유자가 아닌 경우
**See Also:**
- ``notifyAll()``,
``wait()``
### notifyAll
```java
public final void notifyAll()
```
**Throws:**
- `IllegalMonitorStateException` - 현재 스레드가 객체 모니터의 소유자가 아닌 경우
**See Also:**
- ``notify()``,
``wait()``
### wait
```java
public final void wait(long timeout)
throws InterruptedException
```
**Parameters:**
- `timeout` - 최대 대기 시간(밀리초)
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를 중단한 경우 이 예외가 발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
**See Also:**
- ``notify()``,
``notifyAll()``
### wait
```java
public final void wait(long timeout,
int nanos)
throws InterruptedException
```
**Parameters:**
- `nanos` - 추가 시간(0-999999 범위의 나노초)
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를 중단한 경우 이 예외가 발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
### wait
```java
public final void wait()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를 중단한 경우 이 예외가 발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
**See Also:**
- ``notify()``,
``notifyAll()``
## 메서드 상세
### getClass
```java
public final Class getClass()
```
**Returns:**
- 객체의 런타임 클래스를 나타내는 `Class` 유형의 객체
### hashCode
```java
public int hashCode()
```
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Parameters:**
- `obj` - 비교할 참조 객체
**Returns:**
- 이 객체가 obj 인자와 동일하면 `true`, 다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### toString
```java
public String toString()
```
**Returns:**
- 객체의 문자열 표현
### notify
```java
public final void notify()
```
**Throws:**
- `IllegalMonitorStateException` - 현재 스레드가 객체 모니터의 소유자가 아닌 경우
**See Also:**
- ``notifyAll()``,
``wait()``
### notifyAll
```java
public final void notifyAll()
```
**Throws:**
- `IllegalMonitorStateException` - 현재 스레드가 객체 모니터의 소유자가 아닌 경우
**See Also:**
- ``notify()``,
``wait()``
### wait
```java
public final void wait(long timeout)
throws InterruptedException
```
**Parameters:**
- `timeout` - 최대 대기 시간(밀리초)
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를 중단한 경우 이 예외가 발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
**See Also:**
- ``notify()``,
``notifyAll()``
### wait
```java
public final void wait(long timeout,
int nanos)
throws InterruptedException
```
**Parameters:**
- `nanos` - 추가 시간(0-999999 범위의 나노초)
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를 중단한 경우 이 예외가 발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
### wait
```java
public final void wait()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를 중단한 경우 이 예외가 발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
**See Also:**
- ``notify()``,
``notifyAll()``
---
title: "Class OutOfMemoryError"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Error
|
+--java.lang.VirtualMachineError
|
+--java.lang.OutOfMemoryError
```
## 설명
**extends VirtualMachineError:**
Java 가상 머신이 메모리 부족으로 객체를 할당할 수 없으며 가비지 컬렉터에서 추가 메모리를 제공할 수 없는 경우에 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- OutOfMemoryError () 세부 정보 메시지 없이 OutOfMemoryError 를 구성합니다.
- OutOfMemoryError ( String s) 지정한 세부 정보 메시지를 사용하여 OutOfMemoryError 를 구성합니다.
## 생성자 상세
### OutOfMemoryError
```java
public OutOfMemoryError()
```
- 세부 정보 메시지 없이 `OutOfMemoryError`를 구성합니다.
### OutOfMemoryError
```java
public OutOfMemoryError(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `OutOfMemoryError`를 구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Interface Runnable"
---
`package java.lang`
```text
public void run()
```
## 설명
**See Also:**
- ``Thread.run()``
## 메서드 요약
- `void run ()` — Runnable 인터페이스를 구현하는 객체를 사용하여 스레드를 만든 경우 이 스레드를 시작하면 객체의 run 메소드가 별도로 실행되는 스레드에서 호출됩니다.
## 메서드 상세
### run
```java
public void run()
```
**See Also:**
- ``Thread.run()``
---
title: "Class Runtime"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Runtime
```
## 설명
**extends Object:**
모든 Java 응용 프로그램에는 응용 프로그램이 실행되는
환경과 상호 작용할 수 있도록 해주는 `Runtime` 클래스의
단일 인스턴스가 있습니다.
현재 런타임은 `getRuntime` 메소드에서 가져올 수 있습니다.
응용 프로그램은 이 클래스의 자체 인스턴스를 만들 수 없습니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``getRuntime()``
## 메서드 요약
- `void exit (int status)` — 현재 실행 중인 Java 응용 프로그램을 종료합니다.
- `long freeMemory ()` — 시스템에서 사용 가능한 메모리 양을 반환합니다.
- `void gc ()` — 가비지 컬렉터를 실행합니다.
- `static Runtime getRuntime ()` — 현재 Java 응용 프로그램과 연결된 런타임 객체를 반환합니다.
- `long totalMemory ()` — Java 가상 머신의 총 메모리 양을 반환합니다.
## 메서드 상세
### getRuntime
```java
public static Runtime getRuntime()
```
**Returns:**
- 현재 Java 응용 프로그램과 연결된
`Runtime` 객체
### exit
```java
public void exit(int status)
```
**Parameters:**
- `status` - 종료 상태
**Since:**
- JDK1.0
### freeMemory
```java
public long freeMemory()
```
**Returns:**
- 나중에 할당된 객체에 사용할 수 있는
총 메모리 양의 근사값(바이트)
### totalMemory
```java
public long totalMemory()
```
**Returns:**
- 현재 및 이후의 객체에 사용할 수 있는
총 메모리 양(바이트)
### gc
```java
public void gc()
```
가비지 컬렉터를 실행합니다.
이 메소드를 호출하면 Java 가상 머신은 현재 사용 중인 메모리를
빨리 다시 이용할 수 있도록 사용되지 않는 객체를 재활용하려고 시도합니다.
메소드 호출에서 다시 제어가 반환되면 Java 가상 머신은 삭제된
모든 객체를 재활용하려고
노력합니다. gc 라는 이름은 "가비지 컬렉터"를 나타냅니다.
Java 가상 머신은 gc 메소드를 명시적으로 호출하지 않아도
필요에 따라 자동으로
재활용 프로세스를 수행합니다. System.gc() 메소드는 이 메소드를 호출하는
일반적이고 편리한 방법입니다.
---
title: "Class RuntimeException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
```
## 설명
**Direct Known Subclasses:**
- `ArithmeticException`, `ArrayStoreException`, `ClassCastException`, `EmptyStackException`, `IllegalArgumentException`, `IllegalMonitorStateException`, `IndexOutOfBoundsException`, `NegativeArraySizeException`, `NoSuchElementException`, `NullPointerException`, `SecurityException`
**extends Exception:**
`RuntimeException`은 Java
가상 머신의 정상 작동 중에
발생할 수 있는 예외 수퍼 클래스입니다.
메소드는 해당 메소드 실행 중에 발생할 수는 있지만 파악되지 않는
`RuntimeException`의 서브 클래스를 `throws` 절에
선언할 필요가 없습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- RuntimeException () 세부 정보 메시지 없이 RuntimeException 을 구성합니다.
- RuntimeException ( String s) 지정한 세부 정보 메시지를 사용하여 RuntimeException 을
구성합니다.
## 생성자 상세
### RuntimeException
```java
public RuntimeException()
```
- 세부 정보 메시지 없이 `RuntimeException`을 구성합니다.
### RuntimeException
```java
public RuntimeException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `RuntimeException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class SecurityException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.SecurityException
```
## 설명
**extends RuntimeException:**
보안 위반을 나타내기 위해 시스템에서 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- SecurityException () 세부 정보 메시지 없이 SecurityException 을 구성합니다.
- SecurityException ( String s) 지정한 세부 정보 메시지를 사용하여 SecurityException 을
구성합니다.
## 생성자 상세
### SecurityException
```java
public SecurityException()
```
- 세부 정보 메시지 없이 `SecurityException`을 구성합니다.
### SecurityException
```java
public SecurityException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `SecurityException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Short"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Short
```
## 설명
**extends Object:**
Short 클래스는 short 값의 표준 래퍼입니다.
**Since:**
- JDK1.1, CLDC 1.0
## 필드 요약
- `static short MAX_VALUE` — Short가 가질 수 있는 최대값
- `static short MIN_VALUE` — Short가 가질 수 있는 최소값
## 생성자 요약
- Short (short value) 지정된 short 값으로 초기화되는 Short 객체를 구성합니다.
## 메서드 요약
- `boolean equals ( Object obj)` — 이 객체를 지정된 객체와 비교합니다.
- `int hashCode ()` — 이 Short의 해시 코드를 반환합니다.
- `static short parseShort ( String s)` — 지정된 문자열이 한 short를 나타내는 경우 해당 short의 값을 반환합니다.
- `static short parseShort ( String s, int radix)` — 지정된 문자열이 short를 나타내는 경우 두 번째 인자로 지정된 기수의 해당 short 값을 반환합니다.
- `short shortValue ()` — 이 Short 값을 short로 반환합니다.
- `String toString ()` — 이 Short의 값을 나타내는 문자열 객체를 반환합니다.
## 필드 상세
### MIN_VALUE
```java
public static final short MIN_VALUE
```
**See Also:**
- `Constant Field Values`
### MAX_VALUE
```java
public static final short MAX_VALUE
```
**See Also:**
- `Constant Field Values`
### Short
```java
public Short(short value)
```
- 지정된 short 값으로 초기화되는 Short 객체를 구성합니다.
**Parameters:**
- `value` - Short의 초기 값
### parseShort
```java
public static short parseShort(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 해당 short를 포함하는 문자열
**Returns:**
- 지정된 문자열이 나타내는 short 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
short가 없는 경우
### parseShort
```java
public static short parseShort(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 문자가 나타내는
지정된 기수의 short 값
**Throws:**
- `NumberFormatException` - 문자열에
구문 분석 가능한 short가 없는 경우
### shortValue
```java
public short shortValue()
```
**Returns:**
- 이 Short 값(short)
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 true, 다르면 false
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 생성자 상세
### Short
```java
public Short(short value)
```
- 지정된 short 값으로 초기화되는 Short 객체를 구성합니다.
**Parameters:**
- `value` - Short의 초기 값
### parseShort
```java
public static short parseShort(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 해당 short를 포함하는 문자열
**Returns:**
- 지정된 문자열이 나타내는 short 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
short가 없는 경우
### parseShort
```java
public static short parseShort(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 문자가 나타내는
지정된 기수의 short 값
**Throws:**
- `NumberFormatException` - 문자열에
구문 분석 가능한 short가 없는 경우
### shortValue
```java
public short shortValue()
```
**Returns:**
- 이 Short 값(short)
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 true, 다르면 false
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
## 메서드 상세
### parseShort
```java
public static short parseShort(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 해당 short를 포함하는 문자열
**Returns:**
- 지정된 문자열이 나타내는 short 값
**Throws:**
- `NumberFormatException` - 문자열에 구문 분석 가능한
short가 없는 경우
### parseShort
```java
public static short parseShort(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 사용되는 기수
**Returns:**
- 지정된 문자가 나타내는
지정된 기수의 short 값
**Throws:**
- `NumberFormatException` - 문자열에
구문 분석 가능한 short가 없는 경우
### shortValue
```java
public short shortValue()
```
**Returns:**
- 이 Short 값(short)
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 객체의 문자열 표현
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 true, 다르면 false
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
---
title: "Class String"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.String
```
## 설명
**extends Object:**
`String` 클래스는 문자열을 나타냅니다.
`"abc"`와 같은 Java 프로그램의 모든 문자열 리터럴은
이 클래스의 인스턴스로 구현됩니다.
문자열은 상수이므로 만든 후에 값을 변경할 수 없습니다.
문자열 버퍼는 가변 문자열을 지원합니다. 문자열 객체는
불변이기 때문에 공유할 수 있습니다. 예를 들면 다음과 같습니다.
위의 결과 값은 다음 표현식의 결과와 같습니다.
아래에는 문자열 사용 방법에 대한 다른 예가 나와 있습니다.
`String` 클래스에는 시퀀스의
개별 문자 검사, 문자열 비교, 문자열 검색, 하위 문자열 추출,
모든 문자를 대문자 또는 소문자로 변환한
문자열 복사본 만들기 등을 위한 메소드가 포함되어
있습니다.
Java 언어는 문자열 연결 연산자( + )와
다른 객체를 문자열로 변환하는 메소드를 제공합니다.
문자열 연결은 `StringBuffer` 클래스와
해당 `append` 메소드를 통해 구현됩니다.
문자열 변환은 `Object`에 정의된
`toString` 메소드를 통해 구현되며
Java의 모든 클래스가 상속 받습니다.
문자열 연결과 변환에 대한 자세한 내용은
Gosling, Joy, and Steele, *The Java Language Specification*을
참조하십시오.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Object.toString()``,
``StringBuffer``,
``StringBuffer.append(boolean)``,
``StringBuffer.append(char)``,
``StringBuffer.append(char[])``,
``StringBuffer.append(char[], int, int)``,
``StringBuffer.append(int)``,
``StringBuffer.append(long)``,
``StringBuffer.append(java.lang.Object)``,
``StringBuffer.append(java.lang.String)``
## 생성자 요약
- String () 빈 문자 시퀀스를 나타내도록 새로 만든 String 객체를
초기화합니다.
- String (byte[] bytes) 플랫폼의 기본 문자 인코딩을 사용하여 지정된 바이트 배열을
변환함으로써 새로운 String 을 구성합니다.
- String (byte[] bytes,
int off,
int len) 플랫폼의 기본 문자 인코딩을 사용하여 지정된 바이트 하위 배열을
변환함으로써 새로운 String 을 구성합니다.
- String (byte[] bytes,
int off,
int len, String enc) 지정된 문자 인코딩을 사용하여 지정된 바이트 하위 배열을 변환함으로써
새로운 String 을 구성합니다.
- String (byte[] bytes, String enc) 지정된 문자 인코딩을 사용하여 지정된 바이트 배열을 변환함으로써
새로운 String 을 구성합니다.
- String (char[] value) 현재 문자 배열 인자에 포함된 문자 시퀀스를 나타내도록
새로운 String 을 할당합니다.
- String (char[] value,
int offset,
int count) 문자 배열 인자의 하위 배열 문자가 포함되는
새로운 String 을 할당합니다.
- String ( String value) 인자와 같은 문자 시퀀스를 나타내도록 새로 만든 String 객체를 초기화합니다.
- String ( StringBuffer buffer) 현재 문자열 버퍼 인자에 있는 문자 시퀀스가 포함되는
새로운 문자열을 할당합니다.
## 메서드 요약
- `char charAt (int index)` — 지정된 색인의 문자를 반환합니다.
- `int compareTo ( String anotherString)` — 두 문자열을 사전적으로 비교합니다.
- `String concat ( String str)` — 지정된 문자열을 이 문자열의 끝에 연결합니다.
- `boolean endsWith ( String suffix)` — 이 문자열이 지정된 접미어로 끝나는지 테스트합니다.
- `boolean equals ( Object anObject)` — 이 문자열을 지정된 객체와 비교합니다.
- `boolean equalsIgnoreCase ( String anotherString)` — 대소문자와 상관없이 이 String 을 다른 String 과 비교합니다.
- `byte[] getBytes ()` — 플랫폼의 기본 문자 인코딩에 따라 이 String 을 바이트로 변환하여 결과를 새로운 바이트 배열에 저장합니다.
- `byte[] getBytes ( String enc)` — 지정된 문자 인코딩에 따라 이 String 을 바이트로 변환하여 결과를 새로운 바이트 배열에 저장합니다.
- `void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)` — 이 문자열의 문자를 대상 문자 배열에 복사합니다.
- `int hashCode ()` — 이 문자열의 해시 코드를 반환합니다.
- `int indexOf (int ch)` — 이 문자열에서 지정된 문자의 첫 항목 색인을 반환합니다.
- `int indexOf (int ch, int fromIndex)` — 지정된 색인부터 찾기 시작하여 이 문자열에서 지정된 문자의 첫 항목 색인을 반환합니다.
- `int indexOf ( String str)` — 이 문자열에서 지정된 하위 문자열의 첫 항목 색인을 반환합니다.
- `int indexOf ( String str, int fromIndex)` — 지정된 색인부터 시작하여 이 문자열에서 지정된 하위 문자열의 첫 항목 색인을 반환합니다.
- `String intern ()` — 이 문자열 객체의 표준 표현을 반환합니다.
- `int lastIndexOf (int ch)` — 이 문자열에서 지정된 문자의 마지막 항목 색인을 반환합니다.
- `int lastIndexOf (int ch, int fromIndex)` — 지정된 색인부터 역순으로 검색하여 이 문자열에서 지정된 문자의 마지막 항목 색인을 반환합니다.
- `int length ()` — 이 문자열의 길이를 반환합니다.
- `boolean regionMatches (boolean ignoreCase, int toffset, String other, int ooffset, int len)` — 두 문자열 영역이 같은지 테스트합니다.
- `String replace (char oldChar, char newChar)` — 이 문자열의 모든 oldChar 항목을 newChar 로 바꾼 새 문자열을 반환합니다.
- `boolean startsWith ( String prefix)` — 이 문자열이 지정된 접두어로 시작하는지 테스트합니다.
- `boolean startsWith ( String prefix, int toffset)` — 이 문자열이 지정된 색인에서 시작하는 지정된 접두어로 시작하는지 테스트합니다.
- `String substring (int beginIndex)` — 이 문자열의 하위 문자열인 새 문자열을 반환합니다.
- `String substring (int beginIndex, int endIndex)` — 이 문자열의 하위 문자열인 새 문자열을 반환합니다.
- `char[] toCharArray ()` — 이 문자열을 새 문자 배열로 변환합니다.
- `String toLowerCase ()` — 이 String 의 모든 문자를 소문자로 변환합니다.
- `String toString ()` — 문자열 객체가 그대로 반환됩니다.
- `String toUpperCase ()` — 이 String 의 모든 문자를 대문자로 변환합니다.
- `String trim ()` — 이 문자열의 양 끝에서 공백을 제거합니다.
- `static String valueOf (boolean b)` — boolean 인자의 문자열 표현을 반환합니다.
- `static String valueOf (char c)` — char 인자의 문자열 표현을 반환합니다.
- `static String valueOf (char[] data)` — char 배열 인자의 문자열 표현을 반환합니다.
- `static String valueOf (char[] data, int offset, int count)` — char 배열 인자의 특정 하위 배열의 문자열 표현을 반환합니다.
- `static String valueOf (double d)` — double 인자의 문자열 표현을 반환합니다.
- `static String valueOf (float f)` — float 인자의 문자열 표현을 반환합니다.
- `static String valueOf (int i)` — int 인자의 문자열 표현을 반환합니다.
- `static String valueOf (long l)` — long 인자의 문자열 표현을 반환합니다.
- `static String valueOf ( Object obj)` — Object 인자의 문자열 표현을 반환합니다.
## 생성자 상세
### String
```java
public String()
```
- 빈 문자 시퀀스를 나타내도록 새로 만든 `String` 객체를
초기화합니다.
### String
```java
public String(String value)
```
- 인자와 같은 문자 시퀀스를 나타내도록 새로 만든 `String`
객체를 초기화합니다. 즉, 새로 만든 문자열은
인자 문자열의 복사본입니다.
**Parameters:**
- `value` - `String`
### String
```java
public String(char[] value)
```
- 현재 문자 배열 인자에 포함된 문자 시퀀스를 나타내도록
새로운 `String`을 할당합니다.
문자 배열의 내용이 복사됩니다. 이후에 문자 배열을 수정해도
새로 만든 문자열에는 영향을 주지
않습니다.
**Parameters:**
- `value` - 문자열의 초기 값
**Throws:**
- `NullPointerException` - `value`가 `null`인 경우
### String
```java
public String(char[] value,
int offset,
int count)
```
- 문자 배열 인자의 하위 배열 문자가 포함되는
새로운 `String`을 할당합니다.
`offset` 인자는 하위 배열에서
첫 문자의 색인이며 `count` 인자는
하위 배열의 길이를 지정합니다. 하위 배열의 내용이 복사됩니다.
이후에 문자 배열을 수정해도 새로 만든 문자열에는
영향을 주지 않습니다.
**Parameters:**
- `count` - 길이
**Throws:**
- `NullPointerException` - `value`가
`null`인 경우
### String
```java
public String(byte[] bytes,
int off,
int len,
String enc)
throws UnsupportedEncodingException
```
- 지정된 문자 인코딩을 사용하여 지정된 바이트 하위 배열을 변환함으로써
새로운 `String`을 구성합니다. 새로운
`String`의 길이는 인코딩 기능이므로
하위 배열의 길이와 다를 수도 있습니다.
**Parameters:**
- `enc` - 문자 인코딩 이름
**Throws:**
- `UnsupportedEncodingException` - 명명된 인코딩이 지원되지 않는 경우
**Since:**
- JDK1.1
### String
```java
public String(byte[] bytes,
String enc)
throws UnsupportedEncodingException
```
- 지정된 문자 인코딩을 사용하여 지정된 바이트 배열을 변환함으로써
새로운 `String`을 구성합니다. 새로운
`String`의 길이는 인코딩 기능이므로
바이트 배열의 길이와 다를 수도 있습니다.
**Parameters:**
- `enc` - 지원되는 문자 인코딩 이름
**Throws:**
- `UnsupportedEncodingException` - 명명된 인코딩이 지원되지 않는 경우
**Since:**
- JDK1.1
### String
```java
public String(byte[] bytes,
int off,
int len)
```
- 플랫폼의 기본 문자 인코딩을 사용하여 지정된 바이트 하위 배열을
변환함으로써 새로운 `String`을 구성합니다. 새로운
`String`의 길이는 인코딩 기능이므로
하위 배열의 길이와 다를 수도 있습니다.
**Parameters:**
- `len` - 변환할 바이트 수
**Since:**
- JDK1.1
### String
```java
public String(byte[] bytes)
```
- 플랫폼의 기본 문자 인코딩을 사용하여 지정된 바이트 배열을
변환함으로써 새로운 `String`을 구성합니다. 새로운
`String`의 길이는 인코딩 기능이므로
바이트 배열의 길이와 다를 수도 있습니다.
**Parameters:**
- `bytes` - 문자로 변환되는 바이트
**Since:**
- JDK1.1
### String
```java
public String(StringBuffer buffer)
```
- 현재 문자열 버퍼 인자에 있는 문자 시퀀스가 포함되는
새로운 문자열을 할당합니다. 문자열 버퍼의 내용이 복사됩니다. 이후에
문자열 버퍼를 수정해도 새로 만든 문자열에는
영향을 주지 않습니다.
**Parameters:**
- `buffer` - `StringBuffer`
**Throws:**
- `NullPointerException` - `buffer`가
`null`인 경우
### length
```java
public int length()
```
**Returns:**
- 이 객체가 나타내는 문자 시퀀스의
길이
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 문자 색인
**Returns:**
- 이 문자열에서 지정된 색인의 문자.
첫 문자는 색인 `0`에 지정되어 있습니다.
**Throws:**
- `IndexOutOfBoundsException` - `index`
인자가 음수이거나 이 문자열의 길이보다
작지 않은 경우
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - 대상 배열의 시작 오프셋
**Throws:**
- `NullPointerException` - `dst`가 `null`인 경우
### getBytes
```java
public byte[] getBytes(String enc)
throws UnsupportedEncodingException
```
**Parameters:**
- `enc` - 문자 인코딩 이름
**Returns:**
- 결과로 생성된 바이트 배열
**Throws:**
- `UnsupportedEncodingException` - 명명된 인코딩이 지원되지 않는 경우
**Since:**
- JDK1.1
### getBytes
```java
public byte[] getBytes()
```
**Returns:**
- 결과로 생성된 바이트 배열
**Since:**
- JDK1.1
### equals
```java
public boolean equals(Object anObject)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `anObject` - 이 `String`과 비교할
객체
**Returns:**
- `String`이 같으면 `true`, 다르면
`false`
**See Also:**
- ``compareTo(java.lang.String)``,
``equalsIgnoreCase(java.lang.String)``
### equalsIgnoreCase
```java
public boolean equalsIgnoreCase(String anotherString)
```
**Parameters:**
- `anotherString` - 이 `String`과 비교할
`String`
**Returns:**
- 인자가 `null`이 아니고
`String`이 같으면 대소문자와 상관없이
`true`, 그렇지 않으면 `false`
**See Also:**
- ``equals(Object)``,
``Character.toLowerCase(char)``,
``Character.toUpperCase(char)``
### compareTo
```java
public int compareTo(String anotherString)
```
**Parameters:**
- `anotherString` - 비교되는 `String`
**Returns:**
- 인자 문자열이 이 문자열과 같으면 값
`0`, 이 문자열이
사전적으로 문자열 인자보다 작으면
`0`보다 작은 값, 이 문자열이 문자열 인자보다
사전적으로 크면 `0`보다 큰 값
**Throws:**
- `NullPointerException` - `anotherString`이
`null`인 경우
### regionMatches
```java
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
```
**Parameters:**
- `len` - 비교할 문자 수
**Returns:**
- 이 문자열의 지정된 하위 영역이 문자열 인자의
지정된 하위 영역과 일치하면 `true`,
그렇지 않으면 `false`.
정확한 일치인지 또는 대소문자를 무시한 일치인지는 `ignoreCase`
인자에 따라 결정됩니다.
### startsWith
```java
public boolean startsWith(String prefix,
int toffset)
```
**Parameters:**
- `toffset` - 문자열에서 찾기 시작할 위치
**Returns:**
- 인자가 나타내는 문자 시퀀스가 색인
`toffset`에서 시작하는 이 객체의 하위 문자열
접두어이면 `true`,
그렇지 않으면 `false`.
`toffset`이 음수이거나 이 `String`
객체보다 크면 결과는 `false`가 됩니다.
그렇지 않으면 결과는 다음 표현식의 결과와 같습니다.
this.subString(toffset).startsWith(prefix)
**Throws:**
- `NullPointerException` - `prefix`가
`null`인 경우
### startsWith
```java
public boolean startsWith(String prefix)
```
**Parameters:**
- `prefix` - 접두어
**Returns:**
- 인자가 나타내는 문자 시퀀스가 이 문자열이 나타내는
문자 시퀀스의 접두어이면 `true`,
그렇지 않으면 `false`. 인자가 빈 문자열이거나
``equals(Object)`` 메소드로 확인하여
이 `String` 객체와 같은 경우에도
`true`가
반환됩니다.
**Throws:**
- `NullPointerException` - `prefix`가
`null`인 경우
**Since:**
- JDK1.0
### endsWith
```java
public boolean endsWith(String suffix)
```
**Parameters:**
- `suffix` - 접미어
**Returns:**
- 인자가 나타내는 문자 시퀀스가 이 객체가 나타내는 문자 시퀀스의 접미어이면
`true`, 그렇지 않으면 `false`.
인자가 빈 문자열이거나 ``equals(Object)``
메소드로 확인하여
이 `String` 객체와 같은 경우에도
결과는 `true`가 됩니다.
**Throws:**
- `NullPointerException` - `suffix`가
`null`인 경우
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### indexOf
```java
public int indexOf(int ch)
```
**Parameters:**
- `ch` - 문자
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서 문자의
첫 항목 색인 또는 해당 문자가 없는 경우
`-1`
### indexOf
```java
public int indexOf(int ch,
int fromIndex)
```
**Parameters:**
- `fromIndex` - 검색이 시작되는 색인
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서
`fromIndex`보다 크거나 같은,
문자의 첫 항목 색인 또는
해당 문자가 없는 경우 `-1`
### lastIndexOf
```java
public int lastIndexOf(int ch)
```
**Parameters:**
- `ch` - 문자
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서
문자의 마지막 항목 색인
또는 해당 문자가 없는 경우 `-1`
### lastIndexOf
```java
public int lastIndexOf(int ch,
int fromIndex)
```
**Parameters:**
- `fromIndex` - 검색이 시작되는 색인.
`fromIndex` 값에는 어떤 제한도 없습니다.
값이 문자열 길이보다 크거나 같으면
문자열 길이보다 하나 작은 값과
같은 경우처럼 전체 문자열이 검색될 수도 있습니다.
값이 음수이면 값이 -1인 경우와
마찬가지로 -1이 반환됩니다.
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서
`fromIndex`보다 작거나 같은,
문자의 마지막 항목 색인 또는 해당 문자가 이 위치 앞에 없는 경우
`-1`
### indexOf
```java
public int indexOf(String str)
```
**Parameters:**
- `str` - 모든 문자열
**Returns:**
- 문자열 인자가 이 객체 내의 하위 문자열이면
첫 하위 문자열의 첫 문자 색인이 반환됩니다.
하위 문자열이 아니면
`-1`이 반환됩니다.
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우
### indexOf
```java
public int indexOf(String str,
int fromIndex)
```
**Parameters:**
- `fromIndex` - 검색이 시작되는 색인
**Returns:**
- 문자열 인자가 `fromIndex`보다 작지 않은
색인에서 시작하는 이 객체 내의 하위 문자열이면
첫 하위 문자열의 첫 문자 색인이 반환됩니다.
`fromIndex` 이상에서
시작하는 하위 문자열이 아니면
`-1`이 반환됩니다.
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우
### substring
```java
public String substring(int beginIndex)
```
**Parameters:**
- `beginIndex` - 시작 색인(포함)
**Returns:**
- 지정된 하위 문자열
**Throws:**
- `IndexOutOfBoundsException` - `beginIndex`가 음수이거나
`String` 객체의 길이보다 큰 경우
### substring
```java
public String substring(int beginIndex,
int endIndex)
```
**Parameters:**
- `endIndex` - 끝 색인(포함하지 않음)
**Returns:**
- 지정된 하위 문자열
**Throws:**
- `IndexOutOfBoundsException` - `beginIndex`가 음수이거나,
`endIndex`가 `String`
객체의 길이보다 크거나
`beginIndex`가
`endIndex`보다 큰 경우
### concat
```java
public String concat(String str)
```
**Parameters:**
- `str` - 이 `String`의 끝에 연결되는
`String`
**Returns:**
- 이 객체의 문자 뒤에 문자열 인자의
문자를 연결한 문자열
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우
### replace
```java
public String replace(char oldChar,
char newChar)
```
**Parameters:**
- `newChar` - 새 문자
**Returns:**
- 이 문자열의 모든 `oldChar` 항목을
`newChar`로 바꿔서 파생된 문자열
### toLowerCase
```java
public String toLowerCase()
```
**Returns:**
- 소문자로 변환된 String
**See Also:**
- ``Character.toLowerCase(char)``,
``toUpperCase()``
### toUpperCase
```java
public String toUpperCase()
```
**Returns:**
- 대문자로 변환된 String
**See Also:**
- ``Character.toLowerCase(char)``,
``toUpperCase()``
### trim
```java
public String trim()
```
**Returns:**
- 앞과 끝에서 공백을 제거한 이 문자열
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 문자열 자체
### toCharArray
```java
public char[] toCharArray()
```
**Returns:**
- 이 문자열의 길이와 같고 문자열이 나타내는
문자 시퀀스를 포함하도록 내용이 초기화된
새로 할당된 문자 배열
### valueOf
```java
public static String valueOf(Object obj)
```
**Parameters:**
- `obj` - `Object`
**Returns:**
- 인자가 `null`이면 `"null"`과 같은 문자열,
그렇지 않으면 `obj.toString()`
값이 반환됩니다.
**See Also:**
- ``Object.toString()``
### valueOf
```java
public static String valueOf(char[] data)
```
**Parameters:**
- `data` - `char` 배열
**Returns:**
- 문자 배열 인자에 포함된 문자 시퀀스를
나타내는 새로 할당된 문자열
### valueOf
```java
public static String valueOf(char[] data,
int offset,
int count)
```
**Parameters:**
- `count` - `String` 값의 길이
**Returns:**
- 문자 배열 인자의 하위 배열에
포함된 문자 시퀀스를
나타내는 새로 할당된 문자열
**Throws:**
- `IndexOutOfBoundsException` - `offset`이 음수 또는 `count`가
음수이거나 `offset+count`가
`data.length`보다 큰 경우
### valueOf
```java
public static String valueOf(boolean b)
```
**Parameters:**
- `b` - `boolean`
**Returns:**
- 인자가 `true`이면
`"true"`와 같은 문자열이 반환됩니다.
그렇지 않으면 `"false"`와 같은 문자열이 반환됩니다.
### valueOf
```java
public static String valueOf(char c)
```
**Parameters:**
- `c` - `char`
**Returns:**
- 인자 `c`를 단일 문자로 포함하는 길이가
`1`인 새로 할당된 문자열
### valueOf
```java
public static String valueOf(int i)
```
**Parameters:**
- `i` - `int`
**Returns:**
- `int` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**See Also:**
- ``Integer.toString(int, int)``
### valueOf
```java
public static String valueOf(long l)
```
**Parameters:**
- `l` - `long`
**Returns:**
- `long` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**See Also:**
- ``Long.toString(long)``
### valueOf
```java
public static String valueOf(float f)
```
**Parameters:**
- `f` - `float`
**Returns:**
- `float` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**Since:**
- CLDC 1.1
**See Also:**
- ``Float.toString(float)``
### valueOf
```java
public static String valueOf(double d)
```
**Parameters:**
- `d` - `double`
**Returns:**
- `double` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**Since:**
- CLDC 1.1
**See Also:**
- ``Double.toString(double)``
### intern
```java
public String intern()
```
**Returns:**
- 이 문자열과 내용이 같지만 고유 문자열 풀에서
가져온 문자열
**Since:**
- CLDC 1.1
## 메서드 상세
### length
```java
public int length()
```
**Returns:**
- 이 객체가 나타내는 문자 시퀀스의
길이
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 문자 색인
**Returns:**
- 이 문자열에서 지정된 색인의 문자.
첫 문자는 색인 `0`에 지정되어 있습니다.
**Throws:**
- `IndexOutOfBoundsException` - `index`
인자가 음수이거나 이 문자열의 길이보다
작지 않은 경우
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - 대상 배열의 시작 오프셋
**Throws:**
- `NullPointerException` - `dst`가 `null`인 경우
### getBytes
```java
public byte[] getBytes(String enc)
throws UnsupportedEncodingException
```
**Parameters:**
- `enc` - 문자 인코딩 이름
**Returns:**
- 결과로 생성된 바이트 배열
**Throws:**
- `UnsupportedEncodingException` - 명명된 인코딩이 지원되지 않는 경우
**Since:**
- JDK1.1
### getBytes
```java
public byte[] getBytes()
```
**Returns:**
- 결과로 생성된 바이트 배열
**Since:**
- JDK1.1
### equals
```java
public boolean equals(Object anObject)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `anObject` - 이 `String`과 비교할
객체
**Returns:**
- `String`이 같으면 `true`, 다르면
`false`
**See Also:**
- ``compareTo(java.lang.String)``,
``equalsIgnoreCase(java.lang.String)``
### equalsIgnoreCase
```java
public boolean equalsIgnoreCase(String anotherString)
```
**Parameters:**
- `anotherString` - 이 `String`과 비교할
`String`
**Returns:**
- 인자가 `null`이 아니고
`String`이 같으면 대소문자와 상관없이
`true`, 그렇지 않으면 `false`
**See Also:**
- ``equals(Object)``,
``Character.toLowerCase(char)``,
``Character.toUpperCase(char)``
### compareTo
```java
public int compareTo(String anotherString)
```
**Parameters:**
- `anotherString` - 비교되는 `String`
**Returns:**
- 인자 문자열이 이 문자열과 같으면 값
`0`, 이 문자열이
사전적으로 문자열 인자보다 작으면
`0`보다 작은 값, 이 문자열이 문자열 인자보다
사전적으로 크면 `0`보다 큰 값
**Throws:**
- `NullPointerException` - `anotherString`이
`null`인 경우
### regionMatches
```java
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
```
**Parameters:**
- `len` - 비교할 문자 수
**Returns:**
- 이 문자열의 지정된 하위 영역이 문자열 인자의
지정된 하위 영역과 일치하면 `true`,
그렇지 않으면 `false`.
정확한 일치인지 또는 대소문자를 무시한 일치인지는 `ignoreCase`
인자에 따라 결정됩니다.
### startsWith
```java
public boolean startsWith(String prefix,
int toffset)
```
**Parameters:**
- `toffset` - 문자열에서 찾기 시작할 위치
**Returns:**
- 인자가 나타내는 문자 시퀀스가 색인
`toffset`에서 시작하는 이 객체의 하위 문자열
접두어이면 `true`,
그렇지 않으면 `false`.
`toffset`이 음수이거나 이 `String`
객체보다 크면 결과는 `false`가 됩니다.
그렇지 않으면 결과는 다음 표현식의 결과와 같습니다.
this.subString(toffset).startsWith(prefix)
**Throws:**
- `NullPointerException` - `prefix`가
`null`인 경우
### startsWith
```java
public boolean startsWith(String prefix)
```
**Parameters:**
- `prefix` - 접두어
**Returns:**
- 인자가 나타내는 문자 시퀀스가 이 문자열이 나타내는
문자 시퀀스의 접두어이면 `true`,
그렇지 않으면 `false`. 인자가 빈 문자열이거나
``equals(Object)`` 메소드로 확인하여
이 `String` 객체와 같은 경우에도
`true`가
반환됩니다.
**Throws:**
- `NullPointerException` - `prefix`가
`null`인 경우
**Since:**
- JDK1.0
### endsWith
```java
public boolean endsWith(String suffix)
```
**Parameters:**
- `suffix` - 접미어
**Returns:**
- 인자가 나타내는 문자 시퀀스가 이 객체가 나타내는 문자 시퀀스의 접미어이면
`true`, 그렇지 않으면 `false`.
인자가 빈 문자열이거나 ``equals(Object)``
메소드로 확인하여
이 `String` 객체와 같은 경우에도
결과는 `true`가 됩니다.
**Throws:**
- `NullPointerException` - `suffix`가
`null`인 경우
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### indexOf
```java
public int indexOf(int ch)
```
**Parameters:**
- `ch` - 문자
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서 문자의
첫 항목 색인 또는 해당 문자가 없는 경우
`-1`
### indexOf
```java
public int indexOf(int ch,
int fromIndex)
```
**Parameters:**
- `fromIndex` - 검색이 시작되는 색인
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서
`fromIndex`보다 크거나 같은,
문자의 첫 항목 색인 또는
해당 문자가 없는 경우 `-1`
### lastIndexOf
```java
public int lastIndexOf(int ch)
```
**Parameters:**
- `ch` - 문자
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서
문자의 마지막 항목 색인
또는 해당 문자가 없는 경우 `-1`
### lastIndexOf
```java
public int lastIndexOf(int ch,
int fromIndex)
```
**Parameters:**
- `fromIndex` - 검색이 시작되는 색인.
`fromIndex` 값에는 어떤 제한도 없습니다.
값이 문자열 길이보다 크거나 같으면
문자열 길이보다 하나 작은 값과
같은 경우처럼 전체 문자열이 검색될 수도 있습니다.
값이 음수이면 값이 -1인 경우와
마찬가지로 -1이 반환됩니다.
**Returns:**
- 이 객체가 나타내는 문자 시퀀스에서
`fromIndex`보다 작거나 같은,
문자의 마지막 항목 색인 또는 해당 문자가 이 위치 앞에 없는 경우
`-1`
### indexOf
```java
public int indexOf(String str)
```
**Parameters:**
- `str` - 모든 문자열
**Returns:**
- 문자열 인자가 이 객체 내의 하위 문자열이면
첫 하위 문자열의 첫 문자 색인이 반환됩니다.
하위 문자열이 아니면
`-1`이 반환됩니다.
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우
### indexOf
```java
public int indexOf(String str,
int fromIndex)
```
**Parameters:**
- `fromIndex` - 검색이 시작되는 색인
**Returns:**
- 문자열 인자가 `fromIndex`보다 작지 않은
색인에서 시작하는 이 객체 내의 하위 문자열이면
첫 하위 문자열의 첫 문자 색인이 반환됩니다.
`fromIndex` 이상에서
시작하는 하위 문자열이 아니면
`-1`이 반환됩니다.
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우
### substring
```java
public String substring(int beginIndex)
```
**Parameters:**
- `beginIndex` - 시작 색인(포함)
**Returns:**
- 지정된 하위 문자열
**Throws:**
- `IndexOutOfBoundsException` - `beginIndex`가 음수이거나
`String` 객체의 길이보다 큰 경우
### substring
```java
public String substring(int beginIndex,
int endIndex)
```
**Parameters:**
- `endIndex` - 끝 색인(포함하지 않음)
**Returns:**
- 지정된 하위 문자열
**Throws:**
- `IndexOutOfBoundsException` - `beginIndex`가 음수이거나,
`endIndex`가 `String`
객체의 길이보다 크거나
`beginIndex`가
`endIndex`보다 큰 경우
### concat
```java
public String concat(String str)
```
**Parameters:**
- `str` - 이 `String`의 끝에 연결되는
`String`
**Returns:**
- 이 객체의 문자 뒤에 문자열 인자의
문자를 연결한 문자열
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우
### replace
```java
public String replace(char oldChar,
char newChar)
```
**Parameters:**
- `newChar` - 새 문자
**Returns:**
- 이 문자열의 모든 `oldChar` 항목을
`newChar`로 바꿔서 파생된 문자열
### toLowerCase
```java
public String toLowerCase()
```
**Returns:**
- 소문자로 변환된 String
**See Also:**
- ``Character.toLowerCase(char)``,
``toUpperCase()``
### toUpperCase
```java
public String toUpperCase()
```
**Returns:**
- 대문자로 변환된 String
**See Also:**
- ``Character.toLowerCase(char)``,
``toUpperCase()``
### trim
```java
public String trim()
```
**Returns:**
- 앞과 끝에서 공백을 제거한 이 문자열
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 문자열 자체
### toCharArray
```java
public char[] toCharArray()
```
**Returns:**
- 이 문자열의 길이와 같고 문자열이 나타내는
문자 시퀀스를 포함하도록 내용이 초기화된
새로 할당된 문자 배열
### valueOf
```java
public static String valueOf(Object obj)
```
**Parameters:**
- `obj` - `Object`
**Returns:**
- 인자가 `null`이면 `"null"`과 같은 문자열,
그렇지 않으면 `obj.toString()`
값이 반환됩니다.
**See Also:**
- ``Object.toString()``
### valueOf
```java
public static String valueOf(char[] data)
```
**Parameters:**
- `data` - `char` 배열
**Returns:**
- 문자 배열 인자에 포함된 문자 시퀀스를
나타내는 새로 할당된 문자열
### valueOf
```java
public static String valueOf(char[] data,
int offset,
int count)
```
**Parameters:**
- `count` - `String` 값의 길이
**Returns:**
- 문자 배열 인자의 하위 배열에
포함된 문자 시퀀스를
나타내는 새로 할당된 문자열
**Throws:**
- `IndexOutOfBoundsException` - `offset`이 음수 또는 `count`가
음수이거나 `offset+count`가
`data.length`보다 큰 경우
### valueOf
```java
public static String valueOf(boolean b)
```
**Parameters:**
- `b` - `boolean`
**Returns:**
- 인자가 `true`이면
`"true"`와 같은 문자열이 반환됩니다.
그렇지 않으면 `"false"`와 같은 문자열이 반환됩니다.
### valueOf
```java
public static String valueOf(char c)
```
**Parameters:**
- `c` - `char`
**Returns:**
- 인자 `c`를 단일 문자로 포함하는 길이가
`1`인 새로 할당된 문자열
### valueOf
```java
public static String valueOf(int i)
```
**Parameters:**
- `i` - `int`
**Returns:**
- `int` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**See Also:**
- ``Integer.toString(int, int)``
### valueOf
```java
public static String valueOf(long l)
```
**Parameters:**
- `l` - `long`
**Returns:**
- `long` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**See Also:**
- ``Long.toString(long)``
### valueOf
```java
public static String valueOf(float f)
```
**Parameters:**
- `f` - `float`
**Returns:**
- `float` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**Since:**
- CLDC 1.1
**See Also:**
- ``Float.toString(float)``
### valueOf
```java
public static String valueOf(double d)
```
**Parameters:**
- `d` - `double`
**Returns:**
- `double` 인자의 문자열 표현이 포함된
새로 할당된 문자열
**Since:**
- CLDC 1.1
**See Also:**
- ``Double.toString(double)``
### intern
```java
public String intern()
```
**Returns:**
- 이 문자열과 내용이 같지만 고유 문자열 풀에서
가져온 문자열
**Since:**
- CLDC 1.1
---
title: "Class StringBuffer"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.StringBuffer
```
## 설명
**extends Object:**
문자열 버퍼는 가변 문자 시퀀스를 구현합니다.
문자열 버퍼는 ``String``과 같지만 수정할 수 있습니다.
항상 특정 문자 시퀀스가 포함되지만 특정 메소드 호출을 통해
시퀀스 길이와 내용을 변경할 수
있습니다.
문자열 버퍼는 여러 스레드에서 안전하게 사용할 수 있습니다.
특정 인스턴스의 모든 작업이 관련된 개별 스레드의
메소드 호출 순서에 따라 순차적으로
발생하는 것처럼 동작하도록
필요할 경우 메소드가 동기화됩니다.
컴파일러는 문자열 버퍼를 사용하여 이진 문자열 연결 연산자
`+`를 구현합니다. 예를 들어, 다음과 같은 코드가 있습니다.
위의 코드는 다음 코드와 같은 값으로 컴파일됩니다.
이 코드는 초기에 비어 있는 새로운 문자열 버퍼를 만들고
각 피연산자의 문자열 표현을 순서대로 문자열 버퍼에 추가한 다음,
문자열 버퍼 내용을 문자열로 변환합니다. 이렇게 하면
많은 임시 문자열을 만들지 않아도 됩니다.
`StringBuffer`에서의 주요 작업은
`append` 메소드와 `insert` 메소드로,
모든 유형의 데이터를 받아들이도록 오버로드됩니다. 각 메소드는
지정된 데이터를 효과적으로 문자열로 변환한 다음,
해당 문자열의 문자를 문자열 버퍼에 추가 또는 삽입합니다.
`append` 메소드는 이러한 문자를 항상 버퍼 끝에
추가하고 `insert` 메소드는 지정된 위치에
문자를 추가합니다.
예를 들어, `z`가 현재 내용이
"`start`"인 문자열 버퍼 객체를 참조하면
메소드 호출 `z.append("le")`는 문자열 버퍼에
"`startle`"을 포함시키고
`z.insert(4, "le")`는 문자열 버퍼에
"`starlet`"를 포함시킵니다.
일반적으로 sb가 `StringBuffer`의 한 인스턴스를 참조하면
`sb.append(x)`는 `sb.insert(sb.length(), x)`와
동일한 기능을 합니다.
모든 문자열 버퍼에는 용량이 있습니다. 문자열 버퍼에
포함된 문자 시퀀스의 길이가 용량을 초과하지 않으면
새로운 내부 버퍼 배열을 할당할 필요가 없습니다.
내부 버퍼에 오버플로가 발생하면 자동으로
크기가 확대됩니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``ByteArrayOutputStream``,
``String``
## 생성자 요약
- StringBuffer () 문자가 포함되어 있지 않으며 초기 용량이 16자인
문자열 버퍼를 구성합니다.
- StringBuffer (int length) 문자가 포함되어 있지 않으며 length 인자로
지정된 초기 용량을 가진 문자열 버퍼를 구성합니다.
- StringBuffer ( String str) 문자열 인자와 동일한 문자 시퀀스를 나타내도록
문자열 버퍼를 구성합니다.
## 메서드 요약
- `StringBuffer append (boolean b)` — boolean 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append (char c)` — char 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append (char[] str)` — char 배열 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append (char[] str, int offset, int len)` — char 배열 인자의 하위 배열의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append (double d)` — double 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append (float f)` — float 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append (int i)` — int 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append (long l)` — long 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append ( Object obj)` — Object 인자의 문자열 표현을 이 문자열 버퍼에 추가합니다.
- `StringBuffer append ( String str)` — 문자열을 이 문자열 버퍼에 추가합니다.
- `int capacity ()` — 문자열 버퍼의 현재 용량을 반환합니다.
- `char charAt (int index)` — 현재 문자열 버퍼가 나타내는 시퀀스에서 index 인자로 지정된 문자가 반환됩니다.
- `StringBuffer delete (int start, int end)` — 이 StringBuffer 의 하위 문자열에서 문자를 제거합니다.
- `StringBuffer deleteCharAt (int index)` — 이 StringBuffer 에서 지정된 위치의 문자를 제거하여 StringBuffer 를 한 자 줄입니다.
- `void ensureCapacity (int minimumCapacity)` — 버퍼 용량이 최소한 지정된 최소값과 같은지 확인합니다.
- `void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)` — 이 문자열 버퍼의 문자를 대상 문자 배열 dst 에 복사합니다.
- `StringBuffer insert (int offset, boolean b)` — boolean 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, char c)` — char 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, char[] str)` — char 배열 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, double d)` — double 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, float f)` — float 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, int i)` — 두 번째 int 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, long l)` — long 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, Object obj)` — Object 인자의 문자열 표현을 이 문자열 버퍼에 삽입합니다.
- `StringBuffer insert (int offset, String str)` — 문자열을 이 문자열 버퍼에 삽입합니다.
- `int length ()` — 이 문자열 버퍼의 길이(문자 수)를 반환합니다.
- `StringBuffer reverse ()` — 이 문자열 버퍼에 포함된 문자 시퀀스가 역순 시퀀스로 바뀝니다.
- `void setCharAt (int index, char ch)` — 이 문자열 버퍼에서 지정된 색인의 문자는 ch 로 설정됩니다.
- `void setLength (int newLength)` — 이 문자열 버퍼의 길이를 설정합니다.
- `String toString ()` — 이 문자열 버퍼의 데이터를 나타내는 문자열로 변환합니다.
## 생성자 상세
### StringBuffer
```java
public StringBuffer()
```
- 문자가 포함되어 있지 않으며 초기 용량이 16자인
문자열 버퍼를 구성합니다.
### StringBuffer
```java
public StringBuffer(int length)
```
- 문자가 포함되어 있지 않으며 `length` 인자로
지정된 초기 용량을 가진 문자열 버퍼를 구성합니다.
**Parameters:**
- `length` - 초기 용량
**Throws:**
- `NegativeArraySizeException` - `length` 인자가
`0`보다 작은 경우
### StringBuffer
```java
public StringBuffer(String str)
```
- 문자열 인자와 동일한 문자 시퀀스를 나타내도록
문자열 버퍼를 구성합니다. 즉, 문자열 버퍼의
초기 내용은 인자 문자열의 복사본입니다.
문자열 버퍼의 초기 용량은
`16`에 문자열 인자의 길이를 더한 값입니다.
**Parameters:**
- `str` - 버퍼의 초기 내용
### length
```java
public int length()
```
**Returns:**
- 현재 이 문자열 버퍼가
나타내는 문자 시퀀스의 길이
### capacity
```java
public int capacity()
```
**Returns:**
- 이 문자열 버퍼의 현재 용량
### ensureCapacity
```java
public void ensureCapacity(int minimumCapacity)
```
**Parameters:**
- `minimumCapacity` - 최소 필요 용량
### setLength
```java
public void setLength(int newLength)
```
**Parameters:**
- `newLength` - 새로운 버퍼 길이
**Throws:**
- `IndexOutOfBoundsException` - `newLength` 인자가
음수인 경우
**See Also:**
- ``length()``
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 원하는 문자의 색인
**Returns:**
- 이 문자열 버퍼에서 지정된 색인의 문자
**Throws:**
- `IndexOutOfBoundsException` - `index`가
음수이거나 `length()`보다 크거나 같은 경우
**See Also:**
- ``length()``
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - `dst`의 오프셋
**Throws:**
- `IndexOutOfBoundsException` - 다음 중 최소 하나 이상이 true인 경우
`srcBegin`이 음수입니다.
`dstBegin`이 음수입니다.
`srcBegin` 인자가
`srcEnd` 인자보다 큽니다.
`srcEnd`가 이
문자열 버퍼의 현재 길이인
`this.length()`보다 큽니다.
`dstBegin+srcEnd-srcBegin`이
`dst.length`보다 큽니다.
### setCharAt
```java
public void setCharAt(int index,
char ch)
```
**Parameters:**
- `ch` - 새 문자
**Throws:**
- `IndexOutOfBoundsException` - `index`가
음수이거나 `length()`보다 크거나 같은 경우
**See Also:**
- ``length()``
### append
```java
public StringBuffer append(Object obj)
```
**Parameters:**
- `obj` - `Object`
**Returns:**
- `StringBuffer` 객체 참조
**See Also:**
- ``String.valueOf(java.lang.Object)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(String str)
```
**Parameters:**
- `str` - 문자열
**Returns:**
- `StringBuffer` 참조
### append
```java
public StringBuffer append(char[] str)
```
**Parameters:**
- `str` - 추가되는 문자
**Returns:**
- `StringBuffer` 객체 참조
### append
```java
public StringBuffer append(char[] str,
int offset,
int len)
```
**Parameters:**
- `len` - 추가할 문자 수
**Returns:**
- `StringBuffer` 객체 참조
### append
```java
public StringBuffer append(boolean b)
```
**Parameters:**
- `b` - `boolean`
**Returns:**
- `StringBuffer` 참조
**See Also:**
- ``String.valueOf(boolean)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(char c)
```
**Parameters:**
- `c` - `char`
**Returns:**
- `StringBuffer` 객체 참조
### append
```java
public StringBuffer append(int i)
```
**Parameters:**
- `i` - `int`
**Returns:**
- `StringBuffer` 객체 참조
**See Also:**
- ``String.valueOf(int)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(long l)
```
**Parameters:**
- `l` - `long`
**Returns:**
- `StringBuffer` 객체 참조
**See Also:**
- ``String.valueOf(long)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(float f)
```
**Parameters:**
- `f` - `float`
**Returns:**
- `StringBuffer` 객체 참조
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(float)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(double d)
```
**Parameters:**
- `d` - `double`
**Returns:**
- `StringBuffer` 객체 참조
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(double)``,
``append(java.lang.String)``
### delete
```java
public StringBuffer delete(int start,
int end)
```
**Parameters:**
- `end` - 끝 색인(포함하지 않음)
**Returns:**
- 이 문자열 버퍼
**Throws:**
- `StringIndexOutOfBoundsException` - `start`가
음수이거나 `length()`보다 크거나
`end`보다 큰 경우
**Since:**
- JDK1.2
### deleteCharAt
```java
public StringBuffer deleteCharAt(int index)
```
**Parameters:**
- `index` - 제거할 문자의 색인
**Returns:**
- 이 문자열 버퍼
**Throws:**
- `StringIndexOutOfBoundsException` - `index`가
음수이거나 `length()`보다
크거나 같은 경우
**Since:**
- JDK1.2
### insert
```java
public StringBuffer insert(int offset,
Object obj)
```
**Parameters:**
- `obj` - `Object`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(java.lang.Object)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
String str)
```
**Parameters:**
- `str` - 문자열
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``length()``
### insert
```java
public StringBuffer insert(int offset,
char[] str)
```
**Parameters:**
- `str` - 문자 배열
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
### insert
```java
public StringBuffer insert(int offset,
boolean b)
```
**Parameters:**
- `b` - `boolean`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(boolean)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
char c)
```
**Parameters:**
- `c` - `char`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `IndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``length()``
### insert
```java
public StringBuffer insert(int offset,
int i)
```
**Parameters:**
- `i` - `int`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(int)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
long l)
```
**Parameters:**
- `l` - `long`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(long)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
float f)
```
**Parameters:**
- `f` - `float`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(float)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
double d)
```
**Parameters:**
- `d` - `double`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(double)``,
``insert(int, java.lang.String)``,
``length()``
### reverse
```java
public StringBuffer reverse()
```
**Returns:**
- `StringBuffer` 객체 참조
**Since:**
- JDK1.0.2
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 문자열 버퍼의 문자열 표현
## 메서드 상세
### length
```java
public int length()
```
**Returns:**
- 현재 이 문자열 버퍼가
나타내는 문자 시퀀스의 길이
### capacity
```java
public int capacity()
```
**Returns:**
- 이 문자열 버퍼의 현재 용량
### ensureCapacity
```java
public void ensureCapacity(int minimumCapacity)
```
**Parameters:**
- `minimumCapacity` - 최소 필요 용량
### setLength
```java
public void setLength(int newLength)
```
**Parameters:**
- `newLength` - 새로운 버퍼 길이
**Throws:**
- `IndexOutOfBoundsException` - `newLength` 인자가
음수인 경우
**See Also:**
- ``length()``
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 원하는 문자의 색인
**Returns:**
- 이 문자열 버퍼에서 지정된 색인의 문자
**Throws:**
- `IndexOutOfBoundsException` - `index`가
음수이거나 `length()`보다 크거나 같은 경우
**See Also:**
- ``length()``
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - `dst`의 오프셋
**Throws:**
- `IndexOutOfBoundsException` - 다음 중 최소 하나 이상이 true인 경우
`srcBegin`이 음수입니다.
`dstBegin`이 음수입니다.
`srcBegin` 인자가
`srcEnd` 인자보다 큽니다.
`srcEnd`가 이
문자열 버퍼의 현재 길이인
`this.length()`보다 큽니다.
`dstBegin+srcEnd-srcBegin`이
`dst.length`보다 큽니다.
### setCharAt
```java
public void setCharAt(int index,
char ch)
```
**Parameters:**
- `ch` - 새 문자
**Throws:**
- `IndexOutOfBoundsException` - `index`가
음수이거나 `length()`보다 크거나 같은 경우
**See Also:**
- ``length()``
### append
```java
public StringBuffer append(Object obj)
```
**Parameters:**
- `obj` - `Object`
**Returns:**
- `StringBuffer` 객체 참조
**See Also:**
- ``String.valueOf(java.lang.Object)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(String str)
```
**Parameters:**
- `str` - 문자열
**Returns:**
- `StringBuffer` 참조
### append
```java
public StringBuffer append(char[] str)
```
**Parameters:**
- `str` - 추가되는 문자
**Returns:**
- `StringBuffer` 객체 참조
### append
```java
public StringBuffer append(char[] str,
int offset,
int len)
```
**Parameters:**
- `len` - 추가할 문자 수
**Returns:**
- `StringBuffer` 객체 참조
### append
```java
public StringBuffer append(boolean b)
```
**Parameters:**
- `b` - `boolean`
**Returns:**
- `StringBuffer` 참조
**See Also:**
- ``String.valueOf(boolean)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(char c)
```
**Parameters:**
- `c` - `char`
**Returns:**
- `StringBuffer` 객체 참조
### append
```java
public StringBuffer append(int i)
```
**Parameters:**
- `i` - `int`
**Returns:**
- `StringBuffer` 객체 참조
**See Also:**
- ``String.valueOf(int)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(long l)
```
**Parameters:**
- `l` - `long`
**Returns:**
- `StringBuffer` 객체 참조
**See Also:**
- ``String.valueOf(long)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(float f)
```
**Parameters:**
- `f` - `float`
**Returns:**
- `StringBuffer` 객체 참조
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(float)``,
``append(java.lang.String)``
### append
```java
public StringBuffer append(double d)
```
**Parameters:**
- `d` - `double`
**Returns:**
- `StringBuffer` 객체 참조
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(double)``,
``append(java.lang.String)``
### delete
```java
public StringBuffer delete(int start,
int end)
```
**Parameters:**
- `end` - 끝 색인(포함하지 않음)
**Returns:**
- 이 문자열 버퍼
**Throws:**
- `StringIndexOutOfBoundsException` - `start`가
음수이거나 `length()`보다 크거나
`end`보다 큰 경우
**Since:**
- JDK1.2
### deleteCharAt
```java
public StringBuffer deleteCharAt(int index)
```
**Parameters:**
- `index` - 제거할 문자의 색인
**Returns:**
- 이 문자열 버퍼
**Throws:**
- `StringIndexOutOfBoundsException` - `index`가
음수이거나 `length()`보다
크거나 같은 경우
**Since:**
- JDK1.2
### insert
```java
public StringBuffer insert(int offset,
Object obj)
```
**Parameters:**
- `obj` - `Object`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(java.lang.Object)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
String str)
```
**Parameters:**
- `str` - 문자열
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``length()``
### insert
```java
public StringBuffer insert(int offset,
char[] str)
```
**Parameters:**
- `str` - 문자 배열
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
### insert
```java
public StringBuffer insert(int offset,
boolean b)
```
**Parameters:**
- `b` - `boolean`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(boolean)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
char c)
```
**Parameters:**
- `c` - `char`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `IndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``length()``
### insert
```java
public StringBuffer insert(int offset,
int i)
```
**Parameters:**
- `i` - `int`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(int)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
long l)
```
**Parameters:**
- `l` - `long`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**See Also:**
- ``String.valueOf(long)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
float f)
```
**Parameters:**
- `f` - `float`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(float)``,
``insert(int, java.lang.String)``,
``length()``
### insert
```java
public StringBuffer insert(int offset,
double d)
```
**Parameters:**
- `d` - `double`
**Returns:**
- `StringBuffer` 객체 참조
**Throws:**
- `StringIndexOutOfBoundsException` - 오프셋이 유효하지 않은 경우
**Since:**
- CLDC 1.1
**See Also:**
- ``String.valueOf(double)``,
``insert(int, java.lang.String)``,
``length()``
### reverse
```java
public StringBuffer reverse()
```
**Returns:**
- `StringBuffer` 객체 참조
**Since:**
- JDK1.0.2
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 문자열 버퍼의 문자열 표현
---
title: "Class StringIndexOutOfBoundsException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
|
+--java.lang.StringIndexOutOfBoundsException
```
## 설명
**extends IndexOutOfBoundsException:**
색인이 음수이거나 문자열 크기보다 크거나 같다는 것을 나타내기 위해
`String` 클래스의 `charAt`
메소드와 다른 `String`
메소드에서 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``String.charAt(int)``
## 생성자 요약
- StringIndexOutOfBoundsException () 세부 정보 메시지 없이 StringIndexOutOfBoundsException 을
구성합니다.
- StringIndexOutOfBoundsException (int index) 유효하지 않은 색인을 표시하는 인자를 사용하여 새로운 StringIndexOutOfBoundsException 클래스를 구성합니다.
- StringIndexOutOfBoundsException ( String s) 지정한 세부 정보 메시지를 사용하여 StringIndexOutOfBoundsException 을
구성합니다.
## 생성자 상세
### StringIndexOutOfBoundsException
```java
public StringIndexOutOfBoundsException()
```
- 세부 정보 메시지 없이 `StringIndexOutOfBoundsException`을
구성합니다.
**Since:**
- JDK1.0
### StringIndexOutOfBoundsException
```java
public StringIndexOutOfBoundsException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `StringIndexOutOfBoundsException`을
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
### StringIndexOutOfBoundsException
```java
public StringIndexOutOfBoundsException(int index)
```
- 유효하지 않은 색인을 표시하는 인자를 사용하여 새로운
`StringIndexOutOfBoundsException` 클래스를 구성합니다.
**Parameters:**
- `index` - 유효하지 않은 색인
---
title: "Class System"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.System
```
## 설명
**extends Object:**
`System` 클래스에는 여러 개의 유용한 클래스 필드와 메소드가
포함되어 있습니다. 이 클래스는 인스턴스화할 수 없습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `static PrintStream err` — "표준" 오류 출력 스트림.
- `static PrintStream out` — "표준" 출력 스트림.
## 메서드 요약
- `static void arraycopy ( Object src, int srcOffset, Object dst, int dstOffset, int length)` — 지정된 위치부터 시작하여 지정된 소스 배열의 배열을 대상 배열의 지정된 위치에 복사합니다.
- `static long currentTimeMillis ()` — 현재 시간(밀리초)을 반환합니다.
- `static void exit (int status)` — 현재 실행 중인 Java 응용 프로그램을 종료합니다.
- `static void gc ()` — 가비지 컬렉터를 실행합니다.
- `static String getProperty ( String key)` — 지정된 키가 나타내는 시스템 등록 정보를 가져옵니다.
- `static int identityHashCode ( Object x)` — 지정된 객체의 클래스가 hashCode()를 무시하는지 여부에 관계 없이 지정된 객체에 대해 기본 메소드 hashCode()에서 반환되는 것과 동일한 해시 코드를 반환합니다.
## 필드 상세
### out
```java
public static final PrintStream out
```
**See Also:**
- ``PrintStream.println()``,
``PrintStream.println(boolean)``,
``PrintStream.println(char)``,
``PrintStream.println(char[])``,
``PrintStream.println(int)``,
``PrintStream.println(long)``,
``PrintStream.println(java.lang.Object)``,
``PrintStream.println(java.lang.String)``
### err
```java
public static final PrintStream err
```
- "표준" 오류 출력 스트림. 이 스트림은 이미 열려 있으며
출력 데이터를 받아들일 준비가 되어 있습니다.
일반적으로 이 스트림은 디스플레이 출력이나 호스트 환경
또는 사용자가 지정한 다른 출력 대상에 해당합니다.
관례적으로 이 출력 스트림은 중요한 출력 스트림인 변수
`out` 값이 일반적으로 계속 모니터되지 않는
파일이나 다른 대상으로 리디렉션되었지만
사용자의 즉각적인 주의가 필요한 정보나
오류 메시지를 표시하는 데 사용됩니다.
### currentTimeMillis
```java
public static long currentTimeMillis()
```
**Returns:**
- 현재 시간과 1970년 1월 1일 자정(세계 표준시) 사이의
차이(밀리초)
### arraycopy
```java
public static void arraycopy(Object src,
int srcOffset,
Object dst,
int dstOffset,
int length)
```
**Parameters:**
- `length` - 복사되는 배열 요소 수
**Throws:**
- `NullPointerException` - `src` 또는
`dst`가 `null`인 경우
### identityHashCode
```java
public static int identityHashCode(Object x)
```
**Parameters:**
- `x` - hashCode가 계산되는 객체
**Returns:**
- hashCode
**Since:**
- JDK1.1
### getProperty
```java
public static String getProperty(String key)
```
**Parameters:**
- `key` - 시스템 등록 정보의 이름
**Returns:**
- 시스템 등록 정보의 문자열 값 또는
해당 키를 가진 등록 정보가 없는 경우 `null`
**Throws:**
- `IllegalArgumentException` - `key`가 비어 있는 경우
### exit
```java
public static void exit(int status)
```
**Parameters:**
- `status` - 종료 상태
**See Also:**
- ``Runtime.exit(int)``
### gc
```java
public static void gc()
```
**See Also:**
- ``Runtime.gc()``
## 메서드 상세
### currentTimeMillis
```java
public static long currentTimeMillis()
```
**Returns:**
- 현재 시간과 1970년 1월 1일 자정(세계 표준시) 사이의
차이(밀리초)
### arraycopy
```java
public static void arraycopy(Object src,
int srcOffset,
Object dst,
int dstOffset,
int length)
```
**Parameters:**
- `length` - 복사되는 배열 요소 수
**Throws:**
- `NullPointerException` - `src` 또는
`dst`가 `null`인 경우
### identityHashCode
```java
public static int identityHashCode(Object x)
```
**Parameters:**
- `x` - hashCode가 계산되는 객체
**Returns:**
- hashCode
**Since:**
- JDK1.1
### getProperty
```java
public static String getProperty(String key)
```
**Parameters:**
- `key` - 시스템 등록 정보의 이름
**Returns:**
- 시스템 등록 정보의 문자열 값 또는
해당 키를 가진 등록 정보가 없는 경우 `null`
**Throws:**
- `IllegalArgumentException` - `key`가 비어 있는 경우
### exit
```java
public static void exit(int status)
```
**Parameters:**
- `status` - 종료 상태
**See Also:**
- ``Runtime.exit(int)``
### gc
```java
public static void gc()
```
**See Also:**
- ``Runtime.gc()``
---
title: "Class Thread"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Thread
```
## 설명
**All Implemented Interfaces:**
- `Runnable`
**implements Runnable:**
*Thread*는 프로그램의 실행 스레드입니다. Java
가상 머신을 통해 응용 프로그램은 여러 개의 실행 스레드를
동시에 실행할 수 있습니다.
모든 스레드에는 우선 순위가 있습니다. 높은 우선 순위를 가진
스레드가 낮은 우선 순위를 가진 스레드보다 먼저 실행됩니다.
새로운 실행 스레드는 두 가지 방법으로 만들 수 있습니다. 한 가지
방법은 클래스를 `Thread`의 서브 클래스로
선언하는 것입니다. 이 서브 클래스는 `Thread` 클래스의
`run` 메소드를 무시합니다. 이 경우 서브 클래스의
인스턴스를 할당하고 시작할 수 있습니다. 예를 들어, 시작 값보다
큰 소수를 계산하는 스레드는 다음과 같이 작성할 수 있습니다.
다음 코드는 스레드를 만들고 실행을 시작합니다.
스레드를 만드는 두 번째 방법은
`Runnable` 인터페이스를 구현하는 클래스를
선언하는 것입니다. 이 클래스는 `run` 메소드를
구현합니다. 이 경우 클래스의 인스턴스를 할당하고
`Thread`를 만들 때 인자로 전달하여 시작할 수 있습니다.
이 방법으로 작성된 동일한 예는 다음과 같이 나타납니다.
다음 코드는 스레드를 만들고 실행을 시작합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Runnable``,
``Runtime.exit(int)``,
``run()``
## 필드 요약
- `static int MAX_PRIORITY` — 스레드가 가질 수 있는 최대 우선 순위
- `static int MIN_PRIORITY` — 스레드가 가질 수 있는 최소 우선 순위
- `static int NORM_PRIORITY` — 스레드에 할당되는 기본 우선 순위
## 생성자 요약
- Thread () 새로운 Thread 객체를 할당합니다.
- Thread ( Runnable target) run 메소드가 호출되는 특정 대상 객체를 가진
새로운 Thread 객체를
할당합니다.
- Thread ( Runnable target, String name) 지정된 대상과 이름을 가진 새로운 Thread 객체를 할당합니다.
- Thread ( String name) 지정된 이름을 가진 새로운 Thread 객체를
할당합니다.
## 메서드 요약
- `static int activeCount ()` — 가상 머신에서 현재 활성 상태인 스레드 수를 반환합니다.
- `static Thread currentThread ()` — 현재 실행 중인 Thread 객체의 참조를 반환합니다.
- `String getName ()` — 이 스레드의 이름을 반환합니다.
- `int getPriority ()` — 이 스레드의 우선 순위를 반환합니다.
- `void interrupt ()` — 이 스레드를 중단합니다.
- `boolean isAlive ()` — 이 스레드가 활성 상태인지 테스트합니다.
- `void join ()` — 이 스레드가 종료될 때까지 기다립니다.
- `void run ()` — 별도의 Runnable 실행 객체를 사용하여 스레드를 구성한 경우 이 Runnable 객체의 run 메소드가 호출됩니다.
- `void setPriority (int newPriority)` — 이 스레드의 우선 순위를 변경합니다.
- `static void sleep (long millis)` — 현재 실행 중인 스레드가 지정된 밀리초 수 동안 중지(일시적으로 실행 중단)되게 합니다.
- `void start ()` — 이 스레드의 실행을 시작하게 합니다.
- `String toString ()` — 스레드의 이름과 우선 순위를 포함하여 이 스레드의 문자열 표현을 반환합니다.
- `static void yield ()` — 현재 실행 중인 스레드 객체가 일시적으로 중지되어 다른 스레드를 실행할 수 있게 합니다.
## 필드 상세
### MIN_PRIORITY
```java
public static final int MIN_PRIORITY
```
**See Also:**
- `Constant Field Values`
### NORM_PRIORITY
```java
public static final int NORM_PRIORITY
```
**See Also:**
- `Constant Field Values`
### MAX_PRIORITY
```java
public static final int MAX_PRIORITY
```
**See Also:**
- `Constant Field Values`
### Thread
```java
public Thread()
```
- 새로운 `Thread` 객체를 할당합니다.
이런 방식으로 만들어진 스레드는 실제로 어떤 작업을 수행하기 위해
`run()` 메소드를 무시했을 것입니다.
**See Also:**
- ``Runnable``
### Thread
```java
public Thread(String name)
```
- 지정된 이름을 가진 새로운 `Thread` 객체를
할당합니다.
이런 방식으로 만들어진 스레드는 실제로 어떤 작업을 수행하기 위해
`run()` 메소드를 무시했을 것입니다.
**Parameters:**
- `name` - 새로운 스레드의 이름
### Thread
```java
public Thread(Runnable target)
```
- `run` 메소드가 호출되는 특정 대상 객체를 가진
새로운 `Thread` 객체를
할당합니다.
**Parameters:**
- `target` - `run` 메소드가 호출되는 객체
### Thread
```java
public Thread(Runnable target,
String name)
```
- 지정된 대상과 이름을 가진 새로운 `Thread`
객체를 할당합니다.
**Parameters:**
- `name` - 새로운 스레드의 이름
### currentThread
```java
public static Thread currentThread()
```
**Returns:**
- 현재 실행 중인 스레드
### yield
```java
public static void yield()
```
현재 실행 중인 스레드 객체가 일시적으로 중지되어
다른 스레드를 실행할 수 있게 합니다.
### sleep
```java
public static void sleep(long millis)
throws InterruptedException
```
**Parameters:**
- `millis` - 중지 시간(밀리초)
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를
중단한 경우. 이 예외가 발생하면 현재 스레드의
*중단된 상태*가 지워집니다.
**See Also:**
- ``Object.notify()``
### start
```java
public void start()
```
**Throws:**
- `IllegalThreadStateException` - 스레드를 이미 시작한
경우
**See Also:**
- ``run()``
### run
```java
public void run()
```
**Specified by:**
- `run` in interface `Runnable`
**See Also:**
- ``start()``,
``Runnable.run()``
### interrupt
```java
public void interrupt()
```
**Since:**
- JDK 1.0, CLDC 1.1
### isAlive
```java
public final boolean isAlive()
```
**Returns:**
- 스레드가 활성 상태이면 `true`, 그렇지 않으면
`false`
### setPriority
```java
public final void setPriority(int newPriority)
```
**Parameters:**
- `newPriority` - 이 스레드에 설정할 우선 순위
**Throws:**
- `IllegalArgumentException` - 우선 순위가
`MIN_PRIORITY`에서
`MAX_PRIORITY` 사이의 범위에 없는 경우
**See Also:**
- ``getPriority()``,
``MAX_PRIORITY``,
``MIN_PRIORITY``
### getPriority
```java
public final int getPriority()
```
**Returns:**
- 이 스레드의 우선 순위
**See Also:**
- ``setPriority(int)``
### getName
```java
public final String getName()
```
**Returns:**
- 이 스레드의 이름
### activeCount
```java
public static int activeCount()
```
**Returns:**
- 현재 활성 상태인 스레드 수
### join
```java
public final void join()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 스레드가
현재 스레드를 중단한 경우 이 예외가
발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 스레드의 문자열 표현
## 생성자 상세
### Thread
```java
public Thread()
```
- 새로운 `Thread` 객체를 할당합니다.
이런 방식으로 만들어진 스레드는 실제로 어떤 작업을 수행하기 위해
`run()` 메소드를 무시했을 것입니다.
**See Also:**
- ``Runnable``
### Thread
```java
public Thread(String name)
```
- 지정된 이름을 가진 새로운 `Thread` 객체를
할당합니다.
이런 방식으로 만들어진 스레드는 실제로 어떤 작업을 수행하기 위해
`run()` 메소드를 무시했을 것입니다.
**Parameters:**
- `name` - 새로운 스레드의 이름
### Thread
```java
public Thread(Runnable target)
```
- `run` 메소드가 호출되는 특정 대상 객체를 가진
새로운 `Thread` 객체를
할당합니다.
**Parameters:**
- `target` - `run` 메소드가 호출되는 객체
### Thread
```java
public Thread(Runnable target,
String name)
```
- 지정된 대상과 이름을 가진 새로운 `Thread`
객체를 할당합니다.
**Parameters:**
- `name` - 새로운 스레드의 이름
### currentThread
```java
public static Thread currentThread()
```
**Returns:**
- 현재 실행 중인 스레드
### yield
```java
public static void yield()
```
현재 실행 중인 스레드 객체가 일시적으로 중지되어
다른 스레드를 실행할 수 있게 합니다.
### sleep
```java
public static void sleep(long millis)
throws InterruptedException
```
**Parameters:**
- `millis` - 중지 시간(밀리초)
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를
중단한 경우. 이 예외가 발생하면 현재 스레드의
*중단된 상태*가 지워집니다.
**See Also:**
- ``Object.notify()``
### start
```java
public void start()
```
**Throws:**
- `IllegalThreadStateException` - 스레드를 이미 시작한
경우
**See Also:**
- ``run()``
### run
```java
public void run()
```
**Specified by:**
- `run` in interface `Runnable`
**See Also:**
- ``start()``,
``Runnable.run()``
### interrupt
```java
public void interrupt()
```
**Since:**
- JDK 1.0, CLDC 1.1
### isAlive
```java
public final boolean isAlive()
```
**Returns:**
- 스레드가 활성 상태이면 `true`, 그렇지 않으면
`false`
### setPriority
```java
public final void setPriority(int newPriority)
```
**Parameters:**
- `newPriority` - 이 스레드에 설정할 우선 순위
**Throws:**
- `IllegalArgumentException` - 우선 순위가
`MIN_PRIORITY`에서
`MAX_PRIORITY` 사이의 범위에 없는 경우
**See Also:**
- ``getPriority()``,
``MAX_PRIORITY``,
``MIN_PRIORITY``
### getPriority
```java
public final int getPriority()
```
**Returns:**
- 이 스레드의 우선 순위
**See Also:**
- ``setPriority(int)``
### getName
```java
public final String getName()
```
**Returns:**
- 이 스레드의 이름
### activeCount
```java
public static int activeCount()
```
**Returns:**
- 현재 활성 상태인 스레드 수
### join
```java
public final void join()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 스레드가
현재 스레드를 중단한 경우 이 예외가
발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 스레드의 문자열 표현
## 메서드 상세
### currentThread
```java
public static Thread currentThread()
```
**Returns:**
- 현재 실행 중인 스레드
### yield
```java
public static void yield()
```
현재 실행 중인 스레드 객체가 일시적으로 중지되어
다른 스레드를 실행할 수 있게 합니다.
### sleep
```java
public static void sleep(long millis)
throws InterruptedException
```
**Parameters:**
- `millis` - 중지 시간(밀리초)
**Throws:**
- `InterruptedException` - 다른 스레드가 현재 스레드를
중단한 경우. 이 예외가 발생하면 현재 스레드의
*중단된 상태*가 지워집니다.
**See Also:**
- ``Object.notify()``
### start
```java
public void start()
```
**Throws:**
- `IllegalThreadStateException` - 스레드를 이미 시작한
경우
**See Also:**
- ``run()``
### run
```java
public void run()
```
**Specified by:**
- `run` in interface `Runnable`
**See Also:**
- ``start()``,
``Runnable.run()``
### interrupt
```java
public void interrupt()
```
**Since:**
- JDK 1.0, CLDC 1.1
### isAlive
```java
public final boolean isAlive()
```
**Returns:**
- 스레드가 활성 상태이면 `true`, 그렇지 않으면
`false`
### setPriority
```java
public final void setPriority(int newPriority)
```
**Parameters:**
- `newPriority` - 이 스레드에 설정할 우선 순위
**Throws:**
- `IllegalArgumentException` - 우선 순위가
`MIN_PRIORITY`에서
`MAX_PRIORITY` 사이의 범위에 없는 경우
**See Also:**
- ``getPriority()``,
``MAX_PRIORITY``,
``MIN_PRIORITY``
### getPriority
```java
public final int getPriority()
```
**Returns:**
- 이 스레드의 우선 순위
**See Also:**
- ``setPriority(int)``
### getName
```java
public final String getName()
```
**Returns:**
- 이 스레드의 이름
### activeCount
```java
public static int activeCount()
```
**Returns:**
- 현재 활성 상태인 스레드 수
### join
```java
public final void join()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 스레드가
현재 스레드를 중단한 경우 이 예외가
발생하면 현재 스레드의 *중단된 상태*가 지워집니다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 스레드의 문자열 표현
---
title: "Class Throwable"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
```
## 설명
**Direct Known Subclasses:**
- `Error`, `Exception`
**extends Object:**
`Throwable` 클래스는 Java 언어에서 모든 오류와
예외의 수퍼 클래스입니다. 이 클래스 또는
서브 클래스 중 하나의 인스턴스인 객체만 Java 가상 머신이나
Java `throw` 문에서 발생할 수 있습니다.
이와 유사하게, 이 클래스 또는 서브 클래스 중 하나만
`catch` 문에서 인자 유형으로 사용될 수
있습니다.
두 서브 클래스인 ``Error``와 ``Exception``의
인스턴스는 일반적으로 예외 상황이 발생했음을 나타내는 데
사용됩니다. 대체로 이러한 인스턴스는 예외 상황의 맥락에서
스택 추적 데이터와 같은 해당 정보를
포함하도록 새로 만들어집니다.
관례적으로 `Throwable` 클래스와 서브 클래스에는
인자를 사용하지 않는 구성자와 오류 메시지를 만들 수 있는
`String` 인자를 사용하는 구성자가
있습니다.
`Throwable` 클래스에는 작성 당시의 스레드 실행 스택의
스냅샷이 있습니다. 오류에 대한 추가 정보를 제공하는
메시지 문자열도 포함될 수
있습니다.
아래에서는 예외를 파악하는 한 가지 예를 보여 줍니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- Throwable () null 을 오류 메시지 문자열로 사용하여 새로운 Throwable 을
구성합니다.
- Throwable ( String message) 지정한 오류 메시지를 사용하여 새로운 Throwable 을
구성합니다.
## 메서드 요약
- `String getMessage ()` — 이 Throwable 객체의 오류 메시지 문자열을 반환합니다.
- `void printStackTrace ()` — 이 Throwable 객체와 해당 역추적을 표준 오류 스트림으로 인쇄합니다.
- `String toString ()` — 이 Throwable 객체에 대한 짧은 설명을 반환합니다.
## 생성자 상세
### Throwable
```java
public Throwable()
```
- `null`을 오류 메시지 문자열로 사용하여 새로운 `Throwable`을
구성합니다.
### Throwable
```java
public Throwable(String message)
```
- 지정한 오류 메시지를 사용하여 새로운 `Throwable`을
구성합니다.
**Parameters:**
- `message` - 오류 메시지. 오류 메시지는 저장되어
나중에 ``getMessage()`` 메소드로 검색할 수 있습니다.
### getMessage
```java
public String getMessage()
```
**Returns:**
- 오류 메시지 문자열을 사용하여 ``만들어진`` 경우에는 `Throwable` 객체의 오류 메시지
문자열, 오류 메시지 없이 ``만들어진`` 경우에는
`null`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 `Throwable`의 문자열 표현
### printStackTrace
```java
public void printStackTrace()
```
이 Throwable 객체와 해당 역추적을
표준 오류 스트림으로 인쇄합니다. 이 메소드는 오류 출력 스트림에서 System.err 필드 값인 이 Throwable 객체의
스택 추적을 인쇄합니다. 출력의 첫 행에는 이 객체에 대한 toString() 메소드가 결과가
포함됩니다. 역추적 정보의 형식은 구현별로 다릅니다.
## 메서드 상세
### getMessage
```java
public String getMessage()
```
**Returns:**
- 오류 메시지 문자열을 사용하여 ``만들어진`` 경우에는 `Throwable` 객체의 오류 메시지
문자열, 오류 메시지 없이 ``만들어진`` 경우에는
`null`
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 `Throwable`의 문자열 표현
### printStackTrace
```java
public void printStackTrace()
```
이 Throwable 객체와 해당 역추적을
표준 오류 스트림으로 인쇄합니다. 이 메소드는 오류 출력 스트림에서 System.err 필드 값인 이 Throwable 객체의
스택 추적을 인쇄합니다. 출력의 첫 행에는 이 객체에 대한 toString() 메소드가 결과가
포함됩니다. 역추적 정보의 형식은 구현별로 다릅니다.
---
title: "Class VirtualMachineError"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Error
|
+--java.lang.VirtualMachineError
```
## 설명
**Direct Known Subclasses:**
- `OutOfMemoryError`
**extends Error:**
Java 가상 머신에 장애가 발생했거나 계속 작동하는 데
필요한 자원이 떨어졌음을 나타냅니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- VirtualMachineError () 세부 정보 메시지 없이 VirtualMachineError 를 구성합니다.
- VirtualMachineError ( String s) 지정한 세부 정보 메시지를 사용하여 VirtualMachineError 를
구성합니다.
## 생성자 상세
### VirtualMachineError
```java
public VirtualMachineError()
```
- 세부 정보 메시지 없이 `VirtualMachineError`를 구성합니다.
### VirtualMachineError
```java
public VirtualMachineError(String s)
```
- 지정한 세부 정보 메시지를 사용하여 `VirtualMachineError`를
구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "package java.lang"
---
**See:**
**Description**
## Interface Summary
- [Runnable](Runnable.md) — Runnable 인터페이스는 스레드가 해당 인스턴스를 실행하는 모든 클래스에서 구현해야 합니다.
## Class Summary
- [Boolean](Boolean.md) — Boolean 클래스는 프리미티브 유형의 boolean 값을 객체에 포함합니다.
- [Byte](Byte.md) — Byte 클래스는 바이트 값의 표준 래퍼입니다.
- [Character](Character.md) — Character 클래스는 프리미티브 유형의 char 값을 객체에 포함합니다.
- [Class](Class.md) — Class 클래스의 인스턴스는 실행 중인 Java 응용 프로그램의 클래스와 인터페이스를 나타냅니다.
- [Integer](Integer.md) — Integer 클래스는 프리미티브 유형의 int 값을 객체에 포함합니다.
- [Long](Long.md) — Long 클래스는 프리미티브 유형의 long 값을 객체에 포함합니다.
- [Math](Math.md) — Math 클래스에는 기본 수식 작업을 수행하기 위한 메소드가 포함되어 있습니다.
- [Object](Object.md) — Object 클래스는 클래스 계층 구조의 루트입니다.
- [Runtime](Runtime.md) — 모든 Java 응용 프로그램에는 응용 프로그램이 실행되는 환경과 상호 작용할 수 있도록 해주는 Runtime 클래스의 단일 인스턴스가 있습니다.
- [Short](Short.md) — Short 클래스는 short 값의 표준 래퍼입니다.
- [String](String.md) — String 클래스는 문자열을 나타냅니다.
- [StringBuffer](StringBuffer.md) — 문자열 버퍼는 가변 문자 시퀀스를 구현합니다.
- [System](System.md) — System 클래스에는 여러 개의 유용한 클래스 필드와 메소드가 포함되어 있습니다.
- [Thread](Thread.md) — Thread 는 프로그램의 실행 스레드입니다.
- [Throwable](Throwable.md) — Throwable 클래스는 Java 언어에서 모든 오류와 예외의 수퍼 클래스입니다.
## Exception Summary
- [ArithmeticException](ArithmeticException.md) — 예외적인 연산 조건에서 발생합니다.
- [ArrayIndexOutOfBoundsException](ArrayIndexOutOfBoundsException.md) — 유효하지 않은 색인으로 배열을 액세스했음을 나타냅니다.
- [ArrayStoreException](ArrayStoreException.md) — 잘못된 유형의 객체를 객체 배열에 저장하려고 시도했음을 나타냅니다.
- [ClassCastException](ClassCastException.md) — 코드가 객체를 인스턴스가 아닌 서브 클래스로 캐스트하려고 시도했음을 나타냅니다.
- [ClassNotFoundException](ClassNotFoundException.md) — 응용 프로그램이 Class 클래스의 forName 메소드를 사용하여 문자열 이름을 통해 클래스를 로드하려고 시도하지만 지정된 이름을 가진 클래스 정의를 찾을 수 없을 때 발생합니다.
- [Exception](Exception.md) — Exception 클래스와 해당 서브 클래스는 합리적 응용 프로그램이라면 파악해야 하는 동작을 나타내는 Throwable 의 한 형태입니다.
- [IllegalAccessException](IllegalAccessException.md) — 응용 프로그램이 클래스를 로드하려고 시도하지만 클래스가 공용이 아니고 다른 패키지에 있기 때문에 현재 실행 중인 메소드가 지정된 클래스의 정의에 액세스할 수 없을 때 발생합니다.
- [IllegalArgumentException](IllegalArgumentException.md) — 메소드에 유효하지 않거나 잘못된 인자가 전달되었음을 나타냅니다.
- [IllegalMonitorStateException](IllegalMonitorStateException.md) — 스레드가 객체의 모니터에서 대기하거나, 지정된 모니터를 소유하지 않고 객체의 모니터에서 대기 중인 다른 스레드에게 알리려고 시도했음을 나타냅니다.
- `IllegalStateException` — 메소드가 부적절하거나 잘못된 시간에 호출되었음을 나타냅니다.
- [IllegalThreadStateException](IllegalThreadStateException.md) — 스레드가 요청된 작업에 적합한 상태가 아님을 나타냅니다.
- [IndexOutOfBoundsException](IndexOutOfBoundsException.md) — 배열, 문자열 또는 벡터 등에 대한 색인이 범위를 벗어났음을 나타냅니다.
- [InstantiationException](InstantiationException.md) — 응용 프로그램이 Class 클래스의 newInstance 메소드를 사용하여 클래스의 인스턴스를 만들려고 시도하지만 지정된 클래스 객체가 인터페이스이거나 추상 클래스여서 인스턴스화할 수 없을 때 발생합니다.
- [InterruptedException](InterruptedException.md) — 스레드가 대기 또는 휴면 상태이거나 오랫동안 중지되어 다른 스레드가 Thread 클래스의 interrupt 메소드를 사용하여 이를 중단한 경우에 발생합니다.
- [NegativeArraySizeException](NegativeArraySizeException.md) — 응용 프로그램이 음수 크기를 사용하여 배열을 만들려고 시도하면 발생합니다.
- [NullPointerException](NullPointerException.md) — 객체가 요구되는 경우에 응용 프로그램이 null 을 사용하려고 시도하면 발생합니다.
- [NumberFormatException](NumberFormatException.md) — 응용 프로그램이 문자열을 숫자 유형 중 하나로 변환하려고 시도했지만 해당 문자열의 형식이 잘못되었음을 나타냅니다.
- [RuntimeException](RuntimeException.md) — RuntimeException 은 Java 가상 머신의 정상 작동 중에 발생할 수 있는 예외 수퍼 클래스입니다.
- [SecurityException](SecurityException.md) — 보안 위반을 나타내기 위해 보안 관리자에서 발생합니다.
- [StringIndexOutOfBoundsException](StringIndexOutOfBoundsException.md) — 색인이 음수이거나 문자열 크기보다 크거나 같다는 것을 나타내기 위해 String 클래스의 charAt 메소드와 다른 String 메소드에서 발생합니다.
## Error Summary
- [Error](Error.md) — Error 는 합리적 응용 프로그램이라면 파악하려고 시도해서는 안 되는 심각한 문제를 나타내는 Throwable 의 서브 클래스입니다.
- [OutOfMemoryError](OutOfMemoryError.md) — Java 가상 머신이 메모리 부족으로 객체를 할당할 수 없으며 가비지 컬렉터에서 추가 메모리를 제공할 수 없는 경우에 발생합니다.
- [VirtualMachineError](VirtualMachineError.md) — Java 가상 머신에 장애가 발생했거나 계속 작동하는 데 필요한 자원이 떨어졌음을 나타냅니다.
## 기타
- [Double](Double.md)
- [Float](Float.md)
- [NoClassDefFoundError](NoClassDefFoundError.md)
---
title: "Class Reference"
---
`package java.lang.ref`
```text
java.lang.Object
|
+--java.lang.ref.Reference
```
## 설명
**Direct Known Subclasses:**
- `WeakReference`
**extends Object:**
참조 객체의 추상 기본 클래스.
이 클래스는 모든 참조 객체에 공통적인 작업을 정의합니다.
참조 객체는 가비지 컬렉터와 긴밀히 협력하도록 구현되기 때문에
이 클래스의 서브 클래스를 직접 구성하지 못할 수도 있습니다.
**Since:**
- JDK1.2, CLDC 1.1
## 메서드 요약
- `void clear ()` — 이 참조 객체를 제거합니다.
- `Object get ()` — 이 참조 객체의 참조 대상을 반환합니다.
## 메서드 상세
### get
```java
public Object get()
```
**Returns:**
- 이 참조가 참조하는 객체 또는 참조 객체가 제거된 경우
`null`
### clear
```java
public void clear()
```
이 참조 객체를 제거합니다.
---
title: "Class WeakReference"
---
`package java.lang.ref`
```text
java.lang.Object
|
+--java.lang.ref.Reference
|
+--java.lang.ref.WeakReference
```
## 설명
**extends Reference:**
이 클래스는 약한 참조를 지원합니다.
약한 참조는 주로 표준 매핑을 구현하는 데 사용됩니다.
가비지 컬렉터는 특정 시점에서
객체 접근 가능성이 약하다고 판단하는 경우,
해당 객체에 대한 약한 참조와,
강하고 약한 참조 체인을 통해
해당 객체에 접근 가능한 접근 가능성이 약한 다른
모든 객체에 대한 약한 참조를 자동으로 모두 제거합니다.
**Since:**
- JDK1.2, CLDC 1.1
## 생성자 요약
- WeakReference ( Object ref) 지정된 객체를 참조하는 새로운 약한 참조를 만듭니다.
## 생성자 상세
### WeakReference
```java
public WeakReference(Object ref)
```
- 지정된 객체를 참조하는 새로운 약한 참조를 만듭니다.
---
title: "package java.lang.ref"
---
**See:**
**Description**
## Class Summary
- [Reference](Reference.md) — 참조 객체의 추상 기본 클래스.
- [WeakReference](WeakReference.md) — 이 클래스는 약한 참조를 지원합니다.
---
title: "Class Calendar"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Calendar
```
## 설명
**extends Object:**
`Calendar`는 `Date` 객체 및
`YEAR`, `MONTH`, `DAY`,
`HOUR` 등의 정수 필드 집합 간의 변환을 위한
추상 기본 클래스입니다. (`Date` 객체는
특정 시간을 밀리초까지 나타냅니다. `Date` 클래스에 대한
자세한 내용은 ``Date``를
참조하십시오.)
`Calendar`의 서브 클래스는 특정 달력 시스템의
규칙에 따라 `Date`를 해석합니다.
로켈에 영향을 받는 다른 클래스와 마찬가지로 `Calendar`는
일반적으로 유용한 이 유형의 객체를 가져오는
클래스 메소드인 `getInstance`를 제공합니다.
`Calendar` 객체는 특정 언어와 달력 스타일
(예: 일본어-그레고리안, 일본어-전통)의 날짜-시간 서식을 구현하는 데
필요한 필드 값을 항상 생성할 수 있습니다.
시간 필드에서 `Date`를 계산할 때 연도와 달만 있고
일이 없는 경우와 같이 `Date`를 계산하는 데
필요한 정보가 부족할 수도 있습니다.
**정보 부족.** 달력은 기본 정보를 사용하여 누락된 필드를
지정합니다. 기본 정보는 달력별로 다를 수 있습니다.
그레고리안력의 경우 필드 기본값은 기원년의 값과 같습니다.
예를 들어, YEAR = 1970년, MONTH = 1월, DATE = 1일과 같습니다.
**주:** 자정이 어느 날에 속할지에 대한 해석의 모호성은
다음 날에 "속하는" 것으로 해결합니다.
1969년 12월 31일 23:59 < 1970년 1월 1일 00:00
12:00 PM은 정오, 12:00 AM은 자정
1월 1일 11:59 PM < 1월 2일 12:00 AM < 1월 2일 12:01 AM
3월 10일 11:59 AM < 3월 10일 12:00 PM < 3월 10일 12:01 PM
24:00 이상은 유효하지 않습니다.
AM/PM 모드에서 12보다 큰 시간은 유효하지 않습니다.
시간 설정은 날짜를 변경하지 않습니다.
같은 시간을 AM/PM 또는 24시간 모드로 입력하면 입력된 시간이 아닌
실제 시간으로 등가를 확인합니다.
이 클래스는 JDK 1.3 Calendar 클래스를 기반으로 하는 J2ME의 하위 집합이었습니다.
이 클래스의 크기를 줄이기 위해 많은 메소드와 변수가 정리되고
다른 메소드가 간소화되었습니다.
**See Also:**
- ``Date``,
``TimeZone``
## 필드 요약
- `static int AM` — 자정부터 정오 직전까지의 시간을 나타내는 AM_PM 필드 값.
- `static int AM_PM` — HOUR 가 정오 전인지 또는 후인지를 나타내는 get 및 set 의 필드 번호.
- `static int APRIL` — 한 해의 네 번째 달을 나타내는 MONTH 필드 값.
- `static int AUGUST` — 한 해의 여덟 번째 달을 나타내는 MONTH 필드 값.
- `static int DATE` — 날짜를 나타내는 get 및 set 의 필드 번호.
- `static int DAY_OF_MONTH` — 날짜를 나타내는 get 및 set 의 필드 번호.
- `static int DAY_OF_WEEK` — 주를 나타내는 get 및 set 의 필드 번호.
- `static int DECEMBER` — 한 해의 열두 번째 달을 나타내는 MONTH 필드 값.
- `static int FEBRUARY` — 한 해의 두 번째 달을 나타내는 MONTH 필드 값.
- `protected int[] fields` — 이 달력에 현재 설정된 시간의 필드 값.
- `static int FRIDAY` — 금요일을 나타내는 DAY_OF_WEEK 필드 값.
- `static int HOUR` — 오전 시간인지 또는 오후 시간인지를 나타내는 get 및 set 의 필드 번호.
- `static int HOUR_OF_DAY` — 시간을 나타내는 get 및 set 의 필드 번호.
- `protected boolean[] isSet` — 달력에 지정된 시간 필드가 설정되었는지 여부를 나타내는 플래그.
- `static int JANUARY` — 한 해의 첫 번째 달을 나타내는 MONTH 필드 값.
- `static int JULY` — 한 해의 일곱 번째 달을 나타내는 MONTH 필드 값.
- `static int JUNE` — 한 해의 여섯 번째 달을 나타내는 MONTH 필드 값.
- `static int MARCH` — 한 해의 세 번째 달을 나타내는 MONTH 필드 값.
- `static int MAY` — 한 해의 다섯 번째 달을 나타내는 MONTH 필드 값.
- `static int MILLISECOND` — 밀리초를 나타내는 get 및 set 의 필드 번호.
- `static int MINUTE` — 분을 나타내는 get 및 set 의 필드 번호.
- `static int MONDAY` — 월요일을 나타내는 DAY_OF_WEEK 필드 값.
- `static int MONTH` — 달을 나타내는 get 및 set 의 필드 번호.
- `static int NOVEMBER` — 한 해의 열한 번째 달을 나타내는 MONTH 필드 값.
- `static int OCTOBER` — 한 해의 열 번째 달을 나타내는 MONTH 필드 값.
- `static int PM` — 정오부터 자정 직전까지의 시간을 나타내는 AM_PM 필드 값.
- `static int SATURDAY` — 토요일을 나타내는 DAY_OF_WEEK 필드 값.
- `static int SECOND` — 초를 나타내는 get 및 set 의 필드 번호.
- `static int SEPTEMBER` — 한 해의 아홉 번째 달을 나타내는 MONTH 필드 값.
- `static int SUNDAY` — 일요일을 나타내는 DAY_OF_WEEK 필드 값.
- `static int THURSDAY` — 목요일을 나타내는 DAY_OF_WEEK 필드 값.
- `protected long time` — 이 달력에 현재 설정된 시간(1970년 1월 1일, 0:00:00 GMT 이후의 밀리초 단위로 표시)
- `static int TUESDAY` — 화요일을 나타내는 DAY_OF_WEEK 필드 값.
- `static int WEDNESDAY` — 수요일을 나타내는 DAY_OF_WEEK 필드 값.
- `static int YEAR` — 연도를 나타내는 get 및 set 의 필드 번호.
## 생성자 요약
- `protected Calendar ()` — 기본 표준 시간대를 사용하여 달력을 구성합니다.
## 메서드 요약
- `boolean after ( Object when)` — 시간 필드 레코드를 비교합니다.
- `boolean before ( Object when)` — 시간 필드 레코드를 비교합니다.
- `protected abstract void computeFields ()` — 현재 밀리초 시간 값인 time 을 fields[] 의 필드 값으로 변환합니다.
- `protected abstract void computeTime ()` — fields[] 의 현재 필드 값을 밀리초 시간 값인 time 으로 변환합니다.
- `boolean equals ( Object obj)` — 이 달력을 지정된 객체와 비교합니다.
- `int get (int field)` — 지정된 시간 필드 값을 가져옵니다.
- `static Calendar getInstance ()` — 기본 표준 시간대를 사용하여 달력을 가져옵니다.
- `static Calendar getInstance ( TimeZone zone)` — 지정한 표준 시간대를 사용하여 달력을 가져옵니다.
- `Date getTime ()` — 이 달력의 현재 시간을 가져옵니다.
- `protected long getTimeInMillis ()` — 이 달력의 현재 시간을 가져옵니다(1970년 1월 1일, 0:00:00 GMT(기원년) 이후의 밀리초 단위로 표시된 long).
- `TimeZone getTimeZone ()` — 표준 시간대를 가져옵니다.
- `void set (int field, int value)` — 지정된 값을 사용하여 시간 필드를 설정합니다.
- `void setTime ( Date date)` — 지정된 날짜를 사용하여 이 달력의 현재 시간을 설정합니다.
- `protected void setTimeInMillis (long millis)` — 지정된 long 값을 사용하여 이 달력의 현재 시간을 설정합니다.
- `void setTimeZone ( TimeZone value)` — 지정된 표준 시간대 값을 사용하여 표준 시간대를 설정합니다.
## 필드 상세
### YEAR
```java
public static final int YEAR
```
**See Also:**
- `Constant Field Values`
### MONTH
```java
public static final int MONTH
```
**See Also:**
- `Constant Field Values`
### DATE
```java
public static final int DATE
```
**See Also:**
- ``DAY_OF_MONTH``,
`Constant Field Values`
### DAY_OF_MONTH
```java
public static final int DAY_OF_MONTH
```
**See Also:**
- ``DATE``,
`Constant Field Values`
### DAY_OF_WEEK
```java
public static final int DAY_OF_WEEK
```
**See Also:**
- `Constant Field Values`
### AM_PM
```java
public static final int AM_PM
```
**See Also:**
- ``AM``,
``PM``,
``HOUR``,
`Constant Field Values`
### HOUR
```java
public static final int HOUR
```
**See Also:**
- ``AM_PM``,
``HOUR_OF_DAY``,
`Constant Field Values`
### HOUR_OF_DAY
```java
public static final int HOUR_OF_DAY
```
**See Also:**
- `Constant Field Values`
### MINUTE
```java
public static final int MINUTE
```
**See Also:**
- `Constant Field Values`
### SECOND
```java
public static final int SECOND
```
**See Also:**
- `Constant Field Values`
### MILLISECOND
```java
public static final int MILLISECOND
```
**See Also:**
- `Constant Field Values`
### SUNDAY
```java
public static final int SUNDAY
```
**See Also:**
- `Constant Field Values`
### MONDAY
```java
public static final int MONDAY
```
**See Also:**
- `Constant Field Values`
### TUESDAY
```java
public static final int TUESDAY
```
**See Also:**
- `Constant Field Values`
### WEDNESDAY
```java
public static final int WEDNESDAY
```
**See Also:**
- `Constant Field Values`
### THURSDAY
```java
public static final int THURSDAY
```
**See Also:**
- `Constant Field Values`
### FRIDAY
```java
public static final int FRIDAY
```
**See Also:**
- `Constant Field Values`
### SATURDAY
```java
public static final int SATURDAY
```
**See Also:**
- `Constant Field Values`
### JANUARY
```java
public static final int JANUARY
```
**See Also:**
- `Constant Field Values`
### FEBRUARY
```java
public static final int FEBRUARY
```
**See Also:**
- `Constant Field Values`
### MARCH
```java
public static final int MARCH
```
**See Also:**
- `Constant Field Values`
### APRIL
```java
public static final int APRIL
```
**See Also:**
- `Constant Field Values`
### MAY
```java
public static final int MAY
```
**See Also:**
- `Constant Field Values`
### JUNE
```java
public static final int JUNE
```
**See Also:**
- `Constant Field Values`
### JULY
```java
public static final int JULY
```
**See Also:**
- `Constant Field Values`
### AUGUST
```java
public static final int AUGUST
```
**See Also:**
- `Constant Field Values`
### SEPTEMBER
```java
public static final int SEPTEMBER
```
**See Also:**
- `Constant Field Values`
### OCTOBER
```java
public static final int OCTOBER
```
**See Also:**
- `Constant Field Values`
### NOVEMBER
```java
public static final int NOVEMBER
```
**See Also:**
- `Constant Field Values`
### DECEMBER
```java
public static final int DECEMBER
```
**See Also:**
- `Constant Field Values`
### AM
```java
public static final int AM
```
**See Also:**
- `Constant Field Values`
### PM
```java
public static final int PM
```
**See Also:**
- `Constant Field Values`
### fields
```java
protected int[] fields
```
- 이 달력에 현재 설정된 시간의 필드 값.
### isSet
```java
protected boolean[] isSet
```
- 달력에 지정된 시간 필드가 설정되었는지 여부를 나타내는 플래그.
이는 `FIELD_COUNT` 부울 배열입니다.
### time
```java
protected long time
```
- 이 달력에 현재 설정된 시간(1970년 1월 1일,
0:00:00 GMT 이후의 밀리초 단위로 표시)
### Calendar
```java
protected Calendar()
```
- 기본 표준 시간대를 사용하여 달력을 구성합니다.
**See Also:**
- ``TimeZone.getDefault()``
### getTime
```java
public final Date getTime()
```
**Returns:**
- 현재 시간
**See Also:**
- ``setTime(java.util.Date)``
### setTime
```java
public final void setTime(Date date)
```
**Parameters:**
- `date` - 지정된 날짜
**See Also:**
- ``getTime()``
### getInstance
```java
public static Calendar getInstance()
```
**Returns:**
- 달력
### getInstance
```java
public static Calendar getInstance(TimeZone zone)
```
**Parameters:**
- `zone` - 사용할 표준 시간대
**Returns:**
- 달력
### getTimeInMillis
```java
protected long getTimeInMillis()
```
**Returns:**
- 기원년으로부터의 UTC 밀리초로 표시된 현재 시간
**See Also:**
- ``setTimeInMillis(long)``
### setTimeInMillis
```java
protected void setTimeInMillis(long millis)
```
**Parameters:**
- `millis` - 기원년으로부터의 UTC 밀리초로 표시된 새 시간
**See Also:**
- ``getTimeInMillis()``
### get
```java
public final int get(int field)
```
**Parameters:**
- `field` - 지정된 시간 필드(YEAR, MONTH, DATE, DAY_OF_WEEK,
HOUR_OF_DAY, HOUR, AM_PM, MINUTE,
SECOND 또는 MILLISECOND)
**Returns:**
- 지정된 시간 필드 값
**Throws:**
- `ArrayIndexOutOfBoundsException` - 매개 변수가 위의 값 중 하나가 아닌 경우
### set
```java
public final void set(int field,
int value)
```
**Parameters:**
- `value` - 지정된 시간 필드에 설정되는 값
**Throws:**
- `ArrayIndexOutOfBoundsException` - 유효하지 않은
필드 매개 변수를 받은 경우
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### before
```java
public boolean before(Object when)
```
**Parameters:**
- `when` - 이 달력과 비교되는 달력
**Returns:**
- 이 달력의 현재 시간이 when 달력의 시간보다 빠르면 true,
그렇지 않으면 false
### after
```java
public boolean after(Object when)
```
**Parameters:**
- `when` - 이 달력과 비교되는 달력
**Returns:**
- 이 달력의 현재 시간이 when 달력의 시간보다 늦으면 true,
그렇지 않으면 false
### setTimeZone
```java
public void setTimeZone(TimeZone value)
```
**Parameters:**
- `value` - 지정된 표준 시간대
**See Also:**
- ``getTimeZone()``
### getTimeZone
```java
public TimeZone getTimeZone()
```
**Returns:**
- 이 달력에 연결된 표준 시간대 객체
**See Also:**
- ``setTimeZone(java.util.TimeZone)``
### computeFields
```java
protected abstract void computeFields()
```
현재 밀리초 시간 값인 time 을 fields[] 의
필드 값으로 변환합니다.
이렇게 하면 시간 필드 값을 달력에 설정된
새 값과 동기화할 수 있습니다.
### computeTime
```java
protected abstract void computeTime()
```
fields[] 의 현재 필드 값을 밀리초
시간 값인 time 으로
변환합니다.
## 생성자 상세
### Calendar
```java
protected Calendar()
```
- 기본 표준 시간대를 사용하여 달력을 구성합니다.
**See Also:**
- ``TimeZone.getDefault()``
### getTime
```java
public final Date getTime()
```
**Returns:**
- 현재 시간
**See Also:**
- ``setTime(java.util.Date)``
### setTime
```java
public final void setTime(Date date)
```
**Parameters:**
- `date` - 지정된 날짜
**See Also:**
- ``getTime()``
### getInstance
```java
public static Calendar getInstance()
```
**Returns:**
- 달력
### getInstance
```java
public static Calendar getInstance(TimeZone zone)
```
**Parameters:**
- `zone` - 사용할 표준 시간대
**Returns:**
- 달력
### getTimeInMillis
```java
protected long getTimeInMillis()
```
**Returns:**
- 기원년으로부터의 UTC 밀리초로 표시된 현재 시간
**See Also:**
- ``setTimeInMillis(long)``
### setTimeInMillis
```java
protected void setTimeInMillis(long millis)
```
**Parameters:**
- `millis` - 기원년으로부터의 UTC 밀리초로 표시된 새 시간
**See Also:**
- ``getTimeInMillis()``
### get
```java
public final int get(int field)
```
**Parameters:**
- `field` - 지정된 시간 필드(YEAR, MONTH, DATE, DAY_OF_WEEK,
HOUR_OF_DAY, HOUR, AM_PM, MINUTE,
SECOND 또는 MILLISECOND)
**Returns:**
- 지정된 시간 필드 값
**Throws:**
- `ArrayIndexOutOfBoundsException` - 매개 변수가 위의 값 중 하나가 아닌 경우
### set
```java
public final void set(int field,
int value)
```
**Parameters:**
- `value` - 지정된 시간 필드에 설정되는 값
**Throws:**
- `ArrayIndexOutOfBoundsException` - 유효하지 않은
필드 매개 변수를 받은 경우
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### before
```java
public boolean before(Object when)
```
**Parameters:**
- `when` - 이 달력과 비교되는 달력
**Returns:**
- 이 달력의 현재 시간이 when 달력의 시간보다 빠르면 true,
그렇지 않으면 false
### after
```java
public boolean after(Object when)
```
**Parameters:**
- `when` - 이 달력과 비교되는 달력
**Returns:**
- 이 달력의 현재 시간이 when 달력의 시간보다 늦으면 true,
그렇지 않으면 false
### setTimeZone
```java
public void setTimeZone(TimeZone value)
```
**Parameters:**
- `value` - 지정된 표준 시간대
**See Also:**
- ``getTimeZone()``
### getTimeZone
```java
public TimeZone getTimeZone()
```
**Returns:**
- 이 달력에 연결된 표준 시간대 객체
**See Also:**
- ``setTimeZone(java.util.TimeZone)``
### computeFields
```java
protected abstract void computeFields()
```
현재 밀리초 시간 값인 time 을 fields[] 의
필드 값으로 변환합니다.
이렇게 하면 시간 필드 값을 달력에 설정된
새 값과 동기화할 수 있습니다.
### computeTime
```java
protected abstract void computeTime()
```
fields[] 의 현재 필드 값을 밀리초
시간 값인 time 으로
변환합니다.
## 메서드 상세
### getTime
```java
public final Date getTime()
```
**Returns:**
- 현재 시간
**See Also:**
- ``setTime(java.util.Date)``
### setTime
```java
public final void setTime(Date date)
```
**Parameters:**
- `date` - 지정된 날짜
**See Also:**
- ``getTime()``
### getInstance
```java
public static Calendar getInstance()
```
**Returns:**
- 달력
### getInstance
```java
public static Calendar getInstance(TimeZone zone)
```
**Parameters:**
- `zone` - 사용할 표준 시간대
**Returns:**
- 달력
### getTimeInMillis
```java
protected long getTimeInMillis()
```
**Returns:**
- 기원년으로부터의 UTC 밀리초로 표시된 현재 시간
**See Also:**
- ``setTimeInMillis(long)``
### setTimeInMillis
```java
protected void setTimeInMillis(long millis)
```
**Parameters:**
- `millis` - 기원년으로부터의 UTC 밀리초로 표시된 새 시간
**See Also:**
- ``getTimeInMillis()``
### get
```java
public final int get(int field)
```
**Parameters:**
- `field` - 지정된 시간 필드(YEAR, MONTH, DATE, DAY_OF_WEEK,
HOUR_OF_DAY, HOUR, AM_PM, MINUTE,
SECOND 또는 MILLISECOND)
**Returns:**
- 지정된 시간 필드 값
**Throws:**
- `ArrayIndexOutOfBoundsException` - 매개 변수가 위의 값 중 하나가 아닌 경우
### set
```java
public final void set(int field,
int value)
```
**Parameters:**
- `value` - 지정된 시간 필드에 설정되는 값
**Throws:**
- `ArrayIndexOutOfBoundsException` - 유효하지 않은
필드 매개 변수를 받은 경우
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`,
다르면 `false`
**See Also:**
- ``Boolean.hashCode()``,
``Hashtable``
### before
```java
public boolean before(Object when)
```
**Parameters:**
- `when` - 이 달력과 비교되는 달력
**Returns:**
- 이 달력의 현재 시간이 when 달력의 시간보다 빠르면 true,
그렇지 않으면 false
### after
```java
public boolean after(Object when)
```
**Parameters:**
- `when` - 이 달력과 비교되는 달력
**Returns:**
- 이 달력의 현재 시간이 when 달력의 시간보다 늦으면 true,
그렇지 않으면 false
### setTimeZone
```java
public void setTimeZone(TimeZone value)
```
**Parameters:**
- `value` - 지정된 표준 시간대
**See Also:**
- ``getTimeZone()``
### getTimeZone
```java
public TimeZone getTimeZone()
```
**Returns:**
- 이 달력에 연결된 표준 시간대 객체
**See Also:**
- ``setTimeZone(java.util.TimeZone)``
### computeFields
```java
protected abstract void computeFields()
```
현재 밀리초 시간 값인 time 을 fields[] 의
필드 값으로 변환합니다.
이렇게 하면 시간 필드 값을 달력에 설정된
새 값과 동기화할 수 있습니다.
### computeTime
```java
protected abstract void computeTime()
```
fields[] 의 현재 필드 값을 밀리초
시간 값인 time 으로
변환합니다.
---
title: "Class Date"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Date
```
## 설명
**extends Object:**
Date 클래스는 특정 시간을 밀리초까지
나타냅니다.
이 클래스는 JDK 1.3 Date 클래스를 기반으로 하는
J2ME의 하위 집합이었습니다. 이 클래스의 크기를 줄이기 위해
많은 메소드와 변수가 정리되고 다른 메소드가 간소화되었습니다.
Date 클래스는 세계 표준시(UTC)를 반영하도록 만들어졌지만
Java 가상 머신의 호스트 환경에 따라
정확히 이를 반영하지 않을 수도 있습니다.
오늘날의 거의 모든 운영 체제는 항상 1일 = 24x60x60 = 86400초로 가정합니다.
하지만 UTC에서는 매년 또는 2년에 한 번 여분의 1초가 발생합니다.
이를 "윤초"라고 합니다.
윤초는 항상 12월 31일 또는 6월 30일의 마지막 초에 추가됩니다.
예를 들어, 1995년의 마지막 초는 추가된 윤초로 인해 61초가 됩니다.
대부분의 컴퓨터 시계는 윤초를 반영할 수 있을 만큼
정확하지 않습니다.
**See Also:**
- ``TimeZone``,
``Calendar``
## 생성자 요약
- Date () "기원년"이라고도 하는 표준 기본 시간인 1970년 1월 1일,
00:00:00 GMT 이후의 지정된 밀리초 수로 현재 시간을 나타내도록 Date 객체를 할당하고
초기화합니다.
- Date (long date) "기원년"이라고도 하는 표준 기본 시간인 1970년 1월 1일,
00:00:00 GMT 이후의 지정된 밀리초 수를 나타내도록 Date 객체를 할당하고
초기화합니다.
## 메서드 요약
- `boolean equals ( Object obj)` — 두 날짜가 같은지 비교합니다.
- `long getTime ()` — 이 Date 객체가 나타내는 1970년 1월 1일, 00:00:00 GMT 이후의 밀리초 수를 반환합니다.
- `int hashCode ()` — 이 객체의 해시 코드 값을 반환합니다.
- `void setTime (long time)` — 이 Date 객체가 1970년 1월 1일, 00:00:00 GMT로부터 time 밀리초 이후의 시간 지점을 나타내도록 설정합니다.
- `String toString ()` — 이 Date 객체를 다음 형식의 String 으로 변환합니다.
## 생성자 상세
### Date
```java
public Date()
```
- "기원년"이라고도 하는 표준 기본 시간인 1970년 1월 1일,
00:00:00 GMT 이후의 지정된 밀리초 수로 현재 시간을 나타내도록
`Date` 객체를 할당하고
초기화합니다.
**See Also:**
- ``System.currentTimeMillis()``
### Date
```java
public Date(long date)
```
- "기원년"이라고도 하는 표준 기본 시간인 1970년 1월 1일,
00:00:00 GMT 이후의 지정된 밀리초 수를 나타내도록
`Date` 객체를 할당하고
초기화합니다.
**Parameters:**
- `date` - 1970년 1월 1일, 00:00:00 GMT 이후의 밀리초
**See Also:**
- ``System.currentTimeMillis()``
### getTime
```java
public long getTime()
```
**Returns:**
- 이 날짜가 나타내는 1970년 1월 1일, 00:00:00 GMT
이후의 밀리초 수
**See Also:**
- ``setTime(long)``
### setTime
```java
public void setTime(long time)
```
**Parameters:**
- `time` - 밀리초 수
**See Also:**
- ``getTime()``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``getTime()``
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 날짜의 문자열 표현
**Since:**
- CLDC 1.1
## 메서드 상세
### getTime
```java
public long getTime()
```
**Returns:**
- 이 날짜가 나타내는 1970년 1월 1일, 00:00:00 GMT
이후의 밀리초 수
**See Also:**
- ``setTime(long)``
### setTime
```java
public void setTime(long time)
```
**Parameters:**
- `time` - 밀리초 수
**See Also:**
- ``getTime()``
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 객체
**Returns:**
- 두 객체가 동일하면 `true`, 다르면
`false`
**See Also:**
- ``getTime()``
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 이 객체의 해시 코드 값
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Hashtable``
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 날짜의 문자열 표현
**Since:**
- CLDC 1.1
---
title: "Class EmptyStackException"
---
`package java.util`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.util.EmptyStackException
```
## 설명
**extends RuntimeException:**
스택이 비어 있음을 나타내기 위해 `Stack`
클래스의 메소드에서 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Stack``
## 생성자 요약
- EmptyStackException () null 을 오류 메시지 문자열로 사용하여 새로운 EmptyStackException 을
구성합니다.
## 생성자 상세
### EmptyStackException
```java
public EmptyStackException()
```
- `null`을 오류 메시지 문자열로 사용하여 새로운 `EmptyStackException`을
구성합니다.
---
title: "Interface Enumeration"
---
`package java.util`
```text
for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {
System.out.println(e.nextElement());
}
```
## 메서드 요약
- `boolean hasMoreElements ()` — 이 열거에 추가 요소가 있는지 테스트합니다.
- `Object nextElement ()` — 이 열거 객체에 제공할 추가 요소가 최소 하나 이상 있으면 열거의 다음 요소를 반환합니다.
## 메서드 상세
### hasMoreElements
```java
public boolean hasMoreElements()
```
**Returns:**
- 이 열거 객체에 제공할 추가 요소가 최소 하나 이상 있으면
`true`,
그렇지 않으면 `false`
### nextElement
```java
public Object nextElement()
```
**Returns:**
- 이 열거의 다음 요소
**Throws:**
- `NoSuchElementException` - 추가 요소가 없는 경우
---
title: "Class Hashtable"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Hashtable
```
## 설명
**extends Object:**
이 클래스는 키를 값에 매핑하는 해시 테이블을 구현합니다.
`null`이 아닌 모든 객체를 키 또는 값으로 사용할 수 있습니다.
해시 테이블에서 객체를 저장하고 검색하려면
키로 사용된 객체가 `hashCode`
메소드와 `equals` 메소드를 구현해야 합니다.
`Hashtable`의 인스턴스에는 효율성에 영향을 주는
두 매개 변수인 *용량*과 *로드 팩터*가 있습니다.
hashtable 클래스의 CLDC 구현에서
로드 팩터는 항상 75%입니다.
해시 테이블의 항목 수가 로드 팩터와
현재 용량을 곱한 값을 초과하면
`rehash` 메소드를 호출하여 용량이 증가됩니다.
`Hashtable`에 많은 항목을 저장하려는 경우
충분히 큰 용량을 할당하여 해시 테이블 만들면 필요에 따라
자동으로 해싱을 다시 수행하여 테이블을 확장하도록 하는 것보다
효율적으로 항목을 삽입할 수 있습니다.
이 예에서는 숫자 해시 테이블을 만들며
숫자 이름을 키로 사용합니다.
숫자를 검색하려면 다음 코드를 사용합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Object.equals(java.lang.Object)``,
``Object.hashCode()``,
``rehash()``
## 생성자 요약
- Hashtable () 기본 용량과 로드 팩터를 사용하여
새로운 빈 해시 테이블을 구성합니다.
- Hashtable (int initialCapacity) 지정된 초기 용량을 사용하여
새로운 빈 해시 테이블을 구성합니다.
## 메서드 요약
- `void clear ()` — 포함된 키가 없도록 이 해시 테이블을 지웁니다.
- `boolean contains ( Object value)` — 특정 키가 이 해시 테이블의 지정된 값에 매핑되는지 테스트합니다.
- `boolean containsKey ( Object key)` — 지정된 객체가 이 해시 테이블의 키인지 테스트합니다.
- `Enumeration elements ()` — 이 해시 테이블의 값 열거를 반환합니다.
- `Object get ( Object key)` — 이 해시 테이블에서 지정된 키가 매핑되는 값을 반환합니다.
- `boolean isEmpty ()` — 이 해시 테이블이 어떤 키도 값에 매핑하지 않는지 테스트합니다.
- `Enumeration keys ()` — 이 해시 테이블의 키 열거를 반환합니다.
- `Object put ( Object key, Object value)` — 이 해시 테이블에서 지정된 key 를 지정된 value 로 매핑합니다.
- `protected void rehash ()` — 해시 테이블의 내용을 용량이 큰 해시 테이블로 다시 해시합니다.
- `Object remove ( Object key)` — 해시 테이블에서 키와 해당 값을 제거합니다.
- `int size ()` — 이 해시 테이블의 키 수를 반환합니다.
- `String toString ()` — 이 해시 테이블의 다소 긴 문자열 표현을 반환합니다.
## 생성자 상세
### Hashtable
```java
public Hashtable(int initialCapacity)
```
- 지정된 초기 용량을 사용하여
새로운 빈 해시 테이블을 구성합니다.
**Parameters:**
- `initialCapacity` - 해시 테이블의 초기 용량
**Throws:**
- `IllegalArgumentException` - 초기 용량이
0보다 작은 경우
**Since:**
- JDK1.0
### Hashtable
```java
public Hashtable()
```
- 기본 용량과 로드 팩터를 사용하여
새로운 빈 해시 테이블을 구성합니다.
**Since:**
- JDK1.0
### size
```java
public int size()
```
**Returns:**
- 이 해시 테이블의 키 수
**Since:**
- JDK1.0
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 이 해시 테이블이 어떤 키도 값에 매핑하지 않으면
`true`, 그렇지 않으면 `false`
**Since:**
- JDK1.0
### keys
```java
public Enumeration keys()
```
**Returns:**
- 이 해시 테이블의 키 열거
**Since:**
- JDK1.0
**See Also:**
- ``Enumeration``,
``elements()``
### elements
```java
public Enumeration elements()
```
**Returns:**
- 이 해시 테이블의 값 열거
**Since:**
- JDK1.0
**See Also:**
- ``Enumeration``,
``keys()``
### contains
```java
public boolean contains(Object value)
```
**Parameters:**
- `value` - 검색할 값
**Returns:**
- 이 해시 테이블에서 특정 키가
`value` 인자에 매핑되면
`true`, 그렇지 않으면 `false`
**Throws:**
- `NullPointerException` - 값이 `null`인 경우
**Since:**
- JDK1.0
**See Also:**
- ``containsKey(java.lang.Object)``
### containsKey
```java
public boolean containsKey(Object key)
```
**Parameters:**
- `key` - 가능한 키
**Returns:**
- 지정된 객체가 이 해시 테이블의 키면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
**See Also:**
- ``contains(java.lang.Object)``
### get
```java
public Object get(Object key)
```
**Parameters:**
- `key` - 해시 테이블의 키
**Returns:**
- 이 해시 테이블에서 키가 매핑되는 값 또는
이 해시 테이블에서 키가 어떤 값에도 매핑되지 않으면
`null`
**Since:**
- JDK1.0
**See Also:**
- ``put(java.lang.Object, java.lang.Object)``
### rehash
```java
protected void rehash()
```
**Since:**
- JDK1.0
### put
```java
public Object put(Object key,
Object value)
```
**Parameters:**
- `value` - 값
**Returns:**
- 이 해시 테이블에서 지정된 키의 이전 값 또는
이전 값이 없으면 `null`
**Throws:**
- `NullPointerException` - 키 또는 값이
`null`인 경우
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``,
``get(java.lang.Object)``
### remove
```java
public Object remove(Object key)
```
**Parameters:**
- `key` - 제거해야 하는 키
**Returns:**
- 이 해시 테이블에서 키가 매핑된 값 또는
키가 매핑되지 않았으면 `null`
**Since:**
- JDK1.0
### clear
```java
public void clear()
```
**Since:**
- JDK1.0
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 해시 테이블의 문자열 표현
**Since:**
- JDK1.0
## 메서드 상세
### size
```java
public int size()
```
**Returns:**
- 이 해시 테이블의 키 수
**Since:**
- JDK1.0
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 이 해시 테이블이 어떤 키도 값에 매핑하지 않으면
`true`, 그렇지 않으면 `false`
**Since:**
- JDK1.0
### keys
```java
public Enumeration keys()
```
**Returns:**
- 이 해시 테이블의 키 열거
**Since:**
- JDK1.0
**See Also:**
- ``Enumeration``,
``elements()``
### elements
```java
public Enumeration elements()
```
**Returns:**
- 이 해시 테이블의 값 열거
**Since:**
- JDK1.0
**See Also:**
- ``Enumeration``,
``keys()``
### contains
```java
public boolean contains(Object value)
```
**Parameters:**
- `value` - 검색할 값
**Returns:**
- 이 해시 테이블에서 특정 키가
`value` 인자에 매핑되면
`true`, 그렇지 않으면 `false`
**Throws:**
- `NullPointerException` - 값이 `null`인 경우
**Since:**
- JDK1.0
**See Also:**
- ``containsKey(java.lang.Object)``
### containsKey
```java
public boolean containsKey(Object key)
```
**Parameters:**
- `key` - 가능한 키
**Returns:**
- 지정된 객체가 이 해시 테이블의 키면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
**See Also:**
- ``contains(java.lang.Object)``
### get
```java
public Object get(Object key)
```
**Parameters:**
- `key` - 해시 테이블의 키
**Returns:**
- 이 해시 테이블에서 키가 매핑되는 값 또는
이 해시 테이블에서 키가 어떤 값에도 매핑되지 않으면
`null`
**Since:**
- JDK1.0
**See Also:**
- ``put(java.lang.Object, java.lang.Object)``
### rehash
```java
protected void rehash()
```
**Since:**
- JDK1.0
### put
```java
public Object put(Object key,
Object value)
```
**Parameters:**
- `value` - 값
**Returns:**
- 이 해시 테이블에서 지정된 키의 이전 값 또는
이전 값이 없으면 `null`
**Throws:**
- `NullPointerException` - 키 또는 값이
`null`인 경우
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``,
``get(java.lang.Object)``
### remove
```java
public Object remove(Object key)
```
**Parameters:**
- `key` - 제거해야 하는 키
**Returns:**
- 이 해시 테이블에서 키가 매핑된 값 또는
키가 매핑되지 않았으면 `null`
**Since:**
- JDK1.0
### clear
```java
public void clear()
```
**Since:**
- JDK1.0
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 해시 테이블의 문자열 표현
**Since:**
- JDK1.0
---
title: "Class NoSuchElementException"
---
`package java.util`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.util.NoSuchElementException
```
## 설명
**extends RuntimeException:**
열거에 더 이상 요소가 없음을 나타내기 위해
`Enumeration`의 `nextElement`
메소드에서 발생합니다.
**Since:**
- JDK1.0, CLDC 1.0
**See Also:**
- ``Enumeration``,
``Enumeration.nextElement()``
## 생성자 요약
- NoSuchElementException () null 을 오류 메시지 문자열로 사용하여 NoSuchElementException 을 구성합니다.
- NoSuchElementException ( String s) 오류 메시지 문자열 s 의 참조를 저장하여
나중에 getMessage 메소드로 검색할 수 있도록 NoSuchElementException 을 구성합니다.
## 생성자 상세
### NoSuchElementException
```java
public NoSuchElementException()
```
- `null`을 오류 메시지 문자열로 사용하여
`NoSuchElementException`을 구성합니다.
### NoSuchElementException
```java
public NoSuchElementException(String s)
```
- 오류 메시지 문자열 `s`의 참조를 저장하여
나중에 `getMessage` 메소드로 검색할 수 있도록
`NoSuchElementException`을 구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Random"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Random
```
## 설명
**extends Object:**
이 클래스의 인스턴스는 의사 난수 스트림을 생성하는 데 사용됩니다.
클래스는 선형 일치 공식으로 수정되는 48비트 시드를 사용합니다.
(Donald Knuth, *The Art of Computer Programming, Volume 2*, 3.2.1절을
참조하십시오.)
동일한 시드를 사용하여 `Random`의 두 인스턴스를 만들고
각각에 대해 동일한 메소드 호출 시퀀스를 구성하면
두 인스턴스는 동일한 숫자 시퀀스를 생성하여 반환합니다.
이 등록 정보를 보장하기 위해 `Random` 클래스에 특정
알고리즘이 지정됩니다. Java 구현 시에는 Java 코드의 완벽한
이식성을 위해 여기에 나열된 모든 알고리즘을 `Random` 클래스에
사용해야 합니다. 하지만 `Random` 클래스의 서브 클래스는
모든 메소드의 일반 계약에 따르기만 하면
다른 알고리즘을 사용할 수도 있습니다.
`Random` 클래스에서 구현하는 알고리즘은 각 호출마다
의사 난수로 생성된 최대 32개의 비트를 제공할 수 있는
`protected` 유틸리티 메소드를 사용합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 생성자 요약
- Random () 새로운 난수 생성기를 만듭니다.
- Random (long seed) 단일 long 시드를 사용하여 새로운 난수 생성기를 만듭니다.
## 메서드 요약
- `protected int next (int bits)` — 다음 의사 난수를 생성합니다.
- `double nextDouble ()` — 이 난수 생성기 시퀀스에서 생성된 0.0 과 1.0 사이의 균일하게 분산된 다음 의사 난수 double 값을 반환합니다.
- `float nextFloat ()` — 이 난수 생성기 시퀀스에서 생성된 0.0 과 1.0 사이의 균일하게 분산된 다음 의사 난수 float 값을 반환합니다.
- `int nextInt ()` — 이 난수 생성기 시퀀스에서 균일하게 분산된 다음 의사 난수 int 값을 반환합니다.
- `int nextInt (int n)` — 이 난수 생성기 시퀀스에서 가져온 0(포함)과 지정된 값(포함하지 않음) 사이의 균일하게 분산된 의사 난수 int 값을 반환합니다.
- `long nextLong ()` — 이 난수 생성기 시퀀스에서 균일하게 분산된 다음 의사 난수 long 값을 반환합니다.
- `void setSeed (long seed)` — 단일 long 시드를 사용하여 이 난수 생성기의 시드를 설정합니다.
## 생성자 상세
### Random
```java
public Random()
```
- 새로운 난수 생성기를 만듭니다.
해당 시드는 현재 시간을 기반으로 하는 값으로 초기화됩니다.
public Random() { this(System.currentTimeMillis()); }
**See Also:**
- ``System.currentTimeMillis()``
### Random
```java
public Random(long seed)
```
- 단일 `long`
시드를 사용하여 새로운 난수 생성기를 만듭니다.
public Random(long seed) { setSeed(seed); }
`next` 메소드에서 의사 난수 생성기의
상태를 유지하기 위해 사용합니다.
**Parameters:**
- `seed` - 초기 시드
**See Also:**
- ``setSeed(long)``
### setSeed
```java
public void setSeed(long seed)
```
**Parameters:**
- `seed` - 초기 시드
### next
```java
protected int next(int bits)
```
**Parameters:**
- `bits` - 임의 비트
**Returns:**
- 난수 생성기 시퀀스에서 다음 의사 난수 값
### nextInt
```java
public int nextInt()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 균일하게 분산된 다음 의사 난수
`int` 값
### nextInt
```java
public int nextInt(int n)
```
**Parameters:**
- `n` - 반환되는 난수의 범위.
양수여야 합니다.
**Returns:**
- 0(포함)과 n(포함하지 않음) 사이의 균일하게 분산된 의사 난수
`int` 값
**Throws:**
- `IllegalArgumentException` - n이 양수가 아닐 경우
**Since:**
- CLDC 1.1
### nextLong
```java
public long nextLong()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 균일하게 분산된 다음
의사 난수 `long` 값
### nextFloat
```java
public float nextFloat()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 생성된 `0.0`과
`1.0` 사이의 균일하게 분산된 다음
의사 난수 `float` 값
**Since:**
- CLDC 1.1
### nextDouble
```java
public double nextDouble()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 생성된
`0.0`과 `1.0` 사이의 균일하게
분산된 다음 의사 난수 `double` 값
**Since:**
- CLDC 1.1
## 메서드 상세
### setSeed
```java
public void setSeed(long seed)
```
**Parameters:**
- `seed` - 초기 시드
### next
```java
protected int next(int bits)
```
**Parameters:**
- `bits` - 임의 비트
**Returns:**
- 난수 생성기 시퀀스에서 다음 의사 난수 값
### nextInt
```java
public int nextInt()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 균일하게 분산된 다음 의사 난수
`int` 값
### nextInt
```java
public int nextInt(int n)
```
**Parameters:**
- `n` - 반환되는 난수의 범위.
양수여야 합니다.
**Returns:**
- 0(포함)과 n(포함하지 않음) 사이의 균일하게 분산된 의사 난수
`int` 값
**Throws:**
- `IllegalArgumentException` - n이 양수가 아닐 경우
**Since:**
- CLDC 1.1
### nextLong
```java
public long nextLong()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 균일하게 분산된 다음
의사 난수 `long` 값
### nextFloat
```java
public float nextFloat()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 생성된 `0.0`과
`1.0` 사이의 균일하게 분산된 다음
의사 난수 `float` 값
**Since:**
- CLDC 1.1
### nextDouble
```java
public double nextDouble()
```
**Returns:**
- 이 난수 생성기 시퀀스에서 생성된
`0.0`과 `1.0` 사이의 균일하게
분산된 다음 의사 난수 `double` 값
**Since:**
- CLDC 1.1
---
title: "Class Stack"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Vector
|
+--java.util.Stack
```
## 설명
**extends Vector:**
`Stack` 클래스는 LIFO (Last-In-First-Out)
객체 스택을 나타냅니다.
이 클래스는 벡터를 스택처럼 처리할 수 있도록 해주는 5가지 작업을 사용하여
`Vector` 클래스를 확장합니다.
일반적인 `push` 및 `pop` 작업은
물론 스택 최상위 항목에서 `peek`하는 메소드,
스택이 `empty`인지 테스트하는 메소드, 스택에서 항목을 `search`하고 최상위로부터의 거리를 확인하는 메소드 등도 제공됩니다.
처음 스택을 만들면 항목이 들어 있지 않습니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
## 생성자 요약
- Stack () 빈 스택을 만듭니다.
## 메서드 요약
- `boolean empty ()` — 이 스택이 비어 있는지 테스트합니다.
- `Object peek ()` — 이 스택의 최상위에 있는 객체를 스택에서 제거하지 않고 살펴봅니다.
- `Object pop ()` — 이 스택의 최상위에서 객체를 제거하여 함수 값으로 반환합니다.
- `Object push ( Object item)` — 항목을 이 스택의 최상위에 푸시합니다.
- `int search ( Object o)` — 1을 기반으로 하는 이 스택 상의 객체 위치를 반환합니다.
## 생성자 상세
### Stack
```java
public Stack()
```
- 빈 스택을 만듭니다.
### push
```java
public Object push(Object item)
```
**Parameters:**
- `item` - 이 스택에 푸시되는 항목
**Returns:**
- `item` 인자
**See Also:**
- ``Vector.addElement(java.lang.Object)``
### pop
```java
public Object pop()
```
**Returns:**
- 이 스택의 최상위에 있는 객체(`Vector` 객체의
마지막 항목)
**Throws:**
- `EmptyStackException` - 이 스택이 비어 있는 경우
### peek
```java
public Object peek()
```
**Returns:**
- 이 스택의 최상위에 있는 객체(`Vector` 객체의
마지막 항목)
**Throws:**
- `EmptyStackException` - 이 스택이 비어 있는 경우
### empty
```java
public boolean empty()
```
**Returns:**
- 이 스택에 포함된 항목이 없는 경우에만
`true`, 그렇지 않으면 `false`
### search
```java
public int search(Object o)
```
**Parameters:**
- `o` - 필요한 객체
**Returns:**
- 1을 기반으로 하는 스택 최상위로부터의 객체 위치.
반환 값이 `-1`이면 객체가
스택에 없음을 나타냅니다.
## 메서드 상세
### push
```java
public Object push(Object item)
```
**Parameters:**
- `item` - 이 스택에 푸시되는 항목
**Returns:**
- `item` 인자
**See Also:**
- ``Vector.addElement(java.lang.Object)``
### pop
```java
public Object pop()
```
**Returns:**
- 이 스택의 최상위에 있는 객체(`Vector` 객체의
마지막 항목)
**Throws:**
- `EmptyStackException` - 이 스택이 비어 있는 경우
### peek
```java
public Object peek()
```
**Returns:**
- 이 스택의 최상위에 있는 객체(`Vector` 객체의
마지막 항목)
**Throws:**
- `EmptyStackException` - 이 스택이 비어 있는 경우
### empty
```java
public boolean empty()
```
**Returns:**
- 이 스택에 포함된 항목이 없는 경우에만
`true`, 그렇지 않으면 `false`
### search
```java
public int search(Object o)
```
**Parameters:**
- `o` - 필요한 객체
**Returns:**
- 1을 기반으로 하는 스택 최상위로부터의 객체 위치.
반환 값이 `-1`이면 객체가
스택에 없음을 나타냅니다.
---
title: "Class TimeZone"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.TimeZone
```
## 설명
**extends Object:**
`TimeZone`은 표준 시간대 오프셋을 나타내며 일광 절약 시간도
고려합니다.
일반적으로 `TimeZone`은 프로그램이 실행되는 표준 시간대를
기반으로 `TimeZone`을 만드는 `getDefault`를
사용하여 구합니다. 예를 들어, 일본에서 프로그램을 실행하는 경우
`getDefault`는 일본 표준 시간을 기반으로 `TimeZone` 객체를 만듭니다.
`getTimeZone`을 표준 시간대 ID와 함께 사용하여
`TimeZone`을 구할 수도 있습니다.
예를 들어, 태평양 표준시의 표준 시간대는 "PST"입니다.
따라서 다음과 같은 PST `TimeZone` 객체를 얻을 수 있습니다.
이 클래스는 JDK 1.3에 포함된 java.util.TimeZone 클래스의 순수 하위 집합입니다.
표준 시간대 ID는 "GMT"만 지원하면 됩니다.
메소드와 변수가 하위 집합이 되는 것과 별도로 getTimeZone() 메소드의
의미 체계도 하위 집합이 될 수 있습니다.
"GMT-8:00"과 같은 사용자 정의 ID는 지원하지 않아도 됩니다.
**See Also:**
- ``Calendar``,
``Date``
## 생성자 요약
- TimeZone ()
## 메서드 요약
- `static String [] getAvailableIDs ()` — 지원되는 사용 가능한 모든 ID를 가져옵니다.
- `static TimeZone getDefault ()` — 이 호스트의 기본 TimeZone 을 가져옵니다.
- `String getID ()` — 이 표준 시간대의 ID를 가져옵니다.
- `abstract int getOffset (int era, int year, int month, int day, int dayOfWeek, int millis)` — 일광 절약 시간의 경우 현재 날짜에 대한 수정된 오프셋을 구합니다.
- `abstract int getRawOffset ()` — 이 표준 시간대의 GMT 오프셋을 가져옵니다.
- `static TimeZone getTimeZone ( String ID)` — 지정된 ID의 TimeZone 을 가져옵니다.
- `abstract boolean useDaylightTime ()` — 표준 시간대가 일광 절약 시간을 사용하는지 쿼리합니다.
## 생성자 상세
### TimeZone
```java
public TimeZone()
```
### getOffset
```java
public abstract int getOffset(int era,
int year,
int month,
int day,
int dayOfWeek,
int millis)
```
**Parameters:**
- `millis` - *표준* 현지 시간에서의 일(밀리초)
**Returns:**
- 이는 현지 시간을 얻기 위해 GMT에 추가해야 하는 오프셋
**Throws:**
- `IllegalArgumentException` - era, month, day,
dayOfWeek 또는 millis 매개 변수가 범위에서 벗어난 경우
### getRawOffset
```java
public abstract int getRawOffset()
```
**Returns:**
- 이 표준 시간대의 GMT 오프셋
### useDaylightTime
```java
public abstract boolean useDaylightTime()
```
**Returns:**
- 표준 시간대가 일광 절약 시간을 사용하는지 여부
### getID
```java
public String getID()
```
**Returns:**
- 이 표준 시간대의 ID
### getTimeZone
```java
public static TimeZone getTimeZone(String ID)
```
**Parameters:**
- `ID` - `TimeZone` ID ("GMT"와 같은 약어 또는
"America/Los_Angeles"와 같은 전체 이름)
표준 시간대 ID는 "GMT"만 지원하면 됩니다.
**Returns:**
- 지정된 TimeZone 또는 지정된 ID를 확인할 수 없는 경우
GMT 영역
### getDefault
```java
public static TimeZone getDefault()
```
**Returns:**
- 기본 `TimeZone`
### getAvailableIDs
```java
public static String[] getAvailableIDs()
```
**Returns:**
- ID 배열
## 메서드 상세
### getOffset
```java
public abstract int getOffset(int era,
int year,
int month,
int day,
int dayOfWeek,
int millis)
```
**Parameters:**
- `millis` - *표준* 현지 시간에서의 일(밀리초)
**Returns:**
- 이는 현지 시간을 얻기 위해 GMT에 추가해야 하는 오프셋
**Throws:**
- `IllegalArgumentException` - era, month, day,
dayOfWeek 또는 millis 매개 변수가 범위에서 벗어난 경우
### getRawOffset
```java
public abstract int getRawOffset()
```
**Returns:**
- 이 표준 시간대의 GMT 오프셋
### useDaylightTime
```java
public abstract boolean useDaylightTime()
```
**Returns:**
- 표준 시간대가 일광 절약 시간을 사용하는지 여부
### getID
```java
public String getID()
```
**Returns:**
- 이 표준 시간대의 ID
### getTimeZone
```java
public static TimeZone getTimeZone(String ID)
```
**Parameters:**
- `ID` - `TimeZone` ID ("GMT"와 같은 약어 또는
"America/Los_Angeles"와 같은 전체 이름)
표준 시간대 ID는 "GMT"만 지원하면 됩니다.
**Returns:**
- 지정된 TimeZone 또는 지정된 ID를 확인할 수 없는 경우
GMT 영역
### getDefault
```java
public static TimeZone getDefault()
```
**Returns:**
- 기본 `TimeZone`
### getAvailableIDs
```java
public static String[] getAvailableIDs()
```
**Returns:**
- ID 배열
---
title: "Class Vector"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Vector
```
## 설명
**Direct Known Subclasses:**
- `Stack`
**extends Object:**
`Vector` 클래스는 확장 가능한 객체 배열을
구현합니다. 배열과 마찬가지로 정수 색인을 사용하여 액세스할 수 있는
구성 요소가 포함되어 있습니다. 그러나
`Vector`의 크기는 `Vector`가 만들어진 이후의
항목 추가 및 제거에 따라 필요한 경우 확장되거나 축소될 수 있습니다.
각 벡터는 `capacity`와 `capacityIncrement`를
유지하여 저장소 관리를 최적화하려고 합니다.
`capacity`는 항상 벡터 크기보다 크거나 같으며,
구성 요소를 벡터에 추가하면 벡터 저장소가
`capacityIncrement` 크기도 증가시키기 때문에
대체로 벡터 크기보다 큽니다. 응용 프로그램은
다수의 구성 요소를 삽입하기 전에 벡터 용량을 증가시킬 수 있습니다.
이렇게 하면 증분 재할당 양이 감소합니다.
**Since:**
- JDK1.0, CLDC 1.0
## 필드 요약
- `protected int capacityIncrement` — 벡터 크기가 용량보다 커짐에 따른 벡터 용량의 자동 증분.
- `protected int elementCount` — 유효한 벡터 구성 요소 수.
- `protected Object [] elementData` — 벡터 구성 요소가 저장되는 배열 버퍼.
## 생성자 요약
- Vector () 빈 벡터를 구성합니다.
- Vector (int initialCapacity) 지정된 초기 용량을 사용하여 빈 벡터를 구성합니다.
- Vector (int initialCapacity,
int capacityIncrement) 지정된 초기 용량과 용량 증분을 사용하여
빈 벡터를 구성합니다.
## 메서드 요약
- `void addElement ( Object obj)` — 지정된 구성 요소를 이 벡터의 끝에 추가하여 크기를 1만큼 증가시킵니다.
- `int capacity ()` — 이 벡터의 현재 용량을 반환합니다.
- `boolean contains ( Object elem)` — 지정된 객체가 이 벡터의 구성 요소인지 테스트합니다.
- `void copyInto ( Object [] anArray)` — 이 벡터의 구성 요소를 지정된 배열에 복사합니다.
- `Object elementAt (int index)` — 지정된 색인의 구성 요소를 반환합니다.
- `Enumeration elements ()` — 이 벡터의 구성 요소 열거를 반환합니다.
- `void ensureCapacity (int minCapacity)` — 필요한 경우 적어도 최소 용량 인자로 지정된 구성 요소 수를 포함할 수 있도록 이 벡터의 용량을 증가시킵니다.
- `Object firstElement ()` — 이 벡터의 첫 구성 요소를 반환합니다.
- `int indexOf ( Object elem)` — equals 메소드로 균등성을 테스트하여 지정된 인자의 첫 항목을 검색합니다.
- `int indexOf ( Object elem, int index)` — index 에서 검색을 시작하고 equals 메소드로 균등성을 테스트하여 지정된 인자의 첫 항목을 검색합니다.
- `void insertElementAt ( Object obj, int index)` — 지정된 객체를 지정된 index 의 구성 요소로 이 벡터에 삽입합니다.
- `boolean isEmpty ()` — 이 벡터에 어떤 구성 요소도 없는지 테스트합니다.
- `Object lastElement ()` — 벡터의 마지막 구성 요소를 반환합니다.
- `int lastIndexOf ( Object elem)` — 이 벡터에서 지정된 객체의 마지막 항목 색인을 반환합니다.
- `int lastIndexOf ( Object elem, int index)` — 지정된 색인부터 시작하여 역순으로 지정된 객체를 검색하고 해당 색인을 반환합니다.
- `void removeAllElements ()` — 이 벡터의 모든 구성 요소를 제거하고 벡터 크기를 0으로 설정합니다.
- `boolean removeElement ( Object obj)` — 인자의 첫 항목을 이 벡터에서 제거합니다.
- `void removeElementAt (int index)` — 지정된 색인의 구성 요소를 삭제합니다.
- `void setElementAt ( Object obj, int index)` — 지정된 객체가 이 벡터의 지정된 index 에 위치하도록 설정합니다.
- `void setSize (int newSize)` — 이 벡터의 크기를 설정합니다.
- `int size ()` — 이 벡터의 구성 요소 수를 반환합니다.
- `String toString ()` — 이 벡터의 문자열 표현을 반환합니다.
- `void trimToSize ()` — 벡터의 현재 크기로 이 벡터의 용량을 줄입니다.
## 필드 상세
### elementData
```java
protected Object[] elementData
```
**Since:**
- JDK1.0
### elementCount
```java
protected int elementCount
```
**Since:**
- JDK1.0
### capacityIncrement
```java
protected int capacityIncrement
```
**Since:**
- JDK1.0
### Vector
```java
public Vector(int initialCapacity,
int capacityIncrement)
```
- 지정된 초기 용량과 용량 증분을 사용하여
빈 벡터를 구성합니다.
**Parameters:**
- `capacityIncrement` - 벡터에 오버플로가 발생할 때
용량이 증가하는 양
**Throws:**
- `IllegalArgumentException` - 지정된 초기 용량이
음수인 경우
### Vector
```java
public Vector(int initialCapacity)
```
- 지정된 초기 용량을 사용하여 빈 벡터를 구성합니다.
**Parameters:**
- `initialCapacity` - 벡터의 초기 용량
**Since:**
- JDK1.0
### Vector
```java
public Vector()
```
- 빈 벡터를 구성합니다.
**Since:**
- JDK1.0
### copyInto
```java
public void copyInto(Object[] anArray)
```
**Parameters:**
- `anArray` - 구성 요소가 복사되는 배열
**Since:**
- JDK1.0
### trimToSize
```java
public void trimToSize()
```
**Since:**
- JDK1.0
### ensureCapacity
```java
public void ensureCapacity(int minCapacity)
```
**Parameters:**
- `minCapacity` - 최소 필요 용량
**Since:**
- JDK1.0
### setSize
```java
public void setSize(int newSize)
```
**Parameters:**
- `newSize` - 이 벡터의 새 크기
**Throws:**
- `ArrayIndexOutOfBoundsException` - 새 크기가 음수인 경우
**Since:**
- JDK1.0
### capacity
```java
public int capacity()
```
**Returns:**
- 이 벡터의 현재 용량
**Since:**
- JDK1.0
### size
```java
public int size()
```
**Returns:**
- 이 벡터의 구성 요소 수
**Since:**
- JDK1.0
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 이 벡터에 어떤 구성 요소도 없으면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### elements
```java
public Enumeration elements()
```
**Returns:**
- 이 벡터의 구성 요소 열거
**Since:**
- JDK1.0
**See Also:**
- ``Enumeration``
### contains
```java
public boolean contains(Object elem)
```
**Parameters:**
- `elem` - 객체
**Returns:**
- 지정된 객체가 이 벡터의 구성 요소이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### indexOf
```java
public int indexOf(Object elem)
```
**Parameters:**
- `elem` - 객체
**Returns:**
- 이 벡터에서 인자의 첫 항목 색인 또는 객체가 없는 경우
`-1`
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``
### indexOf
```java
public int indexOf(Object elem,
int index)
```
**Parameters:**
- `index` - 검색이 시작되는 색인
**Returns:**
- 이 벡터의 `index` 이상의 위치에서
인자의 첫 항목 색인 또는
객체가 없는 경우 `-1`
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``
### lastIndexOf
```java
public int lastIndexOf(Object elem)
```
**Parameters:**
- `elem` - 필요한 구성 요소
**Returns:**
- 이 벡터에서 지정된 객체의 마지막 항목 색인 또는
객체가 없는 경우 `-1`
**Since:**
- JDK1.0
### lastIndexOf
```java
public int lastIndexOf(Object elem,
int index)
```
**Parameters:**
- `index` - 검색이 시작되는 색인
**Returns:**
- 이 벡터의 `index`보다 작은 위치에서
지정된 객체의 마지막 항목 색인 또는
객체가 없는 경우 `-1`
**Throws:**
- `IndexOutOfBoundsException` - `index`가
이 벡터의 현재 크기보다 크거나 같은 경우
**Since:**
- JDK1.0
### elementAt
```java
public Object elementAt(int index)
```
**Parameters:**
- `index` - 이 벡터의 색인
**Returns:**
- 지정된 색인의 구성 요소
**Throws:**
- `ArrayIndexOutOfBoundsException` - 유효하지 않은 색인이
지정된 경우
**Since:**
- JDK1.0
### firstElement
```java
public Object firstElement()
```
**Returns:**
- 이 벡터의 첫 구성 요소
**Throws:**
- `NoSuchElementException` - 이 벡터에 어떤 구성 요소도 없는 경우
**Since:**
- JDK1.0
### lastElement
```java
public Object lastElement()
```
**Returns:**
- 벡터의 마지막 구성 요소(예: 색인
`size() - 1`의 구성 요소)
**Throws:**
- `NoSuchElementException` - 이 벡터가 비어 있는 경우
**Since:**
- JDK1.0
### setElementAt
```java
public void setElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 지정된 색인
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### removeElementAt
```java
public void removeElementAt(int index)
```
**Parameters:**
- `index` - 제거할 객체의 색인
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### insertElementAt
```java
public void insertElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 새 구성 요소를 삽입할 위치
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### addElement
```java
public void addElement(Object obj)
```
**Parameters:**
- `obj` - 추가되는 구성 요소
**Since:**
- JDK1.0
### removeElement
```java
public boolean removeElement(Object obj)
```
**Parameters:**
- `obj` - 제거되는 구성 요소
**Returns:**
- 인자가 이 벡터의 구성 요소이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### removeAllElements
```java
public void removeAllElements()
```
**Since:**
- JDK1.0
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 벡터의 문자열 표현
**Since:**
- JDK1.0
## 생성자 상세
### Vector
```java
public Vector(int initialCapacity,
int capacityIncrement)
```
- 지정된 초기 용량과 용량 증분을 사용하여
빈 벡터를 구성합니다.
**Parameters:**
- `capacityIncrement` - 벡터에 오버플로가 발생할 때
용량이 증가하는 양
**Throws:**
- `IllegalArgumentException` - 지정된 초기 용량이
음수인 경우
### Vector
```java
public Vector(int initialCapacity)
```
- 지정된 초기 용량을 사용하여 빈 벡터를 구성합니다.
**Parameters:**
- `initialCapacity` - 벡터의 초기 용량
**Since:**
- JDK1.0
### Vector
```java
public Vector()
```
- 빈 벡터를 구성합니다.
**Since:**
- JDK1.0
### copyInto
```java
public void copyInto(Object[] anArray)
```
**Parameters:**
- `anArray` - 구성 요소가 복사되는 배열
**Since:**
- JDK1.0
### trimToSize
```java
public void trimToSize()
```
**Since:**
- JDK1.0
### ensureCapacity
```java
public void ensureCapacity(int minCapacity)
```
**Parameters:**
- `minCapacity` - 최소 필요 용량
**Since:**
- JDK1.0
### setSize
```java
public void setSize(int newSize)
```
**Parameters:**
- `newSize` - 이 벡터의 새 크기
**Throws:**
- `ArrayIndexOutOfBoundsException` - 새 크기가 음수인 경우
**Since:**
- JDK1.0
### capacity
```java
public int capacity()
```
**Returns:**
- 이 벡터의 현재 용량
**Since:**
- JDK1.0
### size
```java
public int size()
```
**Returns:**
- 이 벡터의 구성 요소 수
**Since:**
- JDK1.0
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 이 벡터에 어떤 구성 요소도 없으면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### elements
```java
public Enumeration elements()
```
**Returns:**
- 이 벡터의 구성 요소 열거
**Since:**
- JDK1.0
**See Also:**
- ``Enumeration``
### contains
```java
public boolean contains(Object elem)
```
**Parameters:**
- `elem` - 객체
**Returns:**
- 지정된 객체가 이 벡터의 구성 요소이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### indexOf
```java
public int indexOf(Object elem)
```
**Parameters:**
- `elem` - 객체
**Returns:**
- 이 벡터에서 인자의 첫 항목 색인 또는 객체가 없는 경우
`-1`
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``
### indexOf
```java
public int indexOf(Object elem,
int index)
```
**Parameters:**
- `index` - 검색이 시작되는 색인
**Returns:**
- 이 벡터의 `index` 이상의 위치에서
인자의 첫 항목 색인 또는
객체가 없는 경우 `-1`
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``
### lastIndexOf
```java
public int lastIndexOf(Object elem)
```
**Parameters:**
- `elem` - 필요한 구성 요소
**Returns:**
- 이 벡터에서 지정된 객체의 마지막 항목 색인 또는
객체가 없는 경우 `-1`
**Since:**
- JDK1.0
### lastIndexOf
```java
public int lastIndexOf(Object elem,
int index)
```
**Parameters:**
- `index` - 검색이 시작되는 색인
**Returns:**
- 이 벡터의 `index`보다 작은 위치에서
지정된 객체의 마지막 항목 색인 또는
객체가 없는 경우 `-1`
**Throws:**
- `IndexOutOfBoundsException` - `index`가
이 벡터의 현재 크기보다 크거나 같은 경우
**Since:**
- JDK1.0
### elementAt
```java
public Object elementAt(int index)
```
**Parameters:**
- `index` - 이 벡터의 색인
**Returns:**
- 지정된 색인의 구성 요소
**Throws:**
- `ArrayIndexOutOfBoundsException` - 유효하지 않은 색인이
지정된 경우
**Since:**
- JDK1.0
### firstElement
```java
public Object firstElement()
```
**Returns:**
- 이 벡터의 첫 구성 요소
**Throws:**
- `NoSuchElementException` - 이 벡터에 어떤 구성 요소도 없는 경우
**Since:**
- JDK1.0
### lastElement
```java
public Object lastElement()
```
**Returns:**
- 벡터의 마지막 구성 요소(예: 색인
`size() - 1`의 구성 요소)
**Throws:**
- `NoSuchElementException` - 이 벡터가 비어 있는 경우
**Since:**
- JDK1.0
### setElementAt
```java
public void setElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 지정된 색인
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### removeElementAt
```java
public void removeElementAt(int index)
```
**Parameters:**
- `index` - 제거할 객체의 색인
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### insertElementAt
```java
public void insertElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 새 구성 요소를 삽입할 위치
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### addElement
```java
public void addElement(Object obj)
```
**Parameters:**
- `obj` - 추가되는 구성 요소
**Since:**
- JDK1.0
### removeElement
```java
public boolean removeElement(Object obj)
```
**Parameters:**
- `obj` - 제거되는 구성 요소
**Returns:**
- 인자가 이 벡터의 구성 요소이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### removeAllElements
```java
public void removeAllElements()
```
**Since:**
- JDK1.0
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 벡터의 문자열 표현
**Since:**
- JDK1.0
## 메서드 상세
### copyInto
```java
public void copyInto(Object[] anArray)
```
**Parameters:**
- `anArray` - 구성 요소가 복사되는 배열
**Since:**
- JDK1.0
### trimToSize
```java
public void trimToSize()
```
**Since:**
- JDK1.0
### ensureCapacity
```java
public void ensureCapacity(int minCapacity)
```
**Parameters:**
- `minCapacity` - 최소 필요 용량
**Since:**
- JDK1.0
### setSize
```java
public void setSize(int newSize)
```
**Parameters:**
- `newSize` - 이 벡터의 새 크기
**Throws:**
- `ArrayIndexOutOfBoundsException` - 새 크기가 음수인 경우
**Since:**
- JDK1.0
### capacity
```java
public int capacity()
```
**Returns:**
- 이 벡터의 현재 용량
**Since:**
- JDK1.0
### size
```java
public int size()
```
**Returns:**
- 이 벡터의 구성 요소 수
**Since:**
- JDK1.0
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 이 벡터에 어떤 구성 요소도 없으면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### elements
```java
public Enumeration elements()
```
**Returns:**
- 이 벡터의 구성 요소 열거
**Since:**
- JDK1.0
**See Also:**
- ``Enumeration``
### contains
```java
public boolean contains(Object elem)
```
**Parameters:**
- `elem` - 객체
**Returns:**
- 지정된 객체가 이 벡터의 구성 요소이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### indexOf
```java
public int indexOf(Object elem)
```
**Parameters:**
- `elem` - 객체
**Returns:**
- 이 벡터에서 인자의 첫 항목 색인 또는 객체가 없는 경우
`-1`
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``
### indexOf
```java
public int indexOf(Object elem,
int index)
```
**Parameters:**
- `index` - 검색이 시작되는 색인
**Returns:**
- 이 벡터의 `index` 이상의 위치에서
인자의 첫 항목 색인 또는
객체가 없는 경우 `-1`
**Since:**
- JDK1.0
**See Also:**
- ``Object.equals(java.lang.Object)``
### lastIndexOf
```java
public int lastIndexOf(Object elem)
```
**Parameters:**
- `elem` - 필요한 구성 요소
**Returns:**
- 이 벡터에서 지정된 객체의 마지막 항목 색인 또는
객체가 없는 경우 `-1`
**Since:**
- JDK1.0
### lastIndexOf
```java
public int lastIndexOf(Object elem,
int index)
```
**Parameters:**
- `index` - 검색이 시작되는 색인
**Returns:**
- 이 벡터의 `index`보다 작은 위치에서
지정된 객체의 마지막 항목 색인 또는
객체가 없는 경우 `-1`
**Throws:**
- `IndexOutOfBoundsException` - `index`가
이 벡터의 현재 크기보다 크거나 같은 경우
**Since:**
- JDK1.0
### elementAt
```java
public Object elementAt(int index)
```
**Parameters:**
- `index` - 이 벡터의 색인
**Returns:**
- 지정된 색인의 구성 요소
**Throws:**
- `ArrayIndexOutOfBoundsException` - 유효하지 않은 색인이
지정된 경우
**Since:**
- JDK1.0
### firstElement
```java
public Object firstElement()
```
**Returns:**
- 이 벡터의 첫 구성 요소
**Throws:**
- `NoSuchElementException` - 이 벡터에 어떤 구성 요소도 없는 경우
**Since:**
- JDK1.0
### lastElement
```java
public Object lastElement()
```
**Returns:**
- 벡터의 마지막 구성 요소(예: 색인
`size() - 1`의 구성 요소)
**Throws:**
- `NoSuchElementException` - 이 벡터가 비어 있는 경우
**Since:**
- JDK1.0
### setElementAt
```java
public void setElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 지정된 색인
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### removeElementAt
```java
public void removeElementAt(int index)
```
**Parameters:**
- `index` - 제거할 객체의 색인
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### insertElementAt
```java
public void insertElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 새 구성 요소를 삽입할 위치
**Throws:**
- `ArrayIndexOutOfBoundsException` - 색인이 유효하지 않은 경우
**Since:**
- JDK1.0
**See Also:**
- ``size()``
### addElement
```java
public void addElement(Object obj)
```
**Parameters:**
- `obj` - 추가되는 구성 요소
**Since:**
- JDK1.0
### removeElement
```java
public boolean removeElement(Object obj)
```
**Parameters:**
- `obj` - 제거되는 구성 요소
**Returns:**
- 인자가 이 벡터의 구성 요소이면 `true`,
그렇지 않으면 `false`
**Since:**
- JDK1.0
### removeAllElements
```java
public void removeAllElements()
```
**Since:**
- JDK1.0
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 이 벡터의 문자열 표현
**Since:**
- JDK1.0
---
title: "package java.util"
---
**See:**
**Description**
## Interface Summary
- [Enumeration](Enumeration.md) — Enumeration 인터페이스를 구현하는 객체는 한 번에 하나씩 일련의 요소를 생성합니다.
## Class Summary
- [Calendar](Calendar.md) — Calendar 는 Date 객체 및 YEAR , MONTH , DAY , HOUR 등의 정수 필드 집합 간의 변환을 위한 추상 기본 클래스입니다.
- [Date](Date.md) — Date 클래스는 특정 시간을 밀리초까지 나타냅니다.
- [Hashtable](Hashtable.md) — 이 클래스는 키를 값에 매핑하는 해시 테이블을 구현합니다.
- [Random](Random.md) — 이 클래스의 인스턴스는 의사 난수 스트림을 생성하는 데 사용됩니다.
- [Stack](Stack.md) — Stack 클래스는 LIFO (Last-In-First-Out) 객체 스택을 나타냅니다.
- [TimeZone](TimeZone.md) — TimeZone 은 표준 시간대 오프셋을 나타내며 일광 절약 시간도 고려합니다.
- [Vector](Vector.md) — Vector 클래스는 확장 가능한 객체 배열을 구현합니다.
## Exception Summary
- [EmptyStackException](EmptyStackException.md) — 스택이 비어 있음을 나타내기 위해 Stack 클래스의 메소드에서 발생합니다.
- [NoSuchElementException](NoSuchElementException.md) — 열거에 더 이상 요소가 없음을 나타내기 위해 Enumeration 의 nextElement 메소드에서 발생합니다.
---
title: "Interface Connection"
---
`package javax.microedition.io`
```text
public void close()
throws IOException
```
## 설명
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 요약
- `void close ()` — 연결을 닫습니다.
## 메서드 상세
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Class ConnectionNotFoundException"
---
`package javax.microedition.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--javax.microedition.io.ConnectionNotFoundException
```
## 설명
**extends IOException:**
이 클래스는 연결 대상을 찾을 수 없거나
프로토콜 유형이 지원되지 않음을 나타내는 데 사용됩니다.
**Since:**
- CLDC 1.0
## 생성자 요약
- ConnectionNotFoundException () 세부 정보 메시지 없이 ConnectionNotFoundException을
구성합니다.
- ConnectionNotFoundException ( String s) 지정한 세부 정보 메시지를 사용하여 ConnectionNotFoundException을
구성합니다.
## 생성자 상세
### ConnectionNotFoundException
```java
public ConnectionNotFoundException()
```
- 세부 정보 메시지 없이 ConnectionNotFoundException을
구성합니다.
### ConnectionNotFoundException
```java
public ConnectionNotFoundException(String s)
```
- 지정한 세부 정보 메시지를 사용하여 ConnectionNotFoundException을
구성합니다. 세부 정보 메시지는 특정 예외를
설명하는 문자열입니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "Class Connector"
---
`package javax.microedition.io`
```text
java.lang.Object
|
+--javax.microedition.io.Connector
```
## 설명
**extends Object:**
이 클래스는 새로운 연결 객체를 만드는 데 사용됩니다.
시스템 등록 정보에서 읽은 플랫폼 이름에서 형성된
이름을 가진 프로토콜 구현 클래스와 응용 프로그램
프로그래머가 제공한 매개 변수 문자열에서 추출한 요청된
연결의 프로토콜 이름을 조회하여 동적으로
연결을 만듭니다.
대상을 설명하는 매개 변수 문자열은 RFC 2396에 설명된
URL 형식을 따라야 합니다.
일반적인 형식은 다음과 같습니다.
`{scheme}:[{target}][{params}]`
여기서 `{scheme}`은 *http*와 같은
프로토콜 이름입니다.
`{target}`은 일반적으로 일종의 네트워크
주소입니다.
모든 `{params}`는 ";x=y" 형식의
일련의 등식으로 형성됩니다(예: ";type=a").
선택 사항인 두 번째 매개 변수를 open 함수에 지정할
수도 있습니다. 이것은 호출 코드의 의도를 프로토콜
핸들러에 표시하는 모드 플래그입니다. 여기서 옵션은
연결이 읽기(READ), 쓰기(WRITE) 또는
둘 다(READ_WRITE)가 될 것인지를 지정합니다. 이러한 플래그 설정의
유효성은 프로토콜에 따라 결정됩니다. 예를 들어, 프린터 연결은
읽기 액세스를 허용하지 않으며 IllegalArgumentException을
발생시킵니다. 모드 매개 변수를 지정하지 않으면
기본적으로 READ_WRITE가 사용됩니다.
선택 사항인 세 번째 매개 변수는 호출 모드가 시간 초과 예외를
처리할 수 있는지를 나타내는 부울 플래그입니다. 이 플래그를
설정하면 프로토콜 구현에서 시간 초과 상황을 감지할 때
InterruptedIOException을 발생시킬 수도 있습니다.
이 플래그는 프로토콜 핸들러에게 제공되는 힌트일 뿐이며
실제로 이러한 예외가 발생한다는 것을 보장하지는 않습니다.
이 매개 변수를 설정하지 않으면 시간 초과 예외가 발생하지
않습니다.
단순히 특정 입력 또는 출력 스트림에 액세스하기 위해
연결을 여는 경우가 많기 때문에 이러한 용도로
4개의 편리한 함수가 제공됩니다.
데이터그램 주소 지정에 대한 자세한 내용은
``DatagramConnection``을 참조하십시오.
**Since:**
- CLDC 1.0
## 필드 요약
- `static int READ` — 액세스 모드 READ
- `static int READ_WRITE` — 액세스 모드 READ_WRITE
- `static int WRITE` — 액세스 모드 WRITE
## 메서드 요약
- `static Connection open ( String name)` — 연결을 만들어 엽니다.
- `static Connection open ( String name, int mode)` — 연결을 만들어 엽니다.
- `static Connection open ( String name, int mode, boolean timeouts)` — 연결을 만들어 엽니다.
- `static DataInputStream openDataInputStream ( String name)` — 연결 입력 스트림을 만들어 엽니다.
- `static DataOutputStream openDataOutputStream ( String name)` — 연결 출력 스트림을 만들어 엽니다.
- `static InputStream openInputStream ( String name)` — 연결 입력 스트림을 만들어 엽니다.
- `static OutputStream openOutputStream ( String name)` — 연결 출력 스트림을 만들어 엽니다.
## 필드 상세
### READ
```java
public static final int READ
```
**See Also:**
- `Constant Field Values`
### WRITE
```java
public static final int WRITE
```
**See Also:**
- `Constant Field Values`
### READ_WRITE
```java
public static final int READ_WRITE
```
**See Also:**
- `Constant Field Values`
### open
```java
public static Connection open(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### open
```java
public static Connection open(String name,
int mode)
throws IOException
```
**Parameters:**
- `mode` - 액세스 모드
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### open
```java
public static Connection open(String name,
int mode,
boolean timeouts)
throws IOException
```
**Parameters:**
- `timeouts` - 호출자가 시간 초과 예외를
원한다는 것을 나타내는 플래그
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openDataInputStream
```java
public static DataInputStream openDataInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataInputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openDataOutputStream
```java
public static DataOutputStream openDataOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataOutputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openInputStream
```java
public static InputStream openInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- InputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openOutputStream
```java
public static OutputStream openOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- OutputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
## 메서드 상세
### open
```java
public static Connection open(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### open
```java
public static Connection open(String name,
int mode)
throws IOException
```
**Parameters:**
- `mode` - 액세스 모드
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### open
```java
public static Connection open(String name,
int mode,
boolean timeouts)
throws IOException
```
**Parameters:**
- `timeouts` - 호출자가 시간 초과 예외를
원한다는 것을 나타내는 플래그
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openDataInputStream
```java
public static DataInputStream openDataInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataInputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openDataOutputStream
```java
public static DataOutputStream openDataOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataOutputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openInputStream
```java
public static InputStream openInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- InputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
### openOutputStream
```java
public static OutputStream openOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- OutputStream
**Throws:**
- `SecurityException` - 프로토콜 핸들러에 대한
액세스가 금지된 경우 발생할 수 있습니다.
---
title: "Interface ContentConnection"
---
`package javax.microedition.io`
```text
public String getType()
```
## 설명
**Returns:**
- URL이 참조하는 자원의 내용 유형 또는
유형을 알 수 없는 경우 `null`
### getEncoding
**Returns:**
- URL이 참조하는 자원의 내용 인코딩 또는
인코딩을 알 수 없는 경우 `null`
### getLength
**Returns:**
- 이 연결의 URL이 참조하는 자원의 내용
길이 또는 내용 길이를 알 수 없는 경우
`-1`
## 메서드 요약
- `String getEncoding ()` — 연결된 자원이 제공하는 내용의 인코딩을 설명하는 문자열을 반환합니다.
- `long getLength ()` — 제공되는 내용의 길이를 반환합니다.
- `String getType ()` — 연결된 자원이 제공하는 내용 유형을 반환합니다.
## 메서드 상세
### getType
```java
public String getType()
```
**Returns:**
- URL이 참조하는 자원의 내용 유형 또는
유형을 알 수 없는 경우 `null`
### getEncoding
```java
public String getEncoding()
```
**Returns:**
- URL이 참조하는 자원의 내용 인코딩 또는
인코딩을 알 수 없는 경우 `null`
### getLength
```java
public long getLength()
```
**Returns:**
- 이 연결의 URL이 참조하는 자원의 내용
길이 또는 내용 길이를 알 수 없는 경우
`-1`
---
title: "Interface Datagram"
---
`package javax.microedition.io`
```text
datagram = connection.newDatagram(max);
// Reset prepares the datagram for writing new message.
datagram.reset();
// writeUTF automatically increases the datagram length.
datagram.writeUTF("hello world");
connection.send(datagram);
```
## 설명
데이터그램에서 읽는 예는 다음과 같습니다(단일 사용에만 해당).
위의 *length*는 `getLength`에서 반환되며
경우에 따라 다른 의미를 가질 수 있습니다. 보낼 때의 *length*는
보낼 바이트 수입니다. 받기 전의 *length*는 수신할 최대 바이트 수입니다.
받은 후의 *length*는 수신된 바이트 수입니다.
따라서 보내거나 받은 후에 데이터그램을 다시 사용하여 수신하려면
`setLength`를 사용하여 길이를
다시 최대값으로 설정해야 합니다.
를 사용하지 않고 읽으려면
메소드를
사용해야 합니다.
데이터그램을 다시 읽는 예는 다음과 같습니다.
**Since:**
- CLDC 1.0
## 메서드 요약
- `String getAddress ()` — 데이터그램의 주소를 가져옵니다.
- `byte[] getData ()` — 데이터 버퍼의 내용을 가져옵니다.
- `int getLength ()` — 데이터그램의 길이를 가져옵니다.
- `int getOffset ()` — 오프셋을 가져옵니다.
- `void reset ()` — read/write pointer , offset 및 length 상태 변수를 0으로 설정합니다.
- `void setAddress ( Datagram reference)` — 다른 데이터그램의 주소를 복사하여 데이터그램 주소를 설정합니다.
- `void setAddress ( String addr)` — 데이터그램 주소를 설정합니다.
- `void setData (byte[] buffer, int offset, int len)` — buffer , offset 및 length 상태 변수를 설정합니다.
- `void setLength (int len)` — length 상태 변수를 설정합니다.
## 메서드 상세
### getAddress
```java
public String getAddress()
```
**Returns:**
- 문자열 형식의 주소 또는 주소가 설정되어 있지 않으면 null
**See Also:**
- ``setAddress(java.lang.String)``
### getData
```java
public byte[] getData()
```
**Returns:**
- 데이터 버퍼(바이트 배열)
**See Also:**
- ``setData(byte[], int, int)``
### getLength
```java
public int getLength()
```
**Returns:**
- length 상태 변수
**See Also:**
- ``setLength(int)``
### getOffset
```java
public int getOffset()
```
**Returns:**
- offset 상태 변수
### setAddress
```java
public void setAddress(String addr)
throws IOException
```
**Parameters:**
- `addr` - 새로운 대상 주소(URL)
**Throws:**
- `IOException` - 일종의 I/O 오류가 발생한 경우
**See Also:**
- ``getAddress()``
### setAddress
```java
public void setAddress(Datagram reference)
```
**Parameters:**
- `reference` - 이 데이터그램의 새로운 대상
주소로 복사되는 주소의 데이터그램
**Throws:**
- `IllegalArgumentException` - 주소가 유효하지 않은 경우
**See Also:**
- ``getAddress()``
### setLength
```java
public void setLength(int len)
```
**Parameters:**
- `len` - 새로운 데이터그램 길이
**Throws:**
- `IllegalArgumentException` - length 또는 length에
offset을 더한 값이 버퍼 범위에서 벗어나는 경우
**See Also:**
- ``getLength()``
### setData
```java
public void setData(byte[] buffer,
int offset,
int len)
```
**Parameters:**
- `len` - 버퍼의 데이터 길이
**Throws:**
- `IllegalArgumentException` - length 또는 length에 offset을
더한 값이 버퍼 범위에서 벗어나거나
버퍼 매개 변수가 유효하지 않은 경우
**See Also:**
- ``getData()``
### reset
```java
public void reset()
```
read/write pointer , offset 및 length 상태 변수를 0으로 설정합니다.
---
title: "Interface DatagramConnection"
---
`package javax.microedition.io`
```text
{protocol}://[{host}]:[{port}]
```
## 설명
데이터그램 연결은 "클라이언트" 모드나 "서버" 모드로 열 수 있습니다.
"//{host}" 부분이 없으면 연결은
"서버"로 열립니다. "서버"로 열린다는 것은 클라이언트 응용 프로그램에서
통신을 시작한다는 것을 의미합니다. "//{host}" 부분이 지정되어 있으면
연결은 "클라이언트"로 열립니다.
예:
데이터그램을 받아들이기 위한 데이터그램 연결
datagram://:1234
서버로 보내기 위한 데이터그램 연결
datagram://123.456.789.12:1234
호스트 이름이 지정되지 않은 "서버 모드"에서의 포트 번호는
수신 포트 번호입니다. 호스트 이름이 지정된 "클라이언트 모드"에서의
포트 번호는 대상 포트 번호입니다. 두 경우 모두, 회신 포트는
반드시 지정해야 합니다. "서버 모드"에서는 수신 및 전송에
모두 동일한 포트 번호가 사용됩니다. "클라이언트 모드"에서 회신 포트는
항상 동적으로 할당됩니다.
또한 데이터그램 객체가 J2SE (Java 2 Standard Edition)보다
추상적인 방법으로 할당됩니다.
구체적인 `DatagramPacket` 클래스를 제공하는 대신
추상적인 `Datagram` 인터페이스가 제공됩니다. 이를 통해
단일 플랫폼에서 여러 개의 다른 데이터그램 인터페이스를
동시에 지원할 수 있습니다. 데이터그램 객체는
`DatagramConnection` 객체의 `newDatagram` 메소드를
호출하여 할당해야 합니다.
결과로 만들어지는 객체는 다른 인터페이스 유형인
`javax.microedition.io.Datagram`을 사용하여 정의합니다.
**Since:**
- CLDC 1.0
## 메서드 요약
- `int getMaximumLength ()` — 데이터그램이 가질 수 있는 최대 길이를 가져옵니다.
- `int getNominalLength ()` — 데이터그램의 명목상의 길이를 가져옵니다.
- `Datagram newDatagram (byte[] buf, int size)` — 새로운 데이터그램 객체를 만듭니다.
- `Datagram newDatagram (byte[] buf, int size, String addr)` — 새로운 데이터그램 객체를 만듭니다.
- `Datagram newDatagram (int size)` — 새로운 데이터그램 객체를 만듭니다.
- `Datagram newDatagram (int size, String addr)` — 새로운 데이터그램 객체를 만듭니다.
- `void receive ( Datagram dgram)` — 데이터그램을 받습니다.
- `void send ( Datagram dgram)` — 데이터그램을 보냅니다.
## 메서드 상세
### getMaximumLength
```java
public int getMaximumLength()
throws IOException
```
**Returns:**
- 데이터그램의 최대 길이
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### getNominalLength
```java
public int getNominalLength()
throws IOException
```
**Returns:**
- 데이터그램의 명목상의 길이
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### send
```java
public void send(Datagram dgram)
throws IOException
```
**Parameters:**
- `dgram` - 데이터그램
**Throws:**
- `InterruptedIOException` - 시간 초과 또는 중단이 발생한 경우
### receive
```java
public void receive(Datagram dgram)
throws IOException
```
**Parameters:**
- `dgram` - 데이터그램
**Throws:**
- `InterruptedIOException` - 시간 초과 또는 중단이 발생한 경우
### newDatagram
```java
public Datagram newDatagram(int size)
throws IOException
```
**Parameters:**
- `size` - 데이터그램에 필요한
버퍼 크기
**Returns:**
- 새 데이터그램
**Throws:**
- `IllegalArgumentException` - 크기가 음수이거나
최대 크기보다 큰 경우
### newDatagram
```java
public Datagram newDatagram(int size,
String addr)
throws IOException
```
**Parameters:**
- `addr` - 데이터그램이 전송되는
I/O 주소
**Returns:**
- 새 데이터그램
**Throws:**
- `IllegalArgumentException` - 크기가 음수이거나
최대 크기보다 큰 경우 또는
주소 매개 변수가 유효하지 않은 경우
### newDatagram
```java
public Datagram newDatagram(byte[] buf,
int size)
throws IOException
```
**Parameters:**
- `size` - 데이터그램에 필요한
버퍼 크기
**Returns:**
- 새 데이터그램
**Throws:**
- `IllegalArgumentException` - 크기가 음수이거나
최대 크기 또는 지정된 버퍼의 길이보다 큰 경우
또는 버퍼 매개 변수가 유효하지 않은
경우
### newDatagram
```java
public Datagram newDatagram(byte[] buf,
int size,
String addr)
throws IOException
```
**Parameters:**
- `addr` - 데이터그램이 전송되는
I/O 주소
**Returns:**
- 새 데이터그램
**Throws:**
- `IllegalArgumentException` - 크기가 음수이거나
최대 크기 또는 지정된 버퍼의 길이보다 큰 경우
또는 주소나 버퍼 매개 변수가
유효하지 않은 경우
---
title: "Interface InputConnection"
---
`package javax.microedition.io`
```text
public InputStream openInputStream()
throws IOException
```
## 설명
**Returns:**
- 입력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### openDataInputStream
**Returns:**
- 입력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 요약
- `DataInputStream openDataInputStream ()` — 연결의 데이터 입력 스트림을 열고 반환합니다.
- `InputStream openInputStream ()` — 연결의 입력 스트림을 열고 반환합니다.
## 메서드 상세
### openInputStream
```java
public InputStream openInputStream()
throws IOException
```
**Returns:**
- 입력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### openDataInputStream
```java
public DataInputStream openDataInputStream()
throws IOException
```
**Returns:**
- 입력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Interface OutputConnection"
---
`package javax.microedition.io`
```text
public OutputStream openOutputStream()
throws IOException
```
## 설명
**Returns:**
- 출력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### openDataOutputStream
**Returns:**
- 출력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 요약
- `DataOutputStream openDataOutputStream ()` — 연결의 데이터 출력 스트림을 열고 반환합니다.
- `OutputStream openOutputStream ()` — 연결의 출력 스트림을 열고 반환합니다.
## 메서드 상세
### openOutputStream
```java
public OutputStream openOutputStream()
throws IOException
```
**Returns:**
- 출력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
### openDataOutputStream
```java
public DataOutputStream openDataOutputStream()
throws IOException
```
**Returns:**
- 출력 스트림
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "Interface StreamConnection"
---
`package javax.microedition.io`
---
title: "Interface StreamConnectionNotifier"
---
`package javax.microedition.io`
```text
public StreamConnection acceptAndOpen()
throws IOException
```
## 설명
**Returns:**
- 클라이언트와 통신할 `StreamConnection`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
## 메서드 요약
- `StreamConnection acceptAndOpen ()` — 서버측 소켓 연결을 나타내는 StreamConnection 객체를 반환합니다.
## 메서드 상세
### acceptAndOpen
```java
public StreamConnection acceptAndOpen()
throws IOException
```
**Returns:**
- 클라이언트와 통신할 `StreamConnection`
**Throws:**
- `IOException` - I/O 오류가 발생한 경우
---
title: "package javax.microedition.io"
---
**See:**
**Description**
## Interface Summary
- [Connection](Connection.md) — 일반 연결의 가장 기본적인 유형으로, close 메소드만 정의됩니다.
- [ContentConnection](ContentConnection.md) — 이 인터페이스는 내용이 전달되는 스트림 연결을 정의합니다.
- [Datagram](Datagram.md) — 이 클래스는 데이터그램 패킷에 대한 추상 인터페이스를 정의합니다.
- [DatagramConnection](DatagramConnection.md) — 이 인터페이스는 데이터그램 연결에 반드시 필요한 기능을 정의합니다.
- [InputConnection](InputConnection.md) — 이 인터페이스는 입력 스트림 연결에 반드시 필요한 기능을 정의합니다.
- [OutputConnection](OutputConnection.md) — 이 인터페이스는 출력 스트림 연결에 반드시 필요한 기능을 정의합니다.
- [StreamConnection](StreamConnection.md) — 이 인터페이스는 스트림 연결에 반드시 필요한 기능을 정의합니다.
- [StreamConnectionNotifier](StreamConnectionNotifier.md) — 이 인터페이스는 연결 알림기에 반드시 필요한 기능을 정의합니다.
## Class Summary
- [Connector](Connector.md) — 이 클래스는 새로운 연결 객체를 만드는 데 사용됩니다.
## Exception Summary
- [ConnectionNotFoundException](ConnectionNotFoundException.md) — 이 클래스는 연결 대상을 찾을 수 없거나 프로토콜 유형이 지원되지 않음을 나타내는 데 사용됩니다.
---
title: "spec"
---
## 머리말
지난 4년 동안 Sun 및 주요 소비자용 장치 제조업체는 휴대 전화, 양방향 호출기, 개인 오거 나이저 같은 자원 제약형 소비자 장치용으로, 이식성이 우수하며 최소 풋프린트를 지니는 Java™ 응용 프로그램 개발 환경을 만들기 위해 협력해 왔습니다.
이 작업은 K Virtual Machine (KVM)이라는 풋프린트를 적게 지니는 새로운 Java 가상 머신 의 개발로 시작되었습니다. 그런 다음 다양한 소비자용 장치 간에 Java 라이브러리 및 관련 Java 언어와 가상 머신 기능을 표준화하기 위해 두 가지 Java Community Process (JCP)
표준화 노력, 즉 Connected Limited Device Configuration (CLDC)과 Mobile Information Device Profile (MIDP)을 수행했습니다. CLDC와 MIDP 표준은 Java™ 2 Platform, Micro Edition (J2ME™ )의 주요 부분입니다.
이 설명서 Connected Limited Device Configuration 규격은 J2ME Connected Limited Device Configuration (CLDC)의 1.1 버전을 정의합니다. 이 규격은 전 세계의 24개 회사로 구성된 Java Community Process 전문가 그룹 JSR-139가 만들었습니다.
J2ME 플랫폼의 컨피규레이션은 핵심 플랫폼 라이브러리를 비롯한 Java 프로그래밍 언어의 하위 집합, 컨피규레이션의 Java Virtual Machine 기능의 하위 집합, 보안 및 네트워킹 기능 등과 같이 다양한 소비자 제품을 지원하기 위한 모든 사항을 지정합니다.
Connected Limited Device Configuration은 하나 이상의 프로화일의 기본이 됩니다. J2ME 플랫폼의 프로화일은 특정 수직적 시장, 장치 범주 또는 산업을 위한 추가 API 및 기능 집합을 정의합니다. 컨피규레이션 및 프로화일은 J2ME™ Platform 규격 설명서에 보다 정확 하게 정의되어 있습니다.
## 이 규격의 사용 대상
이 설명서의 대상은 다음과 같습니다.
- 이 컨피규레이션을 정의하는 Java Community Process (JCP) 전문가 그룹 JSR-139
- 소형, 자원 제약형, 연결 장치용으로 Java 응용 프로그램을 작성하려는 응용 프로그 램 개발자 및 컨텐트 공급업체
- CLDC 규격을 준수하는 소형 Java 사용 장치를 빌드하려는 장치 제조업체
- CLDC 규격을 준수하는 구현을 빌드하려는 Java 플랫폼 공급업체
## 이 규격의 구성
이 규격의 내용은 다음과 같이 구성되어 있습니다.
1장‚ “소개 및 배경”은 CLDC 규격의 일부 배경 정보 및 컨텍스트를 제공하며 JSR-139 및 JSR-30 규격 작업에 참여한 회사 이름을 나열합니다. 또한 이 장에서는 CLDC 규격 버전 1.1 과 1.0의 주요 차이점을 요약합니다.
2장‚ “목표, 요구 사항 및 범위”는 이 규격의 목표, 요구 사항 및 범위를 정의합니다.
3장‚ “높은 수준의 구조 및 보안”은 CLDC의 높은 수준의 구조를 정의하고 해당 보안 기 능을 설명합니다.
4장‚ “Java 언어 규격 유지”는 CLDC 규격에서 정의한 표준 Java 프로그래밍 언어의 변형 을 설명합니다.
5장‚ “Java 가상 머신 규격 유지”는 CLDC 규격에서 정의한 표준 Java Virtual Machine의 변형을 설명합니다.
6장‚ “CLDC 라이브러리”는 CLDC 규격에서 지원하는 Java API를 정의합니다.
“부록”은 이 규격에 부속된 부록 번호에 대한 포인터입니다.
## 관련 문서
IEEE Standard for Binary Floating-Point Arithmetic. ANSI/IEEE Standard 754-1985. Global Engineering Documents (15 Inverness Way East, Englewood, Colorado 80112-5704, USA, +1 (800) 854-7179)에서 구할 수 있습니다.
The Java Language Specification (Java Series), Second Edition by James Gosling, Bill Joy, Guy L. Steele, and Gilad Bracha. Addison-Wesley, 2000, ISBN 0-201-31008-2
The Java™ Virtual Machine Specification (Java Series), Second Edition by Tim Lindholm and Frank Yellin (Addison-Wesley, 1999)
Programming Wireless Devices with the Java™ 2 Platform, Micro Edition (Java Series) by Roger
Riggs, Antero Taivalsaari, and Mark VandenBrink. Addison-Wesley, 2001, ISBN 0-20174627-1
`http://jcp.org/jsr/detail/68.jsp`
`http://jcp.org/aboutJava/communityprocess/final/jsr030/`
`http://jcp.org/aboutJava/communityprocess/final/jsr037/`
## 관련 웹 페이지
Java 2 Micro Edition 제품 웹 페이지 `http://java.sun.com/j2me/ `K Virtual Machine (KVM) 제품 웹 페이지 `http://java.sun.com/products/kvm/`
Connected Limited Device Configuration Specification, Java Community Process, Sun Microsystems, Inc. (CLDC) 제품 웹 페이지 `http://java.sun.com/products/cldc/ `Mobile Information Device Profile (MIDP) 제품 웹 페이지 `http://java.sun.com/products/midp/ `J2ME Wireless Toolkit 제품 웹 페이지 `http://java.sun.com/products/j2mewtoolkit/`
머리말
## 수정 사항 기록
표 1
| 날짜 | 버전 | 설명 |
|---|---|---|
| 2001년 10월 10일 | | CLDC NG (Next Generation) 규격에서 작업이 시작 되었습니다. |
| 2001년 10월 22일 | 1.1 작업 드래프트 1 | 주석이 있는 첫 번째 “완전한” 작업 드래프트입니다. |
| 2001년 11월 21일 | 1.1 작업 드래프트 2 | 전문가 그룹 구성원과 다른 검토자로부터의 피드백 을 기반으로 한, 두 번째 작업 드래프트입니다. 변경 사항을 추적하기 쉽도록 변경줄을 설정하였습니다. |
| 2001년 12월 19일 | 1.1 작업 드래프트 3 | 세 번째 전문가 그룹 회의의 통합된 피드백입니다. |
| 2002년 1월 17일 | 1.1 커뮤니티 검토 | 이 버전은 커뮤니티 검토를 위해 JCP에 제출되었습 니다. 변경줄이 제거되었습니다. |
| 2002년 3월 11일 | 1.1 작업 드래프트 4 | 커뮤니티 검토와 네 번째 전문가 그룹 회의의 피드백 이 포함됩니다. |
| 2002년 3월 20일 | 1.1 공개 검토 | 이 버전은 공개 검토를 위해 JCP에 제출되었습니다. 변경줄이 제거되었습니다. CLDC 1.0과 1.1의 차이점 을 업데이트했습니다. |
| 2002년 5월 10일 | 1.1 공개 검토 - 내부 버전 1 | 공개 검토 중에 외부 및 내부 피드백을 받아 일부 라 이브러리 클래스와 javadocs를 개정했습니다. |
| 2002년 5월 31일 | 1.1 공개 검토 - 내부 개정판 2 | 전문가 그룹의 결정에 따라 `Thread.interrupt() `를 추가했습니다. 파악되지 않은 예외 및 오류와 관 련된 일부 텍스트를 추가했습니다. 기타 간단한 설명 몇 가지도 추가했습니다. |
| 2002년 6월 7일 | 1.1 공개 검토 - 내부 개정판 3 | `Date.toString()`의 ISO8601 호환 버전이 J2SE와 호환되지 않기 때문에 제거되었습니다. 부록 1의 버 그를 약간 수정했습니다. |
| 2002년 7월 8일 | 1.1 공개 검토 - 내부 개정판 4 | 내부 피드백에 따라 라이브러리 문서가 약간 업데이 트되었습니다. 주 규격 문서는 변경하지 않았습니다. |
| 2002년 7월 12일 | 1.1 공개 검토 - 공개 개정판 2 | Motorola 및 내부 검토자의 최신 피드백을 통합했습 니다. 대부분의 변경 사항은 javadocs와만 관련되어 있습니다. `String.equalsIgnoreCase()` 메소드 를 추가했습니다. |
표 1
| 날짜 | 버전 | 설명 |
|---|---|---|
| 2002년 11월 15일 | 1.1 제안된 최종 드래 프트 | 내부 검토자의 의견을 반영하여 약간 업데이트했습 니다. `Date.toString()`(J2SE 호환 버전)을 다시 추가했습니다. |
| 2002년 12월 12일 | 1.1 제안된 최종 드래 프트 | Nokia 및 기타 검토자의 피드백을 통합했습니다. `StackMap` 속성에 대한 중복되는 정의를 제거했습 니다. |
## 주석
이 설명서에는 JSR-139 전문가 그룹의 의견 및 결정을 요약하기 위해 사용된 주석이 포함 되어 있습니다. 주석의 형식은 아래에 설명되어 있습니다.
주석 – 주석의 형태입니다. 이러한 주석은 실제 규격의 일부가 아닙니다. JSR-139 전문가 그룹의 의견과 결정을 요약하기 위해 사용되었습니다.
머리말
1장
## 소개 및 배경
이 설명서는 Java™ 2 Platform, Micro Edition (J2ME™)의 Connected, Limited Device Configuration (CLDC)을 지정합니다.
CLDC 규격의 주요 목표는 자원 제약형, 연결 장치용으로 이식성이 우수하며 최소 풋프린트 를 지니는 Java™ 응용 프로그램 개발 플랫폼을 표준화하는 것입니다.
휴대폰, 양방향 호출기, PDA (Personal Digital Assistant), 오거나이저, 가전 제품, 로우 엔드 TV 셋탑 박스 및 POS 단말기는 이 규격에서 지원할 수 있는 장치의 일부에 불과합니다.
이러한 J2ME 컨피규레이션 규격은 소형 연결 장치에 대한 Java 기술 구성 요소 및 라이브러 리의 최소 필수 보완을 정의합니다. Java 언어 및 가상 머신 기능, 핵심 라이브러리, 보안, 입 출력 및 네트워킹은 이 규격에서 다루는 주요 내용입니다.
CLDC는 하나 이상의 프로화일에 대해 기본으로 사용됩니다. J2ME 프로화일은 특정 수직 적 시장, 장치 범주 또는 산업의 기능인 추가 라이브러리를 정의합니다.
### 1.1 CLDC 전문가 그룹
JSR-139 전문가 그룹. 이 규격은 많은 산업 파트너로 구성된 Java Community Process 전문 가 그룹 JSR-139의 산물입니다. 다음 회사(알파벳순)는 JSR-139 전문가 그룹 작업의 정식 구성원입니다.
- aJile Systems
- Aplix Corporation
- France Telecom
- Fujitsu
- Insignia Solutions
- Liberate Technologies
- Mitsubishi
- Motorola ■ NEC
- Nokia
- NTT DoCoMo
- OpenTV
- Openwave Systems
- Oracle
- Panasonic
- Research In Motion (RIM)
- Samsung
- Siemens
- Sony
- Sony Ericsson Mobile Communications
- Sun Microsystems
- Symbian
- Vulcan Machines ■ Zucotto Wireless
그리고 11개 회사와 개인이 JSR-139 전문가 그룹 작업에 참관자로서 참여하였습니다. 참관 자는 드래프트 규격 버전, 중간 문서 및 회의 일정을 모두 받았지만 실제 전문가 그룹 회의 에는 참석하지 않았습니다.
JSR-30 전문가 그룹. 이 규격은 2000년 5월에 완료된 CLDC 규격 버전 1.0에서 파생되었습니 다. JSR-30 전문가 그룹은 다음 회사(알파벳순)의 대표로 구성되었습니다.
- America Online
- Bull
- Ericsson
- Fujitsu
- Matsushita
- Mitsubishi
- Motorola
- Nokia
- NTT DoCoMo
- Oracle
- Palm Computing
- Research In Motion (RIM)
- Samsung
- Sharp
- Siemens
- Sony
- Sun Microsystems
- Symbian
### 1.2 CLDC 규격 버전 1.1과 1.0의 주요 차이점
CLDC 1.1 (JSR-139) 전문가 그룹 구성원은 CLDC 규격 버전 1.0에 대체적으로 만족했기 때 문에 새 규격에서 많은 변화를 원하지 않았습니다. 그러므로 CLDC 규격 버전 1.1은 CLDC 규격 버전 1.0과 완전히 역호환되게 만든 추가 릴리스입니다. 부동 소수점 지원 같은 중요한 새 기능이 몇 가지 추가되었습니다.
아래의 목록에서는 CLDC 규격 버전 1.1 (JSR-139)과 1.0 (JSR-30)의 주요 차이점을 요약합 니다.
- 부동 소수점 지원이 추가되었습니다.
- 모든 부동 소수점 바이트 코드는 CLDC 1.1에 의해 지원됩니다.
- 클래스 `Float`과 `Double`이 추가되었습니다.
- 부동 소수점 값을 처리하기 위해 다양한 메소드가 다른 라이브러리 클래스에 추가되 었습니다.
- 약한 참조(Weak reference) 지원(J2SE 약한 참조 클래스의 일부분)이 추가되었습니다.
- 클래스 `Calendar`, `Date` 및 `TimeZone`은 좀 더 J2SE와 호환이 되도록 다시 설계되었습니 다.
- 오류 처리 요구 사항이 명확해졌으며 새 오류 클래스인 `NoClassDefFoundError`가 추가되었습니다.
- CLDC 1.1에서 `Thread` 객체는 J2SE의 스레드와 유사한 이름을 갖습니다. `Thread.getName()` 메소드가 소개되었으며 `Thread` 클래스는 J2SE로부터 상속된 몇 개의 새 구성자를 갖습니다.
- 다음 필드 및 메소드 추가 같은, 여러 가지 사소한 라이브러리 변경 및 버그 수정이 포함 되었습니다.
- `Boolean.TRUE and Boolean.FALSE`
- `Date.toString()`
- `Random.nextInt(int n)`
- `String.intern()`
- `String.equalsIgnoreCase()`
- `Thread.interrupt()`
- 부동 소수점 기능이 추가되었기 때문에 최소 필수 메모리가 160KB에서 192KB로 늘어 났습니다.
- 규격 텍스트 내용이 많아졌기 때문에 이전의 하위 절은 제거되었습니다.
- 보다 자세한 검증자 규격(“CLDC 바이트 코드 유형 검사기 규격”)은 부록으로 제공됩니다.
1장 소개 및 배경
2장
## 목표, 요구 사항 및 범위
### 2.1 목표
목표 요약. CLDC 규격의 목표는 자원 제약형, 연결 장치를 위해 이식성이 우수하며 최소 풋프린트를 지니는 Java™ 응용 프로그램 개발 플랫폼을 표준화하는 것입니다.
CLDC 규격의 대상 장치는 다음과 같은 일반적 특성을 갖습니다.
- Java 플랫폼에서 사용 가능한 전체 예상 메모리가 최소 192KB임(2.2.1절 “하드웨어 요구 사항“ 참조)
- 16비트 또는 32비트 프로세서
- 낮은 전력 소비, 배터리 전원으로도 작동함
- 일부 종류의 네트워크에 대한 연결성, 무선도 가능, 간헐적 연결 및 제한된 대역폭
휴대폰, 양방향 호출기, PDA (Personal Digital Assistant), 오거나이저, 가전 제품, 로우 엔드 TV 셋탑 박스 및 POS 단말기는 이 규격에서 지원할 수 있는 장치의 일부에 불과합니다.
구체적으로 말해서 CLDC 규격은 다음 특성과 목표를 갖는 Java 응용 프로그램 개발 플랫폼 을 정의합니다.
- 풋프린트를 작게 차지합니다. 휴대폰 같은 소비자 장치는 대량(매년 십만, 백만 또는 천만 개 정도) 제조되어 저렴한 가격으로, 때로는 보조금까지 지급되어 소비자에게 판매됩니
다. 이윤 폭을 유지하기 위해 장치 제조업체는 장치의 단가를 가능한 한 낮게 유지하려고 합니다. 소비자가 추가 기능에 대해 비용을 지불하지 않는 한 추가 전원이나 동적 메모리 는 추가되지 않습니다. 장치 제조업체의 요구를 충족시키기 위해 CLDC 규격은 다양한 소비자 장치에 대한 최소 Java 플랫폼 기능 및 API만 포함하는 “최소 공통” 표준을 정의 합니다.
- 시스템 프로그래밍이 아닌 응용 프로그램 프로그래밍에만 초점을 맞춥니다. CLDC는 시스템 프로그래밍 환경이라기보다 응용 프로그램 개발 플랫폼입니다. 따라서 Java 플랫 폼 기능과 API가 이 규격에 포함되었습니다.
먼저 CLDC 규격에는 응용 프로그램 개발자에게 충분한 프로그래밍 능력을 제공하는 높은 수준의 라이브러리만 포함합니다. 두 번째로 일반성 및 이식성의 중요성을 강조 합니다. CLDC 규격은 특정 장치 범주, 수직적 시장 또는 시스템 기능에 해당하는 API는 제공하지 않습니다.
- 응용 프로그램의 동적 다운로드를 가능하게 하고 타사 응용 프로그램 개발을 장려합니다. 과거와 달리 휴대폰과 호출기 같은 소형 장치는 대개 공장에서 하드 코드된 기능 집합과 함께 제공되므로 장치 제조업체는 컨텐트 공급자와 타사 개발자로부터 대화식 컨텐트의 동적 다운로드를 지원하는 확장 가능 장치를 빌드할 수 있는 솔루션을 찾아가고 있습니
다. 인터넷이 가능한 휴대폰, 통신기 및 호출기가 최근 소개되면서 이러한 추이는 이미 진행 중입니다. CLDC 규격의 기본 목표 중 하나는 Java 응용 프로그램을 다양한 종류의 네트워크를 통해 소형 클라이언트 장치로 동적으로 안전하게 다운로드하기에 적합한 환경을 정의하는 것입니다.
동적으로 배달된 Java 응용 프로그램에 초점을 맞춘다는 것은 이 규격이 하드웨어 제조업체 와 관련 시스템 프로그래머뿐만 아니라 타사 응용 프로그램 개발자도 위한 것이라는 의미입 니다. 사실 소형 Java 사용 장치가 많아지면서 이러한 장치의 응용 프로그램 개발자 대다수 는 장치 제조업체가 아닌 타사 개발자가 된다고 가정합니다.
### 2.2 요구 사항
#### 2.2.1 하드웨어 요구 사항
CLDC는 다양한 소형 장치에서의 실행을 목적으로 합니다. 이러한 장치의 기본 하드웨어 기능은 상당히 다양하므로 CLDC 규격에서는 메모리 요구 사항 이외의 특정 하드웨어 요구 사항에 대해 설명하지 않습니다. 메모리 제한 때문에라도 CLDC 규격은 최소 제한만 정의 하므로 실제 CLDC 대상 장치는 최소 제한보다 상당히 더 큰 메모리를 가지게 됩니다.
CLDC 규격은 다음 내용을 가정합니다.
- 최소 16KB의 비휘발성1 메모리를 가상 머신과 CLDC 라이브러리에서 사용할 수 있습 니다.
- 최소 32KB 휘발성2 메모리는 가상 머신 런타임(예: 객체 힙)에 사용할 수 있습니다.
- 비휘발성이란 용어는 사용자가 장치를 “켰다” “껏다”하는 동안에도 메모리의 내용이 그대로 유지됨을 나타 내는 데 사용됩니다. CLDC 규격의 용도에 맞게 비휘발성 메모리는 대개 읽기 모드에서 액세스되며 메모리에 기록하기 위해서 특수 설정 작업이 필요하다고 가정합니다. 비휘발성 메모리의 예에는 ROM, Flash 및 배터리 내장 SDRAM이 포함됩니다. CLDC 규격은 장치에 있어야 할 메모리 기술은 정의하지 않으며 전원 소모 시나 리오에서 이러한 메모리의 동작에 대해서도 정의하지 않습니다.
- 휘발성이란 용어는 사용자가 장치를 “켰다” “껏다”하는 동안 메모리의 내용이 유지되지 않음을 나타내는 데 사용됩니다. CLDC 규격의 용도에 맞게 특수 설치 없이 휘발성 메모리를 직접 읽고 쓸 수 있다고 가정합니다. 가장 일반적인 유형(type)의 휘발성 메모리는 DRAM입니다.
전체 예상 메모리에서 휘발성 메모리 대 비휘발성 메모리의 비율은 대상 장치 및 장치의 Java 플랫폼 역할에 따라 상당히 달라질 수 있습니다. 장치에 빌드된 시스템 응용 프로그램 을 실행하기 위해 Java 플랫폼이 엄격하게 사용된 경우 응용 프로그램을 미리 링크하고 로 드할 수 있으므로 제한된 양의 휘발성 메모리만 필요합니다. 동적으로 다운로드된 컨텐트를 실행하기 위해 Java 플랫폼이 사용된 경우 장치에는 더 많은 휘발성 메모리가 필요합니다.
#### 2.2.2 소프트웨어 요구 사항
하드웨어 기능과 마찬가지로 CLDC 대상 장치의 시스템 소프트웨어도 상당히 다양합니다. 예를 들어, 어떤 장치는 여러 개의 동시 운영 체제 프로세스 및 계층 파일 시스템을 지원하는 다양한 기능의 운영 체제를 기자고 있을 수 있습니다. 다른 대부분의 장치에는 파일 시스템 이란 개념이 없는 상당히 제한된 시스템 소프트웨어가 있습니다. 이러한 다양성으로 인해 CLDC는 기본 시스템 소프트웨어에 대해 최소로 가정합니다.
일반적으로 CLDC 규격은 기본 하드웨어를 관리하기 위해 최소 호스트 운영 체제나 커널을 사용할 수 있다고 가정합니다. 이 호스트 운영 체제는 Java 가상 머신을 실행하기 위해 예약 가능한 엔티티를 최소한 한 개 이상 제공해야 합니다. 호스트 운영 체제는 별도의 주소 공간 이나 프로세스를 지원할 필요가 없으며 실시간 스케줄링이나 대기 시간 동작을 보장할 필요 가 없습니다.
#### 2.2.3 J2ME 요구 사항
CLDC는 Java 2 Micro Edition (J2ME)컨피규레이션으로 정의되어 있습니다. 이는 CLDC 규격에 대해 다음과 같은 중요한 의미를 갖습니다.
- J2ME 컨피규레이션은 Java 기술의 최소 보완이나 “최소 공통 사항”만 정의합니다. 컨피 규레이션에 포함된 모든 기능은 일반적으로 다양한 장치에 적용 가능해야 하므로
Connected Limited Device Configuration의 범위는 실제 대상 장치에서 제한되며, 불완전할 수 있다는 의미입니다. 특정 수직적 시장, 장치 범주 또는 산업의 추가 기능은 J2ME 프 로화일 규격에 정의되어 있어야 합니다.
- 컨피규레이션 목표는 다양한 종류의 자원 제약형 장치 사이의 이식성 및 상호 운용성을 보장하는 것이므로 컨피규레이션은 선택적 기능을 정의하지 않을 것입니다. 이러한 제 한은 컨피규레이션에 포함되어야 할 내용과 포함되지 말아야 할 내용에 대해 중요한 영 향을 미칩니다. 도메인 특정 기능은 CLDC가 아닌 J2ME 프로화일 또는 선택적 패키지 에 정의되어야 합니다.
- J2ME 컨피규레이션 사용은 일반적으로 Java 2 Platform, Standard Edition (J2SE)에 의해 제공된 Java 기술 기능 및 라이브러리의 일부를 정의합니다. 따라서 CLDC 규격은 지원 되는 모든 기능에 대한 전체 설명을 제공하기보다는 전체 JLS (Java Language
Specification) 및 JVMS (Java Virtual Machine Specification)와 비교하여 변경된 내용이
나 차이점만 정의합니다. CLDC 규격에 명시적으로 지정된 내용이 없으면 CLDC 규격은 JLS와 JVMS를 준수합니다.
2장 목표, 요구 사항 및 범위
J2ME 컨피규레이션 및 프로화일 정의 규칙과 지침에 대한 자세한 내용은 J2ME™ 플랫폼 규격을 참조하십시오.
CLDC의 선택적 기능 부재가 다양한 구현 최적화를 제한하는 것은 아닙니다. 예를 들어, 구현의 관찰 가능한 사용자 수준 의미(semantics)가 CLDC 규격에서 정의한 내용과 같다면 구현 수준에서 대체 바이트 코드 실행 기술(예: Just-In-Time 컴파일)이나 클래스 표현 기술
(Class representation techniques)을 사용할 수 있습니다.
### 2.3 범위
JSR-30과 JSR-139 전문가 그룹의 결정에 따라 CLDC 규격은 다음 영역에 대해 언급합니다.
- Java 언어 및 가상 머신 기능
- 핵심 Java 라이브러리(`java.lang.*`, `java.util.*`)
- 입출력(`java.io.*`)
- 보안
- 네트워킹
- 국제화
이 CLDC 규격은 다음 영역은 언급하지 않습니다.
- 응용 프로그램 설치 및 라이프 사이클 관리
- 사용자 인터페이스 기능
- 이벤트 처리
- 높은 수준의 응용 프로그램 모델(사용자와 응용 프로그램 간 상호 작용) 이러한 기능은 CLDC의 맨 위에 구현된 프로화일에서 언급할 수 있습니다.
CLDC 전문가 그룹은 의도적으로 CLDC에서 주소를 지정하는 영역의 수를 적게 갖기로 결정 하였습니다. 엄격한 메모리 제한을 초과하지 않거나 특정 장치 범주를 제외하려면 CLDC의 범위를 제한하는 것이 좋다고 판단했습니다. 추가 기능 영역은 J2ME 프로화일 규격에 더 잘 언급되어 있습니다.
이 규격의 나머지는 다음과 같이 구성됩니다. 일반 CLDC 환경의 높은 수준 구조에 대한 설명 부터 시작합니다. 그런 다음 CLDC를 준수하는 가상 머신의 Java 언어와 가상 머신 기능을 전체 Java™ 언어 규격과 Java Virtual Machine 규격을 따르는 전형적인 Java 환경과 비교합 니다. 마지막으로 이 규격은 CLDC에 포함된 Java 라이브러리를 설명합니다.
3장
## 높은 수준의 구조 및 보안
이 장에서는 일반적인 CLDC 환경의 높은 수준 구조를 설명합니다. 이러한 설명은 뒤에 나오는 장의 좀 더 자세한 규격에 대한 시작 지점 역할을 합니다.
### 3.1 CLDC 높은 수준의 구조
일반적인 J2ME 장치의 높은 수준의 구조는 그림 1에 설명되어 있습니다. CLDC 구현(“컨피 규레이션”)의 중심은 Java Virtual Machine (JVM)으로 이 규격의 뒷 부분에서 정의할 특정 차 이점과 상관없이 Java™ Virtual Machine 규격 및 Java™ 언어 규격과 호환됩니다. 가상 머신 은 CLDC 범위를 벗어난 호스트 운영 체제의 맨 위에서 일반적으로 실행됩니다.
Java 라이브러리는 가상 머신의 맨 위에 있습니다. 이러한 라이브러리 중 일부는 그림 1에 표시 된 대로 Connected Limited Device Configuration 자체에 정의되어 있습니다. 그리고 J2ME 프 로화일은 컨피규레이션 계층의 맨 위에 있는 추가 라이브러리 및 기능을 정의합니다.

그림 1 높은 수준의 구조
### 3.2 Java 응용 프로그램의 개념
CLDC (Connected Limited Device Configuration)는 특정 장치 범주를 대상으로 하지 않습니 다. 많은 대상 장치에는 고급 그래픽 사용자 인터페이스가 있습니다. 일부 대상 장치는 텍스 트, 문자 기반 사용자 인터페이스에서 작동하지만 일부 다른 대상 장치는 시각적 사용자 인터 페이스가 없거나 전혀 표시하지 않습니다. 이렇게 다양한 장치에 대응하기 위해 CLDC 규격 에 정의된 응용 프로그램 모델은 아주 간단합니다.
CLDC 규격에서 Java 응용 프로그램이란 용어는 응용 프로그램의 시작 지점을 식별하는 단일의 고유한 메소드 `main`이 포함된 Java 클래스 파일 모음을 참조하는 데 사용됩니다.
Java™ Virtual Machine 규격, §5.2 및 §2.17.1에 지정된 대로 메소드 `main`은 아래와 같이 `public`, `static` 및 `void`로 선언되어야 합니다.
`public static void main(String[] args)`
CLDC 규격을 준수하는 가상 머신은 메소드 `main`을 호출하여 Java 응용 프로그램을 실행 합니다.
MIDP 같은 J2ME 프로화일은 CLDC 규격에 정의된 기본 응용 프로그램 모델을 확장하거나 대체하는(override) 응용 프로그램 모델을 정의할 수 있습니다.
### 3.3 응용 프로그램 관리
많은 소형, 자원 제약형 장치에는 동적으로 다운로드된 정보를 장치에 저장하기 위한 파일 시스템이나 기타 표준 기법이 없습니다. 그러므로 CLDC 구현 시 외부 소스로부터 다운로드 한 Java 응용 프로그램을 장치에 영구적으로 저장할 것을 요구하지 않습니다. 대신 구현 시 응용 프로그램만 로드하고 실행 후 바로 삭제합니다.
하지만 많은 해당 CLDC 장치에서 응용 프로그램을 반복해서 다운로드할 필요 없이 같은 Java 응용 프로그램을 여러 번 실행하는 것이 좋습니다. 이는 무선 네트워크를 통해 응용 프 로그램을 다운로드 받음으로써 사용자가 높은 다운로드 비용을 부담해야 하는 경우 특히 중 요합니다. CLDC를 구현하는 장치에 응용 프로그램을 영구적으로 저장할 수 있는 경우 장치 에 저장된 응용 프로그램을 관리할 기능이 구현 중인 장치에 있다고 가정합니다. 높은 수준 의 응용 프로그램 관리는 다음과 같은 기능을 포함합니다.
- Java 응용 프로그램 다운로드 및 설치
- 장치에 저장된 기존 Java 응용 프로그램 검사
- Java 응용 프로그램 선택 및 시작 ■ 기존 Java 응용 프로그램 삭제(해당하는 경우)
장치에서 사용할 수 있는 자원에 따라 CLDC 시스템은 여러 Java 응용 프로그램이 동시에 실행되게 할 수 있거나 한 번에 한 Java 응용 프로그램만 실행되도록 시스템을 제한할 수 있 습니다. 기본 호스트 운영 체제의 멀티캐스팅 기능(존재할 경우)을 활용하거나 동시에 Java 응용 프로그램을 실행하는 여러 논리 가상 머신을 인스턴스화하여 여러 Java 응용 프로그램 실행이 지원되는지 여부를 확인하는 작업은 특정 CLDC 구현에 따라 달라집니다.
해당 CLDC 장치 간 중요한 변형 및 기능 차이로 인해 응용 프로그램 관리의 세부 사항은 장치 및 구현에 따라 많이 달라집니다. 응용 프로그램 관리에 관한 실제 세부 사항은 CLDC 규격에서 다루지 않습니다.
### 3.4 보안
기업 및 개인은 컴퓨터 시스템과 네트워크에 저장된 중요한 정보에 점점 더 의존하므로 보 안 문제는 더욱 중요해지며 모바일 컴퓨팅과 무선 네트워크 컨텍스트에서 더 중요합니다. 고유한 보안 구조로 인해 Java 개발 플랫폼은 특히 보안이 중요한 환경에 특히 적합합니다.
Java 2 Platform, Standard Edition (J2SE)에서 제공하는 보안 모델은 Java 플랫폼에 빌드된 강력하고 유연성 있는 보안 프레임워크를 개발자에게 제공합니다. 개발자는 최종 사용자 에게 모두 투명하게 표시되도록 세부적인 보안 정책을 만들고 개별 응용 프로그램의 독립 사용 권한을 명백하게 할 수 있습니다.
3장 높은 수준의 구조 및 보안
안타깝게도 Java 2 Platform, Standard Edition에서 보안을 담당하는 전체 코드는 CLDC에서 사용 가능한 전체 예상 메모리를 훨씬 초과합니다. 따라서 CLDC 보안 모델을 정의할 때는 단순화해야 합니다. CLDC의 보안 모델은 다음 세 가지 수준으로 정의됩니다.
- 낮은 수준의 보안. 가상 머신 보안으로도 알려져 있는 낮은 수준의 보안은 가상 머신에서 실행 중인 응용 프로그램이 Java 프로그래밍 언어의 의미를 따르도록 하며 부적합하거나 악의적으로 인코딩된 클래스 파일이 대상 장치와 충돌하거나 손상시킬 수 없도록 합니다.
- 응용 프로그램 수준의 보안. 응용 프로그램 수준의 보안은 장치에서 실행 중인 Java 응용 프로그램이 장치 및 Java 응용 프로그램 환경에서 액세스를 허용한 라이브러리, 시스템 자 원 및 기타 구성 요소에만 액세스할 수 있음을 의미합니다.
- 종단간 보안. 종단간 보안은 특정 장치에서 시작된 트랜잭션이 해당 트랜잭션(예: 인터넷 에 위치한 서버)에 대한 서비스를 제공하는 장치에서 엔티티 이르는 전체 경로를 따라 보 호되도록 보증하는 모델을 참조합니다. 그러기 위해 암호화나 다른 방법이 필요할 수도 있 습니다. 종단간 보안은 CLDC 규격의 범위를 벗어나며 종단간 소프트웨어 개발을 위한 기 능을 제공하는 해당 J2ME 프로화일에 의해 정의된다고 가정합니다. 아래에서는 이러한 수준 각각에 대해 좀 더 자세하게 살펴봅니다.
#### 3.4.1 낮은 수준(가상 머신) 보안
모바일 정보 장치에서 Java 가상 머신의 주요 요구 사항은 낮은 수준 가상 머신 보안입니다. 가상 머신에서 실행 중인 응용 프로그램이 가상 머신이 실행 중인 장치를 손상시키나 이 장 치에 충돌해서는 안 됩니다. 표준 Java 가상 머신 구현 시 이러한 제약 조건은 클래스 파일에 저장된 바이트 코드 및 기타 항목은 유효하지 않은 명령을 포함할 수 없고 유효하지 않은 순서로 실행될 수 없으며 Java 객체 메모리(객체 힙)를 벗어난 잘못된 메모리 위치나 메모리 영역에 대한 참조를 포함할 수 없게 해주는 클래스 파일 검증자(Class file verifier)에 의해 보 증됩니다. 일반적으로 클래스 파일 검증자(Class file verifier)의 역할은 가상 머신에 로드된 클래스 파일이 Java™ Virtual Machine 규격에서 허용하지 않은 방식으로 실행되지 않게 하 는 것입니다.
5.2절 “클래스 파일 확인“에 좀 더 자세하게 설명하겠지만 CLDC 규격에서는 CLDC를 준수 하는 Java 가상 머신이 잘못된 클래스 파일을 거부할 것을 요구합니다. 5.2절 “클래스 파일 확인“에 제시된 클래스 파일 확인 기술을 통해 이 작업을 보증할 수 있습니다.
#### 3.4.2 응용 프로그램 수준 보안
클래스 파일 확인은 Java 플랫폼의 보안을 보증하는 데 있어 중요한 역할을 하지만 클래스 파일 검증자(Class file verifier)가 제공하는 보안은 그 자체로는 불충분합니다. 클래스 파일 검증자(Class file verifier)는 주어진 프로그램이 유효한 Java 응용 프로그램이라는 것만 보증 할 수 있습니다. 검증자에 의해 확인되지 않은 몇 가지 다른 잠재적 보안 위협이 여전히 있을 수 있습니다. 예를 들어, 파일 시스템, 프린터, 적외선 장치, 원시 라이브러리, 네트워크 같은 외부 자원에 대한 액세스는 클래스 파일 검증자(Class file verifier)의 범위를 벗어납니다. 응 용 프로그램 수준 보안을 사용하면 Java 응용 프로그램은 Java 응용 프로그램 환경에서 액세 스를 허용한 라이브러리, 시스템 자원 및 기타 구성 요소에만 액세스할 수 있다는 의미입니 다. 응용 프로그램 수준 보안의 세부 사항은 아래에서 설명합니다.
##### 3.4.2.1 샌드 박스 모델
CLDC에서 응용 프로그램 수준 보안은 폐쇄된 “샌드 박스”의 은유를 사용하여 수행됩니다. 컨피규레이션, 프로화일 및 장치에서 지원하는 다른 클래스에서 정의했던 라이브러리만 응용 프로그램이 액세스할 수 있는 폐쇄된 환경에서 응용 프로그램이 실행되어야 합니다. Java 응용 프로그램은 이 샌드 박스를 벗어날 수 없거나 미리 정의된 기능의 부분이 아닌 라 이브러리나 자원에 액세스할 수 없습니다. 샌드 박스는 악의적이거나 오류를 일으킬 수 있 는 응용 프로그램에 대해서는 시스템 자원에 대한 액세스 권한을 얻지 못하게 합니다. 좀 더 구체적으로 CLDC 샌드 박스 모델에는 다음 내용이 필요합니다.
- 클래스 파일은 유효한 Java 응용 프로그램이 되도록 제대로 확인되고 보증되어야 합니
다. 클래스 파일 확인에 대한 자세한 내용은 5.2절 “클래스 파일 확인“을 참조하십시오.
- Java 응용 프로그램의 다운로드, 설치 및 관리는 응용 프로그램 프로그래머가 가상 머신 의 표준 클래스 로딩 기법을 수정하거나 생략할 수 없게 만드는 방식으로 이루어집니다.
- 폐쇄된, 미리 정의된 Java API 집합은 CLDC, 프로화일(예: MIDP) 및 제조업체별 클래 스에서 정의한 대로 응용 프로그램 프로그래머가 사용할 수 있습니다.
- 가상 머신에 액세스 가능한 원시 함수의 집합이 닫혔다는 것은 응용 프로그램 프로그래 머가 원시 함수가 포함된 새 라이브러리를 다운로드할 수 없거나 CLDC, 프로화일 또는 특정 제조업체 클래스에서 제공한 Java 라이브러리의 일부가 아닌 원시 함수에 액세스 할 수 없음을 의미합니다.
J2ME 프로화일은 추가 보안 솔루션을 제공합니다. 또한 프로화일에서는 응용 프로그램 프로 그래머가 사용할 수 있는 추가 API를 정의합니다.
##### 3.4.2.2 시스템 클래스 보호
CLDC의 주요 요구 사항은 Java 응용 프로그램을 가상 머신으로 동적 다운로드하는 것을 지원하는 기능입니다. 다운로드한 응용 프로그램이 패키지 `java.*`, `javax.microedition.*` 또는 기타 프로화일별 패키지 또는 제조업체별 패키지에서 제 공한 일련의 시스템 클래스를 무시하거나 확장할 수 있는 경우 Java 가상 머신에서 응용 프 로그램 수준 보안 허점이 노출될 수 있습니다. CLDC 구현은 응용 프로그램 프로그래머가 클래스를 이렇게 보호된 시스템 패키지에서 무시하거나 수정하거나 추가할 수 없게 합니다.
보안상의 이유로 응용 프로그램 프로그래머는 클래스 파일 조회 순서를 어떤 식으로든 조작 할 수 없어야 합니다. 클래스 파일 조회 순서에 대한 자세한 내용은 5.3.3절 “클래스 파일 조 회 순서“를 참조하십시오.
3장 높은 수준의 구조 및 보안
##### 3.4.2.3 동적 클래스 로딩에 대한 추가 제한
Java 응용 프로그램의 동적 로딩은 CLDC의 주요 특징입니다. 하지만 CLDC 규격은 CLDC 를 준수하는 가상 머신의 클래스 로딩 기법이 구현 종속이 되게 다음 한 가지 중요한 제한과 함께 정의합니다. 기본적으로 Java 응용 프로그램은 고유 Java Archive (JAR) 파일에서만 응 용 프로그램 클래스를 로드할 수 있습니다. 이러한 제한은 특정 장치의 Java 응용 프로그램 이 서로 방해하거나 서로 데이터를 훔칠 수 없게 합니다. 그리고 이러한 제한은 장치 제조업 체나 서비스 공급자가 시스템 응용 프로그램의 일부로 제공한 Java 클래스의 개인 구성 요 소나 보호된 구성 요소에 대한 액세스 권한을 타사 응용 프로그램이 얻을 수 없게 만듭니다. JAR 파일 및 응용 프로그램 표시 형식에 대한 자세한 내용은 5.3절 “클래스 파일 형식 및 클 래스 로딩“을 참조하십시오.
#### 3.4.3 종단간 보안
CLDC 규격을 준수하는 장치는 일반적으로 무선 네트워크나 지불 단말기 네트워크 같은 종 단간 솔루션의 일부입니다. 이러한 네트워크는 서버 시스템과 클라이언트 장치 사이에서 데 이터와 코드를 안전하게 배달할 수 있도록 많은 고급 보안 솔루션(예: 암호화)이 많이 필요합 니다. 전세계의 네트워크 인프라가 다양하다는 가정 하에 CLDC 전문가 그룹은 단일의 종단 간 보안 기법을 요구하지 않기로 결정하였습니다. 그러므로 모든 종단간 보안 솔루션은 구현 종속되며 CLDC 규격의 범위를 벗어난다고 가정합니다.
4장
## Java 언어 규격 유지
CLDC를 준수하는 가상 머신의 일반 목표는 CLDC 대상 장치의 엄격한 메모리 제한 내에서 가능한 만큼 Java™ 언어 규격과 호환되는 것입니다. 이 장에서는 CLDC를 준수하는 가상 머신과 Java 2 Standard Edition (J2SE)의 Java Virtual Machine 사이의 차이점을 요약합니다. 여기에서 제시한 차이점을 제외하면 CLDC를 준수하는 가상 머신은 Java Language
Specification (Java Series), Second Edition by James Gosling, Bill Joy, Guy L. Steele, Gilad Bracha, Addison-Wesley, 2000, ISBN 0-201-31008-2와 호환됩니다.
주 – 이 규격의 나머지 부분에서 Java™ 언어 규격은 JLS로 언급됩니다. Java™ 언어 규격 내의 절은 § 기호를 사용하여 언급됩니다. 예를 들면 (JLS §4.2.4)입니다.
### 4.1 클래스 인스턴스 finalization 지원 안함
CLDC 라이브러리에는 `Object.finalize()` 메소드가 포함되어 있지 않습니다. 그러므로 CLDC를 준수하는 가상 머신은 클래스 인스턴스의 finalization (JLS §12.6)을 지원하지 않습 니다. Connected Limited Device Configuration과 일치하도록 빌드된 어떠한 응용 프로그 램도 finalization이 사용 가능하지 않더라도 무방합니다.
### 4.2 예외 및 오류 처리 제한
CLDC를 준수하는 가상 머신은 비동기 예외(JLS §11.3.2)를 지원하지 않는다는 것을 제외 하면 JLS 11장에 정의된 예외 처리를 일반적으로 지원합니다.
이와 반대로, CLDC 라이브러리에 포함된 일련의 오류 클래스는 제한되므로 CLDC의 오류 처리 기능은 훨씬 더 제한됩니다. 이 이유는 다음 두 가지입니다.
- 임베디드 시스템의 경우 오류 상태에서의 복구는 대개 장치에 상당히 의존적입니다. 응용 프로그램 프로그래머가 장치별 오류 처리 기법과 규칙을 관리할 여력이 없습니다.
- JLS §11.5에서 지정한 대로 클래스 `java.lang.Error` 및 그 서브 클래스는 프로그램이 정상적으로 복구될 수 없는 예외입니다. Java™ 언어 규격을 완전히 따르는 오류 처리 기능 의 구현은 비용이 많이 들며, 존재를 위임하고 모든 오류 클래스를 처리하면 가상 머신 구현 에 오버헤드가 생깁니다.
CLDC를 준수하는 가상 머신은 6.2절 “Java 2 Standard Edition에서 파생된 클래스“에 정의 되어 있는 일련의 `Error` 클래스를 지원합니다. 다른 오류가 발생하면 구현은 다음과 같이 작동합니다.
- 구현에 따라 다른 방식으로 가상 머신이 중단됩니다.
- 가상 머신은 Java™ 언어 규격에 따라 발생될 `Error` 클래스의 가장 가까운 CLDC 지원 수퍼 클래스인 `Error`를 발생시킵니다.
CLDC를 준수하는 가상 머신이 Java™ 언어 규격의 일부이지만 CLDC 규격에서 필요하지 않은 추가 오류 검사를 구현하는 경우 Java™ 언어 규격에 의해 정의된 `Error` 클래스의 가 장 가까운 CDLD 지원 수퍼클래스를 구현 시 발생시킵니다.
5장
## Java 가상 머신 규격 유지
CLDC를 준수하는 가상 머신의 일반적인 목표는 CLDC 대상 장치의 엄격한 메모리 제한 내에서 가능한 한 Java™ Virtual Machine 규격과 호환되는 것입니다. 이 장에서는 CLDC를
준수하는 가상 머신과 Java 2 Standard Edition (J2SE)의 Java 가상 머신 사이의 차이점을
요약합니다. 여기에서 제시한 차이점을 제외하면 CLDC를 준수하는 가상 머신은 Java™
Virtual Machine Specification (Java Series), Second Edition by Tim Lindholm and Frank Yellin
(Addison-Wesley, 1999), ISBN 0-201-43294-3에 지정된 대로 Java 가상 머신과 호환됩니다.
주 – 이 규격의 나머지 부분에서 Java™ Virtual Machine 규격은 JVMS로 언급됩니다. Java™ Virtual Machine 규격 내의 절은 § 기호를 사용하여 언급됩니다. 예를 들면 (JVMS §2.4.3)입 니다.
### 5.1 가상 머신에서 제거된 기능
CLDC에 포함된 Java 라이브러리는 실제로 Java 2 Standard Edition의 라이브러리보다 훨씬 제한적이며, 완전한 J2SE 보안 모델이 없는 경우 보안 문제를 일으키는 기능 등의 이유로 CLDC를 준수하는 가상 머신에서 많은 기능이 제거되었습니다. 제거된 기능에는 다음 내용 이 포함됩니다.
- 사용자 정의된 클래스 로더(JVMS §5.3.2)
- 스레드 그룹 및 데몬 스레드(JVMS §2.19, §8.12)
- 클래스 인스턴스의 finalization (JVMS §2.17.7)
- 비동기 예외(JVMS §2.16.1)
또한 CLDC를 준수하는 가상 머신은 전체 J2SE 가상 머신보다 훨씬 더 제한된 오류 클래스 집합을 갖습니다.
CLDC용으로 작성된 응용 프로그램은 위의 기능 중 어떤 것도 의존하지 않습니다. 이 목록의 기능 각각은 아래에서 좀 더 자세하게 설명합니다.
#### 5.1.1 사용자 정의된 클래스 로더
CLDC를 준수하는 가상 머신은 사용자 정의된 Java 수준 클래스 로더(JVMS §5.3, §2.17.2)를 지원하지 않습니다. CLDC를 준수하는 가상 머신은 대체하거나 바꾸거나 재구성할 수 없는 기본 제공 “부트스트랩” 클래스 로더를 가지게 됩니다. 사용자 정의된 클래스 로더의 제거 는 3.4.2.1절 “샌드 박스 모델“에 제시된 보안 제한의 일부입니다.
#### 5.1.2 스레드 그룹 및 데몬 스레드
CLDC를 준수하는 가상 머신은 다중 스레드를 구현하지만 스레드 그룹이나 데몬 스레드 (JVMS §2.19, §8.12)에 대한 지원은 하지 않습니다. 스레드 시작 같은 스레드 작업은 개별 스 레드 객체에만 적용될 수 있습니다. 응용 프로그램 프로그래머가 스레드 그룹에 대해 스레 드 작업을 수행하려는 경우 스레드 객체를 저장하기 위해 명시 모음 객체가 응용 프로그램 수준에서 사용되어야 합니다.
#### 5.1.3 클래스 인스턴스 finalization
CLDC 라이브러리에는 메소드 `Object.finalize()`가 포함되지 않습니다. 그러므로
CLDC를 준수하는 가상 머신은 클래스 인스턴스 finalization을 지원하지 않습니다(JVMS §2.17.7). CLDC를 준수하는 가상 머신의 맨 위에서 실행되는 응용 프로그램은 finalization 기능 사용을 요구하지 않습니다.
#### 5.1.4 오류 및 비동기 예외
이전에 4.2절 “예외 및 오류 처리 제한“에서 설명했던 대로 CLDC를 준수하는 가상 머신의 오류 처리 기능은 제한됩니다.
CLDC를 준수하는 가상 머신은 6.2절 “Java 2 Standard Edition에서 파생된 클래스“에 정의 되어 있는 `Error` 클래스 집합을 지원합니다. 다른 문제가 발생하면 구현은 다음과 같이 작동 합니다.
- 구현 종속 방식에서 가상 머신이 중지됩니다.
- 가상 머신은 Java™ Virtual Machine 규격에 따라 발생될 `Error` 클래스의 가장 가까운 CLDC 지원 수퍼 클래스인 `Error`를 발생시킵니다.
CLDC를 준수하는 가상 머신이 Java™ Virtual Machine 규격의 일부이지만 CLDC 규격에서 요구하지 않는 추가 오류 검사를 구현하는 경우 Java™ Virtual Machine 규격에 의해 정의된 `Error` 클래스의 가장 가까운 CLDC 지원 수퍼 클래스를 발생시킵니다.
CLDC를 준수하는 가상 머신은 Java™ Virtual Machine 규격에 의해 정의된 예외 처리를 일 반적으로 지원합니다. 하지만 CLDC를 준수하는 가상 머신은 비동기 예외(JVMS §2.16.1)를 지원하지 않습니다.
### 5.2 클래스 파일 확인
Java 2 Standard Edition의 Java 가상 머신과 마찬가지로 CLDC를 준수하는 가상 머신은 잘 못된 클래스 파일을 거부할 수 있어야 합니다. 이는 CLDC구현이 클래스 파일 확인을 지원 해야 한다는 의미입니다.
CLDC의 클래스 파일 확인은 다음 두 가지 방법으로 수행할 수 있습니다1 .
- Java™ Virtual Machine 규격 (JVMS §4.9)에 정의된 표준 클래스 파일 확인 방법을 사용합 니다.
- 이 규격에 정의된 다른 좀 더 효율적인 확인 방법을 사용합니다. 이 방법은 아래의 부록 1 에서 설명합니다.
#### 5.2.1 장치 분리 사전 확인(Off-device preverification) 및 스택 맵을 사용하여 런타임 확인
Java™ Virtual Machine 규격(JVMS §4.9)에 정의된 종래의 J2SE 클래스 파일 검증자는 소형, 자원 제약형 장치가 아닙니다. 종래의 검증자는 최소 50KB 이진 코드 공간과 일반적으로 최소 30-100KB의 동적 RAM을 런타임에 사용합니다. 또한 종래의 검증자에서는 복잡한 반복적 데이터 흐름 알고리즘을 수행하는 데 필요한 CPU 전원이 많이 필요할 수 있습니다.
이 세부절에 설명된 확인 방법은 기존 J2SE 검증자보다 자원 제약형 장치에서 훨씬 더 규모가 작고 효율적입니다. Sun KVM에서 새 검증자의 구현 시 일반 클래스 파일에 대해 약 10KB 의 Intel x86 이진 코드와 100바이트 미만의 동적 RAM이 런타임에 필요합니다. 검증자는 비용이 많이 드는 반복적 데이터 흐름 알고리즘을 사용하지 않고 바이트 코드에 대한 선형 스캔만 수행합니다. 새 클래스 파일 검증자는 그림 2에서 설명한 두 단계에서 작동합니다.
1. 중요: 사용된 클래스 파일 확인 솔루션에 상관없이 클래스 파일은 미리 확인되어야 하며 `StackMap` 속성을 가져 야 합니다. 자세한 내용은 5.3.2절 “Java 응용 프로그램 및 자원의 공개 표현“을 참조하십시오.
- 먼저 클래스 파일은 런타임 확인 속도를 개선하기 위해 특정 바이트 코드를 제거하고 추가 `StackMap` 속성을 사용하여 클래스 파일을 증식하려면 사전 검증자 도구를 통해 실행되어야 합니다. 사전 확인 단계는 응용 프로그램을 작성하여 컴파일하기 위해 응용 프로그램 개발자가 사용하는 개발 워크스테이션에서 일반적으로 수행됩니다.
- 런타임 시 가상 머신의 런타임 검증자 구성 요소는 실제 클래스 파일 확인을 효율적으로 수행하기 위해 사전 검증자가 생성한 추가 `StackMap` 속성을 사용합니다.
클래스 파일의 바이트 코드 실행은 클래스 파일이 런타임 검증자를 성공적으로 통과했을 때 만 시작할 수 있습니다.

그림 2 CLDC의 두 단계 클래스 파일 확인
런타임 클래스 파일 확인은 유형(type)의 안전을 보장합니다. 예를 들어 런타임 검증자를 통 과한 클래스는 Java 가상 머신의 유형(type) 시스템을 위반하거나 메모리를 손상시킬 수 없습 니다. 코드 서명(Code signing)을 기준으로 하는 방법과 달리 이러한 보증은 인증되거나 신 뢰할 수 있는 확인 속성에 의존하지 않습니다. 누락되거나 잘못된 또는 손상된 확인 속성이 있으면 런타임 검증자에 의해 해당 클래스가 거부됩니다.
새 검증자는 특수 `StackMap` 속성을 포함하기 위해 클래스 파일에서 메소드를 요구합니다. 사전 검증자 도구는 이러한 속성을 일반 클래스 파일에 삽입합니다. 런타임 시 확인 작업이 수행될 수 있는 추가 `StackMap` 속성이 있는 경우 변환된 클래스 파일은 계속 유효한 Java 클래스 파일입니다. 이러한 속성은 Java 2 Standard Edition에 사용된 종래의 클래스 파일
검증자에 의해 자동으로 무시되므로 이 솔루션은 Java 2 Standard Edition의 Java 가상 머신 과 완전히 호환됩니다. 별도의 속성이 포함된 사전 처리된 클래스 파일은 원래 수정되지 않 은 클래스 파일보다 약 5-15% 더 큽니다.
또한 새 검증자는 클래스 파일의 바이트 코드에 있는 모든 서브루틴이 인라인될 것을 요구 합니다. Java 클래스 파일에서 서브루틴은 바이트 코드 `jsr`, `jsr_w`, `ret` 또는 `wide` `ret`를 포함하는 특수 바이트 코드 시퀀스입니다. 인라인 프로세스는 클래스 파일의 모든 메소드로 부터 모든 `jsr`, `jsr_w`, `ret` 및 `wide` `ret` 바이트 코드를 제거하고 이러한 명령을 의미상 동 등한 바이트 코드로 바꿉니다. 인라인 프로세스는 런타임 확인을 상당히 쉽고 빠르게 만듭 니다.
##### 5.2.1.1 확인 과정
2단계 확인 과정에 대한 좀 더 자세한 설명은 아래에 나와 있습니다. 자세한 내용은 부록 1을 참조하십시오.
1단계: 사전 확인(장치 분리) 새 검증자와 함께 제공되는 사전 확인 도구는 다음 두 가지 작업을 수행합니다.
- 모든 서브루틴을 인라인하고 모든 `jsr` (JVMS p. 304, `jsr_w` (JVMS p. 305), `ret` (JVMS p. 352) 및 `wide` `ret` (JVMS p. 360) 바이트 코드를 클래스 파일에서 제거합니다. 이러한 명령이 포함된 각 메소드는 `jsr,` `jsr_w,` `ret` 및 `wide` `ret` 바이트 코드를 포함하지 않는 의미상으로 동등한 바이트 코드로 바뀝니다.
- 런타임 확인을 수행할 수 있도록 `StackMap` 속성을 클래스 파일에 추가합니다. `StackMap` 속성의 형식과 의미는 부록 1에 정의되어 있습니다.
또한 사전 확인 도구는 런타임 유형(type) 계층이 사전 확인 중에 제시된 유형(type) 계층과 동일하다는 가정 하에 JVMS에 의해 정의된 유효한 Java 클래스나 인터페이스를 통과한 경우 결과 코드가 장치 내 확인을 통과할 것임을 보장하기 위해 다른 비의미 코드 변환을 수행할 수 있습니다. 사전 확인 도구가 Java 클래스나 인터페이스를 통과하는 경우 사전 확인 도구는 장치 내 확인을 통과할 수 있는 클래스나 인터페이스를 생성하지 않습니다.
2단계: 장치내 확인 장치내 확인 알고리즘은 다음 단계로 구성됩니다.
- 먼저 검증자는 모든 지역 변수 유형(type)과 주어진 메소드의 피연산자 스택 항목을 저장 하기에 충분한 메모리를 할당합니다. 메모리 크기는 최대 지역 변수 개수 및 `Code` 속성 에 지정된 최대 스택 깊이에 의해 결정됩니다. 이 메모리 영역은 검증자가 바이트 코드를 통해 선형 통과할 때 파생된 유형(type)을 저장하기 위해 사용되며 검증자가 할당하는 유일한 메모리 조각입니다.
- 두 번째로 검증자는 인스턴스 메소드, 인자 유형(type) 및 한 개의 빈 피연산자 스택에 대해 파생된 유형(type)이 이 포인터의 유형(type)이 되게 초기화합니다.
- 세 번째로 검증자는 각 명령을 거쳐 선형으로 반복됩니다. 각 명령에 대해 다음 내용이 발생합니다.
- 이전 명령이 무조건 이동(예: `goto`), 반환(예: `ireturn),` `athrow,` `tableswitch`, `lookupswitch`이거나 현재 명령이 예외 처리기의 시작 바이트 코드 오프셋에 있는 경우 이전 명령으로부터의 직접 제어 흐름은 없습니다. 검증자는 현재 파생된 유형 (type)을 무시하고 현재 명령에 대해 기록된 스택 맵 항목에 따라 파생된 유형(type)을 설정합니다. 현재 명령에 스택 맵 항목이 없는 경우 검증자는 오류를 보고합니다.
- 이전 명령이 무조건 이동(예: `goto`), 반환`(`예: `ireturn),` `athrow,` `tableswitch`, `lookupswitch`가 아닌 경우 이전 명령으로부터의 직접 제어 흐름이 있습니다. 검증 자는 현재 명령에 대해 기록된 스택 맵 항목이 있는지 검사하여 있으면 검증자는 파생 된 유형(type)을 기록된 스택 맵 항목과 일치시키려고 시도합니다. 기록된 유형(type) 이 파생된 유형(type)과 같거나 좀 더 일반적인 유형(type)인 경우 파생된 유형(type)은 기록된 유형(type)으로 설정됩니다. 그렇지 않은 경우 검증자는 오류를 보고합니다.
- 현재 명령이 오류 처리기(`try` 블록)의 범위 안에 있으면 파생된 유형(type)은 예외 처 리기의 시작 바이트 코드 오프셋에 해당하는 스택 맵 항목과 비교하여 일치됩니다. 예 외 처리기의 시작 바이트 코드 오프셋에 해당하는 스택 맵 항목이 없는 경우 검증자는 오류를 보고합니다.
- 그런 다음 검증자는 파생된 유형(type)을 명령에서 기대하는 내용과 일치시키려고 합 니다. 예를 들어, `iadd` 명령은 맨 위에 있는 두 개의 피연산자 스택 항목이 정수이길 기대합니다. 그런 다음 파생된 유형(type)은 명령의 내용에 따라 수정됩니다. 예를 들 어 `iadd` 명령은 피연산자 스택에서 두 개의 정수를 떼어내어 정수 결과를 피연산자 스택에 넣습니다.
- 마지막으로 검증자는 현재 명령을 직접 따르지 않는 파생된 유형(type)을 후속 명령에 대해 기록된 스택 맵 항목과 일치시키려고 합니다.
- 마지막으로 검증자는 메소드의 마지막 명령이 무조건 이동(예: `goto`), 반환(예:
`ireturn`), `athrow`, `tableswitch` 또는 `lookupswitch`인지 확인하여 그렇지 않은 경우 확인 오류를 보고합니다. 제어 흐름은 메소드의 끝으로 떨어집니다.
위에서 설명한 단계 이외에 장치내 검증자는 추가 검사를 수행해야 합니다. 검증자는 새로 할당된 객체와 구성자가 호출했던 객체를 구분해야 합니다. 주어진 바이트 코드 오프셋에서 `new` 명령에 의해 할당된 객체에서 구성자가 정확히 한 번 호출되었는지, 새로 할당된 객체 에서 적법한 작업만 구성자를 호출하려고 하는지 그리고 지역 변수나 역방향 분기가 일어날 때 피연산자 스택에 새로 할당된 객체가 없는지 확인해야 합니다.
##### 5.2.1.2 스택 맵 속성 정의
새 런타임 검증자는 Java 클래스 파일이 특수 속성을 포함할 것을 요구합니다. 이러한 속성은 지역 변수 유형(type)과 피연산자 스택 항목, 즉 인터프리터 스택에 상주하는 모든 것을 설명 하기 때문에 이 속성은 “스택 맵”으로 알려져 있습니다.
각 `StackMap` 속성은 여러 항목으로 구성되며 각 항목은 주어진 바이트 코드 오프셋에서 지역 변수 유형(type)과 피연산자 스택 항목을 기록합니다.
`StackMap` 속성은 JVMS §4.7.3에 의해 정의된 `Code` 속성의 하위 속성입니다. `Code` 속성 및 어떻게 스택 맵 속성이 `Code` 속성의 일부로 적합한지에 대한 자세한 내용은 Java™
Virtual Machine Specification (Java Series), Second Edition by Tim Lindholm and Frank Yellin (Addison-Wesley, 1999)의 120페이지를 참조하십시오.
`StackMap` 속성의 형식 정의에 대해서는 부록 1을 참조하십시오.
### 5.3 클래스 파일 형식 및 클래스 로딩
Connected Limited Device Configuration의 필수 요구 사항은 Java 응용 프로그램 및 타사
컨텐트를 동적으로 다운로드하는 것을 지원하는 기능입니다. Java 플랫폼의 동적 클래스 로딩 기법은 이러한 기능에서 중요한 역할을 합니다. 이 절에서는 CLDC를 준수하는 가상 머신에 필요한 응용 프로그램 표현 형식 및 클래스 로딩 예를 설명합니다.
#### 5.3.1 지원되는 파일 형식
CLDC 구현은 5.3.2절 “Java 응용 프로그램 및 자원의 공개 표현“에 정의된 사전 확인 변경 과 함께 표준 Java 클래스 파일(JVMS 4장에 정의)을 읽을 수 있어야 합니다. 그리고 CLDC 구현은 압축된 Java Archive (JAR) 파일을 지원해야 합니다. JAR 형식에 대한 자세한 내용은 `http://java.sun.com/products/jdk/1.3/docs/guide/jar`을 참조하십시오.
네트워크 대역폭 유지는 낮은 대역폭의 무선 네트워크에서 매우 중요합니다. 압축된 JAR 형 식은 심볼릭 정보가 손실되거나 기존 Java 시스템과의 호환성 문제없이 일반 클래스 파일을 통해 30-50% 압축을 제공합니다.
CLDC 구현은 Java 2 Platform Standard Edition, JDK 버전 1.1, 1.2, 1.3 및 1.4에 의해 지원 되는 모든 형식의 Java 클래스 파일을 읽을 수 있어야 합니다.
주 – 다양한 JDK 버전에서 사용한 클래스 파일 형식 번호는 다음과 같습니다1 .
- 45.*(대개 45.3) 버전 번호는 JDK 1.1 클래스 파일을 식별합니다.
- 46.* 버전 번호는 JDK 1.2 클래스 파일을 식별합니다.
- 47.* 버전 번호는 JDK 1.3 클래스 파일을 식별합니다.
- 48.* 버전 번호는 JDK 1.4 클래스 파일을 식별합니다.
CLDC를 준수하는 가상 머신은 위에 나열된 모든 형식의 Java 클래스 파일을 읽을 수 있어야 합니다. 하지만 가상 머신은 CLDC 구현시 필요하지 않은 특정 클래스 파일 속성은 무시할 수 있습니다. 좀 더 구체적으로 다음 속성은 CLDC 구현 시 무시할 수 있습니다.
1. 실제로는 내용이 약간 더 복잡합니다. JDK1.4 이전 릴리스에서 `javac` 컴파일러는 기본적으로 이전 VM과 호환 이 가능한 45.3 클래스 파일을 생성합니다. JDK 1.4에서 `javac`은 기본적으로 46.0 (JDK1.2) 클래스 파일을 생성 합니다. 하지만 JDK 1.4 `javac`에 대해서는 “`-target`” 옵션을 사용하여 다른 클래스 파일 형식을 생성하도록 지시할 수 있습니다. 예를 들어 “`javac -target 1.1`”은 45.3 클래스 파일을 생성합니다.
- `Synthetic` 속성(JVMS §4.7.6)
- `SourceFile` 속성(JVMS §4.7.7)
- `LineNumberTable` 속성(JVMS §4.7.8)
- `LocalVariableTable` 속성(JVMS §4.7.9) ■ `Deprecated` 속성(JVMS §4.7.10)
기록상의 이유로(JVMS p. 127), CLDC를 준수하는 가상 머신은 `InnerClasses` 속성(JVMS §4.7.5)이 잘 구성되었는지 검사할 필요가 없습니다.
#### 5.3.2 Java 응용 프로그램 및 자원의 공개 표현
Java 응용 프로그램이 저장되어 있는 시스템이 일반에게 열려 있고 액세스할 수 있는 전송 계층 및 프로토콜이 공개형 표준인 경우 “공개적으로 표현“되거나 “공개적으로 분산“된다 고 간주합니다. 반대로 특정 장치는 공급업체(예: 무선 네트워크 운영자)가 모든 통신을 제 어하는 폐쇄된 네트워크 환경의 일부가 될 수 있습니다. 이러한 경우 응용 프로그램이 들어 와서 폐쇄된 네트워크 시스템을 통해 분산되면 더 이상 공개적으로 표현되지 않습니다.
CLDC 장치용 Java 응용 프로그램이 공개적으로 표현될 때마다 압축된 JAR 파일 표현 형식 이 사용되어야 합니다. JAR 파일에는 이 규격의 5.2.1절 “장치 분리 사전 확인(Off-device preverification) 및 스택 맵을 사용하여 런타임 확인“에서 설명한 대로 사전 확인된 Java 클래스 파일이 포함되어야 합니다.
Sun CLDC 참조 구현에는 클래스 파일에 이러한 수정을 하는 사전 확인 도구가 포함됩니다. 앞에서 설명한 대로, 사전 확인 도구에 의해 생성된 `StackMap` 속성은 JVMS §4.9에서 설명 한 종래의 J2SE 클래스 파일 검증자에 의해 자동으로 무시됩니다. 즉, 수정된 클래스 파일 형 식은 J2SE나 J2EE 같은 더 큰 Java 환경과 완전히 호환됩니다.
일반적으로 CLDC를 준수하는 가상 머신이 Java™ Virtual Machine 규격 (JVMS §4.9)에 정
의되어 있는 종래의 확인 방법을 사용하여 클래스 파일 확인을 구현하는 경우 가상 머신은
`StackMap` 속성을 무시할 수 있습니다. 또한 이러한 구현은 `jsr`, `jsr_w`, `ret` 및 `wide` `ret` 바이트 코드를 지원할 수 있습니다.
또한 JAR 파일에는 `Class.getResourceAsStream(String` `name)` 메소드를 호출하여 가상 머신에 로드할 수 있는 응용 프로그램별 자원 파일이 포함될 수 있습니다.
#### 5.3.3 클래스 파일 조회 순서
Java™ 언어 규격과 Java™ Virtual Machine 규격은 새 클래스 파일이 가상 머신에 로드되었 을 때 클래스 파일을 검색할 순서를 지정하지 않습니다. 구현 수준에서 일반 Java 가상 머신 구현은 조회 순서를 정의하기 위해 특수 환경 변수 `classpath`를 활용합니다.
이 CLDC 규격은 클래스 파일 조회 순서가 구현 종속되며 다음 단락에 설명된 제한이 따른 다고 가정합니다. 조회 전략은 일반적으로 응용 프로그램 관리 구현(3.3절 “응용 프로그램 관리“ 참조)의 일부로 정의됩니다. CLDC를 준수하는 가상 머신은 `classpath`의 개념을 지원할 필요가 없지만 구현 수준에서 정의될 수 있습니다.
다음은 클래스 파일 조회 순서에 적용된 두 가지 제한을 보여줍니다. 이러한 두 가지 제한은 모두 보안상의 이유로 중요합니다.
- 3.4.2.2절 “시스템 클래스 보호“에서 설명한 것처럼 CLDC를 준수하는 가상 머신은 응용 프로그램 프로그래머가 새 시스템 클래스(CLDC에 속하는 클래스, 지원되는 프로화일 또 는 제조업체별 클래스)를 무시하거나 수정 또는 추가할 수 없게 보장해야 합니다.
- 응용 프로그램 프래그래머는 클래스 파일 조회 순서를 어떤 식으로든 조작할 수 없어야 합니다.
#### 5.3.4 구현 최적화 및 대체 응용 프로그램 표현 형식
사전 로딩/사전 연결(“ROMizing”). CLDC를 준수하는 가상 머신은 일부 클래스의 사전 로 드/사전 연결을 선택할 수 있습니다. 이러한 기술을 약식으로 ROMizing이라고 합니다1. 일 반적으로 소형 가상 머신 구현 시 모든 시스템 클래스(예: 특정 컨피규레이션이나 프로화일 에 속하는 클래스)를 사전 로드할 것인지와 응용 프로그램 로딩을 동적으로 수행할 것인지 선택합니다.
사전 로드를 위한 실제 기법은 구현 종속되며 CLDC 규격의 범위를 벗어납니다. 모든 경우, 런타임 효과와 사전 로드/사전 연결의 의미는 해당 시점에 실제 클래스가 로드된 것과 같아 야 합니다. 응용 프로그램 시작시 속도를 높일 수 있다는 것 이외에 사전 로드가 갖는 가시적 인 효과는 없습니다. 특히 사용자 가시적 효과를 갖는 클래스 초기화는 시스템에 사전 로드 된 경우가 아니라면 클래스가 처음으로 로드되었을 때 수행되어야 합니다.
다른 구현 최적화. Java 클래스 파일은 대역폭 제한 환경에서 네트워크 전송에 대해서는 최 적화되지 않습니다. 각 Java 클래스 파일은 고유 상수 풀(기호 테이블), 메소드, 필드 및 예외 테이블, 바이트 코드, 예외 처리기 및 기타 다른 정보를 포함하는 독립 단위입니다. 클래스 파일의 자체 포함된 특성은 Java 기술의 장점 중 하나이며, 같은 위치에 반드시 상주할 필요 가 없는 여러 조각으로 응용 프로그램이 구성되게 하며 런타임에 응용 프로그램을 동적으로 확장할 수 있게 합니다. 하지만 이러한 융통성에는 대가가 따릅니다. Java 응용 프로그램이 봉인된 단위로 처리되는 경우 특히 전체 심볼릭 정보를 고려하지 않는다면 여러 상수 풀과 다른 구조에서 중복을 제거하여 많은 공간을 절약할 수 있습니다. 또한 제한된 전원 컴퓨팅 환경에서 응용 프로그램 전송 형식의 바람직한 기능 중 하나는 정적 표현과 런타임 표현 사 이에 특수 로딩이나 변환 과정없이 “그대로” 응용 프로그램을 실행할 수 있는 기능입니다. 표준 Java 클래스 파일은 그러한 실행을 위해 설계되지 않았습니다.
CLDC 규격은 공개적으로 표현되고 분산된 Java 응용 프로그램에 압축된 JAR 파일을 사용 할 것을 요구합니다. 하지만 폐쇄된 네트워크 환경(5.3.2절 “Java 응용 프로그램 및 자원의 공개 표현“의 설명 참조)에서 그리고 런타임 시 가상 머신의 내부에서 대체 형식을 사용할 수 있습니다. 예를 들어, 낮은 대역폭 무선 네트워크에서 네트워크 대역폭을 유지하기 위해 네트워크 전송 수준에서 좀 더 압축된 다른 전송 형식을 사용하는 것이 합리적인 경우도 있 습니다. 마찬가지로 응용 프로그램의 관찰 가능한 사용자 수준 의미(semantics)가 원래 표현
1. 이 기술은 특정 메모리 기술과 독립적으로 사용할 수 있으므로 ROMizing이란 용어는 약간 잘못되었습니다.
ROMized 클래스 파일이 반드시 ROM에 저장되어야 하는 것은 아닙니다.
과 같은 한, 다운로드된 응용 프로그램을 CLDC 장치에 저장할 때 보다 압축 가능한 표현을 사용할 수 있습니다. CLDC Java 응용 프로그램을 공개적으로 표현하거나 분배하기 위해 대 체 형식은 사용할 수 없습니다. 즉, CLDC Java 응용 프로그램의 공개 표현은 5.3.2절 “Java 응용 프로그램 및 자원의 공개 표현“에 정의된 내용과 항상 같아야 합니다.
대체 응용 프로그램 표현에 대한 정의는 구현 종속되며 CLDC 규격의 범위를 벗어난다고 가정합니다.
6장
## CLDC 라이브러리
### 6.1 개요
Java 2 Platform, Standard Edition (J2SE)과 Java 2 Platform, Enterprise Edition (J2EE)은 데 스크탑 컴퓨터와 서버 시스템의 응용 프로그램 개발을 위한 아주 많은 라이브러리를 제공합 니다. 안타깝게도 이러한 라이브러리에는 실행해야 할 메모리(MB)가 많이 필요하므로 제한 된 자원을 갖는 소형 장치에는 적합하지 않습니다.
CLDC의 라이브러리를 설계하기 위한 일반 목표는 다양한 소형 장치에 맞는 실용적 응용 프 로그램 개발과 프로화일 정의용으로 유용한 일련의 라이브러리를 최소한으로 제공하는 것 입니다. 2.1절 “목표“에 설명된 대로 CLDC는 다양한 소비자 장치용 최소 Java 플랫폼 기능 및 API만 포함하는 “최소 공통” 표준입니다. 메모리 제한이 엄격하고 오늘날의 소형 장치 기능이 다양하다고 가정하면 모든 사람에게 이상적인 일련의 라이브러리를 제공하는 것은 사실상 불가능합니다. 이 기능의 표준이 일부 장치 및 사용자에게는 너무 낮고 또 다른 장치 및 사용자에게는 높을 수 있습니다.
Java 2 Platform의 최신 버전과 호환되게 하려면 CLDC에 포함된 대부분의 라이브러리가
Java 2 Standard Edition 및 Java 2 Enterprise Edition의 일부여야 합니다. 상위 버전과의 호환은 아주 이상적인 목표이지만 J2SE 및 J2EE 라이브러리에는 보안, 입출력, 사용자 인터 페이스 정의, 네트워킹 및 저장소 같은 중요한 영역에서의 세분화를 어렵게 하는 강한 내부 종속성이 있습니다. 이러한 종속성은 Java 라이브러리가 여러 번 개발되면서 이루어진 설계 진화 및 재사용의 자연스런 결과입니다. 안타깝게도 이러한 종속성은 다른 것을 여러 개 포 함하지 않고 라이브러리의 한 부분만 취하는 것을 어렵게 만듭니다. 이러한 이유로 라이브 러리 중 일부, 특히 네트워킹 영역에서 다시 설계했습니다.
CLDC 규격에 의해 정의된 CLDC 라이브러리는 다음 두 가지 범주로 나눌 수 있습니다.
- 표준 J2SE 라이브러리의 일부인 클래스
- CLDC 에 해당하는 클래스(J2SE에서 매핑 가능)
전자의 범주에 속하는 클래스는 패키지 `java.lang.*`, `java.util` 및 `java.io`에 있습니 다. 이러한 클래스의 자세한 목록은 6.2절 “Java 2 Standard Edition에서 파생된 클래스“에 있습니다.
후자의 범주에 속하는 클래스는 패키지 `javax.microedition.io`에 있습니다. 이러한 클래스는 6.3절 “CLDC 관련 클래스“에서 설명합니다.
### 6.2 Java 2 Standard Edition에서 파생된 클래스
CLDC는 Java 2 Standard Edition 버전 1.3.1에서 파생된 많은 클래스를 지원합니다. J2ME 컨피규레이션 규칙은 J2SE 클래스와 같은 이름과 패키지 이름을 갖는 각 클래스가 해당 J2SE 클래스와 같거나 그 일부와 같을 것을 요구합니다. 하위 집합에 포함된 클래스 및 메소 드의 의미는 변경되지 않습니다. 클래스는 해당 J2SE 클래스에서 사용할 수 없는 공용 또는 보호되는 메소드나 필드는 추가하지 않습니다.
이 절에 나열된 클래스에 대한 정의를 참조하려면 Javadoc 형식의 CLDC 라이브러리에 대해 자세하게 요약한 부록 2를 참조하십시오.
#### 6.2.1 시스템 클래스
J2SE 클래스 라이브러리는 Java 가상 머신과 긴밀하게 연결되어 있는 몇 가지 클래스를 포 함합니다. 마찬가지로 일부 표준 Java 도구는 시스템에 특정 클래스가 있다고 가정합니다. 예를 들어, 표준 Java 컴파일러(`javac`)는 클래스 `String` 및 `StringBuffer`의 특정 기능 을 사용할 수 있게 해주는 코드를 생성합니다. CLDC 규격 에 포함된 시스템 클래스는 아래 에 나열되어 있습니다. 이러한 각 클래스는 J2SE에 있는 해당 클래스의 일부입니다.
`java.lang.Object java.lang.Class java.lang.Runtime java.lang.System java.lang.Thread java.lang.Runnable` (인터페이스) `java.lang.String java.lang.StringBuffer java.lang.Throwable`
#### 6.2.2 데이터 유형 클래스
`java.lang` 패키지의 다음 기본 데이터 유형 클래스가 지원됩니다. 이러한 각 클래스는 J2SE에서 해당 클래스의 일부입니다.
`java.lang.Boolean java.lang.Byte java.lang.Short java.lang.Integer java.lang.Long java.lang.Float java.lang.Double java.lang.Character`
#### 6.2.3 모음 클래스
`java.util` 패키지의 다음 모음 클래스가 지원됩니다.
`java.util.Vector java.util.Stack java.util.Hashtable java.util.Enumeration `(인터페이스)
#### 6.2.4 입출력 클래스
`java.io` 패키지의 다음 클래스가 지원됩니다.
`java.io.InputStream java.io.OutputStream java.io.ByteArrayInputStream java.io.ByteArrayOutputStream java.io.DataInput `(인터페이스) `java.io.DataOutput `(인터페이스) `java.io.DataInputStream java.io.DataOutputStream java.io.Reader java.io.Writer java.io.InputStreamReader java.io.OutputStreamWriter java.io.PrintStream`
#### 6.2.5 달력 및 시간 클래스
CLDC에는 표준 J2SE 클래스 `java.util.Calendar,` `java.util.Date` 및 `java.util.TimeZone`의 아주 일부분만 포함됩니다. 공간을 확보하기 위해 CLDC 규격은 한 표준 시간대만 지원할 것을 요구합니다. 기본적으로 이 표준 시간대는 GMT입니다. 표준 시간대가 Java 2 Standard Edition에서 제공한 표준 시간대와 호환 가능하다면 CLDC의 제 조업체별 구현에 의해 추가 표준 시간대가 제공될 수 있습니다.
`java.util.Calendar java.util.Date java.util.TimeZone`
#### 6.2.6 추가 유틸리티 클래스
두 가지 추가 유틸리티 클래스가 제공됩니다. `java.util.Random` 클래스는 게임 같은 응용 프로그램을 구현할 때 유용한 간단한 의사 난수 생성기를 제공합니다. `java.lang.Math` 클래스는 다른 Java 라이브러리 클래스에서 주로 사용하는 `min`, `max` 및 `abs` 메소드를 제공 합니다. CLDC 1.1부터 클래스 `java.lang.Math`에도 `ceil` 및 `floor` 같은 몇 가지 추가 유틸리티 기능을 비롯하여 삼각 함수 및 제곤급 계산에 대한 지원이 포함됩니다.
`java.util.Random java.lang.Math`
#### 6.2.7 예외 및 오류 클래스
CLDC에 포함된 라이브러리는 일반적으로 J2SE 라이브러리와 잘 호환되는 것이 목적이므로 CLDC에 포함된 라이브러리 클래스는 정규 J2SE 클래스와 마찬가지로 예외를 정확하게 발생시킵니다. 따라서 상당히 포괄적인 예외 클래스 집합이 포함되었습니다.
반대로 4.2절 “예외 및 오류 처리 제한“에 설명된 대로 CLDC의 오류 처리 기능은 제한됩니 다. 기본적으로 CLDC를 준수하는 가상 머신은 6.2.7.2절 “오류 클래스“의 아래에 나열된 오 류 클래스만 지원할 것을 요구합니다.
##### 6.2.7.1 예외 클래스
`java.lang.Exception java.lang.ArithmeticException java.lang.ArrayIndexOutOfBoundsException java.lang.ArrayStoreException java.lang.ClassCastException java.lang.ClassNotFoundException java.lang.IllegalAccessException java.lang.IllegalArgumentException java.lang.IllegalMonitorStateException java.lang.IllegalThreadStateException java.lang.IndexOutOfBoundsException java.lang.InstantiationException java.lang.InterruptedException java.lang.NegativeArraySizeException java.lang.NullPointerException java.lang.NumberFormatException java.lang.RuntimeException java.lang.SecurityException java.lang.StringIndexOutOfBoundsException`
`java.util.EmptyStackException java.util.NoSuchElementException`
`java.io.EOFException java.io.InterruptedIOException java.io.IOException java.io.UnsupportedEncodingException java.io.UTFDataFormatException`
##### 6.2.7.2 오류 클래스
`java.lang.Error java.lang.NoClassDefFoundError java.lang.OutOfMemoryError java.lang.VirtualMachineError`
#### 6.2.8 약한 참조(Weak reference)
CLDC 규격 버전 1.1부터 다음 약한 참조(Weak reference) 클래스가 지원됩니다.
`java.lang.ref.Reference java.lang.ref.WeakReference`
#### 6.2.9 국제화
문자 세트 및 대소문자 구분 변환 지원. 유니코드 문자를 지원하기 위해 CLDC 구현이 필요 합니다. 문자 정보는 Unicode Standard 버전 3.0을 기본으로 합니다. 하지만 유니코드 지원에 필요한 전체 문자 테이블은 예상 메모리가 아주 작은 장치에는 지나치게 클 수 있으므로 기 본적으로 CLDC의 문자 특성 및 대소문자 변환 기능에서는 ISO Latin-1 문자 범위만 있다고 가정합니다. 좀 더 구체적으로 구현 시 Unicode 3.0의 “Basic Latin” 및 “Latin-1 Supplement” 블록에서 문자 속성 및 대소문자 변환 지원을 제공해야 합니다. 다른 유니코드 문자 블록도 필요에 따라 지원될 수 있습니다1 .
문자 코드화. CLDC에는 바이트 시퀀스 간 유니코드 문자 변환에 대한 제한된 기능이 포함 됩니다. J2SE에서 이 작업은 Readers와 Writers라는 객체를 사용하여 이루어지며 동일한 구 성자를 갖는 `InputStreamReader` 및 `OutputStreamWriter` 클래스를 사용하여 CLDC 에서 이와 같은 기법이 활용됩니다.
`new InputStreamReader(InputStream is); new InputStreamReader(InputStream is, String enc); new OutputStreamWriter(OutputStream os); new OutputStreamWriter(OutputStream os, String enc);`
`enc` 매개 변수가 있는 경우 사용할 인코딩의 이름입니다. 이 매개 변수가 없는 경우 기본 인코딩(시스템 속성 `microedition.encoding`에 의해 정의됨)이 사용됩니다. 특정 구현 에 의해 추가 변환기가 제공될 수 있습니다. 특정 인코딩의 변환기를 사용할 수 없는 경우 `UnsupportedEncodingException`이 발생됩니다. J2SE에서의 문자 코드화에 대한 공식 정보에 대해서는 `http://java.sun.com/products/jdk/1.3/docs/guide/intl/ encoding.doc.html`을 참조하십시오.
현지화 지원 없음. CLDC는 현지화 기능을 제공하지 않습니다. 날짜, 시간, 통화 등과 관련된 모든 솔루션은 CLDC 규격의 범위를 벗어난다는 의미입니다.
1. CLDC 참조 구현 시 구현 클래스 `com.sun.cldc.i18n.uclc.DefaultCaseConverter`를 무시하여 이 작 업을 완료할 수 있습니다.
#### 6.2.10 등록 정보 지원
CLDC를 준수하는 가상 머신에는 Java 2 Standard Edition에서 많이 사용되던 `java.util.Properties` 클래스가 포함되어 있지 않습니다. J2SE에서 해당 클래스는 호 스트 운영 체제의 이름, 가상 머신의 버전 번호 같은 시스템 등록 정보를 저장하는 데 사용됩 니다.
CLDC에서는 표 1에 설명되어 있는 제한된 등록 정보 집합을 사용할 수 있습니다. 이러한 등록 정보는 `System.getProperty(String key)` 메소드를 호출하여 액세스할 수 있습 니다. 표 1 CLDC 시스템 등록 정보
| 키 설명 | 값 | |
|---|---|---|
| `microedition.platform`호스트 플랫폼이나 장치의 이름 | (구현 종속) | |
| `microedition.encoding` | 기본 문자 코드화 | 기본값: `“`ISO-8859-1`”` |
| `microedition. configuration` | 지원되는 컨피규레이션의 이름 및 버전 | `“`CLDC-1.1” |
| `microedition.profiles`지원되는 프로화일의 이름 | (구현 종속) | |
등록 정보 `microedition.encoding`은 기본 문자 코드화 이름을 설명합니다. 이 정보는 국제화 지원 시 기본 문자 코드화의 올바른 클래스를 찾기 위해 시스템에서 사용합니다. 등록 정보 `microedition.platform`은 호스트 플랫폼이나 장치의 특색을 이룹니다. 등록 정보 `microedition.configuration`은 현재 J2ME 컨피규레이션 및 버전을 설명하고 등록 정보 `microedition.profiles`는 공백으로 구분된 지원되는 프로화일의 이름이 포함된 문자열을 정의합니다.
위에 정의된 등록 정보 집합은 J2ME 프로화일 규격이나 장치 제조업체에 의해 확장될 수 있 습니다. 예를 들어 MIDP 규격은 위의 표 1에 포함되지 않은 추가 등록 정보를 정의합니다.
제조업체별 등록 정보 정의는 제조업체별 클래스가 사용하는, 같은 패키지 이름(예:
“`com.companyname.propertyname`”)으로 접두어를 붙여야 합니다. “`java`” 및 “`javax`” 이름 공간을 비롯한 “`microedition`” 이름 공간은 예약되며 공식 J2ME 컨피규 레이션 및 프로화일에 의해서만 확장될 수 있습니다.
### 6.3 CLDC 관련 클래스
이 절에는 입출력 지원 및 일반화된 확장 가능 방식의 네트워킹을 위한 일반 연결 프레임워 크에 대한 설명이 포함되어 있습니다. 일반 연결 프레임워크는 자원 제약형 환경에서 다양 한 네트워크 유형을 액세스하기 위한 일관된 방식을 제공합니다.
#### 6.3.1 배경 및 동기 부여
Java 2 Standard Edition 및 Java 2 Enterprise Edition에 포함된 클래스 라이브러리는 저장 소 및 네트워크 시스템에 대한 입출력 액세스를 처리하기 위한 풍부한 일련의 기능을 제공 합니다. 예를 들어, JDK 1.3.1에서 패키지 `java.io.*`는 59개의 정규 클래스와 인터페이스 및 16개의 예외 클래스를 포함합니다. JDK 1.3.1의 패키지 `java.net.*`의 31개의 정규 클래 스와 인터페이스 및 8개의 예외 클래스로 구성됩니다. 전체 예상 메모리가 몇 백 KB 밖에 안 되는 소형 장치에 모든 기능을 끼워 넣기는 어렵습니다. 또한 표준 I/O 및 네트워킹 기능의 중요한 부분은 TCP/IP 지원을 제공하지 않기도 하고 IrDA (infrared) 또는 Bluetooth 같은 특정 연결 유형을 지원할 필요가 없기도 한, 오늘날의 소형 장치에 직접 적용할 수 없습니다.
일반적으로 네트워킹 및 저장소 라이브러리의 요구 사항은 한 개의 자원 제약형 장치에서 다른 장치에 이르기까지 매우 다양합니다. 예를 들어, 패킷 교환 네트워크를 사용하는 장치 제조업체는 일반적으로 데이터그램 기반 통신 기법을 원하는 반면 회선 교환 네트워크를 사 용하는 장치 제조업체는 스트림 기반 연결을 일반적으로 선호합니다. 일부 장치는 전통적 파일 시스템을 갖지만 많은 다른 장치는 장치에 많이 의존하는 기법을 갖습니다. 엄격한 메 모리 제한으로 인해 특정 종류의 입출력, 네트워킹 및 저장소 기능을 지원하는 제조업체는 다른 기법을 지원하려고 하지 않습니다. 따라서 CLDC를 위한 이러한 기능의 설계는 매우 힘이 듭니다. 특히 J2ME 컨피규레이션은 선택적 기능의 정의를 허용하지 않기 때문에 특히 그렇습니다. 또한 여러 네트워킹 기법과 도구가 있으면 응용 프로그램 프로그래머에게 잠재 적으로 혼동을 줄 수 있으며 프로그래머가 낮은 수준의 프로토콜 문제를 다루어야 하는 경 우 특히 그렇습니다.
#### 6.3.2 일반 연결 프레임워크
위에 제시된 어려움으로 인해 J2SE 네트워크 및 I/O 클래스의 일반화에 이르렀습니다. 이러 한 일반화된 설계의 목표는 J2SE 클래스의 기능상 일부가 되어 일반 낮은 수준의 하드웨어 나 J2SE 구현에 쉽게 매핑하면서 새 장치 및 프로토콜을 지원할 때 더 나은 확장성, 융통성 및 일관성을 제공하는 것입니다.
일반 개념은 아래에 설명되어 있습니다. 다양한 통신 형식에 대해 다양한 추출 모음을 사용 하는 대신 일련의 관련 추출이 응용 프로그램 프로그래밍 수준에서 사용됩니다.
일반 형식
`Connector.open(":;");`
주 – 이러한 예는 설명을 위해서만 제공됩니다. CLDC 자체는 프로토콜 구현을 정의하지 않습니다(6.3.3절 “CLDC에 정의되어 있는 네트워크 프로토콜 구현이 없음“ 참조”). 특정 J2ME 프로화일이 이러한 모든 연결 종류에 대한 지원을 제공할 것이라고 기대하지는 않습 니다. J2ME 프로화일은 아래에 표시되지 않은 프로토콜을 지원할 수도 있습니다.
##### HTTP
`Connector.open("http://www.sun.com");`
소켓
`Connector.open("socket://129.144.111.222:2800");`
통신 포트
`Connector.open("comm:0;baudrate=9600");`
데이터그램
`Connector.open("datagram://129.144.111.222:2800");`
모든 연결은 클래스 `javax.microedition.io.Connector`의 정적 메소드 `open`을 호출 하여 만들어집니다. 연결에 성공하면 이 메소드는 그림 3에 표시된 `javax.microedition.io.Connection` 인터페이스 중 하나를 구현하는 객체를 반환합 니다. `Connector.open` 메소드는 `String` 매개 변수를 다음과 같은 일반 형식으로 사용합 니다.
`Connector.open(":;");`
그림 3 연결 인터페이스 계층
`Connector.open` 매개 변수 문자열의 구문은 IETF 표준 RFC2396 (`http://`
`www.ietf.org/rfc/rfc2396.txt`)에 정의된 대로 Uniform Resource Indicator (URI) 구문을 따르는 것이 일반적입니다.
이 설계의 주요 목표는 프로토콜을 사용할 때의 차이점을 연결 유형을 특성있는 문자열로 가능한 한 많이 분리하는 것입니다. 이 문자열은 메소드 `Connector.open`의 매개 변수입 니다. 이 방법의 주요 장점은 사용된 연결 종류에 상관없이 응용 프로그램 코드의 크기가 같다는 것입니다. 한 통신 형식에서 다른 통신 형식으로 변경할 때 응용 프로그램에 사용된 추출 및 데이터 유형이 많이 달라지곤 하는 전통적 구현과는 다릅니다.
J2ME 프로그램에 프로토콜을 바인딩하는 작업은 런타임에 이루어집니다. 구현 수준에서 메
소드 `Connector.open`의 매개 변수로서 제공되는 문자열(‘:’의 첫 번째 발생까지)은 모든 프로토콜 구현에서 저장된 위치로부터 원하는 프로토콜 구현을 얻을 것을 시스템에 지시합 니다. 이것이 바로 프로그램이 동적으로 다양한 프로토콜을 런타임에 사용할 수 있게 해주는 늦은 바인딩 기법입니다. 따라서 이 작업은 개인 컴퓨터나 워크스테이션에서 응용 프로그램 과 장치 드라이버 사이의 관계와 동일합니다.
#### 6.3.3 CLDC에 정의되어 있는 네트워크 프로토콜 구현이 없음
CLDC 규격에 정의된 일반 연결 프레임워크는 실제 지원된 네트워크 프로토콜을 지정하거나 특정 네트워킹 프로토콜의 구현을 명령하지 않습니다. CLDC 규격이 제공하는 내용은 특정 장치 범주에 필요할 수 있는 프로토콜을 지원하는 MIDP 같은 J2ME 프로화일에서 사용자 정의 가능한 확장 가능 프레임워크입니다. 지원되는 프로토콜에 관한 실제 구현 및 결정은 프로화일 수준에서 이루어져야 합니다.
#### 6.3.4 일반 연결 프레임워크의 설계
다양한 장치 유형에 대한 연결 시 다양한 동작 형식을 나타내야 합니다. 예를 들어 파일 이름 은 바꿀 수 있지만 TCP/IP 소켓에 대해 유사한 작업은 없습니다. 일반 연결 프레임워크는 이러한 다양한 기능을 반영하므로 논리적으로 같은 작업이 같은 API를 공유하게 합니다.
일반 연결 프레임워크는 같은 의미를 갖는 프로토콜 클래스를 함께 묶는 `Connection` 인터 페이스(`javax.microedition.io` 패키지에 위치)의 계층을 사용하여 구현됩니다. 이 계 층은 위의 그림 3에 표시된 7개의 인터페이스로 구성됩니다. 또한 `Connector` 클래스, 한 개의 예외 클래스(`ConnectionNotFoundException`), 한 개의 다른 인터페이스 및 데이 터를 읽고 쓰기 위한 많은 데이터 스트림 클래스가 있습니다. 지원되는 프로토콜 각각을 구 현하려면 구현 수준에서 최소한 한 개의 클래스가 필요합니다. 가끔 각 프로토콜 구현 클래 스에는 기본 호스트 운영 체제의 원시 함수를 호출하는 많은 래퍼 기능이 포함되어 있을 뿐 입니다.
일반 연결 프레임워크가 지정하는 여섯 개의 기본 인터페이스 유형이 있습니다.
- 기본 순차 입력 연결
- 기본 순차 출력 연결
- 데이터그램 지향 연결
- 회선 지향 연결
- 클라이언트 서버 연결의 서버를 알려주기 위한 알림 기법
- 기본 웹 서버 연결
`Connection` 인터페이스의 모음은 루트 `Connection` 인터페이스에서 계층이 진행되어 감에 따라 점진적으로 사용할 수 있는 계층을 형성합니다. 이 배열을 사용하면 J2ME 프로화 일 설계자나 응용 프로그램 프로그래머가 설계 중인 라이브러리와 응용 프로그램에 대해 크 로스 프로토콜 이식성의 최적 수준을 선택할 수 있습니다.
일반 연결 프레임워크는 J2ME 프로화일이 새 연결 유형을 요구하는 경우 추가 인터페이스 를 나중에 추가할 수 있도록 확장 가능하게 합니다.
`Connection` 인터페이스 계층은 그림 3에 설명되어 있습니다. 각 인터페이스 클래스의 간단한 요약은 아래에 나와 있습니다. `Connection` 인터페이스에 대한 정의 참조는 CLDC 참조 구현의 일부로 제공되는 설명서를 참조하십시오.
##### 6.3.4.1 인터페이스 `Connection`
열고 닫을 수만 있는 가장 기본적인 연결 유형입니다. 연결은 `Connector` 클래스의 정적 `open` 메소드를 사용하여 항상 열리므로 `open` 메소드는 인터페이스에 포함되어 있지 않습 니다.
메소드:
`public void close() throws IOException;`
##### 6.3.4.2 인터페이스 InputConnection
이 연결 유형은 데이터를 읽어 들일 수 있는 장치를 나타냅니다. 이 인터페이스의 `openInputStream` 메소드는 연결할 `InputStream`을 반환합니다. 이 인터페이스의 `openDataInputStream` 메소드는 연결할 `DataInputStream`을 반환합니다.
메소드:
`public InputStream openInputStream() throws IOException; public DataInputStream openDataInputStream() throws IOException;`
##### 6.3.4.3 인터페이스 OutputConnection
이 연결 유형은 데이터를 기록할 장치를 나타냅니다. 이 인터페이스의 `openOutputStream` 메소드는 연결할 `OutputStream`을 반환합니다. 이 인터페이스의 `openDataOutputStream` 메소드는 연결할 `DataOutputStream`을 반환합니다.
메소드:
`public OutputStream openOutputStream() throws IOException; public DataOutputStream openDataOutputStream() throws IOException;`
##### 6.3.4.4 인터페이스 StreamConnection
이 연결 유형은 `InputConnection`과 `OutputConnection` 인터페이스를 결합하여 양방 향 인터페이스를 구현하는 클래스의 논리적 시작 위치를 형성합니다.
##### 6.3.4.5 인터페이스 ContentConnection
이 연결 유형은 `StreamConnection`의 하위 인터페이스로 HTTP 연결에서 제공하는 가장 기본적인 메타데이터 정보 중 일부에 대한 액세스를 제공합니다. 메소드:
`public String getType(); public String getEncoding(); public long getLength();`
##### 6.3.4.6 인터페이스 StreamConnectionNotifier
연결이 설정되길 기다릴 때 이 연결 유형이 사용됩니다. 클라이언트 프로그램이 연결될 때 까지 이 인터페이스의 `acceptAndOpen` 메소드는 차단될 것이며 통신 링크가 설정된 `StreamConnection`을 반환합니다. 다른 모든 연결처럼 더 이상 필요하지 않으면 `StreamConnection`을 닫아야 합니다.
메소드:
`public StreamConnection acceptAndOpen() throws IOException;`
##### 6.3.4.7 인터페이스 DatagramConnection
이 연결 유형은 데이터그램 종점을 나타냅니다. J2SE 데이터그램 인터페이스와 마찬가지로 연결을 열기 위해 사용된 주소는 데이터그램을 수신한 종점입니다. 전송된 데이터그램의 대상은 데이터그램 자체에 놓여 있습니다. 이 API에는 주소 객체가 없습니다. 대신 `Connection` 인터페이스 설계에서와 유사한 방식으로 주소 지정을 추출할 수 있는 문자열 이 사용됩니다. 메소드:
`public int getMaximumLength() throws IOException; public int getNominalLength() throws IOException; public void send(Datagram datagram) throws IOException; public void receive(Datagram datagram) throws IOException; public Datagram newDatagram(int size) throws IOException; public Datagram newDatagram(int size, String addr) throws IOException; public Datagram newDatagram(byte[] buf, int size) throws IOException; public Datagram newDatagram(byte[] buf, int size, String addr) throws IOException;`
이 `DatagramConnection` 인터페이스에는 이와 관련된 데이터 버퍼와 주소를 포함하기 위해 사용된 `Datagram`이라는 데이터 유형이 필요합니다. `Datagram` 인터페이스에는 데이 터를 데이터그램 버퍼에 두거나 여기서 데이터를 추출할 때 사용할 수 있는 일련의 유용한
액세스 메소드가 포함됩니다. 이러한 액세스 메소드는 `DataInput` 및 `DataOutput` 인터페 이스를 준수하므로 데이터그램 객체도 스트림처럼 작동한다는 의미입니다. 현재 위치는 다이어그램에서 유지되고 읽기 작업이 수행된 다음 데이터그램 버퍼의 시작 부분으로 자동 재설정됩니다.
#### 6.3.5 추가 주의
일반 연결로부터 데이터를 읽고 쓸 수 있으려면 많은 입출력 스트림 클래스가 필요합니다.
CLDC에서 지원하는 스트림 클래스는 절 6.2.4, “입출력 클래스”에 나열되어 있습니다. J2ME 프로화일은 필요에 따라 추가 스트림 클래스를 제공합니다.
부록 A
## 부록
부록 1: CLDC 바이트 코드 유형 검사기 규격 부록 2: Javadoc 형식의 CLDC 라이브러리 설명서
---
title: "verifier"
---
CLDC 바이트 코드 유형 검사기 규격
Gilad Bracha, Tim Lindholm, Wei Tao, Frank Yellin
Sun Microsystems
2003년 1월 14일
## 1. 개요
이 설명서에서는 CLDC 런타임 검증자 또는 KVM 런타임 검증자라고도 하는 CLDC 유형 검사기의 규격에 대해 설명합 니다. 이 설명서의 목적은 CLDC 규격에 대한 추가 설명과 함께 CLDC 규격을 준수하는 가상 머신 고유의 런타임 확인 프로세스에 대한 자세한 설명을 제공하는 것입니다.
유형 검사기가 적용하는 유형(type) 규칙은 Prolog 절로 지정됩니다. 영어 텍스트는 유형 규칙을 약식으로 설명할 때 사용 되며 Prolog 코드는 형식적 규격을 제공합니다.
다음 절은 유형 검사기를 사용할 수 있는 유형(type) 주석의 형식을 설명합니다. 적절한 유형 검사기의 규격은 §3.에 나와 있습니다.
1.1 표기법 및 용어
이 규격에서 java 패키지나 해당 부속 패키지에 선언되어 있는 클래스나 인터페이스를 언급하는 경우 이는 Java 가상 머신의 부트스트랩 클래스 로더에 의해 로드되는 클래스나 인터페이스를 언급하는 것입니다. 단일 식별자 N을 사용하여 클래스나 인터페이스를 언급하는 경우 이는 클래스 java.lang.N을 언급하는 것입니다.
이 규격을 통해 발생하는 예외나 오류 클래스를 지원하지 않는 컨피규레이션에서 유형 검사기는 해당 예외나 오류에 대한 신호를 보내기 위해 이러한 컨피규레이션의 규격이 규정하는 내용을 수행해야 합니다.
Prolog 코드 및 코드 조각에 대해서는 이 글꼴을 사용합니다.
Java 가상 머신 명령 및 클래스 파일 구조에 대해서는 다른 글꼴을 사용합니다. 규격을 명확히 설명하기 위해 제공되는 주석은 다음과 같이 가로줄 사이에서 들여쓴 텍스트로 제공됩니다.
주석은 직관적 지식, 동기화, 이론적 설명, 예 등을 제공합니다.
유형 검사기는 메소드 로컬 변수와 피연산자 스택의 예상 유형을 다루고 조작합니다. 이 설명서에서 위치는 단일 로컬 변수나 단일 피연산자 스택 항목을 언급합니다.
여기에서는 피연산자 스택의 위치와 메소드 및 확인 유형(type)의 로컬 변수 사이의 매핑을 설명하기 위해 스택 프레임 맵과 유형 상태라는 용어를 상호 교체 가능한 의미로 사용합니다. 일반적으로 매핑이 클래스 파일에 제공되어 있으면 스택 프레임 맵이란 용어를 사용하고 유형 검사기에 의해 매핑이 추론되면 유형 상태란 용어를 사용합니다.
## 2. 구문 분석
유형 검사기에는 Code 속성을 갖는 각 메소드에 대해 스택 프레임 맵 목록이 필요합니다. 유형 검사기는 이러한 각 메소 드에 대해 스택 프레임 맵을 읽은 다음 이러한 맵을 사용하여 Code 속성에 있는 명령의 유형 안정성에 대한 증거를 생성 합니다. 스택 프레임 맵의 목록은 스택 맵 속성에 의해 주어집니다. 이 절은 스택 맵 속성의 형식을 지정합니다. 스택 맵 속성이 이 절에서 지정한 형식과 일치하지 않는 경우 Java 가상 머신은 java.lang.ClassFormatError를 발생시킵 니다.
스택 프레임 맵이 메소드의 각 기본 블록의 시작 부분에 표시하도록 하는 것이 목적입니다. 스택 프레임 맵은 각 기본 블록의 시작 부분에서 각 피연산자 스택 항목과 각 로컬 변수의 확인 유형(type)을 지정합 니다.
### 2.1 스택 맵 형식
스택 맵 속성은 Code 속성의 속성 테이블에 있는 선택적 가변 길이 속성입니다. 이 속성의 이름은 StackMap입니다. 스 택 맵 속성은 0개 이상의 스택 맵 프레임으로 구성됩니다. 각 스택 맵 프레임은 오프셋, 로컬 변수에 대한 확인 유형 배열 및 피연산자 스택에 대한 확인 유형 배열을 지정합니다. 메소드의 Code 속성에 StackMap 속성이 없는 경우 암시적 스택 맵 속성을 갖습니다. 이 암시적 스택 맵 속성은 number_of_entries가 0인 StackMap 속성에 해당합니다. 메소드의 Code 속성에는 0 또는 1개의 StackMap 속성이 있어야 하며 그렇지 않은 경우 java.lang.ClassFormatError가 발생됩니다.
클래스 파일의 스택 맵 형식은 아래에 있습니다. 다음에서 메소드 바이트 코드의 길이가 65535 이하이면 uoffset은 유 형 u를 나타내며 그렇지 않은 경우 uoffset은 유형 u4를 나타냅니다. 메소드 로컬 변수의 최대 개수가 65535 이하인 경우 ulocalvar는 유형 u2를 나타내며 그렇지 않은 경우 ulocalvar는 유형 u4를 나타냅니다. 피연산자 스택의 최대 크기가 65535 이하인 경우 ustack은 유형 u2를 나타내며 ustack은 유형 u42 를 나타냅니다.
stack_map { // attribute StackMap u2 attribute_name_index; u4 attribute_length uoffset number_of_entries;
stack_map_frame entries[number_of_entries]; }
각 스택 맵 프레임은 다음 형식을 갖습니다.
stack_map_frame { uoffset offset; ulocalvar number_of_locals;
verification_type_info locals[number_of_locals]; ustack number_of_stack_items;
verification_type_info stack[number_of_stack_items]; }
locals의 0번째 항목은 로컬 변수 0의 유형을 나타냅니다. locals[M]이 로컬 변수 N을 나타내고, locals[M]이
Top_variable_info, Integer_variable_info, Float_variable_info, Null_variable_info, UninitializedThis_variable_info,
Object_variable_info, Uninitialized_variable_info 중 하나인 경우 locals[M+1]은 로컬 변수 N+1을 나타냅니다. 그렇지 않 은 경우 locals[M+1]은 로컬 변수 N+2를 나타냅니다. 색인 i에 대해 locals[i]의 색인이 메소드의 최대 로컬 변수 개수보다 많은 로컬 변수를 나타내면 오류입니다.
stack의 0번째 항목은 스택 아래쪽의 유형을 나타내며 후속 항목은 피연산자 스택의 위쪽에 더 가까운 스택 요소의 유형을 나타냅니다. 여기에서는 스택의 아래 요소를 스택 요소 0으로, 후속 요소를 스택 요소 1, 2 등으로 언급합니다. stack[M]이 스택 요소 N을 나타내면서 stack[M]이 Top_variable_info, Integer_variable_info, Float_variable_info, Null_variable_info, UninitializedThis_variable_info, Object_variable_info, Uninitialized_variable_info 중 하나인 경우
stack[M+1]은 스택 요소 N+1을 나타내고 그렇지 않은 경우 stack[M+1]은 스택 요소 N+2를 나타냅니다. 색인 i에 대해 stack[i]의 색인이 메소드의 최대 로컬 변수 개수보다 많은 로컬 변수를 나타내면 오류입니다.
스택 맵 프레임의 오프셋 필드에 있는 오프셋이 바이트 코드로 된 명령의 오프셋과 같은 경우 바이트 코드로 된 명령은 해당 스택 맵 프레임을 갖습니다.
verification_type_info 구조는 태그에 대한 자세한 정보를 제공하며, 0개 이상의 바이트가 뒤에 오는 1바이트 태그로 구성 됩니다. 각 verification_type_info 구조는 1-2 개 위치의 확인 유형을 지정합니다.
union verification_type_info {
Top_variable_info;
Integer_variable_info;
Float_variable_info;
Long_variable_info;
Double_variable_info;
Null_variable_info;
UninitializedThis_variable_info;
Object_variable_info;
Uninitialized_variable_info;
}
Top_variable_info는 로컬 변수가 확인 유형 top()을 갖는다는 것을 나타냅니다. Top_variable_info { u1 tag = ITEM_Top; /* 0 */
}
Integer_variable_info 유형은 해당 위치에 확인 유형 int가 포함된다는 것을 나타냅니다. Integer_variable_info { u1 tag = ITEM_Integer; /* 1 */
}
Float_variable_info 유형은 위치에 확인 유형 float이 포함된다는 것을 나타냅니다. Float_variable_info { u1 tag = ITEM_Float; /* 2 */
}
Long_variable_info 유형은 위치에 확인 유형 long이 포함된다는 것을 나타냅니다. 위치가 로컬 변수인 경우는 다 음에 해당합니다.
- 가장 큰 색인을 갖는 로컬 변수가 아니어야 합니다.
- 그 다음으로 큰 번호의 로컬 변수에는 확인 유형 이 포함됩니다. 위치가 피연산자 스택 항목인 경우는 다음에 해당합니다.
- 현재 위치는 피연산자 스택의 최상위 위치가 아니여야 합니다.
- 피연산자 스택의 맨 위와 그 다음으로 가까운 위치에는 확인 유형 이 포함됩니다.
이 구조는 stack[]이나 local[] 배열에서 두 위치의 내용을 제공합니다.
Long_variable_info { u1 tag = ITEM_Long; /* 4 */
}
Double_variable_info 유형은 위치에 확인 유형 double이 포함된다는 것을 나타냅니다. 위치가 로컬 변수인 경우 • 가장 큰 색인을 갖는 로컬 변수가 아니어야 합니다.
- 그 다음으로 큰 번호의 로컬 변수에는 확인 유형 이 포함됩니다. 위치가 피연산자 스택 항목인 경우
- 현재 위치는 피연산자 스택의 최상위 위치가 아니여야 합니다.
- 피연산자 스택의 맨 위와 그 다음으로 가까운 위치에는 확인 유형 이 포함됩니다.
이 구조는 stack[]이나 local[] 배열에서 두 위치의 내용을 제공합니다. Double_variable_info { u1 tag = ITEM_Double; /* 3 */
}
Null_variable_info 유형은 위치에 유형 검사기 유형 null이 포함된다는 것을 나타냅니다. Null_variable_info { u1 tag = ITEM_Null; /* 5 */
}
UninitializedThis_variable_info 유형은 위치에 확인 유형 uninitializedThis가 포함된다는 것을 나타냅 니다.
UninitializedThis_variable_info { u1 tag = ITEM_UninitializedThis; /* 6 */ }
Object_variable_info 유형은 위치가 상수 풀 항목에 의해 참조되는 클래스를 포함한다는 것을 나타냅니다. Object_variable_info { u1 tag = ITEM_Object; /* 7 */ u2 cpool_index;
}
Uninitialized_variable_info는 위치에 확인 유형 uninitialized(offset)가 포함된다는 것을 나타냅니다.
offset 항목은 위치에 저장된 객체를 만든 new 명령의 오프셋을 나타냅니다.
Uninitialized_variable_info { u1 tag = ITEM_Uninitialized /* 8 */ uoffset offset;
}
## 3. 유형 검사
클래스 파일의 유형(type) 검사는 클래스가 성공적으로 로드된 다음 수행됩니다.
술어 classIsTypeSafe가 true가 아닌 경우 유형 검사는 예외 java.lang.VerifyError를 발생시켜 클래스 파일이 잘 못되었음을 나타내야 합니다. 반대의 경우 클래스 파일이 유형 검사를 성공적으로 수행하고 바이트 코드 확인이 성공적 으로 완료된 것입니다.
classIsTypeSafe(Class) :classClassName(Class,Name), Name \= ‘java/lang/Object’, classSuperClassName(Class, SuperclassName), loadedClass(SuperclassName, Superclass),
classIsNotFinal(Superclass), classMethods(Class, Methods), checklist(methodIsTypeSafe(Class), Methods).
classIsTypeSafe(Class) :classClassName(Class, ‘java/lang/Object’), classMethods(Class, Methods), checklist(methodIsTypeSafe(Class), Methods).
술어 classIsTypeSafe는 Class가 성공적으로 구문 분석된 이진 클래스를 나타내는 Prolog 용어임을 가정합니다. 이 규격 은 이 용어의 정확한 구조를 요구하지 않지만 §3.2.1에 지정된 대로 특정 술어(예: classMethods)를 정의할 것을 요구합 니다.
예를 들어, 위에 설명한 클래스를 첫 번째 인자로 나타내는 용어가 주어지면 술어 classMethods(Class, Methods)가 아래에 설명된 편리한 형식으로 제시된 클래스의 모든 메소드를 구성하는 목록에 두 번째 인자를 바인드한다고 가정합니다. 따라서 클래스의 모든 메소드가 유형 안정적이면 해당 클래스는 유형 안정적이며, 최종 클래스에 부속 되지 않습니다.
또한 Name이라는 클래스가 있음을 단언하고 그 표현(이 규격에 맞춰)이 ClassDefinition인 술어 loadedClass(Name, ClassDefinition)의 존재를 요구합니다. 개별 명령은 기능자가 명령의 이름이며 인자가 구문 분석된 피연산자인 용어로서 표현됩니다.
예를 들어 aload 명령은 해당 명령의 피연산자인 색인 N을 포함하는 용어 aload(N)로 표현됩니다.
몇 가지 명령은 메소드나 필드를 나타내는 상수 풀 항목인 피연산자를 갖습니다. JVMS에 지정한 대로 메소드는 상수
풀의 CONSTANT_InterfaceMethodref_info(인터페이스 메소드의 경우)나 CONSTANT_Methodref_info(다른 메소드의 경우)에 의해 표현됩니다. 이러한 구조는 인터페이스 메소드의 경우 imethod(MethodClassName,
MethodName, MethodSignature) 형식이나, 다른 메소드의 경우 method(MethodClassName, MethodName,
MethodDescriptor) 형식의 기능자 응용 프로그램으로 표현됩니다. 여기서 MethodClassName은 구조의 class_index 항목이 참조하는 클래스의 이름이며 MethodName과 MethodDescriptor는 구조의 name_and_type_index가 참조하는 이름과 유형(type) 설명자에 해당합니다.
마찬가지로 필드는 클래스 파일의 CONSTANT_Fieldref_info 구조에 의해 표현됩니다. 여기서 이러한 구조는 field(FieldClassName, FieldName, FieldDescriptor) 형식의 기능자 응용 프로그램으로 표현됩니다. 여기서 FieldClassName은 구조에서 class_index 항목이 참조하는 클래스 이름이며, FieldName과 FieldDescriptor는 구조 의 name_and_type_index 항목이 참조하는 이름과 유형 설명자에 해당합니다.
따라서 피연산자가 클래스 Bar에 있는 형식 F의 필드 foo를 참조하는 상수 풀의 색인인 getfield 명령은 getfield(field(‘Bar’, ‘foo’, ‘F’))로 표현됩니다. 명령은 전체적으로 instruction(Offset, AnInstruction) 형식의 용어 목록으로 표현됩니다.
예를 들어 instruction(21, aload(1))입니다. 이 목록에서 명령의 순서는 클래스 파일에서의 순서와 같아야 합니다.
StackMap 속성은 stackMap(Offset, TypeState) 형식의 용어 목록으로 표현되며, 여기서 Offset은 프레임 맵이 적용 된 명령의 오프셋을 나타내는 정수이고 TypeState는 해당 명령에 대해 수신 예상 유형 상태입니다. 이 목록에서 명령 의 순서는 클래스 파일에서의 순서와 같아야 합니다.
TypeState는 frame(Locals, OperandStack, Flags) 형식을 가져야 합니다.
Locals는 확인 유형 목록이며 목록의 N 번째 요소(0에서부터 시작하는 색인)는 로컬 변수 N의 유형을 나타냅니다. Locals의 로컬 변수에 유형 uninitializedThis가 있는 경우 Flags는 [flagThisUninit]이며 그렇지 않은 경우 빈 목록입니다.
OperandStack은 유형 목록이며, 여기서 첫 번째 요소는 피연산자 스택의 맨 위에 있는 유형을 나타내고 그 다음 아래에 있는 요소는 적절한 순서를 따릅니다. 하지만 크기 2의 유형은 두 항목에 의해 표현되며 첫 번째 항목은 맨 위가 되고 두 번째 항목은 유형 자체가 됩니다.
따라서 double을 갖는 스택, int 및 long은 [top, double, int, top, long]으로 표현됩니다.
배열 유형은 배열의 요소 유형을 나타내는 인자에 기능자 arrayOf를 적용하여 표현됩니다. 다른 참조 유형은 클래스나 인터페이스의 정규화된 이름에 기능자 class를 적용하여 표현됩니다. 유형 uninitialized(offset)는 기능자 uninitialized를 offset의 숫자 값을 나타내는 인자에 적용하여 표현됩니다. 다른 확인 유형은 이름이 해당 확인 유형을 나타 내는 Prolog 기본 단위에 의해 표현됩니다.
따라서 클래스 Object는 class(‘java/lang/Object’)로 표현되며 유형 int[]와 Object[]는 arrayOf(int)와 arrayOf(class(‘java/lang/Object’))에 의해 각각 표현됩니다.
Flags는 비어 있거나 단일 요소 flagThisUninit을 갖는 목록입니다.
이 플래그는 this의 초기화가 아직 완료되지 않은 유형 상태를 표시하기 위해 구성자에서 사용됩니 다. 이러한 유형 상태에서 메소드로부터 반환되는 것은 유효하지 않습니다.
3.1 유형 계층 유형 검사기는 아래의 그림에서 설명한 대로 확인 유형(type)의 계층을 기준으로 유형 시스템을 적용합니다. 대부분의 검 증자 유형은 JVMS, 표 4.2에 주어진 대로 Java 가상 머신 필드 유형 설명자에 직접 대응합니다. 유일한 예외는 필드 설명 자 B, C, S, Z이며 이들 모두는 검증자 유형 int에 해당합니다.
#### 3.1.1 서브 타입 규칙
서브 타입은 재귀됩니다. isAssignable(X, X) .
isAssignable(oneWord, top). isAssignable(twoWord, top).
isAssignable(int, X) :- isAssignable(oneWord, X). isAssignable(float, X) :- isAssignable(oneWord, X). isAssignable(long, X) :- isAssignable(twoWord, X). isAssignable(double, X) :- isAssignable(twoWord, X). isAssignable(reference, X) :- isAssignable(oneWord, X). isAssignable(uninitialized, X) :- isAssignable(reference, X).
이러한 서브 타입 규칙이 반드시 가장 확실한 서브 타입의 공식은 아닙니다. Java 프로그래밍 언어의 참조 유형에 대한 서브 타입 규칙과 나머지 확인 유형의 규칙 사이에는 명확한 차이점이 있습니다.
Java 프로그래밍 언어에서 참조 유형의 서브 타입 규칙은 확실한 방법으로 재귀적으로 지정됩니다. 나머지 확인 유형은 다음 형식의 서브 타입 규칙을 갖습니다. subtype(v, X) :- subtype(the_direct_supertype_of_v, X). 즉 v의 직접 수퍼 타입이 X의 서브 타입인 경우 v는 X의 서브 타입입니다.
또한 서브 타입이 재귀적이라는 규칙이 있으므로 이러한 규칙을 합하면 Java 프로그래밍 언어의 참조 유형이 아닌 대부분의 확인 유형을 다룰 수 있습니다.
앞에서 언급한 분할을 사용하면 Java 프로그래밍 언어 유형과 다른 확인 유형 사이의 일반 서브 타입 관계를 분명히 할 수 있습니다. 이러한 관계는 계층에서 Java 유형의 위치를 독립적으로 유지합니다. 이러한 규칙은 참조 구현에 유용 하므로 중복 대답 및 과도한 클래스 로딩을 막는 데 도움이 됩니다.
예를 들어 형식 class(foo) <: twoWord의 쿼리에 응답하여 클래스 계층을 올라가지는 않습니다. 전체 계층에 같은 술어를 사용하는 경우 두 클래스를 비교하는 경우로 상향을 제한할 수 없습니다.
규격에 대해 동일한 규칙을 갖는 것이 좋을 수 있지만 참조 구현에는 적합하지 않습니다. 참조 구현은 해당 규격과 가능한 한 유사하게 하는 것이 좋습니다.
isAssignable(class(_), X) :- isAssignable(reference, X). isAssignable(arrayOf(_), X) :- isAssignable(reference, X). isAssignable(uninitializedThis, X) :- isAssignable(uninitialized, X). isAssignable(uninitialized(_), X) :- isAssignable(uninitialized, X).
isAssignable(null, class(_)). isAssignable(null, arrayOf(_)). isAssignable(null, X) :- isAssignable(class(’java/lang/Object’), X).
isAssignable(class(X), class(Y)) :- isJavaAssignable(class(X), class(Y)). isAssignable(arrayOf(X), class(Y)) :- isJavaAssignable(arrayOf(X), class(Y)). isAssignable(arrayOf(X), arrayOf(Y)) :- isJavaAssignable(arrayOf(X),arrayOf(Y)).
할당을 위해 인터페이스는 Object처럼 처리됩니다. isJavaAssignable(class(_), class(To)) :loadedClass(To, ToClass),
classIsInterface(ToClass).
isJavaAssignable(class(From), class(To)) : isJavaSubclassOf(From, To).
배열은 Object의 서브 타입입니다. isJavaAssignable(arrayOf(_), class(’java/lang/Object’)).
여기에서는 마지막 두 유형이 정의되어 있는 경우 배열 유형이 Cloneable과
java.io.Serializable의 서브 타입이어야 한다는 것입니다. CLDC의 경우 이러한 유형이 존재하 지 않습니다. 이러한 내용은 술어 isArrayInterface에 절이 없게 만들어 항상 false가 되게 함으로 써 CLDC용 Prolog 코드에 반영됩니다.
isJavaAssignable(arrayOf(_), class(X)) :- isArrayInterface(X).
프리미티브 유형 배열 사이의 유형 세분화 관계는 ID 관계입니다. isJavaAssignable(arrayOf(X), arrayOf(Y)) :atom(X), atom(Y), X = Y.
참조 유형 배열 사이의 유형 세분화는 공변합니다. isJavaAssignable(arrayOf(X), arrayOf(Y)) :compound(X), compound(Y), isJavaAssignable(X, Y).
서브 클래스는 재귀적입니다. isJavaSubclassOf(SubClassName, SubClassName).
isJavaSubclassOf(SubClassName, SuperClassName) :loadedClass(SubClassName, SubClass),
classSuperClassName(SubClass, SubSuperClassName), isJavaSubclassOf(SubSuperClassName, SuperClassName).
sizeOf(X, 2) :- isAssignable(X, twoWord). sizeOf(X, 1) :- isAssignable(X, oneWord).
sizeOf(top, 1).
서브 타입은 유형 상태 방향으로 확장됩니다.
frameIsAssignable(frame(Locals1, StackMap1, Flags1),
frame(Locals2, StackMap2, Flags2)) : length(StackMap1, StackMapLength), length(StackMap2, StackMapLength), maplist(isAssignable, Locals1, Locals2), maplist(isAssignable, StackMap1, StackMap2), subset(Flags1, Flags2).
### 3.2 유형 검사 규칙
3.2.1 접근자
규정된 접근자: 이 규격에서는 규격에 없는 특정 Prolog 술어의 형식 정의가 있다고 가정합니다. 이 절에서는 이러한 술어를 나열하고 술어의 예상 동작을 지정합니다.
parseFieldSignature(Signature, Type) 필드 설명자 Signature를 해당 확인 유형 Type으로 변환합니다(이러한 대응의 규격은 §3.1의 시작 부분 참조).
parseMethodSignature(Signature, TypeList, ReturnType)
메소드 설명자 Signature를 메소드 인자 유형에 해당(§3.1)하는 확인 유형 목록 TypeList로 변환하면 확인 유형 ReturnType은 반환 유형에 해당합니다.
parseCodeAttribute(ClassFile, Method, FrameSize, MaxStack, ParsedCode, Handlers, StackMap)
최대 피연산자 스택 크기인 MaxStack, 로컬 변수의 최대 개수인 FrameSize, 예외 처리기인 Handlers 및 스택 맵 StackMap 을 비롯하여 ClassFile에 있는 메소드 Method의 명령 스트림 ParsedCode를 추출합니다. 명령 스트림과 스택 맵 속성 표현은 §3.의 처음에 지정되어 있어야 합니다. 각 예외 처리기는 인자가 처리기에서 다루는 명령 범위의 시작과 끝, 처리 기 코드의 첫 번째 명령 및 이 처리기가 처리해야 하는 예외 클래스 이름을 나타내는 형식 handler(Start, End, Target, ClassName)의 기능자 응용 프로그램에 의해 표현됩니다.
classClassName(Class, ClassName) 클래스 Class의 이름 ClassName을 추출합니다.
classIsInterface(Class, IsInterface) 클래스 Class가 인터페이스인 경우 True입니다.
classIsNotFinal(Class) 클래스 Class가 최종 클래스가 아닌 경우 True입니다.
classSuperClassName(Class, SuperClassName) 클래스 Class의 슈퍼 클래스 이름 SuperClassName을 추출합니다.
classInterfaces(Class, Interfaces) 클래스 Class의 직접 수퍼인터페이스 목록인 Interfaces를 추출합니다.
classMethods(Class, Methods) 클래스 Class의 메소드 목록인 Methods를 추출합니다.
classAttributes(Class, Attributes)
클래스 Class의 속성 목록인 Attributes를 추출합니다. 각 속성은 형식 속성(AttributeName, AttributeContents)의 기능 자 응용 프로그램으로 표현되며, 여기서 AttributeName은 속성의 이름입니다. 속성 내용의 형식은 지정되어 있지 않습 니다.
methodName(Method, Name) 메소드 Method의 이름 Name을 추출합니다.
methodAccessFlags(Method, AccessFlags) 메소드 Method의 액세스 플래그 AccessFlags를 추출합니다.
methodSignature(Method, Signature) 메소드 Method의 설명자 Signature를 추출합니다.
methodAttributes(Method, Attributes) 메소드 Method의 속성 목록인 Attributes를 추출합니다.
isNotFinal(Method, Class) 클래스 Class의 Method가 마지막이 아닌 경우 True입니다.
isProtected(MemberClassName, MemberName, MemberSignature)
클래스 MemberClassName에서 서명 MemberSignature가 있는 MemberName이라는 구성원이 보호되어 있는 경우 True입니다.
isNotProtected(MemberClassName, MemberName, MemberSignature)
클래스 MemberClassName에서 서명 MemberSignature가 있는 MemberName이라는 구성원이 보호되어 있지 않은 경우 True입니다.
여기에서는 완전하게 지정할 접근자와 규정할 내용에 관한 결정을 돕는 원칙이 있으며 클래스 파일의 표현을 과도하게 지정하지 않습니다. 특정 접근자를 클래스나 메소드 용어에 제공하면 클래스 파일을 나타내는 Prolog 용어에 대한 형식을 완전하게 지정해야 합니다.
지정된 접근자 및 유틸리티: 또한 클래스 및 관련 메소드의 표현에서 필요한 정보를 추출하는 접근자 및 유틸리티 규칙을 제공합니다.
환경은 클래스, 메소드, 메소드의 선언된 반환 유형, 메소드의 명령, 피연산자 스택의 최대 크기 및 예외
처리기 목록 등의 6개로 구성되어 있습니다.
maxOperandStackLength(Environment, MaxStack) :-
Environment = environment(_Class, _Method, _ReturnType, _All, MaxStack, _Handlers).
exceptionHandlers(Environment, Handlers) :-
Environment = environment(_Class, _Method, _ReturnType, _All, _, Handlers).
thisMethodReturnType(Environment, ReturnType) :-
Environment = environment(_Class, _Method, ReturnType, _All, _, _).
thisClass(Environment, class(ClassName)) :-
Environment = environment(Class, _Method, _ReturnType, _All, _, _), classClassName(Class, ClassName).
allInstructions(Environment, All) :-
Environment = environment(_Class, _Method, _ReturnType, All, _, _).
offsetStackFrame(Environment, Offset, StackFrame) : allInstructions(Environment, Instructions), member(stackMap(Offset, StackFrame), Instructions).
notMember(_, []). notMember(X, [A | More]) :- X \= A, notMember(X, More).
#### 3.2.2 추상 메소드 및 고유 메소드
추상 메소드가 최종 메소드를 무시하지 않는 경우 유형 안정적인 것으로 간주합니다.
methodIsTypeSafe(Class, Method) :doesNotOverrideFinalMethod(Class, Method),
methodAccessFlags(Method, AccessFlags), member(abstract, AccessFlags).
고유 메소드가 최종 메소드를 무시하지 않는 경우 유형 안정적인 것으로 간주합니다.
methodIsTypeSafe(Class, Method) :doesNotOverrideFinalMethod(Class, Method), methodAccessFlags(Method, AccessFlags),
member(native, AccessFlags). doesNotOverrideFinalMethod(class(‘java/lang/Object’), Method). doesNotOverrideFinalMethod(Class, Method) :classSuperClassName(Class, SuperclassName), loadedClass(SuperclassName, Superclass), classMethods(Superclass, MethodList), finalMethodNotOverridden(Method, Superclass, MethodList).
finalMethodNotOverridden(Method, Superclass, MethodList) :methodName(Method, Name), methodSignature(Method, Sig), member(method(_, Name, Sig), MethodList), isNotFinal(Method, Superclass).
finalMethodNotOverridden(Method, Superclass, MethodList) :methodName(Method, Name), methodSignature(Method, Sig), notMember(method(_, Name, Sig), MethodList), doesNotOverrideFinalMethod(Superclass, Method).
3.2.3 코드 검사
비추상, 비고유 메소드에 코드가 있고 코드 유형이 올바른 경우 이들 유형은 올바른 것입니다. methodIsTypeSafe(Class, Method) :doesNotOverrideFinalMethod(Class, Method),
methodAccessFlags(Method, AccessFlags), methodAttributes(Method, Attributes), notMember(native, AccessFlags), notMember(abstract, AccessFlags), member(attribute(’Code’, _), Attributes), methodWithCodeIsTypeSafe(Class, Method). 각 스택 맵이 해당하는 명령을 선행하고 병합된 결과 스트림의 유형이 올바를 수 있도록 코드와 스택 프레임을 단일 스트림에 병합하는 경우 코드가 있는 메소드는 유형 안정적입니다.
methodWithCodeIsTypeSafe(Class, Method) :-
parseCodeAttribute(Class, Method, FrameSize, MaxStack, ParsedCode, Handlers,
StackMap),
mergeStackMapAndCode(StackMap, ParsedCode, MergedCode),
methodInitialStackFrame(Class, Method, FrameSize, StackFrame, ReturnType),
Environment =
environment(Class, Method, ReturnType, MergedCode, MaxStack, Handlers),
handlersAreLegal(Environment), mergedCodeIsTypeSafe(Environment, MergedCode, StackFrame).
메소드의 초기 유형 상태는 유형 this와 인자에서 파생된 빈 피연산자 스택과 로컬 변수 유형 그리고
this가 메소드인지 여부에 따라 적절한 플래그로 구성됩니다.
methodInitialStackFrame(Class, Method, FrameSize,
frame(Locals, [], Flags), ReturnType): methodSignature(Method, Signature),
parseMethodSignature(Signature, RawArgs, ReturnType), expandTypeList(RawArgs, Args), methodInitialThisType(Class, Method, ThisList), flags(ThisList, Flags), append(ThisList, Args, ThisArgs), expandToLength(ThisArgs, FrameSize, top, Locals).
flags([uninitializedThis], [flagThisUninit]). flags(X, []) :- X \= [uninitializedThis].
expandToLength(List, Size, _Filler, List) :- length(List, Size). expandToLength(List, Size, Filler, Result) : length(List, ListLength), ListLength < Size, Delta is Size - ListLength, length(Extra, Delta), checklist(=(Filler), Extra), append(List, Extra, Result).
정적 메소드의 경우 this는 무관하며 목록은 비어 있습니다. 인스턴스 메소드의 경우 this의 유형을 얻어 목록에 둡니다.
methodInitialThisType(_Class, Method, []) : methodAccessFlags(Method, AccessFlags), member(static, AccessFlags), methodName(Method, MethodName), MethodName \= ’’.
methodInitialThisType(Class, Method, [This]) : methodAccessFlags(Method, AccessFlags), notMember(static, AccessFlags), instanceMethodInitialThisType(Class, Method, This).
Object의 메소드에서 this의 유형은 Object입니다. 다른 메소드에서 this의 유형은 uninitializedThis입니다. 그 밖의 경우 인스턴스 메소드에서 this의 유형은 class(N)이며, 여기 서 N은 메소드를 포함하는 클래스의 이름입니다.
instanceMethodInitialThisType(Class, Method, class(ClassName)) : methodName(Method, MethodName), MethodName \= ’’, classClassName(Class, ClassName).
instanceMethodInitialThisType(Class, Method, class(’java/lang/Object’)) : methodName(Method, ’’), classClassName(Class, ’java/lang/Object’).
instanceMethodInitialThisType(Class, Method, uninitializedThis) : methodName(Method, ’’), classClassName(Class, ClassName), ClassName \= ’java/lang/Object’.
아래에는 코드 스트림을 통해 반복되는 규칙이 나와 있습니다. 바이트 코드 색인 N의 스택 맵이 명령 N 바로 앞에 표시되도록 스트림이 명령과 스택 맵으로 잘 혼합되어 있다고 가정합니다.
이렇게 혼합된 스트림을 빌드하는 규칙은 술어 mergeStackMapAndCode를 사용하여 나중에 제공합 니다.
특수 표시자 aftergoto는 무조건 분기를 표시하기 위해 사용됩니다. 코드의 끝에 무조건 분기가 있는 경우 중단됩니다.
mergedCodeIsTypeSafe(_Environment, [endOfCode(Offset)], afterGoto).
무조건 분기 뒤에 다음 명령에 대한 유형 상태를 제공하는 스택 맵이 있는 경우 스택 맵이 제공한 유형 상태를 사용하여 유형 검사를 진행할 수 있습니다.
mergedCodeIsTypeSafe(Environment, [stackMap(Offset, MapFrame) | MoreCode],
afterGoto): mergedCodeIsTypeSafe(Environment, MoreCode, MapFrame).
스택 맵과 수신 유형 상태가 있는 경우 유형 상태를 스탭 맵의 한 곳에 지정할 수 있어야 합니다. 그런
다음 스택 맵에 주어진 유형 상태를 사용하여 나머지 스트림의 유형 검사를 진행할 수 있습니다.
mergedCodeIsTypeSafe(Environment, [stackMap(Offset, MapFrame) | MoreCode], frame(Locals, OperandStack, Flags)) :-
frameIsAssignable(frame(Locals, OperandStack, Flags), MapFrame), mergedCodeIsTypeSafe(Environment, MoreCode, MapFrame).
제공된 스택 프레임 맵이 없는 무조건 분기 다음에 코드가 있는 것은 유효하지 않습니다. mergedCodeIsTypeSafe(_Environment, [instruction(_,_) | _MoreCode], afterGoto) : write_ln(’No stack frame after unconditional branch’), fail.
T에 관해 유형 안정적인 명령 I로 시작하고 I는 해당 예외 처리기를 만족시키며 I의 실행 뒤에 유형 상 태가 온다고 가정할 때 스트림의 끝 부분이 유형 안정적인 경우 병합된 코드 스트림은 수신 유형 상태 T에 관해 유형 안정적입니다.
mergedCodeIsTypeSafe(Environment, [instruction(Offset,Parse) | MoreCode], frame(Locals, OperandStack, Flags)) :-
명령을 확인합니다. NextStackFrame은 다음 명령으로 전달될 내용을 표시합니다.
ExceptionStackFrame은 예외 처리기로 전달될 내용을 표시합니다.
instructionIsTypeSafe(Parse, Environment, Offset, frame(Locals, OperandStack, Flags), NextStackFrame, ExceptionStackFrame), instructionSatisfiesHandlers(Environment, Offset, ExceptionStackFrame), mergedCodeIsTypeSafe(Environment, MoreCode, NextStackFrame).
대상에 관련 스택 프레임 Frame이 있고 현재 스택 프레임 StackFrame을 Frame에 할당할 수 있는 경우
대상으로 분기하는 것은 유형 안정적입니다.
targetIsTypeSafe(Environment, StackFrame, Target) :offsetStackFrame(Environment, Target, Frame),
frameIsAssignable(StackFrame, Frame).
3.2.4 스택 맵과 명령 스트림 결합 스택 프레임 스트림과 명령 스트림의 병합은 이 절에 정의되어 있습니다.
빈 StackMap과 명령 목록을 병합하면 명령의 원래 목록이 만들어집니다. mergeStackMapAndCode([], CodeList, CodeList).
Offset에 있는 명령에 대해 유형 상태로 시작되는 스택 프레임 맵의 목록과 Offset에서 시작하는 명령의 목록을 가정하면 병합된 목록은 스택 프레임 목록의 시작 부분 및 그 뒤에 오는 명령 목록 시작 부분과 두 개 목록 끝 부분의 병합으로 구성됩니다.
mergeStackMapAndCode([stackMap(Offset, Map) | RestMap],
[instruction(Offset, Parse) | RestCode],
[stackMap(Offset, Map),
instruction(Offset, Parse) | RestMerge]) :mergeStackMapAndCode(RestMap, RestCode, RestMerge).
반대로 OffsetM의 명령에 대한 유형 상태로 시작하는 스택 프레임 목록과 OffsetP에서 시작하는 명령 목록을 가정하면 OffsetP < OffsetM인 경우 병합된 목록은 명령 목록 시작 부분 및 그 뒤에 오는 스택 프레임 목록 병합 및 명령 목록의 끝 부분으로 구성됩니다.
mergeStackMapAndCode([stackMap(OffsetM, Map) | RestMap],
[instruction(OffsetP, Parse) | RestCode],
[instruction(OffsetP, Parse) | RestMerge]) :-
OffsetP < OffsetM, mergeStackMapAndCode([stackMap(OffsetM, Map) | RestMap], RestCode,
RestMerge).
그렇지 않은 경우 두 가지 목록의 병합은 정의되어 있지 않습니다.
명령 목록에는 단순하게 증가하는 오프셋이 있으므로 두 가지 목록의 병합은 다음 경우를 제외하면 정의되어 있지 않습니다.
- 각 스택 맵 오프셋에는 해당 명령 오프셋이 있습니다.
- 스택 맵은 단순하게 증가하는 순서로 되어 있습니다.
3.2.5 예외 처리
명령에 적용 가능한 각 예외 처리기를 만족시키는 경우 명령은 해당 예외 처리기를 만족시킵니다. instructionSatisfiesHandlers(Environment, Offset, ExceptionStackFrame) :- exceptionHandlers(Environment, Handlers), sublist(isApplicableHandler(Offset), Handlers, ApplicableHandlers), checklist(instructionSatisfiesHandler(Environment, ExceptionStackFrame), ApplicableHandlers).
명령의 오프셋이 처리기 범위의 시작 이후이고 처리기 범위의 마지막 이전인 경우 예외 처리기를 명령
에 적용 가능합니다.
isApplicableHandler(Offset, handler(Start, End, _Target, _ClassName)) : Offset >= Start, Offset < End.
수신 유형 상태가 StackFrame이고 처리기의 대상(처리기 코드의 초기 명령)이 수신 유형 상태 T를 가 정하여 유형 안정적인 경우 명령은 예외 처리기를 만족시킵니다. 유형 상태 T는 피연산자 스택을 유일 한 요소가 처리기의 예외 클래스인 스택으로 바꾸어 StackFrame에서 파생됩니다.
instructionSatisfiesHandler(Environment, StackFrame, Handler) :-
Handler = handler(_, _, Target, _), handlerExceptionClass(Handler, ExceptionClass),
/* The stack consists of just the exception. */ StackFrame = frame(Locals, _, Flags), targetIsTypeSafe(Environment, frame(Locals, [ ExceptionClass ], Flags), Target).
처리기 클래스 항목이 0인 경우 처리기의 예외 클래스는 Throwable이며 그렇지 않은 경우는 처리기 에 이름이 지정되어 있는 클래스입니다. handlerExceptionClass(handler(_, _, _, 0), class(’java/lang/Throwable’)). handlerExceptionClass(handler(_, _, _, Name), class(Name)) :- Name \= 0.
handlersAreLegal(Environment) :exceptionHandlers(Environment, Handlers),
checklist(handlerIsLegal(Environment), Handlers).
예외처리기의 시작(Start)이 끝(End)보다 작고 오프셋이 Start와 같은 명령, 오프셋이 End와 같은 명령 이면 처리기의 예외 클래스를 클래스 Throwable에 할당할 수 있는 경우 예외 처리기는 적법합니다.
handlerIsLegal(Environment, Handler) :-
Handler = handler(Start, End, Target, _), Start < End,
allInstructions(Environment, Instructions), member(instruction(Start, _), Instructions), offsetStackFrame(Environment, Target, _), instructionsIncludeEnd(Instructions, End), handlerExceptionClass(Handler, ExceptionClass), isAssignable(ExceptionClass, class(’java/lang/Throwable’)).
instructionsIncludeEnd(Instructions, End) :member(instruction(End, _), Instructions). instructionsIncludeEnd(Instructions, End) :member(endOfCode(End), Instructions).
3.3 명령
#### 3.3.1 동일 구조 명령
많은 바이트 코드에는 다른 바이트 코드의 규칙과 완전히 동일한 구조의 유형(type) 규칙이 있습니다. 바이트 코드 b1이 다른 바이트 코드 b2와 동일한 구조인 경우 b1의 유형 규칙은 b2의 유형 규칙과 같습 니다.
instructionIsTypeSafe(Instruction, Environment, Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
instructionHasEquivalentTypeRule(Instruction, IsomorphicInstruction),
instructionIsTypeSafe(IsomorphicInstruction, Environment, Offset,
StackFrame, NextStackFrame, ExceptionStackFrame).
#### 3.3.2 피연산자 스택 조작
이 절은 유형 상태의 피연산자 스택을 적절히 조작하는 규칙을 정의합니다. 피연산자 스택의 조작은 일부 유형이 스택의 두 항목을 차지한다는 사실에 의해 복잡해집니다. 이 절에 주어진 술어는 규격의 나머지 부분에서 이 문제를 추출할 수 있도록 이 내용을 고려합니다.
canPop(frame(Locals, OperandStack, Flags), Types, frame(Locals, PoppedOperandStack, Flags)) :-
popMatchingList(OperandStack, Types, PoppedOperandStack).
popMatchingList(OperandStack, [], OperandStack). popMatchingList(OperandStack, [P | Rest], NewOperandStack) : popMatchingType(OperandStack, P, TempOperandStack, _ActualType), popMatchingList(TempOperandStack, Rest, NewOperandStack).
스택에서 개별 유형을 제거합니다. 다시 말해 스택의 논리상 맨 위가 지정한 유형 Type의 일부 서브 타입인 경우 표시합니다. 유형이 두 개의 스택 슬롯을 차지하는 경우 스택 유형의 논리상 맨 위는 맨 위 바로 아래에 있는 유형이고 스택의 맨 위가 사용 가능하지 않은 유형 top입니다.
popMatchingType([ActualType | OperandStack], Type, OperandStack, ActualType) : sizeOf(Type, 1), isAssignable(ActualType, Type). popMatchingType([top, ActualType | OperandStack], Type, OperandStack, ActualType) : sizeOf(Type, 2), isAssignable(ActualType, Type).
논리유형을 스택에 푸시합니다. 정확한 동작은 유형 크기에 따라 달라집니다. 푸시된 유형의 크기가 1인 경우 스택에 푸시하기만 하면 됩니다. 푸시된 유형의 크기가 2인 경우 푸시한 다음 top을 푸시합 니다.
pushOperandStack(OperandStack, ’void’, OperandStack). pushOperandStack(OperandStack, Type, [Type | OperandStack]) : sizeOf(Type, 1).
pushOperandStack(OperandStack, Type, [top, Type | OperandStack]) : sizeOf(Type, 2).
피연산자 스택의 길이는 선언한 최대 스택 길이를 초과하면 안 됩니다.
operandStackHasLegalLength(Environment, OperandStack) : length(OperandStack, Length), maxOperandStackLength(Environment, MaxStack), Length =< MaxStack.
JVMS에 의해 정의된 대로 범주 1 유형은 단일 스택 슬롯을 차지합니다. 스택의 맨 위가 Type이고 Type이 top이 아닌 경우(반대의 경우 범주 2 유형의 위쪽 반을 나타낼 수 있음) 범주 1의 논리 유형 Type을 스택에서 제거하는 것이 가능합니다. 결과는 맨 위 슬롯이 사라진 수신 스택입니다.
popCategory1([Type | Rest], Type, Rest) : Type \=top, sizeOf(Type, 1).
JVMS에 의해 정의된 대로 범주 2 유형은 두 개의 스택 슬롯을 차지합니다. 스택의 맨 위가 top이고 바 로 그 아래에 있는 슬롯이 Type인 경우 범주 2의 논리 유형 Type을 스택에서 제거하는 것이 가능합니 다. 결과는 맨 위 2개의 슬롯이 사라진 수신 스택입니다.
popCategory2([top, Type | Rest], Type, Rest) : sizeOf(Type, 2).
canSafelyPush(Environment, InputOperandStack, Type, OutputOperandStack) : pushOperandStack(InputOperandStack, Type, OutputOperandStack), operandStackHasLegalLength(Environment, OutputOperandStack).
canSafelyPushList(Environment, InputOperandStack, Types, OutputOperandStack) : canPushList(InputOperandStack, Types, OutputOperandStack), operandStackHasLegalLength(Environment, OutputOperandStack). canPushList(InputOperandStack, [Type | Rest], OutputOperandStack) : pushOperandStack(InputOperandStack, Type, InterimOperandStack), canPushList(InterimOperandStack, Rest, OutputOperandStack). canPushList(InputOperandStack, [], InputOperandStack).
3.3.3 로드 모든 로드 명령은 일반 패턴의 변형으로 명령이 로드하는 값의 유형에 변화를 줍니다.
해당 로컬 변수의 유형이 ActualType이고 ActualType을 Type에 할당할 수 있으며 ActualType을 수신 피연산자 스택에 푸시하는 것이 새 유형 상태 NextStackFrame을 산출하는 유효한 유형 전이인 경우 로컬 변수 Index에서 유형 Type의 값을 로드하는 것은 유형 안정적입니다. 로드 명령을 실행한 다음 유형 상태는 NextStackFrame이 됩니다.
loadIsTypeSafe(Environment, Index, Type, StackFrame, NextStackFrame) : StackFrame = frame(Locals, _OperandStack, _Flags), nth0(Index, Locals, ActualType), isAssignable(ActualType, Type), validTypeTransition(Environment, [], ActualType, StackFrame, NextStackFrame).
3.3.4 저장 모든 저장 명령은 일반 패턴의 변형으로 명령이 저장하는 값의 유형에 변화를 줍니다.
참조하는 로컬 변수가 Type의 수퍼 타입인 유형이고 피연산자 스택의 맨 위가 Type의 서브 타입인 경우 일반적으로 저장 명령은 유형 안정적입니다. 여기서 Type은 명령이 저장할 유형입니다. 다시 말해 Type과 “일치하는” 유형 ActualType(즉 Type의 서브 타입)을 피연산자 스택에서 제거한 다음 해당 유형에 로컬 변수 LIndex를 올바로 할당할 수 있는 경우 저장은 유형 안정적입니다.
storeIsTypeSafe(_Environment, Index, Type, frame(Locals, OperandStack, Flags), frame(NextLocals, NextOperandStack, Flags)) :-
popMatchingType(OperandStack, Type, NextOperandStack, ActualType), modifyLocalVariable(Index, ActualType, Locals, NextLocals).
로컬변수 Locals의 경우 LIndex가 유형 Type을 갖도록 수정하면 로컬 변수 목록 NewLocals가 생깁 니다. 일부 값(및 해당 유형)은 두 개의 로컬 변수를 차지하기 때문에 수정과 약간 관련되어 있습니다. 따라서 LN을 수정하려면 LN+1(유형은 N과 N+1 슬롯을 모두 차지할 것이므로)이나 LN-1(로컬 N은 로컬 N-1에서 시작하는 두 가지 단어 값/유형의 위쪽 반이므로 로컬 N-1은 무효가 되어야 함) 또는 두 가지 모두를 수정해야 할 수 있습니다. 이러한 내용은 좀 더 아래에서 설명합니다. L0부터 카운트합니다.
modifyLocalVariable(Index, Type, Locals, NewLocals) : modifyLocalVariable(0, Index, Type, Locals, NewLocals).
색인 I에서 시작하는 로컬 변수 목록의 접미사, LocalsSuffix의 경우 로컬 변수 색인이 유형 Type을 갖게 수정하면 로컬 변수 목록 접미사 NewLocalsSuffix가 생깁니다.
I < Index-1인 경우 입력을 출력에 복사만 하고 앞으로 순환합니다. I = Index-1인 경우 로컬 I의 유형은 변경될 수 있습니다. LI에 크기 2인 유형이 있는 경우 그렇습니다. LI+1을 새 유형(및 해당 값)으로 설정 하면 위쪽 반이 비워짐에 따라 LI의 유형/값은 무효화됩니다. 그런 다음 앞으로 순환합니다.
변수를 찾았는데 한 단어만 차지하는 경우 Type으로 변경하기만 하면 됩니다.
변수를 찾았는데 두 단어를 차지하는 경우 이 유형을 Type으로 변경하고 다음 단어는 top으로 변경합 니다.
modifyLocalVariable(I, Index, Type, [Locals1 | LocalsRest], [Locals1 | NextLocalsRest] ) : I < Index - 1, I1 is I + 1, modifyLocalVariable(I1, Index, Type, LocalsRest, NextLocalsRest).
modifyLocalVariable(I, Index, Type, [Locals1 | LocalsRest], [NextLocals1 | NextLocalsRest] ) :-
I =:= Index - 1, modifyPreIndexVariable(Locals1, NextLocals1), modifyLocalVariable(Index, Index, Type, LocalsRest, NextLocalsRest).
modifyLocalVariable(Index, Index, Type, [_ | LocalsRest],
[Type | LocalsRest] ) :-
sizeOf(Type, 1).
modifyLocalVariable(Index, Index, Type, [_, _ | LocalsRest],
[Type, top | LocalsRest]) : sizeOf(Type, 2).
유형을 선행 색인 변수로 수정할 로컬 바로 앞에 색인이 있는 로컬을 참조합니다. 유형 InputType의 선행 색인 변수의 차후 유형은 Result입니다. 선행 색인 로컬의 유형 Value의 크기가 1인 경우 변경되지 않습니다. 선행 색인 로컬 유형 Value의 크기가 2인 경우 두 단어 값 중 아래쪽 반의 유형을 top으로 설 정하여 사용할 수 없음으로 표시해야 합니다.
modifyPreIndexVariable(Value, Value) :- sizeOf(Value, 1). modifyPreIndexVariable(Value, top) :- sizeOf(Value, 2).
유형 목록에서 이 절은 크기가 2인 각 유형을 두 개의 항목(하나는 자신의 유형, 다른 하나는 top 항목) 으로 대체한 목록을 만듭니다.
expandTypeList([], []).
expandTypeList([Item | List], [Item | Result]) : sizeOf(Item, 1), expandTypeList(List, Result).
expandTypeList([Item | List], [Item, top | Result]) : sizeOf(Item, 2), expandTypeList(List, Result).
#### 3.3.5 모든 명령 목록
일반적으로 명령의 유형(type) 규칙은 명령이 발생하는 클래스 및 메소드를 정의하는 Environment와 명령이 발생하는 메 소드 내의 오프셋 Offset과 관련하여 주어집니다. 수신 유형 상태 StackFrame이 특정 요구 사항을 이행하는 경우 규칙은 다음 상태가 됩니다.
- 명령은 유형 안정적입니다.
- 명령이 정상적으로 완료된 다음 유형 상태에 NextStackFrame에 의해 주어진 특정 형식이 있다는 것과 명령이 갑자 기 완료된 다음 유형 상태는 ExceptionStackFrame에 의해 주어진다는 것을 확인할 수 있습니다. 규칙의 자연 언어 설명은 읽기 쉽고, 직관적이며 간결한 것이 목적입니다. 따라서 설명은 위에 제시된 문맥상의 가정 전체 를 반복하지 않습니다. 특히 다음과 같습니다.
- 명시적으로 환경을 언급하지 않습니다.
- 다음에서 피연산자 스택이나 로컬 변수를 말하면 유형 상태(수신 상태 유형이나 송신 유형 상태 중 하나)의 피연산 자 스택과 로컬 변수 구성 요소를 언급하는 것입니다.
- 명령이 갑자기 완료된 다음의 유형 상태는 거의 항상 수신 유형 상태와 같습니다. 명령이 해당하는 경우가 아니면 갑자기 명령을 완료한 다음의 유형 상태만 설명합니다.
- 피연산자 스택에서 유형을 표시하고 푸시하는 것에 대해 설명합니다. 스택 언더플로나 오버플로의 문제에 대해서는 명시적으로 설명하지 않지만 이러한 작업이 성공적으로 완료될 수 있다고 가정합니다. 피연산자 스택의 형식 규칙 은 필요한 검사가 이루어졌다는 것을 확인합니다.
- 마찬가지로 텍스트에선 논리 유형의 조작만 설명합니다. 실제로 일부 유형은 보다 자세히 설명되어 있습니다. 여기 에서는 이러한 유형의 세부 정보를 간추리고 데이터를 조작하는 논리 규칙에 대해서는 다루지 않습니다.
형식 Prolog 규칙을 참조하면 모호성이 해결됩니다.
aaload
일치하는 int유형 및요소유형이 ElementType인 배열 유형(여기서 ElementType은 Object의 서 브 타입임)을 ElementType으로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 aaload 명령은 유형 안정적입니다.
instructionIsTypeSafe(aaload, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- nth1OperandStackIs(2, StackFrame, ArrayType), arrayElementType(ArrayType, ElementType),
validTypeTransition(Environment,
[int, arrayOf(class(’java/lang/Object’))], ElementType,
StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
X 배열의 요소 유형은 X입니다.
arrayElementType(arrayOf(X), X).
null의 요소 유형을 null로 정의합니다.
arrayElementType(null, null).
aastore:
일치하는 Object 유형, int 및 Object의 배열을 수신 피연산자 스택에서 올바로 제거하여 송신 유형
상태를 산출할 수 있는 경우 aastore 명령은 유형 안정적입니다.
instructionIsTypeSafe(aastore, _Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [class(’java/lang/Object’), int, arrayOf(class(’java/lang/Object’))], NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
aconst_null:
유형 null을 수신 피연산자 스택에 올바로 푸시하여 송신 유형 상태를 산출할 수 있는 경우
aconst_null 명령은 유형 안정적입니다.
instructionIsTypeSafe(aconst_null, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [], null, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
aload
피연산자 Index와 유형 reference가 있는 로드 명령이 유형안정적이고 송신 유형상태 NextStackFrame을 산출하는 경우 피연산자 Index가 있는 aload 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(aload(Index), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- loadIsTypeSafe(Environment, Index, reference, StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
aload_
명령 aload_ (0 ≤ ≤n 3 인 경우)은 동일한 aload 명령이 유형 안정적인 경우 유형 안정적입니다.
instructionHasEquivalentTypeRule(aload_0, aload(0)). instructionHasEquivalentTypeRule(aload_1, aload(1)). instructionHasEquivalentTypeRule(aload_2, aload(2)). instructionHasEquivalentTypeRule(aload_3, aload(3)).
anewarray:
CP가 클래스 유형이나 배열 유형 중 하나를 나타내는 상수 풀 항목을 참조하고, 수신 피연산자 스택의 일치하는 int 유형을 구성 요소 유형 CP가 있는 배열로 적절하게 바꾸어 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP가 있는 anewarray 명령은 유형 안정적입니다.
instructionIsTypeSafe(anewarray(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
(CP = class(_) ; CP = arrayOf(_)), validTypeTransition(Environment, [int], arrayOf(CP), StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
areturn:
포함 메소드에 참조 유형인 선언된 반환 유형 ReturnType이 있으며 일치하는 ReturnType 유형을 수신
피연산자 스택에서 올바로 제거할 수 있는 경우 areturn 명령은 유형 안정적입니다.
instructionIsTypeSafe(areturn, Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :-
thisMethodReturnType(Environment, ReturnType), isAssignable(ReturnType, reference), canPop(StackFrame, [ReturnType], _PoppedStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
arraylength:
수신 피연산자스택의배열유형을 유형 int로 올바로 바꾸어송신 유형 상태를 산출할 수있는 경우
arraylength 명령은 유형 안정적입니다.
instructionIsTypeSafe(arraylength, Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- nth1OperandStackIs(1, StackFrame, ArrayType),
arrayElementType(ArrayType, _), % ensure that it is an Array validTypeTransition(Environment, [top], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
astore:
피연산자 Index와 유형 reference가 있는 저장 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame을 산출하는 경우 피연산자 Index가 있는 astore 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(astore(Index), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- storeIsTypeSafe(Environment, Index, reference, StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
astore_:
명령 astore_ (0 ≤ ≤n 3 인 경우)은 동일한 astore 명령이 유형 안정적인 경우 유형 안정적입 니다.
instructionHasEquivalentTypeRule(astore_0, astore(0)). instructionHasEquivalentTypeRule(astore_1, astore(1)). instructionHasEquivalentTypeRule(astore_2, astore(2)). instructionHasEquivalentTypeRule(astore_3, astore(3)).
athrow:
피연산자 스택의 맨 위가 Throwable과 일치하는 경우 athrow 명령은 유형 안정적입니다. instructionIsTypeSafe(athrow, _Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :-
canPop(StackFrame, [class(’java/lang/Throwable’)], _PoppedStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
baload:
일치하는 int유형 및수신피연산자 스택의 작은 배열 유형을int로 올바로 바꾸어송신유형 상태
를 산출할 수 있는 경우 baload 명령은 유형 안정적입니다.
instructionIsTypeSafe(baload, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- nth1OperandStackIs(2, StackFrame, Array), isSmallArray(Array),
validTypeTransition(Environment, [int, top], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
byte의 배열, boolean의 배열 또는 서브 타입(null)인 경우 배열 유형은 작은 배열 유형입니다.
isSmallArray(arrayOf(byte)). isSmallArray(arrayOf(boolean)). isSmallArray(null).
bastore:
일치하는 int 유형, int 및 작은 배열 유형을 수신 피연산자 스택에서 올바로 제거하여 송신 유형 상
태를 산출할 수 있는 경우 bastore 명령은 유형 안정적입니다.
instructionIsTypeSafe(bastore, _Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- nth1OperandStackIs(3, StackFrame, Array), isSmallArray(Array),
canPop(StackFrame, [int, int, top], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
bipush:
동일한 sipush 명령이 유형 안정적인 경우 bipush 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(bipush(Value), sipush(Value)).
caload:
일치하는 int유형 및수신피연산자 스택의 char의 배열을 int로 올바로 바꾸어 송신 유형 상태를
산출할 수 있는 경우 caload 명령은 유형 안정적입니다.
instructionIsTypeSafe(caload, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int, arrayOf(char)], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
castore:
일치하는 int, int 및 char의 배열을 수신 피연산자 스택에서 올바로 제거하여 송신 유형 상태를
산출할 수 있는 경우 castore 명령은 유형 안정적입니다.
instructionIsTypeSafe(castore, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [int, int, arrayOf(char)], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
checkcast:
CP가 클래스나 배열 중 하나를 나타내는 상수 풀 항목을 참조하고 수신 피연산자 스택의 맨 위에 있는 유형 Object를 CP가 나타내는 유형으로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 피연 산자 CP가 있는 checkcast 명령은 유형 안정적입니다.
instructionIsTypeSafe(checkcast(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
(CP = class(_) ; CP = arrayOf(_)),
validTypeTransition(Environment, [class(’java/lang/Object’)], CP, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
d2f:
수신 피연산자 스택에서 double을 제거하고, float으로 올바로 바꾸어 송신 유형 상태를 산출할 수
있는 경우 d2f 명령은 유형 안정적입니다.
instructionIsTypeSafe(d2f, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [double], float,
StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
d2i:
수신 피연산자스택에서 double을 올바로 제거하고, int로 바꾸어 송신 유형 상태를산출할 수 있는 경우 d2i 명령은 유형 안정적입니다.
instructionIsTypeSafe(d2i, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [double], int,
StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
d2l:
수신 피연산자 스택에서 double을 올바로 제거하고 long으로 바꾸어 송신 유형 상태를 산출할 수
있는 경우 d2l 명령은 유형 안정적입니다.
instructionIsTypeSafe(d2l, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [double], long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dadd:
일치하는 double 유형 및 수신 피연산자 스택의 double을 double로 바꾸어 송신 유형 상태를 산출
할 수 있는 경우 dadd 명령은 유형 안정적입니다.
instructionIsTypeSafe(dadd, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [double, double], double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
daload:
일치하는 int 유형 및 수신 피연산자 스택의 double 배열을 double로 올바로 바꾸어 송신 유형 스
택을 산출할 수 있는 경우 daload 명령은 유형 안정적입니다.
instructionIsTypeSafe(daload, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
validTypeTransition(Environment, [int, arrayOf(double)], double,
StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dastore:
일치하는 double 유형, int및 double의 배열을 수신 피연산자 스택에서 올바로 제거하여 송신 유형
상태를 산출할 수 있는 경우 dastore 명령은 유형 안정적입니다.
instructionIsTypeSafe(dastore, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
canPop(StackFrame, [double, int, arrayOf(double)], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dcmp:
일치하는 double 유형 및 수신 피연산자 스택에 있는 double을 int와 올바로 바꾸어 송신 유형
상태를 산출할 수 있는 경우 dcmpg 명령은 유형 안정적입니다.
instructionIsTypeSafe(dcmpg, Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [double, double], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
동일한 dcmpg 명령이 유형 안정적인 경우 dcmpl 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(dcmpl, dcmpg).
dconst_:
유형 double을 피연산자 스택에 올바로 푸시하여 송신 유형 상태를 산출할 수 있는 경우 dconst_0
명령은 유형 안정적입니다.
instructionIsTypeSafe(dconst_0, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [], double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
동일한 dconst_0 명령이 유형 안정적인 경우 dconst_1 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(dconst_1, dconst_0).
ddiv:
동일한 dadd 명령이 유형 안정적인 경우 ddiv 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(ddiv, dadd).
dload:
피연산자 Index와 유형 double이 있는 로드 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame을 산출하는 경우 피연산자 Index가 있는 dload 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(dload(Index), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- loadIsTypeSafe(Environment, Index, double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dload_:
명령 dload_ (0 ≤ ≤n 3 인 경우)은 동일한 dload 명령이 유형 안정적인 경우 유형 안정적입니다.
instructionHasEquivalentTypeRule(dload_0, dload(0)). instructionHasEquivalentTypeRule(dload_1, dload(1)). instructionHasEquivalentTypeRule(dload_2, dload(2)). instructionHasEquivalentTypeRule(dload_3, dload(3)).
dmul:
동일한 dadd 명령이 유형 안정적인 경우 dmul 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(dmul, dadd).
dneg:
수신 피연산자 스택에 일치하는 double 유형이 있는 경우 dneg 명령은 유형 안정적입니다. dneg
명령은 유형 상태를 바꾸지 않습니다.
instructionIsTypeSafe(dneg, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
validTypeTransition(Environment, [double], double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
drem:
동일한 dadd 명령이 유형 안정적인 경우 drem 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(drem, dadd).
dreturn:
포함 메소드에 double의 선언된 반환 유형이 있고 double과 일치하는 유형을 수신피연산자 스택에
서 올바로 제거할 수 있는 경우 dreturn 명령은 유형 안정적입니다.
instructionIsTypeSafe(dreturn, Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :-
thisMethodReturnType(Environment, double), canPop(StackFrame, [double], _PoppedStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dstore:
피연산자 Index와 유형 double이 있는 저장 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame을 산출하는 경우 피연산자 Index가 있는 dstore 명령은 유형 안정적이고 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(dstore(Index), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- storeIsTypeSafe(Environment, Index, double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dstore_:
명령 dstore_ (0 ≤ ≤n 3 인 경우)은 동일한 dstore 명령이 유형 안정적인 경우 유형 안정적입 니다.
instructionHasEquivalentTypeRule(dstore_0, dstore(0)). instructionHasEquivalentTypeRule(dstore_1, dstore(1)). instructionHasEquivalentTypeRule(dstore_2, dstore(2)). instructionHasEquivalentTypeRule(dstore_3, dstore(3)).
dsub:
동일한 dadd 명령이 유형 안정적인 경우 dsub 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(dsub, dadd).
dup:
범주 1 유형 Type을 유형 Type, Type으로 올바로 바꾸어 송신 유형 상태를 산출할 수있는 경우 dup 명령은 유형 안정적입니다.
instructionIsTypeSafe(dup, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :StackFrame = frame(Locals, InputOperandStack, Flags), popCategory1(InputOperandStack, Type, _),
canSafelyPush(Environment, InputOperandStack, Type, OutputOperandStack), NextStackFrame = frame(Locals, OutputOperandStack, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dup_x1:
수신 피연산자 스택에 있는 두 가지 범주 1 유형 Type1과 Type2를 유형 Type1, Type2, Type1로 올바
로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup_x1 명령은 유형 안정적입니다.
instructionIsTypeSafe(dup_x1, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
StackFrame = frame(Locals, InputOperandStack, Flags), popCategory1(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, Rest), canSafelyPushList(Environment, Rest, [Type1, Type2, Type1], OutputOperandStack), NextStackFrame = frame(Locals, OutputOperandStack, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dup_x2:
dup_x2 명령이 dup_x2 명령의 유형 안정적인 형식인 경우 유형 안정적입니다. instructionIsTypeSafe(dup_x2, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
StackFrame = frame(Locals, InputOperandStack, Flags),
dup_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack), NextStackFrame = frame(Locals, OutputOperandStack, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dup_x2 명령이 유형 안정적인 형식 1 dup_x2 명령이거나 유형 안정적인 형식 2 dup_x2 명령인 경우 dup_x2 명령은 유형 안정적인 형식입니다.
dup_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup_x2Form1IsTypeSafe(Environment, InputOperandStack, OutputOperandStack).
dup_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup_x2Form2IsTypeSafe(Environment, InputOperandStack, OutputOperandStack).
수신 피연산자 스택에 있는 세 개의 범주 1 유형 Type1, Type2, Type3을 유형 Type1, Type3, Type2,
Type1로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup_x2 명령은 유형 안정적인 형식 1 dup_x2 명령입니다.
dup_x2Form1IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : popCategory1(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, Stack2), popCategory1(Stack2, Type3, Rest),
canSafelyPushList(Environment, Rest, [Type1, Type3, Type2, Type1], OutputOperandStack).
수신 피연산자 스택의 범주 1 유형 Type1과 범주 2 유형 Type2를 유형 Type1, Type2, Type1로 바꾸어
송신 유형 상태를 산출할 수 있는 경우 dup_x2 명령은 유형 안정적인 형식 2 dup_x2 명령입니다.
dup_x2Form2IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : popCategory1(InputOperandStack, Type1, Stack1), popCategory2(Stack1, Type2, Rest), canSafelyPushList(Environment, Rest, [Type1, Type2, Type1], OutputOperandStack).
dup2:
dup2 명령이 dup2 명령의 유형 안정적인 형식인 경우 유형 안정적입니다. instructionIsTypeSafe(dup2, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) : StackFrame = frame(Locals, InputOperandStack, Flags),
dup2SomeFormIsTypeSafe(Environment,InputOperandStack, OutputOperandStack), NextStackFrame = frame(Locals, OutputOperandStack, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dup2명령이 유형 안정적인형식 1 dup2 명령이거나 유형 안정적인 형식 2 dup2 명령인 경우 dup2 명령은 유형 안정적인 형식입니다.
dup2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup2Form1IsTypeSafe(Environment,InputOperandStack, OutputOperandStack). dup2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup2Form2IsTypeSafe(Environment,InputOperandStack, OutputOperandStack).
수신 피연산자 스택에 있는 두 개의 범주 1 유형 Type1, Type2를 유형 Type2, Type1로 올바로 바꾸어
송신 유형 상태를 산출할 수 있는 경우 dup2 명령은 유형 안정적인 형식 1 dup2 명령입니다.
dup2Form1IsTypeSafe(Environment, InputOperandStack, OutputOperandStack): popCategory1(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, _), canSafelyPushList(Environment, InputOperandStack, [Type2, Type1], OutputOperandStack).
수신 피연산자 스택에 있는 범주 2 유형 Type을 유형 Type, Type으로 올바로 바꾸어 송신 유형 상태를
산출할 수 있는 경우 dup2 명령은 유형 안정적인 형식 2 dup2 명령입니다.
dup2Form2IsTypeSafe(Environment, InputOperandStack, OutputOperandStack): popCategory2(InputOperandStack, Type, _), canSafelyPush(Environment, InputOperandStack, Type, OutputOperandStack).
dup2_x1:
dup2_x1 명령이 dup2_x1 명령의 유형 안정적인 형식인 경우 유형 안정적입니다.
instructionIsTypeSafe(dup2_x1, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
StackFrame = frame(Locals, InputOperandStack, Flags),
dup2_x1SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack), NextStackFrame = frame(Locals, OutputOperandStack, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
dup2_x1 명령이 유형 안정적인 형식 1 dup2_x1 명령이거나 유형 안정적인 형식 2 dup_x2 명령인
경우 dup2_x1 명령은 유형 안정적인 형식입니다.
dup2_x1SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) :- dup2_x1Form1IsTypeSafe(Environment, InputOperandStack, OutputOperandStack). dup2_x1SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) :- dup2_x1Form2IsTypeSafe(Environment, InputOperandStack, OutputOperandStack). 수신피연산자스택에서 세개의 범주 1 유형 Type1, Type2, Type3을 유형 Type2, Type1, Type3, Type2, Type1로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup2_x1 명령은 유형 안정적 인 형식 1 dup2_x1 명령입니다.
dup2_x1Form1IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) :- popCategory1(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, Stack2), popCategory1(Stack2, Type3, Rest), canSafelyPushList(Environment, Rest,
[Type2, Type1, Type3, Type2, Type1], OutputOperandStack).
수신 피연산자 스택에 있는 범주 2 유형 Type1과 범주 1 유형 Type2를 유형 Type1, Type2, Type1로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup2_x1 명령은 유형 안정적인 형식 2 dup2_x1 명령입니다.
dup2_x1Form2IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : popCategory2(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, Rest), canSafelyPushList(Environment, Rest, [Type1, Type2, Type1], OutputOperandStack).
dup2_x2:
dup2_x2 명령이 dup2_x2 명령의 유형 안정적인 형식인 경우 유형 안정적입니다. instructionIsTypeSafe(dup2_x2, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
StackFrame = frame(Locals, InputOperandStack, Flags),
dup2_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack), NextStackFrame = frame(Locals, OutputOperandStack, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
다음중 하나가충족된 경우dup2_x2 명령은 dup2_x2 명령의 유형 안정적인 형식입니다.
- 유형 안정적인 형식 1 dup2_x2 명령
- 유형 안정적인 형식 2 dup_x2 명령 • 유형 안정적인 형식 3 dup_x2 명령
- 유형 안정적인 형식 4 dup_x2 명령
dup2_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup2_x2Form1IsTypeSafe(Environment, InputOperandStack, OutputOperandStack). dup2_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup2_x2Form2IsTypeSafe(Environment, InputOperandStack, OutputOperandStack). dup2_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup2_x2Form3IsTypeSafe(Environment, InputOperandStack, OutputOperandStack). dup2_x2SomeFormIsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : dup2_x2Form4IsTypeSafe(Environment, InputOperandStack, OutputOperandStack).
수신 피연산자 스택에 있는 네 개의 범주 1 유형 Type1, Type2, Type3, Type4를 유형 Type2, Type1, Type4, Type3, Type2, Type1로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup2_x2 명령 은 유형 안정적인 형식 1 dup2_x2 명령입니다.
dup2_x2Form1IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : popCategory1(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, Stack2), popCategory1(Stack2, Type3, Stack3), popCategory1(Stack3, Type4, Rest), canSafelyPushList(Environment, Rest,
[Type2, Type1, Type4, Type3, Type2, Type1], OutputOperandStack).
수신 피연산자 스택에 있는 범주 2 유형 Type1과 두 개의 범주 1 유형 Type2, Type3을 유형 Type1, Type3, Type2, Type1로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup2_x2 명령은 유형 안정적인 형식 2 dup2_x2 명령입니다.
dup2_x2Form2IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : popCategory2(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, Stack2), popCategory1(Stack2, Type3, Rest), canSafelyPushList(Environment, Rest, [Type1, Type3, Type2, Type1], OutputOperandStack). 수신피연산자스택에 있는두 개의 범주 1 유형 Type1, Type2와 범주 2 유형 Type3을 유형 Type2, Type1, Type3, Type2, Type1로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup2_x2 명령 은 유형 안정적인 형식 3 dup2_x2 명령입니다.
dup2_x2Form3IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : popCategory1(InputOperandStack, Type1, Stack1), popCategory1(Stack1, Type2, Stack2), popCategory2(Stack2, Type3, Rest),
canSafelyPushList(Environment, Rest, [Type2, Type1, Type3, Type2, Type1], OutputOperandStack).
수신 피연산자 스택에 있는 두 개의 범주 2 유형 Type1, Type2를 유형 Type1, Type2, Type1로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 dup2_x2 명령은 유형 안정적인 형식 4 dup2_x2 명령 입니다.
dup2_x2Form4IsTypeSafe(Environment, InputOperandStack, OutputOperandStack) : popCategory2(InputOperandStack, Type1, Stack1), popCategory2(Stack1, Type2, Rest), canSafelyPushList(Environment, Rest, [Type1, Type2, Type1], OutputOperandStack).
f2d:
수신 피연산자 스택에서 float을 제거하고, double로 올바로 바꾸어 송신 유형 상태를 산출할 수
있는 경우 f2d 명령은 유형 안정적입니다.
instructionIsTypeSafe(f2d, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [float], double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
f2i:
수신 피연산자 스택에서 float을 제거하고, int를 올바로 바꾸어 송신 유형 상태를 산출할 수 있는
경우 f2i 명령은 유형 안정적입니다.
instructionIsTypeSafe(f2i, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [float], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
f2l:
수신 피연산자 스택에서 float을 제거하고, long을올바로 바꾸어 송신 유형 상태를 산출할 수 있는
경우 f2l 명령은 유형 안정적입니다.
instructionIsTypeSafe(f2l, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [float], long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
fadd:
일치하는 float 유형 및 수신 피연산자 스택에 있는 float을 float과 올바로 바꾸어 송신 유형 상
태를 산출할 수 있는 경우 fadd 명령은 유형 안정적입니다.
instructionIsTypeSafe(fadd, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [float, float], float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
faload:
일치하는 int 유형 및 수신 피연산자 스택에 있는 float의 배열을 float과 올바로 바꾸어 송신 유형
상태를 산출할 수 있는 경우 faload 명령은 유형 안정적입니다.
instructionIsTypeSafe(faload, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int, arrayOf(float)], float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
fastore:
일치하는 float 유형, int 및 float의 배열을 수신 피연산자 스택에서 올바로 제거하여 송신 유형
상태를 산출할 수 있는 경우 fastore 명령은 유형 안정적입니다.
instructionIsTypeSafe(fastore, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [float, int, arrayOf(float)], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
fcmp:
일치하는 float 유형 및 수신 피연산자 스택에 있는float을 int로 올바로 바꾸어 송신 유형 상태를
산출할 수 있는 경우 fcmpg 명령은 유형 안정적입니다.
instructionIsTypeSafe(fcmpg, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [float, float], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
동일한 fcmpg 명령이 유형 안정적인 경우 fcmpl 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(fcmpl, fcmpg).
fconst_:
유형 float을 수신 피연산자 스택에 올바로 푸시하여 송신 유형 상태를 산출할 수 있는 경우
fconst_0 명령은 유형 안정적입니다.
instructionIsTypeSafe(fconst_0, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [], float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
fconst의 다른 변형에 대한 규칙은 다음과 같습니다.
instructionHasEquivalentTypeRule(fconst_1, fconst_0). instructionHasEquivalentTypeRule(fconst_2, fconst_0).
fdiv:
동일한 fadd 명령이 유형 안정적인 경우 fdiv 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(fdiv, fadd).
fload:
피연산자 Index와 유형 float이 있는 로드 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame 을 산출하는 경우 피연산자 Index가 있는 fload 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(fload(Index), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
loadIsTypeSafe(Environment, Index, float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
fload_:
명령 fload_ (0 ≤ ≤n 3 인 경우)은 동일한 fload명령이 유형 안정적인 경우 유형 안정적입니다.
instructionHasEquivalentTypeRule(fload_0, fload(0)). instructionHasEquivalentTypeRule(fload_1, fload(1)). instructionHasEquivalentTypeRule(fload_2, fload(2)). instructionHasEquivalentTypeRule(fload_3, fload(3)).
fmul:
동일한 fadd 명령이 유형 안정적인 경우 fmul 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(fmul, fadd).
fneg:
수신 피연산자 스택에 float과 일치하는 유형이 있는 경우 fneg 명령은 유형 안정적입니다. fneg
명령은 유형 상태를 바꾸지 않습니다.
instructionIsTypeSafe(fneg, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [float], float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
frem:
동일한 fadd 명령이 유형 안정적인 경우 frem 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(frem, fadd).
freturn:
포함 메소드에 float의 선언된 반환 유형이 있고 일치하는 float 유형을 수신 피연산자 스택에서
올바로 제거할 수 있는 경우 freturn 명령은 유형 안정적입니다.
instructionIsTypeSafe(freturn, Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :- thisMethodReturnType(Environment, float), canPop(StackFrame, [float], _PoppedStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
fstore:
피연산자 Index와 유형 float이 있는 저장 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame 을 산출하는 경우 피연산자 Index가 있는 fstore 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(fstore(Index), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- storeIsTypeSafe(Environment, Index, float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
fstore_:
명령 fstore_ (0 ≤ ≤n 3 인 경우)은 동일한 fstore 명령이 유형 안정적인 경우 유형 안정적입 니다.
instructionHasEquivalentTypeRule(fstore_0, fstore(0)). instructionHasEquivalentTypeRule(fstore_1, fstore(1)). instructionHasEquivalentTypeRule(fstore_2, fstore(2)). instructionHasEquivalentTypeRule(fstore_3, fstore(3)).
fsub:
동일한 fadd 명령이 유형 안정적인 경우 fsub 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(fsub, fadd).
getfield:
선언된 유형이 클래스 FieldClass에 선언되어 있는 FieldType인 필드를 나타내는 상수 풀 항목을 CP가 참조하고 일치하는 FieldClass 유형을 수신 피연산자 스택에 있는 유형 FieldType으로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP가 있는 getfield 명령은 유형 안정적입니다. 보호되는 필드는 추가 검사를 하기 쉽습니다.
instructionIsTypeSafe(getfield(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
CP = field(FieldClass, FieldName, FieldSignature), parseFieldSignature(FieldSignature, FieldType), passesProtectedCheck(Environment, FieldClass, FieldName, FieldSignature,
StackFrame),
validTypeTransition(Environment, [class(FieldClass)], FieldType, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
보호 검사는 현재 클래스의 수퍼 클래스 구성원에게만 적용됩니다. 다른 경우는 결정 시 이루어진 액세
스 검사에 의해 파악됩니다.
passesProtectedCheck(Environment, MemberClassName, MemberName, MemberSignature,
StackFrame) :-
thisClass(Environment, class(CurrentClassName)), superclassChain(CurrentClassName, Chain), notMemberOf(MemberClassName, Chain).
보호되지 않는 수퍼 클래스 구성원을 사용하는 것은 어느 정도 맞습니다.
passesProtectedCheck(Environment, MemberClassName, MemberName, MemberSignature,
StackFrame) :-
thisClass(Environment, class(CurrentClassName)), superclassChain(CurrentClassName, Chain), member(MemberClassName, Chain), isNotProtected(MemberClassName, MemberName, MemberSignature).
유형 Target 객체의 보호되는 수퍼 클래스 구성원을 사용하려면 Target을 현재 클래스의 유형에 할당
할 수 있어야 합니다.
passesProtectedCheck(Environment, MemberClassName, MemberName, MemberSignature,
[Target, _Rest]) :-
thisClass(Environment, class(CurrentClassName)), superclassChain(CurrentClassName, Chain), member(MemberClassName, Chain), isProtected(MemberClassName, MemberName, MemberSignature), isAssignable(Target, class(CurrentClassName)).
superclassChain(ClassName, [SuperclassName | Rest]) :classSuperclassName(class(ClassName), SuperclassName), superclassChain(SuperclassName, Rest).
superclassChain(‘java/lang/Object’, []).
getstatic:
선언된 유형이 FieldType인 필드를 나타내는 상수 풀 항목을 CP가 참조하고 수신 피연산자 스택에 FieldType을 올바로 푸시하여 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP가 있는 getstatic 명령은 유형 안정적입니다.
instructionIsTypeSafe(getstatic(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- CP = field(_FieldClass, _FieldName, FieldSignature), parseFieldSignature(FieldSignature, FieldType),
validTypeTransition(Environment, [], FieldType, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
goto:
대상 피연산자가 유효한 분기 대상인 경우 goto 명령은 유형 안정적입니다.
instructionIsTypeSafe(goto(Target), Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :targetIsTypeSafe(Environment, StackFrame, Target),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
i2b:
동일한 ineg 명령이 유형 안정적인 경우 i2b 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(i2b, ineg).
i2c:
동일한 ineg 명령이 유형 안정적인 경우 i2c 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(i2c, ineg).
i2d:
수신 피연산자 스택에서 int를 올바로 제거하고, double로 바꾸어 송신 유형 상태를 산출할 수 있는
경우 i2d 명령은 유형 안정적입니다.
instructionIsTypeSafe(i2d, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int], double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
i2f:
수신 피연산자 스택에서 int를 올바로 제거하고, float으로바꾸어 송신 유형 상태를 산출할 수 있는
경우 i2f 명령은 유형 안정적입니다.
instructionIsTypeSafe(i2f, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int], float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
i2l:
int를 수신 피연산자 스택에서 올바로 제거하고, long으로 바꾸어 송신 유형 상태를 산출할 수 있는
경우 i2l 명령은 유형 안정적입니다.
instructionIsTypeSafe(i2l, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int], long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
i2s:
동일한 ineg 명령이 유형 안정적인 경우 i2s 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(i2s, ineg).
iadd:
일치하는 int 유형 및 수신 피연산자 스택에 있는 int를 int로 올바로 바꾸어 송신 유형 상태를 산출
할 수 있는 경우 iadd 명령은 유형 안정적입니다.
instructionIsTypeSafe(iadd, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int, int], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
iaload:
일치하는 int 유형 및 수신 피연산자 스택에 있는 int를 int로 올바로 바꾸어 송신 유형 상태를 산출
할 수 있는 경우 iaload 명령은 유형 안정적입니다.
instructionIsTypeSafe(iaload, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int, arrayOf(int)], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
iand:
동일한 iadd 명령이 유형 안정적인 경우 iand 명령은 유형안정적입니다.
instructionHasEquivalentTypeRule(iand, iadd).
iastore:
일치하는 int 유형, int 및 int의 배열을 수신 피연산자 스택에서 올바로 제거하여 송신 유형 상태를
산출할 수 있는 경우 iastore 명령은 유형 안정적입니다.
instructionIsTypeSafe(iastore, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [int, int, arrayOf(int)], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
if_acmp:
일치하는 reference 유형 및 reference를 수신 피연산자 스택에서 올바로 표시하여 송신 유형 상태 NextStackFrame을 산출할 수 있으며, 명령의 피연산자 Target이 NextStackFrame의 수신 유형 상태를 가정하는 유효한 분기 대상인 경우 if_acmpeq 명령은 유형 안정적입니다.
instructionIsTypeSafe(if_acmpeq(Target), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [reference, reference], NextStackFrame), targetIsTypeSafe(Environment, NextStackFrame, Target), exceptionStackFrame(StackFrame, ExceptionStackFrame).
if_acmp_ne의 규칙은 동일합니다.
instructionHasEquivalentTypeRule(if_acmpne(Target), if_acmpeq(Target)).
if_icmp:
일치하는 int 유형 및 int를 수신 피연산자 스택에서 올바로 표시하여 송신 유형 상태
NextStackFrame을 산출할 수 있으며, 명령의 피연산자 Target이 NextStackFrame의 수신 유형 상태 를 가정하는 유효한 분기 대상인 경우 if_icmpeq 명령은 유형 안정적입니다.
instructionIsTypeSafe(if_icmpeq(Target), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [int, int], NextStackFrame), targetIsTypeSafe(Environment, NextStackFrame, Target), exceptionStackFrame(StackFrame, ExceptionStackFrame).
if_icmp 명령의 모든 다른 변형에 대한 규칙은 동일합니다. instructionHasEquivalentTypeRule(if_icmpge(Target), if_icmpeq(Target)). instructionHasEquivalentTypeRule(if_icmpgt(Target), if_icmpeq(Target)). instructionHasEquivalentTypeRule(if_icmple(Target), if_icmpeq(Target)). instructionHasEquivalentTypeRule(if_icmplt(Target), if_icmpeq(Target)). instructionHasEquivalentTypeRule(if_icmpne(Target), if_icmpeq(Target)).
if_:
일치하는 int 유형을 수신 피연산자 스택에서 올바로 제거하여 송신 유형 상태 NextStackFrame을 산출할 수 있으며, 명령의 피연산자 Target이 NextStackFrame의 수신 유형 상태를 가정하는 유효한 분기 대상인 경우 if_eq 명령은 유형 안정적입니다.
instructionIsTypeSafe(ifeq(Target), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) : canPop(StackFrame, [int], NextStackFrame), targetIsTypeSafe(Environment, NextStackFrame, Target), exceptionStackFrame(StackFrame, ExceptionStackFrame).
if 명령의 모든 다른 변형에 대한 규칙은 동일합니다.
instructionHasEquivalentTypeRule(ifge(Target), ifeq(Target)). instructionHasEquivalentTypeRule(ifgt(Target), ifeq(Target)). instructionHasEquivalentTypeRule(ifle(Target), ifeq(Target)). instructionHasEquivalentTypeRule(iflt(Target), ifeq(Target)). instructionHasEquivalentTypeRule(ifne(Target), ifeq(Target)).
ifnonnull:
일치하는 reference 유형을 수신 피연산자 스택에서 올바로 제거하여 송신 유형 상태
NextStackFrame을 산출할 수 있으며, 명령의 피연산자 Target이 NextStackFrame의 수신 유형 상태 를 가정하는 유효한 분기 대상인 경우 ifnonnull 명령은 유형 안정적입니다.
instructionIsTypeSafe(ifnonnull(Target), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [reference], NextStackFrame), targetIsTypeSafe(Environment, NextStackFrame, Target), exceptionStackFrame(StackFrame, ExceptionStackFrame).
ifnull:
동일한 ifnonnull 명령이 유형 안정적인 경우 ifnull 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(ifnull(Target), ifnonnull(Target)).
iinc:
LIndex에 유형 int가 있는 경우 첫 번째 피연산자 Index가 있는 iinc 명령은 유형 안정적입니다. iinc 명령은 유형 상태를 변경하지 않습니다.
instructionIsTypeSafe(iinc(Index, _Value), _Environment, _Offset, StackFrame,
StackFrame, ExceptionStackFrame) :-
StackFrame = frame(Locals, _OperandStack, _Flags), nth0(Index, Locals, int), exceptionStackFrame(StackFrame, ExceptionStackFrame).
iload:
피연산자 Index와 유형 int가 있는 로드 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame을 산출하는 경우 피연산자 Index가 있는 iload 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(iload(Index), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
loadIsTypeSafe(Environment, Index, int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
iload_:
명령 iload_ (0 ≤ ≤n 3 인 경우)은 동일한 iload 명령이 유형 안정적인 경우 유형 안정적입니다. instructionHasEquivalentTypeRule(iload_0, iload(0)). instructionHasEquivalentTypeRule(iload_1, iload(1)). instructionHasEquivalentTypeRule(iload_2, iload(2)). instructionHasEquivalentTypeRule(iload_3, iload(3)).
imul:
동일한 iadd 명령이 유형 안정적인 경우 imul 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(imul, iadd).
ineg:
수신 피연산자 스택에 일치하는 int 유형이 있는 경우 ineg 명령은 유형 안정적입니다. ineg 명령은
유형 상태를 바꾸지 않습니다.
instructionIsTypeSafe(ineg, Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
instanceof:
클래스나 배열을 나타내는 상수 풀 항목을 CP가 참조하고 있으며 수신 피연산자 스택의 맨 위에 있는 유형 Object를 유형 int와 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP가 있 는 instanceof 명령은 유형 안정적입니다.
instructionIsTypeSafe(instanceof(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
(CP = class(_) ; CP = arrayOf(_)),
validTypeTransition(Environment, [class(’java/lang/Object’)], int, StackFrame,
NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
invokeinterface:
다음 조건 모두가 충족되는 경우 invokeinterface 명령은 유형 안정적입니다.
- 첫 번째 피연산자 CP는 인터페이스 MethodClassName의 구성원인, 서명 Signature가 있는 MethodName이라는 인터페이스 메소드를 나타내는 상수 풀 항목을 참조합니다.
- MethodName이 가 아닙니다.
- MethodName이 가 아닙니다.
- 두 번째 피연산자 Count는 유효한 카운트 피연산자입니다(아래 참조).
- 유형 MethodClassName 및 수신 피연산자 스택에 있는 Signature에 주어진 인자 유형과 일치하는 유형을 Signature에 주어진 반환 유형과 올바로 바꾸어 송신 유형 상태를 산출할 수 있습니다.
instructionIsTypeSafe(invokeinterface(CP, Count, 0), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- CP = imethod(MethodClassName, MethodName, Signature),
MethodName \= ’’, MethodName \= ’’, parseMethodSignature(Signature, OperandArgList, ReturnType), reverse([class(MethodClassName) | OperandArgList], StackArgList), canPop(StackFrame, StackArgList, TempFrame), validTypeTransition(Environment, [], ReturnType, TempFrame, NextStackFrame), countIsValid(Count, StackFrame, TempFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame). invokeinterface의 카운트 피연산자가 명령이 실행되기 전과 후의 피연산자 스택 크기의 차이를
나타내는 경우 유효합니다.
countIsValid(Count, InputFrame, OutputFrame) :-
InputFrame = frame(_Locals1, OperandStack1, _Flags1), OutputFrame = frame(_Locals2, OperandStack2, _Flags2), length(OperandStack1, Length1), length(OperandStack2, Length2), Count =:= Length1 - Length2.
invokespecial:
다음 조건이 모두 충족되는 경우 invokespecial 명령은 유형 안정적입니다.
- 첫 번째 피연산자 CP는 클래스 MethodClassName의 구성원인 서명 Signature가 있는 MethodName이라는 메소드를 나타내는 상수 풀 항목을 참조합니다. 다음 중 하나가 충족되는 경우
- MethodName은 가 아닙니다.
- MethodName은 가 아닙니다.
- 수신 피연산자 스택에 있는 Signature에 주어진 현재 클래스 및 인자 유형과 일치하는 유형을 Signature에 주어진 반환 유형으로 올바로 바꾸어 송신 유형 상태를 산출할 수 있습니다.
- 수신 피연산자 스택에 있는 Signature에 주어진 클래스 MethodClassName 및 인자 유형과 일치 하는 유형을 Signature에 주어진 반환 유형으로 올바로 바꿀 수 있습니다.
instructionIsTypeSafe(invokespecial(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
CP = method(MethodClassName, MethodName, Signature),
MethodName \= ’’, MethodName \= ’’,
parseMethodSignature(Signature, OperandArgList, ReturnType), thisClass(Environment, CurrentClass),
reverse([CurrentClass | OperandArgList], StackArgList),
validTypeTransition(Environment, StackArgList, ReturnType, StackFrame, NextStackFrame), reverse([class(MethodClassName) | OperandArgList], StackArgList2), validTypeTransition(Environment, StackArgList2, ReturnType, StackFrame,
_ResultStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
또는
- MethodName이 입니다.
- Signature는 void 반환 유형을 지정합니다.
- Signature에 주어진 인자 유형 및 초기화되지 않은 유형 UninitializedArg와 일치하는 유형을 수신 피연산자 스택에서 올바로 제거하여 OperandStack을 산출할 수 있습니다.
- 먼저 수신 피연산자 스택을 OperandStack으로 바꾸고 UninitializedArg의 모든 인스턴스를 초기화 될 인스턴스 유형으로 바꾸면, 송신 유형 상태는 수신 유형 상태에서 파생됩니다.
instructionIsTypeSafe(invokespecial(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- CP = method(MethodClassName, ’’, Signature), parseMethodSignature(Signature, OperandArgList, void), reverse(OperandArgList, StackArgList),
canPop(StackFrame, StackArgList, TempFrame), TempFrame = frame(Locals, FullOperandStack, Flags), FullOperandStack = [UninitializedArg | OperandStack],
rewrittenUninitializedType(UninitializedArg, Environment, class(MethodClassName), This), rewrittenInitializationFlags(UninitializedArg, Flags, NextFlags), substitute(UninitializedArg, This, OperandStack, NextOperandStack), substitute(UninitializedArg, This, Locals, NextLocals),
NextStackFrame = frame(NextLocals, NextOperandStack, NextFlags), ExceptionStackFrame = frame(NextLocals, [], Flags).
메소드의 invokespecial에 대한 특수 규칙입니다.
이 규칙은 개별 예외 스택 프레임을 되돌려 보내는 유일한 동기입니다. 하지만 invokespecial로 수퍼 클래스 메소드를 호출할 수 있거나 호출에 실패하여 this가 초기화되지 않은 채로 남 아있을 수도 있습니다. 이러한 상황은 Java 프로그래밍 언어 소스 코드를 사용하면 발생하지 않지만 JVM 어셈블리 프로그래밍을 사용하면 발생할 수 있습니다.
원래 프레임에는 초기화되지 않은 객체와 플래그 uninitializedThis가 있습니다.
invokespecial을 정상 종료하면 초기화되지 않은 객체를 초기화하고 uninitializedThis 플래 그를 끕니다. 하지만 메소드의 호출이 예외를 발생시키면 초기화되지 않은 객체는 부분적으 로 초기화되지 않은 상태로 남을 수 있으므로 영구적으로 사용할 수 없게 만들어야 합니다. 이러한 내 용은 파손된 객체(로컬의 새 값)가 들어 있는 예외 프레임과 uninitializedThis 플래그(이전 플래 그)에 의해 표시됩니다. uninitializedThis 플래그를 가지고 있으면서 외관상 초기화되지 않은 객체를 적합하게 초기화된 객체로 만들 수 있는 방법은 없으므로 해당 객체는 영구적으로 사용할 수 없습니다. 이러한 경우가 아니라면 예외 스택 프레임은 입력 스택 프레임과 같을 수 있습니다.
rewrittenUninitializedType(uninitializedThis, Environment, _MethodClass, This) : thisClass(Environment, This).
rewrittenUninitializedType(uninitialized(Address), Environment, MethodClass, MethodClass) : allInstructions(Environment, Instructions), member(instruction(Address, new(MethodClass)), Instructions).
초기화되지 않은 인자 유형을 다시 기록할 유형을 계산합니다.
두 가지 경우가 있습니다.
구성자 내에서 객체를 초기화하는 경우 해당 유형은 처음에는 uninitializedThis입니다. 이 유형 은 메소드 클래스의 유형으로 다시 기록됩니다.
두 번째 경우는 new 명령이 객체를 초기화하는 것입니다. 초기화되지 않은 인자 유형은 의 메소드 홀더 유형인 MethodClass로 다시 기록됩니다. Address에 new 명령이 실제로 있는지 여부를 검사합니다.
rewrittenInitializationFlags(uninitializedThis, _Flags, []). rewrittenInitializationFlags(uninitialized(_), Flags, Flags).
substitute(_Old, _New, [], []).
substitute(Old, New, [Old | FromRest], [New | ToRest]) :- substitute(Old, New, FromRest, ToRest).
substitute(Old, New, [From1 | FromRest], [From1 | ToRest]) :- From1 \= Old, substitute(Old, New, FromRest, ToRest).
invokestatic:
다음 조건이 모두 충족되는 경우 invokestatic 명령은 유형 안정적입니다.
- 첫 번째 피연산자 CP는 서명 Signature가 있는 MethodName이라는 메소드를 나타내는 상수 풀 항목을 참조합니다.
- MethodName은 가 아닙니다.
- 수신 피연산자 스택에 있는 Signature에 주어진 인자 유형과 일치하는 유형을 Signature에 주어진 반환 유형으로 올바로 바꾸어 송신 유형 상태를 산출할 수 있습니다.
instructionIsTypeSafe(invokestatic(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
CP = method(_MethodClassName, MethodName, Signature), MethodName \= ’’,
parseMethodSignature(Signature, OperandArgList, ReturnType), reverse(OperandArgList, StackArgList), validTypeTransition(Environment, StackArgList, ReturnType, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
invokevirtual:
다음 조건 모두가 충족되는 경우 invokevirtual 명령은 유형 안정적입니다.
- 첫 번째 피연산자 CP는 클래스 MethodClassName의 구성원인, 서명 Signature가 있는 MethodName이라는 메소드를 나타내는 상수 풀 항목을 참조합니다.
- MethodName은 가 아닙니다.
- MethodName은 가 아닙니다.
- 클래스 MethodClassName 및 수신 피연산자 스택에 있는 Signature에 주어진 인자 유형과 일치하 는 유형을 Signature에 주어진 반환 유형과 올바로 바꾸어 송신 유형 상태를 산출할 수 있습니다.
instructionIsTypeSafe(invokevirtual(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :-
CP = method(MethodClassName, MethodName, Signature),
MethodName \= ’’, MethodName \= ’’,
parseMethodSignature(Signature, OperandArgList, ReturnType), reverse([class(MethodClassName) | OperandArgList], StackArgList), validTypeTransition(Environment, StackArgList, ReturnType, StackFrame,
NextStackFrame),
passesProtectedCheck(Environment, MethodClassName, MethodName, Signature,
StackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
ior:
동일한 iadd 명령이 유형 안정적인 경우 ior 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(ior, iadd).
irem:
동일한 iadd 명령이 유형 안정적인 경우 irem 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(irem, iadd).
ireturn:
포함 메소드에 int의선언된 반환 유형이 있고일치하는 int 유형을 수신 피연산자 스택에서 올바로
제거하는 경우 ireturn 명령은 유형 안정적입니다.
instructionIsTypeSafe(ireturn, Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :- thisMethodReturnType(Environment, int), canPop(StackFrame, [int], _PoppedStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
ishl:
동일한 iadd 명령이 유형 안정적인 경우 ishl 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(ishl, iadd).
ishr:
동일한 iadd 명령이 유형 안정적인 경우 ishr 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(ishr, iadd).
istore
피연산자 Index 및 유형 int가 있는 저장 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame을 산출하는 경우 피연산자 Index가 있는 istore 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(istore(Index), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- storeIsTypeSafe(Environment, Index, int, StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
istore_:
명령 istore_ (0 ≤ ≤n 3 인 경우)은 동일한 istore 명령이 유형 안정적인 경우 유형 안정적입 니다. instructionHasEquivalentTypeRule(istore_0, istore(0)). instructionHasEquivalentTypeRule(istore_1, istore(1)). instructionHasEquivalentTypeRule(istore_2, istore(2)). instructionHasEquivalentTypeRule(istore_3, istore(3)).
isub:
동일한 iadd 명령이유형 안정적인경우 isub 명령은 유형안정적입니다.
instructionHasEquivalentTypeRule(isub, iadd).
iushr:
동일한 iadd 명령이 유형 안정적인 경우 iushr 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(iushr,iadd).
ixor:
동일한 iadd 명령이 유형 안정적인 경우 ixor 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(ixor, iadd).
l2d:
수신 피연산자 스택에서 long을 올바로 제거하고 double로 바꾸어 송신 유형 상태를 산출할 수 있는
경우 l2d 명령은 유형 안정적입니다.
instructionIsTypeSafe(l2d, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
validTypeTransition(Environment, [long], double, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
l2f:
수신 피연산자 스택에서 long을 올바로 제거하고 float으로 바꾸어 송신 유형 상태를 산출할 수
있는 경우 l2f 명령은 유형 안정적입니다.
instructionIsTypeSafe(l2f, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [long], float, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
l2i:
수신 피연산자 스택에서 long을 올바로 제거하고, int로 바꾸어 송신 유형 상태를 산출할 수 있는
경우 l2i 명령은 유형 안정적입니다.
instructionIsTypeSafe(l2i, Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [long], int, StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
ladd:
일치하는 long 유형및 수신 피연산자 스택에있는 long을long과 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 ladd 명령은 유형 안정적입니다.
instructionIsTypeSafe(ladd, Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [long, long], long, StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
laload:
일치하는 int 유형 및 수신 피연산자 스택에 있는 long의 배열을 long으로 올바로 바꾸어 송신 유형
상태를 산출할 수 있는 경우 laload 명령은 유형 안정적입니다.
instructionIsTypeSafe(laload, Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int, arrayOf(long)], long, StackFrame, NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
land:
동일한 ladd 명령이 유형 안정적인 경우 land 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(land, ladd).
lastore:
일치하는 long, int 유형 및 long의 배열을 수신 피연산자 스택에서 올바로 제거하여 송신 유형
상태를 산출할 수 있는 경우 lastore 명령은 유형 안정적입니다.
instructionIsTypeSafe(lastore, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [long, int, arrayOf(long)], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lcmp:
일치하는 long 및 수신 피연산자 스택에 있는 long을 int로 올바로 바꾸어 송신 유형 상태를 산출할
수 있는 경우 lcmp 명령은 유형 안정적입니다.
instructionIsTypeSafe(lcmp, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [long, long], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lconst_:
수신 피연산자 스택에유형 long을올바로 푸시하여 송신유형 상태를산출할 수있는 경우
lconst_0 명령은 유형 안정적입니다.
instructionIsTypeSafe(lconst_0, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [], long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
동일한 lconst_0 명령이 유형 안정적인 경우 lconst_1 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(lconst_1,lconst_0).
ldc:
CP가 유형 Type(여기서 Type은 int, float, String 중 하나)의 엔티티를 나타내는 상수 풀 항목을 참조하고, 수신 피연산자 스택에 Type을 올바로 푸시하여 송신 유형 상태를 산출할 수 있는 경우 피연 산자 CP가 있는 ldc 명령은 유형 안정적입니다.
instructionIsTypeSafe(ldc(CP), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- functor(CP, Tag, _),
member([Tag, Type], [[int, int], [float, float], [string, class(’java/lang/String’)]]), validTypeTransition(Environment, [], Type, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
ldc_w:
동일한 ldc 명령이 유형 안정적인 경우 ldc_w 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(ldc_w(CP), ldc(CP))
ldc2_w:
CP가 유형 Tag(여기서 Tag는 long이나 double 중 하나)의 엔티티를 나타내는 상수 풀 항목을 참조 하고, 수신 피연산자 스택에 Type을 올바로 푸시하여 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP가 있는 ldc2_w 명령은 유형 안정적입니다.
instructionIsTypeSafe(ldc2_w(CP), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- functor(CP, Tag, _), member(Tag, [long, double]), validTypeTransition(Environment, [], Tag, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
ldiv:
동일한 ladd명령이유형안정적인경우 ldiv명령은 유형안정적입니다.
instructionHasEquivalentTypeRule(ldiv, ladd).
lload:
피연산자 Index 및 유형 long이 있는 로드 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame 을 산출하는 경우 피연산자 Index가 있는 lload 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(lload(Index), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- loadIsTypeSafe(Environment, Index, long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lload_:
명령 lload_ (0 ≤ ≤n 3 인 경우)은 동일한 lload 명령이 유형 안정적인 경우 유형 안정적입니다.
instructionHasEquivalentTypeRule(lload_0, lload(0)). instructionHasEquivalentTypeRule(lload_1, lload(1)). instructionHasEquivalentTypeRule(lload_2, lload(2)). instructionHasEquivalentTypeRule(lload_3, lload(3)).
lmul:
동일한 ladd 명령이 유형 안정적인 경우 lmul 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(lmul, ladd).
lneg:
수신 피연산자 스택에 일치하는 long 유형이 있는 경우 lneg 명령은 유형 안정적입니다. lneg 명령
은 유형 상태를 바꾸지 않습니다.
instructionIsTypeSafe(lneg, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [long], long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lookupswitch:
키가 정렬되어 있고 수신피연산자스택에서 int를 올바로제거하여 새유형상태
BranchStackFrame을 산출할 수 있으며 모든 명령 대상이 BranchStackFrame을 수신 유형 상태로 가정하는 유효한 분기 대상인 경우 lookupswitch 명령은 유형 안정적입니다.
instructionIsTypeSafe(lookupswitch(Targets, Keys), Environment, _, StackFrame, afterGoto, ExceptionStackFrame) :sort(Keys, Keys),
canPop(StackFrame, [int], BranchStackFrame), checklist(targetIsTypeSafe(Environment, BranchStackFrame), Targets), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lor:
동일한 ladd 명령이 유형 안정적인 경우 lor 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(lor, ladd).
lrem:
동일한 ladd 명령이 유형 안정적인 경우 lrem 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(lrem, ladd).
lreturn:
포함 메소드에 long의 선언된 반환 유형이 있고, 수신 피연산자 스택에서 일치하는 long 유형을 올바
로 제거할 수 있는 경우 lreturn 명령은 유형 안정적입니다.
instructionIsTypeSafe(lreturn, Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :- thisMethodReturnType(Environment, long), canPop(StackFrame, [long], _PoppedStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lshl:
수신 피연산자 스택에 있는 유형 int와 long을 유형 long으로 올바로 바꾸어 송신 유형 상태를 산출
할 수 있는 경우 lshl 명령은 유형 안정적입니다.
instructionIsTypeSafe(lshl, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int, long], long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lshr:
동일한 lshl명령이유형안정적인경우 lshr명령은 유형안정적입니다.
instructionHasEquivalentTypeRule(lshr, lshl).
lstore:
피연산자 Index와 유형 long이 있는 저장 명령이 유형 안정적이고 송신 유형 상태 NextStackFrame을 산출하는 경우 피연산자 Index가 있는 lstore 명령은 유형 안정적이며 송신 유형 상태 NextStackFrame을 산출합니다.
instructionIsTypeSafe(lstore(Index), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- storeIsTypeSafe(Environment, Index, long, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
lstore_:
명령 lstore_ (0 ≤ ≤n 3 인 경우)은 동일한 lstore 명령이 유형 안정적인 경우 유형 안정적입 니다.
instructionHasEquivalentTypeRule(lstore_0, lstore(0)). instructionHasEquivalentTypeRule(lstore_1, lstore(1)). instructionHasEquivalentTypeRule(lstore_2, lstore(2)). instructionHasEquivalentTypeRule(lstore_3, lstore(3)).
lsub:
동일한 ladd 명령이 유형 안정적인 경우 lsub 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(lsub, ladd).
lxor:
동일한 ladd 명령이 유형 안정적인 경우 lxor 명령은 유형 안정적입니다.
instructionHasEquivalentTypeRule(lxor, ladd).
lushr:
동일한 lshl 명령이 유형 안정적인 경우 lushr 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(lushr, lshl).
monitorenter:
일치하는 reference 유형을 수신피연산자 스택에서 올바로제거하여송신유형상태를 산출할 수
있는 경우 monitorenter 명령은 유형 안정적입니다.
instructionIsTypeSafe(monitorenter, _Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [reference], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
monitorexit:
동일한 monitorenter 명령이 유형 안정적인 경우 monitorexit 명령은 유형 안정적입니다. instructionHasEquivalentTypeRule(monitorexit, monitorenter).
multinewarray:
CP가 차원이 Dim 이상(Dim이 양수)인 배열 유형을 나타내는 상수 풀 항목을 참조하고 수신 피연산자 스택에 있는 Dim int 유형을 CP가 나타내는 유형으로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP와 Dim이 있는 multinewarray 명령은 유형 안정적입니다.
instructionIsTypeSafe(multianewarray(CP, Dim), Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- CP = arrayOf(_),
classDimension(CP, Dimension),
Dimension >= Dim,
Dim > 0,
/* Make a list of Dim ints */ findall(int, between(1, Dim, _), IntList), validTypeTransition(Environment, IntList, CP, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
구성 요소 유형이 또한 배열 유형인 배열 유형의 차원은 구성 요소 유형의 차원보다 1 이상 큽니다.
classDimension(arrayOf(X), Dimension) : classDimension(X, Dimension1), Dimension is Dimension1 + 1.
classDimension(_, Dimension) :- Dimension = 0.
new:
CP가 클래스유형을나타내는 상수풀 항목을참조하고 유형uninitialized(Offset)가 수신 피연산자 스택에 표시되지 않으며 uninitialized(Offset)를 수신 피연산자 스택에 올바로 푸시 할 수 있고 수신 로컬 변수에 있는 top으로 uninitialized(Offset)를 바꾸어 송신 유형 상태를 산출할 수 있는 경우 오프셋 Offset에 피연산자 CP가 있는 new 명령은 유형 안정적입니다.
instructionIsTypeSafe(new(CP), Environment, Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- StackFrame = frame(Locals, OperandStack, Flags),
CP = class(_),
NewItem = uninitialized(Offset), notMember(NewItem, OperandStack), substitute(NewItem, top, Locals, NewLocals), validTypeTransition(Environment, [], NewItem, frame(NewLocals, OperandStack, Flags), NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
newarray:
TypeCode가 프리미티브 유형 ElementType과 일치하고 수신 피연산자 스택에 있는 유형 int를
ElementType의 유형 배열로 올바로 바꾸어 송신 유형 상태를 산출할 수 있는 경우 피연산자 TypeCode가 있는 newarray 명령은 유형 안정적입니다.
instructionIsTypeSafe(newarray(TypeCode), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
primitiveArrayInfo(TypeCode, _TypeChar, ElementType, _VerifierType), validTypeTransition(Environment, [int], arrayOf(ElementType), StackFrame,
NextStackFrame),
exceptionStackFrame(StackFrame, ExceptionStackFrame).
유형 코드와 프리미티브 유형 사이의 일치는 다음 술어가 지정합니다.
primitiveArrayInfo(4, 0'Z, boolean, int). primitiveArrayInfo(5, 0'C, char, int). primitiveArrayInfo(6, 0'F, float, float). primitiveArrayInfo(7, 0'D, double, double). primitiveArrayInfo(8, 0'B, byte, int). primitiveArrayInfo(9, 0'S, short, int). primitiveArrayInfo(10, 0'I, int, int). primitiveArrayInfo(11, 0'J, long, long).
nop:
nop 명령은 항상 유형 안정적입니다. nop 명령은 유형 상태에영향을 미치지않습니다.
instructionIsTypeSafe(nop, _Environment, _Offset, StackFrame,
StackFrame, ExceptionStackFrame) :exceptionStackFrame(StackFrame, ExceptionStackFrame).
pop:
수신 피연산자 스택에서 범주 1 유형을 올바로 제거하여 송신 유형 상태를 산출할 수 있는 경우 pop
명령은 유형 안정적입니다.
instructionIsTypeSafe(pop, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- StackFrame = frame(Locals, [Type | Rest], Flags),
Type \= top, sizeOf(Type, 1),
NextStackFrame = frame(Locals, Rest, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
pop2:
pop2 명령이 pop2 명령의 유형 안정적인 형식인 경우 유형 안정적입니다.
instructionIsTypeSafe(pop2, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
StackFrame = frame(Locals, InputOperandStack, Flags),
pop2SomeFormIsTypeSafe(InputOperandStack, OutputOperandStack), NextStackFrame = frame(Locals, OutputOperandStack, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
pop2 명령이 유형 안정적인 형식 1 pop2 명령이거나 유형 안정적인 형식 2 pop2 명령인 경우 pop2
명령은 유형 안정적인 형식입니다.
pop2SomeFormIsTypeSafe(InputOperandStack, OutputOperandStack) : pop2Form1IsTypeSafe(InputOperandStack, OutputOperandStack).
pop2SomeFormIsTypeSafe(InputOperandStack, OutputOperandStack) : pop2Form2IsTypeSafe(InputOperandStack, OutputOperandStack).
수신 피연산자 스택에서 크기가 1인 두 개의 유형을 올바로 제거하여 송신 유형 상태를 산출할 수 있는
경우 pop2 명령은 유형 안정적인 형식 1 pop2 명령입니다. pop2Form1IsTypeSafe([Type1, Type2 | Rest], Rest) : sizeOf(Type1, 1), sizeOf(Type2, 1).
수신 피연산자 스택에서 크기가 2인 유형을 올바로 제거하여 송신 유형 상태를 산출할 수 있는 경우
pop2 명령은 유형 안정적인 형식 2 pop2 명령입니다.
pop2Form2IsTypeSafe([top, Type | Rest], Rest) : sizeOf(Type, 2).
putfield:
선언된 유형이 클래스 FieldClass에 선언되어 있는 FieldType인 필드를 나타내는 상수 풀 항목을 CP 가 참조하고 일치하는 FieldType 및 FieldClass 유형을 수신 피연산자 스택에서 올바로 제거하여 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP가 있는 putfield 명령은 유형 안정적입니다.
instructionIsTypeSafe(putfield(CP), _Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- CP = field(FieldClass, FieldName, FieldSignature), parseFieldSignature(FieldSignature, FieldType), passesProtectedCheck(Environment, FieldClass, FieldName, FieldSignature,
StackFrame),
canPop(StackFrame, [FieldType, class(FieldClass)], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
putstatic:
선언된 유형이 클래스 FieldType인 필드를 나타내는 상수 풀 항목을 CP가 참조하고 일치하는 FieldType 유형을 수신 피연산자 스택에서 올바로 제거하여 송신 유형 상태를 산출할 수 있는 경우 피연산자 CP가 있는 putstatic 명령은 유형 안정적입니다.
instructionIsTypeSafe(putstatic(CP), _Environment, _Offset, StackFrame,
NextStackFrame, ExceptionStackFrame) :- CP = field(_FieldClass, _FieldName, FieldSignature), parseFieldSignature(FieldSignature, FieldType), canPop(StackFrame, [FieldType], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
return:
포함 메소드가 void 반환 유형을 선언하고 다음 중 하나인 경우 return 명령은 유형 안정적입니다.
- 포함 메소드가 메소드가 아니거나
- 명령이 발생한 시점에 this 명령이 이미 완전히 초기화되었습니다.
instructionIsTypeSafe(return, Environment, _Offset, StackFrame,
afterGoto, ExceptionStackFrame) :- thisMethodReturnType(Environment, void), StackFrame = frame(_Locals, _OperandStack, Flags), notMember(flagThisUninit, Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
saload:
일치하는 int 유형 및 수신 피연산자 스택에 있는 short의 배열을 int와 올바로 바꾸어 송신 유형
상태를 산출할 수 있는 경우에는 saload 명령은 유형 안정적입니다.
instructionIsTypeSafe(saload, Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [int, arrayOf(short)], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
sastore:
일치하는 int 유형, int 및 short의 배열을 수신 피연산자 스택에서 올바로 제거하여 송신 유형
상태를 산출할 수 있는 경우에는 sastore 명령은 유형 안정적입니다.
instructionIsTypeSafe(sastore, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- canPop(StackFrame, [int, int, arrayOf(short)], NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
sipush:
유형 int를 수신 피연산자 스택에 올바로 푸시하여 송신 유형 상태를 산출할 수 있는 경우에는
sipush 명령은 유형 안정적입니다.
instructionIsTypeSafe(sipush(_Value), Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :- validTypeTransition(Environment, [], int, StackFrame, NextStackFrame), exceptionStackFrame(StackFrame, ExceptionStackFrame).
swap:
수신 피연산자 스택에 있는 두 개의 범주 1 유형 Type1과 Type2를 유형 Type2와 Type1로 올바로 바꾸
어 송신 유형 상태를 산출할 수 있는 경우에는 swap 명령은 유형 안정적입니다.
instructionIsTypeSafe(swap, _Environment, _Offset, StackFrame, NextStackFrame, ExceptionStackFrame) :-
StackFrame = frame(_Locals, [Type1, Type2 | Rest], _Flags), sizeOf(Type1, 1), sizeOf(Type2, 1),
NextStackFrame = frame(_Locals, [Type2, Type1 | Rest], _Flags), exceptionStackFrame(StackFrame, ExceptionStackFrame).
tableswitch:
키가 정렬되어 있고 수신 피연산자 스택에서 int를 올바로 제거하여 새 유형 상태
BranchStackFrame을 산출할 수 있으며, 모든 명령 대상이 BranchStackFrame을 수신 유형 상태로 가정하는 유효한 분기 대상인 경우 tableswitch 명령은 유형 안정적입니다.
instructionIsTypeSafe(tableswitch(Targets, Keys), Environment, _Offset,
StackFrame, afterGoto, ExceptionStackFrame) :-
sort(Keys, Keys),
canPop(StackFrame, [int], BranchStackFrame), checklist(targetIsTypeSafe(Environment, BranchStackFrame), Targets), exceptionStackFrame(StackFrame, ExceptionStackFrame).
wide:
wide 명령은 넓혔던 명령과 같은 규칙을 따릅니다.
instructionHasEquivalentTypeRule(wide(WidenedInstruction), WidenedInstruction).
피연산자 스택이 비어 있다는 점만 제외하면 명령이 갑자기 완료된 다음의 유형 상태는 수신 유형 상
태와 같습니다.
exceptionStackFrame(StackFrame, ExceptionStackFrame) : StackFrame = frame(Locals, _OperandStack, Flags), ExceptionStackFrame = frame(Locals, [], Flags).
이 규격에 있는 대부분의 유형 규칙은 유효한 유형 전이의 개념을 따릅니다.
수신 유형 상태의 피연산자 스택에서 예상 유형 목록을 제거한 다음 예상 결과 유형으로 바꾸어 새로 유효한 유형 상태를 만들 수 있으면 유형 전이는 유효합니다. 특히 새 유형 상태의 피연산자 스택의 크기는 선언된 최대 크기를 초과해선 안 됩니다.
validTypeTransition(Environment, ExpectedTypesOnStack, ResultType,
frame(Locals, InputOperandStack, Flags),
frame(Locals, NextOperandStack, Flags)) :-
popMatchingList(InputOperandStack, ExpectedTypesOnStack, InterimOperandStack), pushOperandStack(InterimOperandStack, ResultType, NextOperandStack), operandStackHasLegalLength(Environment, NextOperandStack).
유형 상태에서 피연산자 스택의 I번째 요소에 액세스합니다.
nth1OperandStackIs(I, frame(_Locals, OperandStack, _Flags), Element) : nth1(I, OperandStack, Element).
## 4. 참조 자료
William F. Clocksin and Christopher S. Mellish. Programming in Prolog, Fourth Edition. Springer-Verlag, 1994.
Leon Sterling and Ehud Shapiro. The Art of Prolog, Second Edition. MIT Press, 1994.
Frank Yellin. “Low Level Security in Java.” World Wide Web Journal, Volume I, Issue 1, Winter 1996. http://www.w3journal.com/1/f.197/paper/197.html에서 온라인으로 구할 수 있습니다.
---
title: "4.4. CALL"
---
전화를 걸거나 받는 함수들이다. 플랫폼 수행 중에 전화가 걸려 올 때 수신 여부를 결정할 수 있고, 플랫폼에서 전화를 걸 수 있다. 운영체제는 `MH_pltEvent()` 함수에 매개 변수로 `MH_CALL_EVENT` 와 `MH_CallEvent` 를 넘겨주어 플랫폼에 이벤트를 전달한다
### 관련 자료형
```c
//전화관련 이벤트
typedef enum MH_SUB_CALL_EVENT {
MH_CALLEV_INCOMING = 0, // 전화가 왔음을 알림
MH_CALLEV_NOTIFY // MH_callPlace()를 수행후 전화종료/상태를 알림
} MH_SUB_CALL_EVENT;
//전화관련 이벤트를 전달할 때 사용하는 구조체
typedef struct MH_CallEvent{
M_Int32 event; // 발생되는 Event, enum _MH_SUB_CALL_EVENT 값
M_Int32 rtnCode; //**0 : 성공적으로 MH_callPlace()가 수행되고 정상적으로 종료되었음, -1 : MH_callPlace()가 성공적으로 수행되지 못함
} MH_CallEvent;
```
### MH_callPlace
**설명**
전화를 건다. 함수가 성공으로 반환 후에는 전화 거는 상태이어야 한다. 통화가 종료된 후에는 플랫폼에 종료 이벤트(`MH_CALLEV_NOTIFY`)가 전달 되어야 한다.
**프로토타입**
```c
M_Int32 MH_callPlace (char * phonenum)
```
**매개 변수**
- `phonenum` - [in] 전화번호
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 전화를 걸수 없음
**부작용**
없음
**참고 항목**
없음
### MH_callEnd
**설명**
전화 거는 중 혹은 현재 통화하고 있는 중에 통화를 종료 한다. 종료 후 `MH_CALLEV_NOTIFY` 이벤트를 플랫폼에 전달 한다.
**프로토타입**
```c
void MH_callEnd (void)
```
**매개 변수**
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_callAccept
**설명**
통화 요청 된 전화를 받는다. 응용프로그램 수행 중에 표준 플랫폼 내부에서 `MH_CALLEV_INCOMING` 이벤트가 발생한다면, 이 함수를 통해서 전화를 수신할 수 있다.
**프로토타입**
```c
void MH_callAccept(void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MH_SUB_CALL_EVENT`
### MH_callReject
**설명**
통화 요청 된 전화를 거부한다. `MH_CALLEV_INCOMING` 이벤트가 발생하면 이 함수를 통해서 전화를 거부할 수 있다.
**프로토타입**
```c
void MH_callReject(void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
---
title: "4.11. FILE"
---
File System 함수들이다.
모두 API 의 파일 path 는 절대 path 로 접근 된다. 파일 관련 함수는 모두 blocking 함수들이다. 파일식별자는 플랫폼에서 조사하여 HAL API 를 부르므로 HAL 에서 잘못된 식별자인지를 다시 조사할 필요는 없다.
관련 자료형
### MH_fileAttribute
**설명**
파일이나 디렉터리의 특성을 읽어온다.
예를 들어 이 파일이 디렉터리 인지 파일인지, 만든 시간은 언제인지 등을 읽어온 다.
**프로토타입**
```c
M_Int32 MH_fileAttribute (M_Char* pathname, MH_FileInfo* fi)
```
**매개 변수**
- `pathname` - [in] 파일이나 디렉터리의 절대 경로명
- `fi` - [out] 파일의 특성을 담을 구조체
**반환 값**
성공
- 0
실패
- `M_E_BADFILENAME` - 경로명 형식이 잘못된 경우
- `M_E_LONGNAME` - 파일 이름이 최대 길이 보다 긴 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileAvailable
**설명**
파일 시스템의 여유공간을 알려준다.
**프로토타입**
```c
M_Int32 MH_fileAvailable (void)
```
**매개 변수**
없음
**반환 값**
성공
- 시스템의 여유 공간의 바이트 단위의 크기를 반환한다.
실패
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileClose
**설명**
파일을 닫는다.
**프로토타입**
```c
M_Int32 MH_fileClose (M_Int32 fd)
```
**매개 변수**
- `fd` - [in] 파일 식별자
**반환 값**
성공
- 0
실패
- `M_E_ERROR`
**부작용**
없음
**참고 항목**
없음
### MH_fileList
**설명**
해당 디렉터리 내에 있는 파일과 하위 디렉터리를 보여준다. 파일과 디렉터리 이름은 buf 에 NULL 문자 ('\0')로 구분되며 끝은 연속된 NULL 문자 두 개로 표시된 다.
**프로토타입**
```c
M_Int32 MH_fileList (M_Char *root, M_Char* buf, M_Int32 bufSize)
```
**매개 변수**
- `root` - [in] 디렉터리 이름
- `buf` - [out] 파일과 디렉터리 이름을 담을 버퍼
- `bufSize` - [in] buf 의 크기
**반환 값**
성공
- 0
실패
- `M_E_SHORTBUF` - 버퍼 사이즈가 모자랄 경우
- `M_E_BADFILENAME` - 파일이름 형식이 잘못된 경우
- `M_E_LONGNAME` - 파일 이름이 최대 길이 보다 긴 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileMkDir
**설명**
디렉터리를 만든다.
**프로토타입**
```c
M_Int32 MH_fileMkDir (M_Char * dirname)
```
**매개 변수**
- `dirname` - [in] 만들 디렉터리 절대 경로명
**반환 값**
성공
- 0
실패
- `M_E_BADFILENAME` - 파일 이름 형식이 잘못된 경우
- `M_E_LONGNAME` - 파일 이름이 최대 길이 보다 긴 경우
- `M_E_NOENT` - 만들고자 하는 디렉터리의 상위 디렉터리가 없을 경우
- `M_E_EXIST` - 이미 디렉터리가 존재할 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileOpen
**설명**
파일을 연다.
flag 는 다음과 같은 값을 가질 수 있다.
| flag | 설명 |
|---|---|
| `MH_FILE_OPEN_RDONLY` | 읽기 전용으로 파일을 연다. |
| `MH_FILE_OPEN_WRONLY` | 쓰기 전용으로 파일을 연다. 쓰는 내용은 파일의 끝에 붙는다. |
| `MH_FILE_OPEN_WRTRUNC` | 쓰기 전용으로 파일을 열고 기존 파일의 길이를 0으로 만든다. |
| `MH_FILE_OPEN_RDWR` | 파일을 읽기/쓰기 모두 가능하도록 연다. |
**프로토타입**
```c
M_Int32 MH_fileOpen (M_Char* pathname, M_Int32 flag)
```
**매개 변수**
- `pathname` - [in] 파일의 절대 경로
- `flag` - [in] 위 표 참조
**반환 값**
성공
- file 식별자를 반환
실패
- `M_E_NOENT` - `MH_FILE_OPEN_RDONLY` 로 열 때 파일이 없을 경우
- `M_E_BADFILENAME` - 파일이름 형식이 잘못되었을 경우
- `M_E_LONGNAME` - 파일 이름이 최대 길이 보다 긴 경우
- `M_E_INVALID` - 정해진 open option 이외의 option 이 parameter 로 들어왔을 경우
- `M_E_NOSPACE` - 파일시스템에 여유 공간이 없을 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileRead
**설명**
파일에서 buf 로 크기만큼 읽어온다.
**프로토타입**
```c
M_Int32 MH_fileRead (M_Int32 fd, M_Char* buf, M_Int32 size)
```
**매개 변수**
- `fd` - [in] 파일 식별자
- `buf` - [out] buffer pointer
- `size` - [in] buffer size
**반환 값**
성공
- 읽은 바이트 수. Size 가 0 인 경우는 0 를 반환한다. 0 인 경우는 EOF 이다.
실패
- `M_E_EOF` - 파일의 끝까지 읽었을 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileRemove
**설명**
파일을 지운다. 이미 열려 있는 파일일 경우는 지울 수 없다.
**프로토타입**
```c
M_Int32 MH_fileRemove ( M_Char* pathname)
```
**매개 변수**
- `pathname` - [in] 파일 절대 경로
**반환 값**
성공
- 0
실패
- `M_E_NOENT` - 파일이 존재하지 않을 경우
- `M_E_INUSE` -파일이 이미 열려 있는 경우
- `M_E_BADFILENAME` - 파일이름 형식이 잘못되었을 경우
- `M_E_LONGNAME` - 파일 이름이 최대 길이 보다 긴 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileRename
**설명**
파일 이름을 바꾼다
**프로토타입**
```c
M_Int32 MH_fileRename ( M_Char *oldname, M_Char *newname)
```
**매개 변수**
- `oldname` - [in] 바꾸기 전 절대 경로명
- `newname` - [in] 바뀐 후 절대 경로명
**반환 값**
성공
- 0
실패
- `M_E_BADFILENAME` - 파일이름 형식이 잘못된 경우
- `M_E_LONGNAME` - 파일 이름이 최대 길이 보다 긴 경우
- `M_E_NOSPACE` - 파일시스템에 여유공간이 없을 경우
- `M_E_ERROR` - 기타 이유로 실패한 경우
- `M_E_NOENT` – 바꾸기 전 파일이 존재하지 않을 경우
- `M_E_EXIST` - 새롭게 바꿀 파일 이름이 이미 존재하는 경우
- `M_E_INUSE` - 바꾸기 전 파일이 이미 열려 있을 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileRmDir
**설명**
디렉터리를 지운다.
지울 디렉터리 안에는 파일이나 디렉터리가 존재하지 않아야 한다
**프로토타입**
```c
M_Int32 MH_fileRmDir (M_Char * dirname)
```
**매개 변수**
- `dirname` - [in] 지울 디렉터리 절대 경로
**반환 값**
성공
- 0
실패
- `M_E_BADFILENAME` - 파일 이름 형식이 잘못된 경우
- `M_E_LONGNAME` - 파일 이름이 최대 길이 보다 긴 경우
- `M_E_NOTEMPTY` - 디렉터리 내에 파일이나 디렉터리가 존재할 경우
- `M_E_NOENT` - 디렉터리가 이미 없을 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileSeek
**설명**
파일 포인터를 특정 위치로 옮긴다.
옮길 위치계산은 파일의 제일 처음부터 pos 만큼 또는 제일 끝에서 pos 만큼, 아니 면 현재 위치에서 pos 만큼 과 같이 3 가지로 구분 지을 수 있다
**프로토타입**
```c
M_Int32 MH_fileSeek (M_Int32 fd, M_Int32 pos, M_Int32 where)
```
**매개 변수**
- `fd` - [in] 파일 식별자
- `pos` - [in] 기준점으로부터 옮길 위치, 파일의 크기내에서 양수/음수 모두 가능
- `where` - [in] `MH_FILE_SEEK_SET`, `MH_FILE_SEEK_CUR`, `MH_FILE_SEEK_END` 중 하나
**반환 값**
성공
- 옮겨진 파일 포인터의 위치
실패
- `M_E_INVALID` - 기준점이 `MH_FILE_SEEK_SET`, `MH_FILE_SEEK_CUR`, `MH_FILE_SEEK_END` 중 하나에 포함되지 않을 경우
- `M_E_BADSEEKPOS` - 파일 포인터를 옮길 위치가 파일의 범위를 넘어설 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileWrite
**설명**
fd 라는 식별자를 가지는 파일에 buf 가 가리키는 위치의 데이터를 지정한 size 만큼 쓴다. 파일 시스템에 공간이 부족해서 요청한 파일을 다 쓸 수 없을 경우 쓴 바이트 수를 반환한다.
**프로토타입**
```c
M_Int32 MH_fileWrite (M_Int32 fd, M_Char* buf, M_Int32 size)
```
**매개 변수**
- `fd` - [in] 파일 식별자
- `buf` - [in] 버퍼 포인터
- `size` - [in] size write 할 바이트 개수
**반환 값**
성공
- write 한 바이트 수
실패
- `M_E_ERROR` - 기타 이유로 실패할 경우
- `M_E_NOSPACE` - 파일시스템에 여유공간이 없을 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileTotalSpace
**설명**
파일 시스템의 여유공간을 알려준다.
**프로토타입**
```c
M_Int32 MH_fileTotalSpace (void)
```
**매개 변수**
없음
**반환 값**
성공
파일 시스템의 전체 공간의 바이트 단위의 크기를 반환한다.
실패
- M_E_ERROR - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileSetMode
**설명**
파일의 속성을 변경한다. 변경 가능한 속성은 아래의 매개변수 table의 fmode값을 참조한다.
**프로토타입**
```c
M_Int32 MH_fileSetMode(char* pathName, M_Int32 mode)
```
**매개 변수**
- `pathName` - [in] 파일의 절대 경로명
- `fmode` - [in] 파일 속성 mode
| fmode | 의미 | 값 |
|---|---|:---:|
| `MH_FILEMODE_RDONLY` | 읽기 전용 모드이면 세팅된다. | 1 |
| `MH_FILEMODE_WRONLY` | 쓰기 전용 모드이면 세팅된다. | 2 |
| `MH_FILEMODE_RDWR` | 읽기/쓰기 모드이면 세팅된다. | 3 |
**반환 값**
성공
- `M_E_SUCCESS` – 성공
실패
- `M_E_ERROR` - 기타 이유로 실패
- `M_E_BADFILENAME` – 파일이름 형식이 잘못됨
- `M_E_LONGNAME` - 파일이름의 길이가 최대 길이를 초과할 경우
- `M_E_INVALID` - mode 가 잘못됨
- `M_E_NOENT` – 파일이 존재하지 않음
**부작용**
없음
**참고 항목**
없음
### MH_fileGetCounts
**설명**
디렉토리내의 파일의 개수를 가져온다. 파일의 개수는 서브디렉토리를 포함한 값이다.
**프로토타입**
```c
M_Int32 MH_fileGetCounts(char* pathName)
```
**매개 변수**
- `pathName` - [in] 디렉토리의 절대 경로 명
**반환 값**
성공
- 디렉토리내 파일 및 디렉토리의 개수
실패
- `M_E_ACCESS` - 파일을 접근할 수 없음
- `M_E_ERROR` - 기타 이유로 실패
- `M_E_BADFILENAME` - 잘못된 경로 이름
- `M_E_LONGNAME` - 디렉토리 이름의 길이가 최대 길이를 초과할 경우
**부작용**
없음
**참고 항목**
없음
### MH_fileIsExist
**설명**
특정 경로상의 파일이 있는지 없는지를 알려준다.
**프로토타입**
```c
M_Int32 MH_fileIsExist(char* pathName)
```
**매개 변수**
- `pathName` - [in] 파일의 절대 경로 명
**반환 값**
성공
- `M_E_SUCCESS` – 파일이 존재함
실패
- `M_E_ACCESS` - 파일을 접근할 수 없음
- `M_E_ERROR` – 기타 이유로 실패
- `M_E_BADFILENAME` – 잘못된 경로 이름
- `M_E_LONGNAME` – 경로 이름이 최대 길이 보다 긴 경우
- `M_E_NOENT` – 파일이 존재하지 않음
**부작용**
없음
### MH_fileTell
**설명**
현재 파일의 입출력 포인터를 반환해 준다.
**프로토타입**
```c
M_Int32 MH_fileTell(M_Int32 fd)
```
**매개 변수**
- `fd` - [in] 파일 식별자
**반환 값**
성공
- 현재 입출력 포인터 위치
실패
- `M_E_INVALIDFD` - 잘못된 파일 식별자
- `M_E_ERROR` – 기타 이유로 실패
**부작용**
없음
**참고 항목**
없음
---
title: "4.13. Font"
---
다양한 폰트를 화면에 출력하거나 화면 출력 시에 다양한 정보들을 얻어오는 함수로 구성되어 있다.
폰트는 시스템에 마다 형태와 크기와 페이스(Face)가 일정하지 않으므로 각 폰트 를 정확히 지정하는 것이 아니라, 추상화된 내용으로 지정한다. 즉 크기(`작음|보통|큼`)과 스타일(`굵게|이탤릭|밑줄|보통`)과 페이스를 가지고 실제적인 폰트를 얻어옴으로써 각 단말기 마다 쉽게 적용될 수 있도록 하였다.

**그림 2 폰트정보**
폰트의 각 부분은 폰트의 높이(Height)는 어센트(Ascent)와 디센트(Descent)를 합한 값이 된다.
베어(Bear)는 폰트를 그릴 때 실제적으로 화면에 이미지를 어디서부터 어디까지 그릴 것인지를 결정한다. 대부분의 경우 왼쪽 베어(Left Bear)는 0 이 된다만, 이탤릭 체와 같은 경우에는 오른쪽 베어(Right Bear)가 폰트의 폭(Width)보다 큰 경우가 있다. 오른쪽 베어는 실제적으로 폰트의 이미지의 폭이 되고, 폭(Width)는 그 폰트를 그린 후에 얼마만큼 이동한 후에 다음 문제를 그릴지를 결정하는 값이 된다. 폭이 오른쪽 베어(Right Bear)보다 작은 경우에는 위의 그림과 같이 겹쳐지는 부분이 있을 수 있다.
관련 자료형
```c
typedef struct _MH_CharGlyphInfo {
int lbear; /* 문자의 왼쪽 베어(bear) */
int rbear; /* 문자의 오른쪽 베어(bear) */
int width; /* 문자의 화면상의 폭 */
int height; /* 문자의 화면상의 높이 */
} MH_CharGlyphInfo;
#define MH_FB_FT_SIZE_SMALL 8
#define MH_FB_FT_SIZE_MEDIUM 0
#define MH_FB_FT_SIZE_LARGE 16
#define MH_FB_FT_FACE_SYSTEM 0
#define MH_FB_FT_FACE_MONOSPACE 32
#define MH_FB_FT_FACE_PROPORTIONAL 64
#define MH_FB_FT_STYLE_PLAIN 0
#define MH_FB_FT_STYLE_BOLD 1
#define MH_FB_FT_STYLE_ITALIC 2
#define MH_FB_FT_STYLE_UNDERLINE 4
```
### MH_fnGetFont
**설명**
지정된 폰트 아이디를 얻어 온다.
face 는 `MH_FB_FT_FACE_SYSTEM`, `MH_FB_FT_FACE_MONOSPACE`(문자들의 폭이 일정한 폰트), `MH_FB_FT_FACE_PROPORTIONAL`(문자들의 폭이 일정하지 않은 폰트) 중에 하나이며, size 는 `MH_FB_FT_SIZE_SMALL`, `MH_FB_FT_SIZE_MEDIUM`, `MH_FB_FT_SIZE_LARGE` 중에 하나가 된다. style 은 `MH_FB_FT_STYLE_ITALIC`, `MH_FB_FT_STYLE_BOLD`, `MH_FB_FT_STYLE_UNDERLINED` 의 OR 값이나 혹은 `MH_FB_FT_STYLE_PLAIN` 을 사용할 수 있다. 지정된 폰트가 없으면 가장 근접한 폰트를 돌려준다.
지정된 폰트 아이디로 “C” 로컬 문자 코드의 전체 문자를 출력할 수 있어야 한다.
**프로토타입**
```c
M_Int32 MH_fnGetFont (M_Int32 face, M_Int32 size, M_Int32 style)
```
**매개 변수**
- `face` - [in] 폰트 페이스 (`MH_FB_FT_FACE_SYSTEM`, `MH_FB_FT_FACE_MONOSPACE`, `MH_FB_FT_FACE_PROPORTIONAL`)
- `size` - [in] 폰트 크기 (`MH_FB_FT_SIZE_SMALL`, `MH_FB_FT_SIZE_MEDIUM`, `MH_FB_FT_SIZE_LARGE`)
- `style` - [in] 폰트 스타일 (`MH_FB_FT_STYLE_ITALIC`, `MH_FB_FT_STYLE_BOLD`, `MH_FB_FT_STYLE_UNDERLINED`)
**반환 값**
폰트 아이디
**부작용**
없음
**참고 항목**
없음
### MH_fnGetFontHeight
**설명**
지정된 폰트의 높이를 돌려준다
**프로토타입**
```c
M_Int32 MH_fnGetFontHeight (M_Int32 font)
```
**매개 변수**
- `font` - [in] - 폰트 아이디
**반환 값**
폰트의 높이
**부작용**
없음
**참고 항목**
없음
### MH_fnGetFontAscent
**설명**
지정된 폰트의 어센트(Ascent)를 돌려준다
**프로토타입**
```c
M_Int32 MH_fnGetFontAscent (M_Int32 font)
```
**매개 변수**
- `font` - [in] 폰트 아이디
**반환 값**
폰트의 어센트(Ascent)
**부작용**
없음
**참고 항목**
없음
### MH_fnGetFontDescent
**설명**
지정된 폰트의 디센트(Descent)를 돌려준다.
**프로토타입**
```c
M_Int32 MH_fnGetFontDescent (M_Int32 font)
```
**매개 변수**
- `font` - [in] 폰트 아이디
**반환 값**
폰트의 디센트(Descent)
**부작용**
없음
**참고 항목**
없음
### MH_fnGetCharGlyph
**설명**
지정된 문자를 화면에 바로 찍을 수 있는 이미지 형태로 만들어 돌려준다. 돌려주는 버퍼는 주 화면 LCD 와 같은 색상수를 가지며 주화면 LCD 에 바로 복사할 수 있는 형태의 이미지이다. 이미지 내용은 반환하는 값이 가리키는 버퍼에 `(0, 0)`에서 부터 `(1, 0), (2, 0), ... (0, 1), (1, 1) ... `의 순서 대로 저장된다.

LCD가 16bit 컬러를 지원할 때.
```c
M_Uint8 *pbuf = MH_fnGetCharGlyph(fontid, ‘H’, blackPixel, whitePixel, &bpl);
M_Uint16 *ppxls = (M_Uint16 *)pbuf;
```
와 같은 코드가 수행되었다면, `ppxls[0]` 은 `whitePixel`이 되고 `ppxls[bpl*1]` 은 `whitePixel`, `ppxls[bpl * 1 + 1]`은 `blackPixel이` 된다.
**프로토타입**
```c
const M_Uint8 *MH_fnGetCharGlyph(const M_Int32 fontid, const M_Uint16 ch, const M_Uint32 fgPxl, const M_Uint32 bgPxl, M_Int32 *pbpl)
```
**매개 변수**
- `fontid` - [in] 폰트아이디
- `ch` - [in] 문자 (문자는 로컬 코드 이다. 즉 유니 코드가 아니다)
- `fgPxl` - [in] 문자의 전경색
- `bgPxl` - [in] 문자의 배경색
- `bpl` - [out] 프레임 버퍼의 한 줄 당 차지하는 바이트 수
**반환 값**
복사 할 수 있는 형태의 이미지 내부 버퍼. 이 버퍼는 밖에서 해제되면 안되며 내용이 바뀌어서도 안된다. 만일 ch 에 대응하는 문자가 없는 경우에는 NULL 을 돌려 준다.
**부작용**
없음
**참고 항목**
없음
### MH_fnGetCharInfo
**설명**
지정된 문자의 폭과 왼쪽 베어(Left Bear)와 오른쪽(Right Bear)와 높이를 얻어 온다.
**프로토타입**
```c
M_Int32 MH_fnGetCharInfo(M_Int32 font, M_Uint16 char, MH_CharGlyphInfo *pcg)
```
**매개 변수**
- `font` - [in] 폰트
- `char` - [in] 문자(문자는 로컬 코드 이다. 즉 유니 코드가 아니다)
- `pcg` - [out] 문자의 정보 반환
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 대응하는 문자 인덱스에 폰트가 없는 경우
**부작용**
없음
**참고 항목**
없음
---
title: "4.14. Frame Buffer"
---
LCD 화면에 프레임 버퍼의 내용을 출력하거나, 화면의 정보를 얻어오는 함수로 구성되어 있다.
LCD 에 화면 내용을 변경하는 것을 시간을 요하는 작업이므로, Double Buffering 개념을 이용하여 화면 출력 시간을 최소화 한다. `MG_fbGetScreenBuffer()` 를 사용하면, 시스템에서 사용하는 이미지 버퍼를 얻어 올 수 있다. 얻어온 메모리 이미지 버퍼에 화면에 출력될 내용을 다 그리고 나서 `MG_fbFlushLcd()` 를 사용하여 이 미지 버퍼의 내용을 LCD 화면에 출력한다.
단말기 기본 소프트웨어의 프레임 버퍼를 사용한다.
관련 자료형
```c
typedef struct _MH_DisplayInfo {
M_Int32 bpp; /* 한 픽셀이 차지하는 비트 수 */
M_Int32 depth; /* 한 픽셀이 차지하는 유효한 비트 수.
예) 24bit인 경우 bpp는 32, depth는 24가 될 수 있다.
2의 depth 승이 실제 화면에서 출력할 수 있는 컬러 색상 수가 된다. */
M_Int32 width; /* 화면의 폭; 픽셀 단위 */
M_Int32 height; /* 화면의 높이; 픽셀 단위 */
M_Int32 bpl; /* 화면의 한 라인이 차지하는 바이트 수.
내부에 PADDING도 포함된다. */
M_Int32 colortype; /* LCD가 GrayScale인지 TRUE COLOR인지를 알려준다. */
M_Int32 redmask; /* TRUE 컬러인 경우, 픽셀 값 내에 red 값이 쓰여지는 부분의 mask */
M_Int32 bluemask; /* TRUE 컬러인 경우, 픽셀 값 내에 blue 값이 쓰여지는 부분의 mask */
M_Int32 greenmask; /* TRUE 컬러인 경우, 픽셀 값 내에 green 값이 쓰여지는 부분의 mask */
} MH_DisplayInfo;
#define MH_FB_MAIN_LCD 1
#define MH_FB_SUB_LCD 2
```
### MH_GRP_DIRECT_COLOR_TYPE
**설명**
팔레트를 사용하지 않는 경우의 컬러 타입. (1 << 0)로 정의한다.
**프로토타입**
```c
#define MH_GRP_DIRECT_COLOR_TYPE
```
### MH_GRP_GRAY_TYPE
**설명**
흑백 타입. (1 << 1)로 정의한다.
**프로토타입**
```c
#define MH_GRP_GRAY_TYPE
```
### MH_GRP_COLOR_TYPE
**설명**
컬러 타입. (1 << 2)로 정의한다.
**프로토타입**
```c
#define MH_GRP_COLOR_TYPE
```
### MH_fbGetDisplayInfo
**설명**
화면 관련된 정보를 얻어온다.
screen 에 해당하는 화면 정보를 얻어 온다. screen 값은 `MH_FB_MAIN_LCD` 나 `MH_FB_SUB_LCD` 둘 중 하나가 될 수 있다. `MH_FB_MAIN_LCD` 는 모든 단말기에 존재하 는 LCD 이지만, `MH_FB_SUB_LCD` 는 듀얼 폴더와 같이 부가적인 LCD 로써 단말기에 따라서 존재할 수도 있고 존재 하지 않을 수도 있다.
**프로토타입**
```c
void MH_fbGetDisplayInfo (M_Int32 screen,MH_DisplayInfo* displayinfo)
```
**매개 변수**
- `screen` - [in] 스크린 번호: `MH_FB_MAIN_LCD`, `MH_FB_SUB_LCD` 둘 중 하나가 될 수 있다.
- `displayinfo` - [out] 스크린 정보
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_fbFlushLcd
**설명**
LCD 화면에 내부 스크린 프레임 버퍼의 내용을 출력시킨다.
이 함수를 통해서 출력된 내용은 다음 이 함수를 부르기 전까지 그 내용이 계속 화면에 출력된다.
**프로토타입**
```c
void MH_fbFlushLcd (M_Int32 screen, M_Int32 x, M_Int32 y, M_Int32 w, M_Int32 h)
```
**매개 변수**
- `screen` - [in] 스크린 번호: `MH_FB_MAIN_LCD`, `MH_FB_SUB_LCD` 둘중 하나가 될 수 있다.
- `x` - [in] 출력시킬 영역의 x 좌표
- `y` - [in] 출력시킬 영역의 y 좌표
- `w` - [in] 출력시킬 영역의 폭
- `h` - [in] 출력시킬 영역의 높이
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_fbMakePixel
**설명**
지정한 0xRRGGBB 값에 해당하는 픽셀 값을 얻어 온다.
**프로토타입**
```c
M_Int32 MH_fbMakePixel (M_Int32 color)
```
**매개 변수**
- `color` - [in] 0xRRGGBB 의 color 값
**반환 값**
픽셀 값
**부작용**
없음
**참고 항목**
없음
### MH_fbGetPixelFromRGB
**설명**
지정한 r, g, b 값에 해당하는 픽셀 값을 얻어 온다.
**프로토타입**
```c
M_Int32 MH_fbGetPixelFromRGB (M_Int32 r, M_Int32 g, M_Int32 b)
```
**매개 변수**
- `r` - [in] 빨강색(0-255)
- `g` - [in] 녹색(0-255)
- `b` - [in] 파랑색(0-255)
**반환 값**
픽셀 값
**부작용**
없음
**참고 항목**
없음
### MH_fbGetRGBFromPixel
**설명**
지정한 픽셀 값의 빨강, 파랑, 녹색의 값을 얻어 온다.
**프로토타입**
```c
M_Int32 MH_fbGetRGBFromPixel (M_Int32 pixel, M_Int32 *r, M_Int32 *g, M_Int32 *b)
```
**매개 변수**
- `pixel` – [in] 픽셀 값
- `r` - 빨강색(0-255)
- `g` - 녹색(0-255)
- `b` - 파랑색(0-255)
**반환 값**
픽셀 값
**부작용**
없음
**참고 항목**
없음
### MH_fbGetScreenBuffer
**설명**
스크린 프레임 버퍼를 돌려준다.
기본적으로 LCD 인터페이스 하는 속도가 현저하게 느리므로 LCD 의 출력되고 있는 내용을 호스트 메모리에 저장해 놓고 있어야 한다. 이러한 시스템에서 사용하는 스크린 프레임 버퍼를 돌려준다. 스크린 프레임 버퍼는 LCD 에 출력할 수 있는 크기 `[(bits per pixel * width + padding) / 8 * height]` 만큼 잡혀야 하며, 그 위치가 변경 되서는 안된다.
Dual LCD 의 경우에 대부분 주 LCD 와 보조 LCD 의 depth(색상 표현 개수)가 다른 경우가 있지만, 넘겨 주는 타입은 주 LCD 와 같은 형태의 데이타가 넘어가는 것을 가정한다. 만일 보조 LCD 의 데이타 타입이 다르다면, MG_fbFlushLcd 함수 내에서 적절한 변형 과정(가장 근접한 색상을 해당 점에 출력하는 과정)을 거쳐 LCD 에 출력하도록 한다. 데이타는 LCD 화면의 상단 좌측의 점으로 부터 시작하여 좌측으 로 가는 방향의 픽셀 값을 연속적으로 저장한다. 아래 그림을 참조하십시요.

**프로토타입**
```c
M_Uint8* MH_fbGetScreenBuffer (M_Int32 lcd_num)
```
**매개 변수**
- `lcd_num` - [in] 화면 인덱스(0; 주화면 1; 보조 LCD 화면)
**반환 값**
스크린 프레임 버퍼
**부작용**
없음
**참고 항목**
없음
---
title: "4.5. HandSet Device"
---
단말기에 장착된 장치를 제어하는 함수들이다.
### 관련 자료형
```c
//백라이트 제어관련 상수이다.
typedef enum MH_DevBackLight {
MH_LIGHT_ON = 0, // 백라이트를 켬
MH_LIGHT_OFF, // 백라이트를 끔
MH_LIGHT_ALWAYS_ON, // 백라이트를 항상 켬
MH_LIGHT_DEFAULT // 사용자 설정상태로 둠
} MH_DevBackLight;
```
### MH_devBacklight
**설명**
백라이트를 제어하는 함수 이다. 단말기에서 초기에 설정된 백라이트 설정이 존재 함을 가정한다. 어플리케이션에서 사용 후 원 상태로 돌리고 싶다면 `MH_LIGHT_DEFAULT` 값으로 재 설정 후 종료 한다. 타임아웃되면 자동으로 꺼진다. 이 함수를 호출 후 system 은 이 상태를 유지 하므로, 반드시 사용자가 정의한 기 본값으로 이 함수를 통화여 복귀 해야 한다. 백라이트 번호는 0 이면 주 LCD 의 백라이트이고 1 이면 보조 LCD 의 백라이트를 가르킨다. 만약 백라이트가 색상을 지정할 수 있을 경우 색상은 매개변수 color 로 지정하는데 color 값의 형식은 0xYYRRGGBB(네트웍 바이트 순서(network byte ordering)이다) 형태이다. 여기서 YY 는 무시되면 RR 은 빨강(Red), GG 는 녹색(Green), BB 는 파랑(Blue) 범위를 지정한다.
**프로토타입**
```c
M_Int32 MH_devBacklight (M_Int32 id, MH_DevBackLight on_off, M_Int32 color, M_Int32 timeout)
```
**매개 변수**
- `id` - [in] 백라이트 번호
- `on_off` - [in] 백라이트 조정 옵션
- `color` - [in] 백라이트 색상
- `timeout` - [in] 밀리초 단위, 타임아웃은 `MH_DEV_LIGHT_ON` 경우만 유효 하다
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 지정하는 백라이트가 존재하지 않을 경우
**부작용**
없음
**참고 항목**
없음
### MH_devVibrator
**설명**
Vibrator 를 제어 한다. 지정한 시간 동안 on 시킨 후 자동으로 꺼진다.
매개변수 level 값이 0 보다 큰 경우만 timeout 값이 유효하다. level 값 0 은 virbrator 가 꺼지는 것을 의미한다. 진동강도는 매개변수 level 값으로 정해지고 0-100 사이의 값이 올수 있다. 100 은 하드웨어가 지원하는 가장 강한 진동을 0 은 가장 약한 진동을 의미한다. 0-100 사이값을 어느정도의 진동세기와 일치시키는가 는 아래의 예처럼 하드웨어가 지원하는 진동단계를 백분율로 일치시킨것에 따른다. 하드웨어가 몇단계의 진동세기를 지원하는가는 `MH_sysGetInformation()`에서 반환 한다.
예)
- 진동세기가 하나인 하드웨어 => 1-100 : 진동
- 진동세기가 강,약 두개인 하드웨어 => 1-50 : 약진동, 51-100 : 강진동
- 진동세기가 강,중,약 세개인 하드웨어 => 1-33:약진동, 34 -66:중진동, 67-100:강진동
**프로토타입**
```c
void MH_devVibrator (M_Int32 level, M_Int32 timeout)
```
**매개 변수**
- `level` - [in] 0 이면 off, 1-100 이면 운영체제에서 일치시킨 진동세기로 진동
- `timeout` - [in] 진동시간, 밀리초 단위
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_devLedControl
**설명**
LED 를 제어 한다.
예)
- 외장 LED 가 4 개 존재한다면 LSB BIT 부터 4 개를 사용한다.

MH_devLedControl(0xF,0x6) 하위 led 4 개를 대상으로 그 중 가운데 2 개를 켠다.
**프로토타입**
```c
void MH_devLedControl (M_Int32 leds, M_Int32 mask)
```
**매개 변수**
- `leds` - [in] 제어할 LED
- `mask` - [in] 마스크할 비트
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_devGetLedCount
**설명**
외장된 LED 개수를 얻어 온다
**프로토타입**
```c
M_Int32 MH_devGetLedCount (void)
```
**매개 변수**
없음
**반환 값**
led 개수
**부작용**
없음
**참고 항목**
없음
---
title: "HAL 규격"
---
**HAL (Handset Adaptation Layer)** 은 단말기 기본 소프트웨어 위에 모바일 표준 플랫폼이
요구하는 함수들을 정의한 추상화 계층입니다. 모든 함수는 `MH_` 접두사를 갖습니다.
| 절 | 항목 | 내용 |
|---|---|---|
| 4.1 | [Type Definition](types.md) | `M_Int32` 등 기본 타입 정의 |
| 4.2 | [플랫폼이 제공하는 API](platform-api.md) | 플랫폼 → 단말 SW 호출 |
| 4.3 | [System](system.md) | 디버그 출력, 시스템 정보 |
| 4.4 | [CALL](call.md) | 전화 발신 / 종료 |
| 4.5 | [HandSet Device](handset.md) | 진동, LED, 배터리 |
| 4.6 | [네트워크](network.md) | TCP/IP 소켓 |
| 4.7 | [Serial](serial.md) | 시리얼 통신 |
| 4.8 | [MEDIA](media.md) | 사운드, 비디오 |
| 4.9 | [TIME](time.md) | 시각, 타이머 |
| 4.10 | [UTILITY](utility.md) | 문자셋 변환 |
| 4.11 | [FILE](file.md) | 파일 입출력 |
| 4.12 | [InputMethod](input-method.md) | 한글 입력기 |
| 4.13 | [Font](font.md) | 폰트 렌더링 |
| 4.14 | [Frame Buffer](frame-buffer.md) | 프레임 버퍼 |
| 4.15 | [Virtual Key](virtual-key.md) | 가상 키 매핑 |
---
title: "4.12. InputMethod"
---
InputMethod Automata 관련 함수들이다. 각 단말기 환경에 따라 작성된 오토마타 에서 현재 입력 키 값에 따라 문자(열)를 처리하여 InputMethod 에 넘겨주게 된다. `InputMethod` 에 전달되는 문자(열)를 현재 조합중인 문자(열)과 조합이 끝나서 완 성된 문자(열)이 존재할 경우 완성된 문자(열)을 넘겨주게 된다.
InputMethod 와 사용자 텍스트 입력 컴포넌트에서는 오토마타로부터 넘겨받은 문 자(열)을 삽입하거나 삭제, 수정하는 작업을 처리한다.
현재 오토마타에서 지원하는 입력 모드에 대한 정보는 `MH_IMAgetSurpportModeCount()`와 `MH_IMAgetSupportedModes()`, `MH_IMAgetCurrentMode`를 통해서 얻을 수 있다. 여기서 `MH_IMAgetSupportedModes()`의 경우 리턴값은 오토마타에서 지원하는 언어코드를 넘겨주게 되며, 언어코드는 ISO 639 코드를 따른다. 단, 해당 언어가 대소문자를 구분하는 경우 각 언어코드에 "/S","/L"를 추가하여 지정할 수 있다. 예를 들어 영문 소문자의 경우 "EN/S"의 언어코드를 넘겨주게 된다.
한글의 경우에는 "KO"의 언어코드를 넘겨주게 된다. 숫자의 경우 언어코드에서 정 의되어 있지 않으므로, "N123"으로 정한다. 심볼 코드는 폰에서 제공하는 코드의 형태가 다양하므로 HAL 에서 정의 하지 않고, 상위의 사용자 컴포넌트에서 공통적 으로 구현하도록 한다.
관련 자료형
```c
#define MH_IMA_NUM_MODE "N123" /* 숫자 입력 모드. 숫자의 경우 표준 언어 코드에서
지원하지 않으므로 숫자 입력에 대한 코드를 지정한다. */
#define MH_IMA_FLUSH (-99) /* 사용자에 의해서 현재 조합 중인 문자를 강제로
완성시켜야 할 경우 사용되는 특수 키.
이 키가 MH_IMAhandleInput 으로 입력된 경우
현재 조합 중인 문자를 완성하여 반환한다.
키 입력을 받아서 일정 시간 후 키가 완성되는
방식의 오토마타 구현 시, 이 키 값을
MH_pltEvent 를 이용하여 플랫폼으로 전달하여
구현할 수 있다. */
```
### MH_IMAgetSurpportModeCount
**설명**
오토마타에서 지원는 입력모드의 수를 얻어온다.
**프로토타입**
```c
_Int32 MH_IMAgetSurpportModeCount()
```
**매개 변수**
```c
없음
```
**반환 값**
입력모드의 수
**부작용**
없음
**참고 항목**
없음
### MH_IMAgetSupportedModes()
**설명**
오토마타에서 지원하는 입력모드의 언어코드를 얻어온다. 언어코드는 ISO 639 코드를
따른다. 단, 해당 언어가 대소문자를 구분하는 경우 각 언어코드에 `"/S","/L"`를 추가하여 지정할 수 있다. 예를 들어 영문 소문자의 경우 "EN/S"의 언어코드를 넘겨주게 된다. 한글의 경우에는 "KO"의 언어코드를 넘겨주게 된다.
**프로토타입**
```c
char** MH_IMAgetSupportedModes()
```
**매개 변수**
없음
**반환 값**
언어코드 (스트링 어레이 포인터)
**부작용**
없음
**참고 항목**
없음
### MH_IMAsetCurrentMode
**설명**
오토마타에서 사용할 모드를 지정한다.이 값은 `MH_IMAgetSupportedModes()`로 얻은 언어코드의 인덱스값이다.
**프로토타입**
```c
M_Int32 MH_IMAsetCurrentMode (M_Int32 mode)
```
**매개 변수**
입력모드
**반환 값**
지정한 입력모드가 바르게 적용된 경우 "1". 그렇지 않은 경우 "0".
**부작용**
없음
**참고 항목**
없음
### MH_IMAgetCurrentMode()
**설명**
오토마타의 현재 입력모드를 얻어온다. 이 값은 `MH_IMAgetSupportedModes()`로 얻은 언어코드의 인덱스값이다.
**프로토타입**
```c
M_Int32 MH_IMAgetCurrentMode()
```
**매개 변수**
없음
**반환 값**
오토마타의 현재 입력모드.
**부작용**
없음
**참고 항목**
없음
### MH_IMAhandleInput
**설명**
사용자 컴포넌트로 부터받은 키 입력을 현재 입력모드에 따라 처리하며 문자를 생성하고, 생성된 문자를 넘긴다.
(주의)`MH_IMA_FLUSH`가 키값으로 입력된 경우 현재 조합중인 문자를 완성하여 반환한다.
**프로토타입**
```c
M_Int32 MH_IMAhandleInput(char key, M_Int32 type, char *buf1, M_Int32 *size1, char *buf2, M_Int32 *size2);
```
**매개 변수**
- `key` - [in] 입력된 키값 (`MH_KeyCode`에 정의된 것, `MH_IMA_FLUSH`)
- `type` - [in] 입력된 키 타입 (`MH_Event`에 정의된 것.)
- `buf1` - [out] 완성된 문자열버퍼
- `size1` - [in] 완성된 문자열 버퍼의 크기
- `buf2` - [out] 조합중인 문자열버퍼
- `size2` - [in] 조합중인 문자열 버퍼의 크기
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
---
title: "4.8. MEDIA"
---
미디어를 지원하기 위한 API 들이다. 미디어장치는 데이터를 스트립으로 생산/소 비하는 장치들을 말한다. 이런 장치에는 사운드장치, vocoder 장치, 카메라장치등 이 있을 수 있다.
관련 자료형
```c
typedef enum MH_mdaToneType {
MH_SND_TONE_0 = 0, /* DTMF for 0 key */
MH_SND_TONE_1, /* DTMF for 1 key */
MH_SND_TONE_2, /* DTMF for 2 key */
MH_SND_TONE_3, /* DTMF for 3 key */
MH_SND_TONE_4, /* DTMF for 4 key */
MH_SND_TONE_5, /* DTMF for 5 key */
MH_SND_TONE_6, /* DTMF for 6 key */
MH_SND_TONE_7, /* DTMF for 7 key */
MH_SND_TONE_8, /* DTMF for 8 key */
MH_SND_TONE_9, /* DTMF for 9 key */
MH_SND_TONE_A, /* DTMF for A key */
MH_SND_TONE_B, /* DTMF for B key */
MH_SND_TONE_C, /* DTMF for C key */
MH_SND_TONE_D, /* DTMF for D key */
MH_SND_TONE_POUND, /* DTMF for # key */
MH_SND_TONE_STAR, /* DTMF for * key */
MH_SND_NOTE_A4, /* 440.0 Hz -Piano Notes- */
MH_SND_NOTE_AS4, /* 466.1 Hz */
MH_SND_NOTE_B4, /* 493.8 Hz */
MH_SND_NOTE_C4, /* 523.2 Hz */
MH_SND_NOTE_CS4, /* 554.3 Hz */
MH_SND_NOTE_D4, /* 587.3 Hz */
MH_SND_NOTE_DS4, /* 622.2 Hz */
MH_SND_NOTE_E4, /* 659.2 Hz */
MH_SND_NOTE_F4, /* 698.5 Hz */
MH_SND_NOTE_FS4, /* 739.9 Hz */
MH_SND_NOTE_G4, /* 784.0 Hz */
MH_SND_NOTE_GS4, /* 830.6 Hz */
MH_SND_NOTE_A5, /* 880.0 Hz */
MH_SND_NOTE_AS5, /* 932.2 Hz */
MH_SND_NOTE_B5, /* 987.7 Hz */
MH_SND_NOTE_C5, /* 1046.5 Hz */
MH_SND_NOTE_CS5, /* 1108.7 Hz */
MH_SND_NOTE_D5, /* 1174.6 Hz */
MH_SND_NOTE_DS5, /* 1244.3 Hz */
MH_SND_NOTE_E5, /* 1318.5 Hz */
MH_SND_NOTE_F5, /* 1397.0 Hz */
MH_SND_NOTE_FS5, /* 1479.9 Hz */
MH_SND_NOTE_G5, /* 1568.0 Hz */
MH_SND_NOTE_GS5, /* 1661.2 Hz */
MH_SND_NOTE_A6, /* 1760.0 Hz */
MH_SND_NOTE_AS6, /* 1864.7 Hz */
MH_SND_NOTE_B6, /* 1975.5 Hz */
MH_SND_NOTE_C6, /* 2093.1 Hz */
MH_SND_NOTE_CS6, /* 2217.4 Hz */
MH_SND_NOTE_D6, /* 2349.3 Hz */
MH_SND_NOTE_DS6, /* 2489.1 Hz */
MH_SND_NOTE_E6, /* 2637.0 Hz */
MH_SND_NOTE_F6, /* 2793.7 Hz */
MH_SND_NOTE_FS6, /* 2959.9 Hz */
MH_SND_NOTE_G6, /* 3135.9 Hz */
MH_SND_NOTE_GS6, /* 3322.4 Hz */
MH_SND_NOTE_A7 /* 3520.0 Hz */
} MH_mdaToneType;
typedef enum MH_MdaDevInfo {
MH_MDAINFO_STREAM_PLAY = 0x0001, /* STREAM 재생을 지원하는 장치 */
MH_MDAINFO_CALL_BY_REFERENCE = 0x0002, /* 전달하는 버퍼 내용을 복사하지 않고 그대로 사용함 */
MH_MDAINFO_PAUSE_RESUME = 0x0004, /* pause/resume 을 지원하는 장치 */
MH_MDAINFO_SEEK = 0x0008, /* seek 을 지원하는 장치 */
MH_MDAINFO_STREAM_RECORD = 0x0010 /* STREAM 녹음을 지원하는 장치 */
} MH_MdaDevInfo;
/* 사운드 이벤트 */
typedef enum MH_SUB_MEDIA_EVENT {
MH_MDAEV_MEDIA_EMPTY = 0, /* 미디어 장치 재생 버퍼가 비었음 */
MH_MDAEV_TONE_EMPTY, /* 톤 재생 버퍼가 비었음 */
MH_MDAEV_MEDIA_FULL, /* 녹음 버퍼가 full 되었음 */
MH_MDAEV_MEDIA_ERROR, /* 미디어 디바이스에 문제가 발생했음 */
MH_MDAEV_TONE_ERROR /* 톤 디바이스에 문제가 발생했음 */
} MH_SUB_MEDIA_EVENT;
/* 사운드 이벤트를 전달하는 구조체 */
typedef struct MH_MediaEvent {
M_Int32 event; /* MH_SUB_MEDIA_EVENT 타입의 값 */
M_Int32 mdaID; /* 이벤트를 발생시킨 미디어 장치 식별자 */
M_Int32 size; /* MH_MDAEV_MEDIA_EMPTY, MH_MDAEV_TONE_EMPTY 인 경우:
미디어 장치 내부 버퍼에 받아들일 수 있는 데이터 양.
MH_MDAEV_MEDIA_FULL 인 경우:
미디어 장치 내부 버퍼에 녹음된 데이터 양 */
} MH_MediaEvent;
```
### MH_mdaTonePlay
**설명**
여러 개의 Tone 을 순서에 따라 연주한다. 이 함수는 톤 배열을 운영체제의 톤 재생 버퍼에 싣고 그 실은 양을 리턴한다. 톤 재생버퍼의 데이터가 모두 비워지기 전 적절한 시점에 이벤트(`MH_MDAEV_TONE_EMPTY`)를 플랫폼에 전달해야 한다[적절한 시점이란 플랫폼이 이벤트(`MH_MDAEV_TONE_EMPTY`)를 받고 데이터를 톤 재생버퍼에 복사하는 시간이상의 데이터가 남아있는 시점]. 만일 재생중 문제가 발생한 경우 운영체제는 플랫폼에 `MH_MDAEV_TONE_ERROR` 이벤트를 전달해야 한다. 톤재생기는 mdaID number 0 을 사용하고, 이벤트(`MH_MDAEV_TONE_EMPTY`)를 플랫폼에 전달시 MH_MediaEvent 구조체의 mdaID field 가 0 으로 채워져야한다. pause/resume 을 지 원하는 톤재생기인 경우, `MH_mdaTonePlay` 는 데이터를 사운드장치에 복사후 일시 멈춤 상태가 되고, 재생은 `MH_mdaResume` 이 불린 시점부터 일어나야 한다. pause/resume 을 지원하지 않는 톤재생기일 경우에는 `MH_mdaTonePlay` 는 데이터를 사운드장치에 복사하고, 곧 바로 재생도 시작되어야한다. 스트리밍을 지원하지 않 는 톤재생기일 경우, 재생중 `MH_mdaTonePlay` 가 호출되면 에러값을 반환한다. 톤 재상기는 미디어 디바이스 식별자로 0 을 사용한다.
**프로토타입**
```c
M_Int32 MH_mdaTonePlay (MH_mdaToneType tone[], M_Int32 duration[], M_Int32 number)
```
**매개 변수**
- `tones` - [in] 연주할 톤 구조체 배열에 대한 포인터
- `duration` - [in] 연주할 시간에 대한 배열 포인터(시간 단위는 ms)
- `number` - [in] 톤구조체의 개수
**반환 값**
성공
- 시스템 톤 재생 버퍼에 실린 톤 개수.
실패
- `M_E_INUSE` – 이미 재생중에 있음
- `M_E_ERROR` - 기타 에러가 발생할 경우
**부작용**
없음
**참고항목**
없음
### MH_mdaFreqTonePlay
**설명**
여러 개의 Tone 을 순서에 따라 연주한다. 이 함수는 톤 배열을 운영체제의 톤 재생 버퍼에 싣고 그 실은 양을 리턴한다. 톤 재생버퍼의 데이터가 모두 비워지기 전 적절한 시점에 이벤트(`MH_MDAEV_TONE_EMPTY`)를 플랫폼에 전달해야 한다[적절한 시점이란 플랫폼이 이벤트(`MH_MDAEV_TONE_EMPTY`)를 받고 데이터를 톤 재생버퍼에 복사하는 시간이상의 데이터가 남아있는 시점]. 만일 재생중 문제가 발생한 경우 운영체제는 플랫폼에 `MH_MDAEV_TONE_ERROR` 이벤트를 전달해야 한다. 프리퀀시톤재 생기는 mdaID number 0 을 사용하고, 이벤트(`MH_MDAEV_TONE_EMPTY`)를 플랫폼에 전달시 `MH_MediaEvent` 구조체의 mdaID field 가 0 로 채워져야한다. pause/resume 을 지원하는 톤재생기인 경우, `MH_mdaTonePlay` 는 데이터를 사운드장치에 복사후 일 시멈춤 상태가 되고, 재생은 `MH_mdaResume` 이 불린 시점부터 일어나야 한다. pause/resume 을 지원하지 않는 톤재생기일 경우에는 `MH_mdaFreqTonePlay` 는 데이터를 사운드장치에 복사하고, 곧 바로 재생도 시작되어야한다. 스트리밍을 지원하 지 않는 톤재생기일 경우, 재생중 `MH_mdaFreqTonePlay` 가 호출되면 에러값을 반환한다. 프리퀀시 톤재생기는 미디어 디바이스 식별자로 0 을 사용한다.
**프로토타입**
```c
M_Int32 MH_mdaFreqTonePlay (M_Int32 hiFreq[], M_Int32 lowFreq[], M_Int32 duration[], M_Int32 number)
```
**매개 변수**
- `hiFreq` -[in] 연주할 고주파 톤 구조체 배열에 대한 포인터
- `lowFreq` - [in] 연주할 저주파 톤 구조체 배열에 대한 포인터
- `duration` - [in] 연주할 시간에 대한 배열 포인터 (시간 단위는 ms)
- `number` - [in] 톤구조체의 개수
**반환 값**
성공
- 시스템 톤 재생 버퍼에 실린 톤 개수.
실패
- `M_E_INUSE` – 이미 재생중에 있음
- `M_E_ERROR` - 기타 에러가 발생할 경우
**부작용**
없음
**참고항목**
없음
### MH_mdaGetDeviceID
**설명**
미디어 장치의 식별자를 구한다. 운영체제에서 지원하는 미디어 장치 이름들은 `MH_sysGetInformation()`으로 구할 수 있다. `MH_sysGetInformation` 의 command 매개 변수 중 “MEDIADEVICES” 로 얻어진 문자열이 이름으로 사용될 수 있다. 톤재생기와 프리퀀시 톤 재생기는 mdaID number 0 을 사용하므로 이 함수에서 부여하는 mdaID number 는 0 보다 큰 숫자를 부여해야 한다.
**프로토타입**
```c
M_Int32 MH_mdaGetDeviceID(M_Char* devName)
```
**매개 변수**
- `devName` - [in] 사운드 장치 이름
**반환 값**
성공
- 미디어 장치 식별자
실패
- `M_E_NOTSUP` – 지원하지 않는 장치 이름
**부작용**
없음
**참고항목**
`MH_sysGetInformation`
### MH_mdaGetDeviceInfo
**설명**
미디어 장치의 특성을 구한다. 장치 식별자 0 은, 프리퀀시 톤재생기를 나타낸다.
1. `MH_MDAINFO_STREAM_PLAY` bit 는 미디어 장치기 스트리밍 재생을 지원하는 것을 말한다. 이것은 미디어 재생중에 `MH_mdaWriteData`(장치 식별자가 0 인경우, `MH_mdaTonePlay`, `MH_mdaFreqTonePlay`)로 새로운 데이터를 사운드 장치에 복사할 수 있는 것을 말하며, 사운드 장치는 기존데이타에 연속적 으로 새로운 데이터를 재생할 수 있어야 한다. 스트리밍을 지원할 경우에는 `MH_MDAINFO_CALL_BY_REFERENCE` bit 가 설정되어서는 안된다.
2. `MH_MDAINFO_CALL_BY_REFERENCE` bit는 `MH_mdaWriteData`(장치 식별자가 0인경우, `MH_mdaTonePlay`, `MH_mdaFreqTonePlay`)로 전달되는 데이터버퍼를 미디어장치가 내부버퍼에 복사하지 않고 그대로 사용함을 의미한다. 이 bit가 설정되지 않으면 전달되는 데이터가 내부버퍼에 복사 되어 사용됨을 의미한다.
3. `MH_MDAINFO_PAUSE_RESUME` bit는 미디어 장치가 pause/resume기능 을 지원함을 의미한다.
4. `MH_MDAINFO_SEEK` bit 는 사운드 장치가 seek 기능을 지원함을 의미한다.
5. `MH_MDAINFO_STREAM_RECORD` bit 는 미디어 장치기 스트리밍 녹음을 지원하는 것을 말한다. 이것은 녹음중에 MH_mdaCopy 로 녹음장치내의 버퍼에서 녹음된 데이터를 플랫폼의 버퍼로 복사해 올 수 있는 것을 말하며, 녹음 장치는 비워진 버퍼에 계속해서 연속적으로 데이터를 녹음할 수 있어야 한다.
**프로토타입**
```c
M_Int32 MH_mdaGetDeviceInfo(M_Int32 mdaID, M_Int32* rtnInfo)
```
**매개 변수**
- `mdaID` - [in] 미디어 장치 식별자
- `rtnInfo` - [out] `MH_MdaDevInfo` 의 bit OR 값
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 에러
**부작용**
없음
**참고항목**
없음
### MH_mdaWriteData
**설명**
미디어 디바이스 내부버퍼에 연주할 데이터를 복사한다. 미디어 디바이스는 내부 버퍼가 비워지기전 적절한 시점에 이벤트(`MH_MDAEV_MEDIA_EMPTY`)를 플랫폼에 전달해야 한다 [적절한 시점이란 플랫폼이 이벤트(`MH_MDAEV_MEDIA_EMPTY`)를 받고 데이 터를 미디어 디바이스 내부버퍼에 복사하는 시간이상의 데이터가 남아있는 시점]. `MH_mdaStop`()가 수행되지 않고 디바이스 내부버퍼가 비워지게되면 미디어 디바이 스가 적절한 처리(묵음처리등)를 해야 한다. 디바이스 내부버퍼가 수용할 수 있는 양보다 많은 양의 데이터를 복사하려 할 때는 내부버퍼가 수용할 수 있는 양만큼 복사하고 복사한 양을 반환한다. 만일 재생중 문제가 발생하면 `MH_MDAEV_MEDIA_ERROR` 이벤트를 플랫폼에 전달해야 한다. 스트리밍을 지원하지 않 는 미디어장치일 경우, 재생중 `MH_mdaWriteData` 가 호출되면 에러값을 반환한다.
**프로토타입**
```c
M_Int32 MH_mdaWriteData (M_Int32 mdaID, void *buf, M_Int32 size)
```
**매개 변수**
- `mdaId` - [in] 미디어 장치 식별자
- `buf` - [in] 데이터 버퍼
- `size` - [in] 복사할 길이
**반환 값**
성공
- 미디어 내부버퍼로 복사된 크기
실패
- `M_E_INUSE` – 이미 재생중에 있음
- `M_E_ERROR` – 기타 에러가 발생할 경우
- `M_E_NOTSUP` – 재생을 지원하지 않는 미디어 장치
### MH_mdaPlay
**설명**
재생을 시작한다. 미디어 디바이스는 `MH_mdaPlay()`함수가 호출되면 백그라운드 (background)로 재생을 시작한다. 내부버퍼가 일정량이상 비워지면 버퍼가 완전히 비기전에 이벤트(`MH_MDAEV_MEDIA_EMPTY`)를 플랫폼에 전달하여 플랫폼이 계속해서 재생할 데이터를 미디어 디바이스에 복사할 수 있도록 한다. 만일 재생중에 문제가 발생할 경우 플랫폼에 `MH_MDAEV_MEDIA_ERROR` 이벤트가 전달되어야 한다. 미디 어 디바이스에서 재생하는 속도가 재생데이타를 플랫폼이 미디어 디바이스에 복사 하는 속도보다 빠르면 버퍼가 완전히 비게되는 상황이 발생할 수 있으나, 데이터 가 다시 복사되면 정상동작하여야 한다.
**프로토타입**
```c
M_Int32 MH_mdaPlay(M_Int32 mdaID, M_Boolean repeat)
```
**매개 변수**
- `mdaId` - [in] 사운드 장치 식별자(`MH_mdaGetDeviceID` 의 반환 값)
- `repeat` - [in] TRUE : 반복연주, FALSE : 한번만 연주
**반환 값**
성공
- 0
실패
- `M_E_INPROGRESS` - 미디어장치가 이미 사용중인 경우
- `M_E_ERROR` - 기타 이유로 인한 실패
- `M_E_NOTSUP` - 재생을 지원하지 않는 미디어 장치
**부작용**
없음
**참고 항목**
없음
### MH_mdaPause
**설명**
재생중인 미디어를 일시 중지시킨다. 미디어 장치는 일시 중지시 `MH_mdaResume` 가 불리면 재생을 재개할 수 있도록 내부상태(state)를 유지해야 한다. 이 함수 호출 시 미디어장치가 재생상태가 아니면 무시되고, pause/resume 를 지원하지 않는 경 우에는 에러값을 반환한다.
**프로토타입**
```c
M_Int32 MH_mdaPause(M_Int32 mdamdID)
```
**매개 변수**
- `mdaID` - [in] 미디어 장치 식별자
**반환 값**
성공
- 0
실패
- `M_E_NOTSUP` – pause/resume 을 지원하지 않는 미디어 장치
**부작용**
없음
**참고항목**
없음
### MH_mdaResume
**설명**
일시중지된 미디어재생을 재개한다. 이 함수 호출시 일시중지상태가 아니면 무시 되고, pause/resume 를 지원하지 않는 경우에는 에러값을 반환한다.
**프로토타입**
```c
M_Int32 MH_mdaResume(M_Int32 mdaID)
```
**매개 변수**
- `mdaID` - [in] 미디어 장치 식별자
**반환 값**
성공
- 0
실패
- `M_E_NOTSUP` – pause/resume 을 지원하지 않는 미디어 장치
**부작용**
없음
**참고항목**
없음
### MH_mdaSeek
**설명**
milli second 단위로 재생을 시작할 지점을 설정한다. 이 함수 호출시 pause 상태 가 아니면 무시되고, seek 를 지원하지 않는 미디어 장치인 경우에는 에러값을 반환한다
**프로토타입**
```c
M_Int32 MH_mdaSeek(M_Int32 mdaID, M_Int32 seekTime)
```
**매개 변수**
- `mdaId` - [in] 미디어 장치 식별자
- `seekTime` - [in] seekTime 연주할 지점 시간(ms), 0 보다 작으면 시작점으로 지점이 설정 되고, 데이터의 전체 연주시간보다 큰값이면 끝점으로 지점이 설정된다.
**반환 값**
성공
- 0
실패
- `M_E_NOTSUP` – seek 을 지원하지 않는 미디어 장치
**부작용**
없음
**참고항목**
없음
### MH_mdaRecordFreeze
**설명**
녹음/녹화중 `MH_mdaStop()`이 불리기 전에 불릴 수 있다. 이 함수가 불린이후에는 `MH_mdaStop()`이나 `MH_mdaRecordFreeze()`만이 다시 불일 수 있고, 그 외의 함수는 불릴 수 없다.
**프로토타입**
```c
M_Int32 MH_mdaRecordFreeze(M_Int32 mdaID)
```
**매개 변수**
- `mdaId` - [in] 미디어 장치 식별자
**반환 값**
성공
- 이 함수가 불릴시점까지 미디어 디바이스 내부버퍼에 녹음/녹화된 데이 타 크기(0 보다 같거나 큼)
실패
- `M_E_ERROR` – 녹음/녹화중 이외에 이 함수가 불릴 경우
**부작용**
없음
**참고항목**
없음
### MH_mdaStop
**설명**
재생/녹음중인 미디어를 중지시킨다. 미디어 장치가 어떤 상태에 있던지 이 함수 가 불리면 재생중인 미디어가 중지된다. 중지되어 있는 미디어에 이 함수가 불리 면 아무 역할도 하지 않는다. 이 함수는 항상 성공하여야 한다.
**프로토타입**
```c
M_Int32 MH_mdaStop (M_Int32 mdaID)
```
**매개 변수**
- `mdaId` - [in] mdaID 미디어 장치 식별자
**반환 값**
성공
**부작용**
없음
**참고항목**
없음
### MH_mdaGetVolume
**설명**
볼륨 소스로부터 볼륨 값을 읽어 온다. 미디어 장치마다 볼륨설정이 가능한 것은 미디어 장치마다 볼륨값을 읽어오고, 그렇지 않은 것은 미디어장치 식별자가 서로 달라도 같은 볼륨소스를 가리킬 수 있다. 볼륨의 최소값은 0, 최대값은 100 이다. 반환되는 볼륨값은 0 – 100 사이의 값으로 환산하여 반환되어야 한다. 0-100 사이 값을 어느정도의 볼륨세기와 일치시키는가는 아래의 예처럼 하드웨어가 지원하는 볼륨단계를 백분율로 일치시킨것에 따른다. 하드웨어가 몇단계의 볼륨세기를 지원 하는가는 `MH_sysGetInformation`()에서 반환한다.
> 예)
> 볼륨세기가 강, 약 두개인 하드웨어 => 1-50: 약볼륨 51-100: 강볼륨
> 볼륨세기가 강,중,약 세개인 하드웨어 => 1-33: 약볼륨, 34 -66: 중볼륨, 67-100: 강볼륨
**프로토타입**
```c
M_Int32 MH_mdaGetVolume (M_Int32 mdaID)
```
**매개 변수**
- `mdaId` - [in] 볼륨값을 구할 디바이스 식별자
**반환 값**
성공
- 볼륨값
실패
- `M_E_NOTSUP` – 볼륨값이 존재하지 않는 미디어 장치
**부작용**
없음
**참고항목**
없음
### MH_mdaSetVolume
**설명**
볼륨 소스에 값을 설정한다. 만약 볼륨 값이 최소볼륨 보다 작으면 최소볼륨으로 최대보다 크면 최대 볼륨으로 설정된다. 볼륨값의 최소는 0, 최대는 100 이다. 미디어 장치마다 볼륨설정이 가능한 것은 미디어 장치마다 설정되고, 그렇지 않은 것은 미디어장치 식별자가 서로 달라도 같은 볼륨소스를 가리킬 수 있다.
**프로토타입**
```c
void MH_mdaSetVolume (M_Int32 mdaID, M_Int32 value)
```
**매개 변수**
- `mdaID` - [in] 볼륨값을 설정할 디바이스 식별자
- `value` - [in] 볼륨 값 (0-100 사이의 볼륨값)
**반환 값**
성공
- 0
실패
- `M_E_NOTSUP` – 볼륨값 설정을 지원하지 않는 미디어 장치
**부작용**
없음
**참고항목**
없음
### MH_mdaControl
**설명**
미디어장치에 컨트롤(control) 명령을 수행시킨다. 새로운 미디어장치가 플랫폼에 장착될 경우, HAL 에서 정의되지 않은 기능들을 설정하거나 사용해야 할 경우가 있을 수 있다. 이 함수는 벤더가 새로운 미디어장치를 플랫폼에 장착할 경우, 벤더가 새로운 미디어장치를 프로그램이 사용할 수 있도록 cmd 을 정의하여 확장한 다.
**프로토타입**
```c
M_Int32 MH_mdaControl(M_Int32 mdaID, M_Int32 cmd, void* buf1, void* buf2);
```
**매개 변수**
- `mdaId` - [in] 디바이스 식별자
- `cmd` - [in] 컨트롤(control) 명령
- `buf1` - [in] 컨트롤 명령에서 사용할 수 buf1
- `buf2` - [in] 컨트롤 명령에서 사용할 수 buf2
**반환 값**
성공
- 0
실패
- `M_E_ERROR` – 지원하지 않는 command 이거나, command 수행에 실패하였음
**부작용**
없음
**참고항목**
없음
### MH_mdaRecord
**설명**
녹음을 시작 한다. 미디어 디바이스는 `MH_mdaRecord()`함수가 호툴되면 백그라운드 (background)로 녹음을 시작하여 미디어 디바이스 내부버퍼로 sampling 된 데이터 를 복사한다. 내부버퍼가 일정량이상 채워지면 버퍼가 full 되기전에 이벤트 (`MH_MDAEV_MEDIA_FULL`)를 플랫폼에 전달하여 플랫폼이 녹음된 데이터를 복사할 수 있도록 한다. 만일 녹음중에 문제가 발생할 경우 플랫폼에 `MH_MDAEV_MEDIA_ERROR` 이벤트가 전달되어야 한다. 플랫폼에서 녹음데이타를 복사하는 속도가 미디어 디 바이스가 녹음하는 속도보다 늦으면 내부버퍼 full 이 발생한다. 내부버퍼가 full 된 경우에 미디어 디바이스는 플랫폼이 데이터를 복사하기 전까지 녹음되는 데이 터는 버리도록 한다. 스트리밍 녹음을 지원하지 않는 장치는 내부버퍼가 full 이 난 경우, stop 하도록 한다.
**프로토타입**
```c
M_Int32 MH_mdaRecord (M_Int32 mdaID)
```
**매개 변수**
- `mdaId` - [in] 사운드 장치 식별자(`MH_mdaGetDeviceID` 의 반환 값)
**반환 값**
성공
- 0
실패
- `M_E_INPROGRESS` – 미디어장치가 이미 사용중인 경우
- `M_E_ERROR` - 기타 이유로 인한 실패
- `M_E_NOTSUP` – 녹음을 지원하지 않는 미디어 장치
**부작용**
없음
**참고 항목**
없음
### MH_mdaCopy
**설명**
미디어장치 내부버퍼에 녹음된 데이터를 복사해 온다. 스트리밍 녹음을 지원하지 않는 장치일 경우, 녹음중 `MH_mdaCopy` 가 호출되면 에러값을 반환한다.
**프로토타입**
```c
M_Int32 MH_mdaCopy(M_Int32 mdaID, void* buf, M_Int32 size)
```
**매개 변수**
- `mdaId` - [in] mdaID 미디어 장치 식별자(`MH_mdaGetDeviceID` 의 반환 값)
- `buf` - [in] 녹음 데이타가 복사될 버퍼
- `size` - [in] 복사할 크기
**반환 값**
성공
- 실제 복사된 크기
실패
- `M_E_ERROR` – 스트리밍 녹음을 지원하지 않는 장치에 녹음중 호출됨
- `M_E_NOTSUP` – 녹음을 지원하지 않는 미디어 장치
**부작용**
없음
**참고 항목**
없음
### MH_mdaSetMuteState
**설명**
단말기의 음원별 소리 발생 방지를 설정한다.
**프로토타입**
```c
M_Int32 MH_mdaSetMuteState(M_int32 source, M_Boolean bmute)
```
**매개 변수**
- `source` - [in] 볼륨소스 `MC_MDA_VOLTYPE_TONE`, `MC_MDA_VOLTYPE_SOUND`, `MC_MDA_VOLTYPE_RECORDER` 중의 하나가 될 수 있다
- `bmute` – [in] 소리발생 방지 설정. TRUE : 소리 발생 방지 FALSE : 소리 발생 허용
**반환 값**
성공
- `M_E_SUCCESS` – 성공
실패
- `M_E_ERROR` – 실패
- `M_E_INVALIDSOURCE` – 잘못된 볼륨 소스
**부작용**
없음
**참고 항목**
없음
### MH_mdaGetMuteState
**설명**
단말기의 음원별 소리 발생 방지 설정 상태를 얻는다.
**프로토타입**
```c
M_Boolean MH_mdaGetMuteState(M_int32 source)
```
**매개 변수**
- `source` - [in] 볼륨소스. `MC_MDA_VOLTYPE_TONE`, `MC_MDA_VOLTYPE_SOUND`, `MC_MDA_VOLTYPE_RECORDER` 중의 하나가 될 수 있다
**반환 값**
- TRUE : 소리 발생 방지
- FALSE : 소리 발생 허용
**부작용**
없음
**참고 항목**
```c
없음
```
---
title: "4.6. 네트워크"
---
TCP/IP 인터넷 통신을 지원하는 함수들을 정의한 것이다.
플랫폼은 TCP/IP 인터넷 통신을 위해 단일한 네트웍 인터페이스를 지원한다. 플 랫폼은 `MH_netConnect()` 함수를 호출하여 인터넷 사용이 가능해 진 후부터 소켓 관련 API 를 통해 인터넷으로 데이터 통신이 가능하게 해야 한다. 플랫폼이 `MH_netClose()` 를 호출한 이후에는 어떠한 소켓 API 를 통해서도 인터넷을 통한 데이터 통신이 불가능하도록 해야 한다. 플랫폼은 `MH_netClose()` 가 불릴 때 네트웍을 사용하는 소켓이 모두 종료되어 있어야 함을 권고한다.
네트웍의 특성상 네트워크 API 를 호출한 후 상당시간 블로킹(blocking)할 경우에 그 시간 동안 플랫폼이 정지하는 현상이 발생 할 수 있으므로, 네트워크 API 는 `MH_netClose()` 와 `MH_netSocketClose()` 를 제외하고 모두 논블로킹 (NonBlocking) 함수로 구현 되어야 한다. `MH_netClose()` 와 `MH_netSocketClose()`가 블로킹 이라 함은 이 함수를 호출한 후에 이 함수호출에 관련한 이벤트가 플랫폼에 전달되지 않는다는 것을 의미한다.
네트웍 API 를 호출하고 I/O 이벤트가 발생하면 이 이벤트 관련 정보가 플랫폼에 전달되어야 하는데 이때 호출하는 함수는 `MH_pltEvent()` 이며 매개변수로 `MH_NETWORK_EVENT` 와 `MH_NetEvent` 타입의 데이터가 전달된다
### 관련 자료형
```c
// 인터넷 도메인임을 가르키는 상수. 값은 2
#define MH_AF_INET 2
// TCP/UDP 소켓을 구분하는 상수
typedef enum MH_SOCKET_TYPE{
MH_SOCKET_STREAM =1, // TCP SOCKET
MH_SOCKET_DGRAM // UDP SOCKET
} MH_SOCKET_TYPE;
//네트웍 이벤트
typedef enum MH_SUB_NETWORK_EVENT {
MH_NETEV_NETWORK_OPEN = 0x01, // 네트웍 연결 이벤트
MH_NETEV_NETWORK_CLOSE = 0x02, // 네트웍 종료 이벤트
MH_NETEV_SOCKET_CONNECT = 0x04, // SOCKET 연결이벤트
MH_NETEV_SOCKET_CLOSE = 0x08, // SOCKET 종료 이벤트
MH_NETEV_SOCKET_READ = 0x10, // SOCKET READ 이벤트
MH_NETEV_SOCKET_WRITE = 0x20, // SOCKET WRITE 이벤트
} MH_SUB_NETWORK_EVENT;
//네트웍 이벤트를 전달하는 구조체
typedef struct MH_NetEvent{
M_Int32 fd; // 소켓 식별자
M_Int32 event; //발생된 event, MH_SUB_NETWORK_EVENT 값
} MH_NetEvent;
```
### MH_netConnect
**설명**
인터넷 접근을 시도한다. 반환 값이 `M_E_WOULDBLOCK` 일 경우에는 논블로킹 (NonBlocking)으로 인터넷 접근이 가능하게 되었다는 것을 의미한다. 인터넷 접근 이 가능하게 되었을 경우는 `MH_NETEV_NETWORK_OPEN` 이벤트를 플랫폼에 전달해야 한다.어떠한 이유로든 인터넷 접근이 불가능하게 되면 `MH_NETEV_NETWORK_CLOSE` 이벤트를 플랫폼으로 전달 해야 한다.
**프로토타입**
```c
M_Int32 MH_netConnect (void)
```
**매개 변수**
없음
**반환 값**
성공
- 0
실패
- `M_E_WOULDBLOCK` –인터넷 접근이 가능하게 될 때까지 기다릴 필요가 있을 경우
- `M_E_INPROGRESS` –인터넷 접근 시도 중인 경우
- `M_E_ISCONN` – 이미 인터넷 접근이 가능하게 되어 있는 경우
- `M_E_ERROR` - 인터넷 접근 종료 중이거나 기타 이유로 실패할 경우
**부작용**
없음.
**참고 항목**
없음
### MH_netClose
**설명**
인터넷 접근을 종료 한다. 이 함수는 블로킹(blocking)함수이다. 인터넷 접근이 허용되지 않은 상태에서도 이 함수는 성공을 리턴한다. 운영체제는 플랫폼이 `MH_netClose()` 를 호출한 이후에는 어떠한 소켓 API 를 통해서도 인터넷을 통한 데이터 통신이 불가능하도록 해야 한다. 플랫폼은 `MH_netClose()` 가 불릴 때 네트웍을 사용하는 소켓이 모두 종료되어 있는 것을 권고한다.
**프로토타입**
```c
M_Int32 MH_netClose (void)
```
**매개 변수**
없음
**반환 값**
성공
- 0
실패
- `M_E_INPROGRESS` - 인터넷 접근 종료 중인 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음.
**참고 항목**
없음
### MH_netSocket
**설명**
소켓을 얻어 온다. 이 함수가 리턴하는 소켓 식별자는 음수가 될 수 없다.
**프로토타입**
```c
M_Int32 MH_netSocket (M_Int32 domain, M_Int32 type)
```
**매개 변수**
- `domain` - [in] 인터넷 도메인일 경우 `MH_AF_INET`
- `type` - [in] `MH_SOCKET_STREAM`(TCP 소켓), `MH_SOCKET_DGRAM(UDP 소켓);
**반환 값**
성공
- 소켓 식별자
실패
- `M_E_NOTSUP` – domain 혹은 type 을 지원하지 않는 경우
- `M_E_NOTCONN` – 인터넷 접근이 불가능한 경우.
- `M_E_NOSPACE` – 소켓의 최대 할당 개수를 초과하여 더 이상 할당할 수 없는 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netSocketConnect
**설명**
TCP 소켓을 서버에 연결 한다. 반환 값이 `M_E_WOULDBLOCK` 일 경우에는 논블로킹 (NonBlocking)으로 소켓이 연결된다는 것을 의미하며, 소켓이 연결되었을 경우, `MH_NETEV_SOCKET_CONNECT` 이벤트를 플랫폼에 전달해야 한다
**프로토타입**
```c
M_Int32 MH_netSocketConnect (M_Int32 fd, M_Int32 addr, M_int16 port)
```
**매개 변수**
- `fd` - [in] 소켓 식별자
- `addr` - [in] 상대방 IP 주소로 네트웍 바이트 순서(network byte ordering)이 다.
- `port` - [in] 상대방 포트 번호로 네트웍 바이트 순서(network byte ordering) 이다
**반환 값**
성공
- 0
실패
- `M_E_INVALID` – 주소가 0 인 경우
- `M_E_WODULDBLOCK` – 소켓 연결이 설정될 때까지 기다려야 될 경우
- `M_E_NOTCONN` - 인터넷 접근이 불가능해 진 경우
- `M_E_ISCONN` - 이미 CONNECT 되어 있는 경우
- `M_E_INPROGRESS` - 서버와 연결시도 중인 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netSocketRead
**설명**
TCP 를 통해 데이터를 읽는다. 반환 값이 0 이라면 EOF(End Of File)를 의미 한다. 반환 값이 `M_E_WOULDBLOCK` 일 경우에는 읽어 들일 데이터가 없다는 것을 의미한 다. 이 경우 데이터를 읽을 수 있는 시점에서 `MH_NETEV_SOCKET_READ` 이벤트가 플랫폼에 전달되어야 한다.
**프로토타입**
```c
M_Int32 MH_netSocketRead (M_Int32 fd, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - [in] 소켓 식별자
- `buf` - [out] 데이터의 버퍼 포인터
- `len` - [in] 읽고자 하는 버퍼 크기
**반환 값**
성공
- 읽혀진 데이터 길이
실패
- `M_E_WOULDBLOCK` – 읽어 들일 데이터가 없는 경우
- `M_E_NOTCONN` – 소켓이 연결되지 않은 경우거나 인터넷 접근이 불가능해진 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netSocketWrite
**설명**
TCP 소켓을 통해 데이터를 보낸다. 반환 값이 `M_E_WOULDBLOCK` 일 경우에는 시스템 내부요인으로 지금 당장 데이터를 전송할 수 없다는 것을 의미한다. 이 경우 데이터를 전송할 수 있는 시점에서 `MH_NETEV_SOCKET_WRITE` 이벤트가 플랫폼에 전달되 어야 한다.
**프로토타입**
```c
M_Int32 MH_netSocketWrite (M_Int32 fd, M_Byte *buf, M_Int32 len)
```
**매개 변수**
- `fd` - [in] 소켓 식별자
- `buf` - [in] 데이터의 버퍼 포인터
- `len` - [in] 데이터의 size
**반환 값**
성공
- 전송한 길이
실패
- `M_E_WODULDBLOCK` – 시스템 내부 요인으로 지금 당장 데이터를 전송할 수 없는 경우
- `M_E_NOTCONN` - 소켓이 연결되지 않은 경우나 인터넷 접근이 불가능해진 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netSocketBind
**설명**
소켓에 local port 를 지정한다.
**프로토타입**
```c
M_Int32 MH_netSocketBind (M_Int32 fd, M_Int16 port)
```
**매개 변수**
- `fd` - [in] 소켓 식별자
- `port` - [in] 로컬 포트번호로 네트웍 바이트 순서(network byte ordering)이다
**반환 값**
성공
- 0
실패
- `M_E_INVALID` - 주소나 포트가 잘못된 경우
- `M_E_ISCONN` - 이미 포트가 지정되어 있는 경우
- `M_E_NOTCONN` –인터넷 연결이 불가능해진 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netSocketSendTo
**설명**
UDP 소켓을 통해 data 를 전송한다. 반환 값이 `M_E_WOULDBLOCK` 일 경우에는 시스템 내부 요인으로 지금 당장 전송할 수 없다는 것을 의미한다. 이 경우 데이터를 전송할 수 있는 시점에서 `MH_NETEV_SOCKET_WRITE` 이벤트가 플랫폼에 전달되어야 한다.
**프로토타입**
```c
M_Int32 MH_netSocketSendTo ( M_Int32 fd, M_Byte *buf, M_Int32 len, M_Int32 addr, M_Int16 port)
```
**매개 변수**
- `fd` - [in] 소켓 식별자 값
- `buf` - [in] 데이터의 버퍼 포인터
- `len` - [in] 데이터의 size
- `addr` - [in] 상대방 IP 주소. 네트웍 바이트 순서(network byte ordering)
- `port` - [in] 상대방 포트번호. 네트웍 바이트 순서(network byte ordering)
**반환 값**
성공
- 전송한 데이터 길이
실패
- `M_E_WOULDBLOCK` – 전송할 수 있을 때 까지 기다려야 하는 경우
- `M_E_NOTCONN` – 인터넷 접근이 불가능한 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netSocketRcvFrom
**설명**
UDP 소켓을 통해 데이터를 수신한다. 반환 값이 `M_E_WOULDBLOCK` 일 경우에는 읽어 들일 데이터가 없다는 것을 의미한다. 이 경우 데이터를 읽을 수 있는 시점에서 `MH_NETEV_SOCKET_READ` 이벤트가 플랫폼에 전달되어야 한다.
**프로토타입**
```c
M_Int32 MH_netSocketRcvFrom (M_Int32 fd, M_Byte *buf, M_Int32 len, M_Int32 *addr, M_Int16 *port)
```
**매개 변수**
- `fd` - [in] 소켓 식별자 값
- `buf` - [out] 데이터의 버퍼 포인터
- `len` - [in] 데이터의 size
- `addr` - [out] 상대방 IP 주소. 네트웍 바이트 순서(network byte ordering)
- `port` - [out] 상대방 포트번호. 네트웍 바이트 순서(network byte ordering)
**반환 값**
성공
- 수신된 데이터 길이
실패
- `M_E_WOULDBLOCK` – 읽어 들일 데이터가 없는 경우
- `M_E_NOTCONN` –인터넷 접근이 불가능한 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netSocketClose
**설명**
소켓을 종료한다. 이 함수는 블로킹(blocking)함수이다.
**프로토타입**
```c
M_Int32 MH_netSocketClose(M_Int32 fd)
```
**매개 변수**
- `fd` - [in] 소켓 식별자값
**반환 값**
성공
- 0
실패
- `M_E_INPROGRESS` – 이미 종료 중인 경우
- `M_E_NOTCONN` – 인터넷 접근이 불가능한 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_netGetMaxPacketLength
**설명**
송수신할 수 있는 UDP 패킷의 최대 길이를 얻어 온다.
**프로토타입**
```c
M_Int32 MH_netGetMaxPacketLength (void)
```
**매개 변수**
없음
**반환 값**
패킷길이
**부작용**
없음
**참고 항목**
없음
### MH_netSocketAccept
**설명**
TCP 서버 소켓이 클라이언트와 연결된 소켓을 리턴한다. 이 함수가 불리기 전에 `MH_netSocketBind()` 로 로컬 포트를 지정해야 한다. 이 함수가 `M_E_WOULDBLOCK` 을 리턴하면 나중에 클라이언트와 연결된 소켓이 생길 경우 운영체제는 플랫폼에 `MH_NETEV_SOCKET_CONNECT` 이벤트를 전달해야 한다. 이 함수 지원은 플랫폼 구현의 선택사항이다.
**프로토타입**
```c
M_Int32 MH_netSocketAccept (M_Int32 fd)
```
**매개 변수**
- `fd` - TCP 서버소켓 식별자
**반환 값**
성공
- 클라이언트와 연결된 소켓 식별자
실패
- `M_E_WOULDBLOCK` – 클라이언트와 연결될 때 까지 기다려야 할 경우
- `M_E_NOTSUP` – 플랫폼이 이 함수를 지원하지 않거나 이 함수를 지원하지 않는 소켓일 경우
- `M_E_NOTCONN` – 인터넷 접근이 불가능한 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
---
title: "4.2. 플랫폼이 제공하는 API"
---
다음은 실제로 플랫폼이 해당 API 를 구현하여, HAL 또는 타 태스크에서 사용하는 함수들이다. 주로, 타 태스크에서 플랫폼 태스크로 이벤트를 전달 하거나, 플랫폼을 시작하기 위해서 필요하다. **HAL 포팅시 구현해야 할 API 가 아니며 제공하는 플랫폼 라이브러리에 포함되어 있어야 한다.**
### MH_pltEvent
**설명**
타 태스크에서 플랫폼으로 이벤트를 넘겨 줄 때 사용하는 함수이다. 함수를 호출 할 때 함께 넘겨줄 이벤트에 대한 세부 정보는 하단 표의 매개변수 필드를 참조하면 된다.
| 이벤트 | 매개변수 |
|---|---|
| `MH_KEY_PRESSEVENT`, `MH_KEY_RELEASEEVENT`, `MH_KEY_REPEATEVENT` | `MH_KeyCode` |
| `MH_EXIT_EVENT` | `NULL` |
| `MH_TIMER_EVENT` | `NULL` |
| `MH_SMS_EVENT` | `MH_SMSEvent`의 포인터 |
| `MH_ANN_EVENT` | `MH_AnnInfo`의 포인터 |
| `MH_CALL_EVENT` | `MH_CallEvent`의 포인터 |
| `MH_NETWORK_EVENT` | `MH_NetEvent`의 포인터 |
| `MH_SERIAL_EVENT` | `MH_SerialEvent`의 포인터 |
| `MH_MEDIA_EVENT` | `MH_MediaEvent`의 포인터 |
표 1 HAL에서 전달 받는 이벤트에 대한 매개 변수
- `MH_KEY_PRESSEVENT` - 단말기 버튼이 눌렸을 때 해당 버튼의 KeyCode 값을 MH_KeyCode 에 정의된 키로 변경시킨 후 이 함수를 통해서 전달해야 한다.
- `MH_KEY_RELEASEEVENT` - 단말기 버튼이 떼어졌을 때 해당 버튼의 KeyCode 값을 MH_KeyCode 에 정의된 키로 변경시킨 후 이 함수를 통해서 전달한다.
- `MH_KEY_REPEATEVENT` - 단말기 버튼이 일정시간이상 눌려져 있으면, 일정시간이후 부터 주기적으로 `MH_KEYREPEAT_EVENT` 를 단발기 버튼이 떼어질때까지 플랫폼에 보낼 수 있다. 운영체제가 `MH_KEYREPEAT_EVENT` 를 지원하면 `MH_sysGetInformation()`에서 key repeat 첫 발생시간과, 발생주기시간를 반환해야 한다.
- `MH_EXIT_EVENT` - 표준 플랫폼의 수행을 종료할 때 전달한다.
- `MH_TIMER_EVENT` - MH_timerSet()에 의해 설정된 타이머가 만료될 때 전달한다.
- `MH_SMS_EVENT` – 새로운 SMS 메시지가 도착할 때 전달한다.
- `MH_ANN_EVENT` - 어넌시에이터(Annunciator)의 정보가 갱신되는 경우 전달한다.
- `MH_CALL_EVENT` – 전화가 왔을 때 전달한다.
- `MH_NETWORK_EVENT` – 네트워크 이벤트를 전달한다.
- `MH_SERIAL_EVENT` – 시리얼 이벤트를 전달한다.
- `MH_MEDIA_EVENT` – 사운드 이벤트를 전달한다.
**프로토타입**
```c
M_Boolean MH_pltEvent(MH_Event event, void *param)
```
**매개 변수**
- `event` - [in] 표준 플랫폼에게 넘겨주는 event
- `param` - [in] 해당 event 에 대한 세부 정보값. 표의 매개변수 필드 참조.
**반환 값**
성공
- `TRUE`
실패
- `FALSE` – 지원하지 않는 이벤트이거나, 이벤트를 수신하는 큐가 full이다.
**부작용**
`MH_EXIT_EVENT` 이벤트가 전달되면 `MH_pltStart()`함수를 반환하고 플랫폼은 종료된다.
**참고 항목**
없음
### MH_pltStart
**설명**
HAL 에서 플랫폼을 시작하기 위한 함수이다. 이 함수가 불려 지면 플랫폼이 수행 되고, `MH_EXIT_EVENT` 이벤트를 받기 전 까지는 반환 되지 않는다. 매개변수는 플 랫폼 최초 수행시 수행시킬 프로그램을 지정한다.
예) 애플리케이션 매니저가 자바로 구현되고, Main class 이름이 `org.kwis.am.Main` 이며 폰이미지에 같이 있을 경우,
```c
MH_pltStart(0, “org.kwis.am.Main”, 0, 0);
```
예) 애플리케이션 매니저가 자바로 구현되고, Main class 이름이 `org.kwis.am.Main`이며 `/test/appManager.jar` 라는 독립된 파일로 존재할 경우,
```c
MH_pltStart(0, “org.kwis.am.Main”, “/test/appManager.jar”, 0);
```
**프로토타입**
```c
M_Int32 MH_pltStart(M_Int32 JavaC, M_Char* programID, M_Char* path, M_Char* args)
```
**매개 변수**
- `JavaC` - [in] 0 이면 Java, 1 이면 C 프로그램
- `programID` - [in] java 인 경우, 수행시킬 프로그램의 main class 이름을 가리킨다. C 인 경우, 수행시킬 프로그램을 지정할 수 있는 ID
- `path` - [in] path 값은 수행시킬 프로그램의 독립된 file 을 가리킨다. null 이면 수행시킬 프로그램이 폰이미지안에 같이 포함되어 있는 것을 의미한다.
- `args` - [in] 실행시킬 프로그램에 전달할 매개변수(전달할 매개변수가 없으면 0)
**반환 값**
음수면 비정상 종료임.
**부작용**
없음
**참고 항목**
없음
---
title: "4.7. Serial"
---
단말기에서 지원하는 시리얼을 제어하는 함수들이다.
지원하는 시리얼 포트 수는 `MH_sysGetSystemInformation()`함수에서 구할 수 있다. 시리얼 포트 번호는 `첫 번째 시리얼포트가 0, 두 번째 시리얼포트가 1, … … (최대 지원포트 수-1)` 와 같은 방식으로 번호를 부여한다. 시리얼포트에 상태변화가 일어나면 운영체제는 이벤트를 플랫폼에 전달하여 상태변화를 알린다. 운영체제가 플랫폼에 이벤트를 전달할 때 호출하는 함수는 `MH_pltEvent()` 이며 이때 매개변수로 `MH_SERIAL_EVENT` 와 `MH_SerialEvent` 를 넘겨주어야 한다.
### 관련 자료형
```c
// 시리얼 이벤트
typedef enum MH_SUB_SERIAL_EVENT{
MH_SERIALEV_READ = 0, // 수신할 수 있게 될 경우 전달되는 이벤트
MH_SERIALEV_WRITE, // 전송할 수 있게될 경우 전달되는 이벤트
MH_SERIALEV_ERROR // 시리얼 H/W 에러
} MH_SUB_SERIAL_EVENT;
//시리얼 이벤트를 전달하는 구조체
typedef struct MH_SerialEvent{
M_Int32 fd; // 포트식별자
M_Int32 event; // 발생되는 Event, MH_SUB_SERIAL_EVENT 값
} MH_SerialEvent;
```
### MH_serialOpen
**설명**
시리얼을 포트를 연다. 지정되는 포트는 매개변수 param 으로 전달되는 제어문자 열에 의해 제어된다. 제어문자열은 다음과 같은 문법으로 만들어 져야 한다.
```c
제어문자열 ::= [제어쌍]
제어쌍 ::= 제어키 “=” 제어값 *(,제어키 “=” 제어값)
제어키 ::= 알파벳혹은 숫자문자로 만들어진 문자열
제어값 ::= 알파벳혹은 숫자문자로 만들어진 문자열
```
이 문서에서 정의하는 제어키와 제어값은 아래 표와 같다.
| 제어 키 | 제어 값 | 의미 | 디폴트 |
|---|---|---|---|
| `baudrate` | 9600, 19200, 38400, 57600, 115200 | 속도 | 115200 |
| `parity` | even, odd, no | 패리티 | no |
| `size` | 숫자 | 바이트 크기 | 8 |
| `flow` | hardware, software, no | 흐름 제어 | no |
이외의 제어키와 제어값에 대한 정의는 추가될 수 있다. 예를 들어 8 비트, 패리티없음, 115200 속도로 하드웨어 흐름제어를 하기 위해 포트를 열 경우 제어문자열은 다음과 같다.
```text
”baudrate=115200,parity=no,size=8,flow=hardware”
```
제어문자열에 앞에서 정의한 제어키가 없을 경우 디폴트 값으로 설정된다.
**프로토타입**
```c
M_Int32 MH_serialOpen (M_Int32 port,M_byte *param)
```
**매개 변수**
- `port` - [in] 포트 번호
- `param` - [in] 제어문자열
**반환 값**
성공
식별자를 반환한다.
실패
- `M_E_NOTSUP` - 해당 포트번호 또는 제어문자열에 대한 제어을 제공하지 않을 경우
- `M_E_INVALID` – 제어문자열이 잘 못된 포멧일 경우
- `M_E_ISCONN` – 해당 포트가 이미 열린 경우
- `M_E_ERROR` - 기타 이유로 실패할 경우
**부작용**
없음
**참고 항목**
없음
### MH_serialWrite
**설명**
시리얼로 데이터를 전송한다.
반환 값이 `M_E_WOULDBLOCK` 일 경우에는 시스템 내부 요인으로 지금 당장 전송할 수 없다는 것을 의미하며, 전송할 수 있는 상태가 되면, `MH_SERIALEV_WRITE` 이벤트를 플랫폼에 전달해야 한다. 플랫폼은 `MH_SERIALEV_WRITE` 이벤트를 받으면 다시 `MH_serialWrite()`를 호출하여 시리얼 데이터 쓰기를 재시도 하면 된다. 만약 이 함수를 호출했을 때 DTR 핀에 상대방이 감지되지 않으면 `M_E_NOTCONN` 을 리턴한다.
**프로토타입**
```c
M_Int32 MH_serialWrite (M_Int32 fd, M_Uint8* buf, M_Int32 len)
```
**매개 변수**
- `fd`- [in] 시리얼 식별자
- `buf` - [in] 데이터 버퍼
- `len` - [in] 전송할 크기
**반환 값**
성공
- 전송한 크기
실패
- `M_E_ERROR` - 기타 이유로 실패할 경우
- `M_E_WODULDBLOCK` – 전송할 수 있을 때 까지 기다려야 경우
- `M_E_NOTCONN` – 이 함수를 호출 했을 때 DTR 핀에 상대방이 감지되지 않을 경우
**부작용**
없음
**참고 항목**
없음
### MH_serialRead
**설명**
시리얼로 데이터를 수신한다. 반환 값이 `M_E_WOULDBLOCK` 일 경우에는 읽어 들일 데이터가 없다는 것을 의미하며, 읽어 들일 데이터가 도착하면, `MH_SERIALEV_READ` 이벤트가 플랫폼에 전달되어야 한다. 플랫폼은 `MH_SERIALEV_READ` 이벤트를 받으면 다시 `MH_serialRead()`를 호출하여 시리얼 데이터 읽기를 재시도 하면 된다. 만약 이 함수를 호출했을 때 DTR 핀에 상대방이 감지되지 않으면 `M_E_NOTCONN` 을 리턴 한다.
**프로토타입**
```c
M_Int32 MH_serialRead (M_Int32 fd, M_Uint8 *buffer, M_Int32 len)
```
**매개 변수**
- `port` - [in] 시리얼 식별자
- `buf` - [out] 데이터 버퍼
- `len` -[in] 버퍼의 길이
**반환 값**
성공
- 읽은 데이터 길이
실패
- `M_E_ERROR` - 기타 이유로 실패할 경우
- `M_E_WOULDBLOCK` –읽을 데이터가 도착할 때까지 기다려야 하는 경우
- `M_E_NOTCONN` - 이 함수를 호출 했을 때 DTR 핀에 상대방이 감지되지 않을 경우
**부작용**
없음
**참고 항목**
없음
### MH_serialClose
**설명**
시리얼포트를 닫는다.
**프로토타입**
```c
void MH_serialClose (M_Int32 fd)
```
**매개 변수**
- `fd` - [in] 시리얼 식별자
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
---
title: "4.3. System"
---
표준 플랫폼 커널(Kernel) 에서 단말기의 정보 또는 이벤트를 입수하여 다음 수행 동작을 결정하고, 커널의 동작 수행 상태를 확인 하기 위해 디버깅 하는 콘솔을 지원하는 함수와 크리티컬 섹션(Critical Section) 을 보호 하기 위해서 단말기 운영체제에서 지원하는 락(lock) 메커니즘을 구현한 함수와 커널이 사용할 메모리 영역을 잡아주는 함수 등으로 구성되어 있다.
### 관련 자료형
운영체제에서 발생한 이벤트 중 플랫폼에 필요한 모든 이벤트는 `MH_pltEvent()` 함수를 통하여 플랫폼으로 전달된다. enum _MH_Event 는 플랫폼에 전달될 이벤트들 을 정의한다. enum _MH_Event 에 정의되어 있는 이벤트 중 더 세분화된 이벤트가 전달될 필요가 있을 때에는 각 모듈에서 enum MH_SUB_XXX_EVENT 와 같이 세부 이 벤트를 정의 한다.
예) MH_SERIAL_EVENT 의 세부이벤트 정의
```c
enum _MH_SUB_SERIAL_EVENT {
MH_SERIAL_READ = 0, // READ 인터럽트가 발생한 경우
MH_SERIAL_WRITE, // SERIAL에 write 할 수 있다는 event
MH_SERIAL_ERROR, // 시리얼 H/W 에러
};
```
정의된 세부 이벤트의 전달방법은 해당 모듈설명을 참고한다.
```c
enum _MH_Event {
MH_EXIT_EVENT = 1, // 시스템을 종료시켜주는 이벤트
MH_KEY_PRESSEVENT, // 키가 눌려 질 때 알려 주는 이벤트
MH_KEY_RELEASEEVENT, // 키가 떼어 질 때 알려 주는 이벤트
MH_KEY_REPEATEVENT, // 키를 누르고 있을 때 알려 주는 이벤트
MH_TIMER_EVENT, // 타이머가 만료될 때 알려 주는 이벤트
MH_SMS_EVENT, // SMS 메시지가 수신되었음을 알려 주는 이벤트
MH_CALL_EVENT, // 전화가 왔음을 알려 주는 이벤트
MH_ANN_EVENT //어넌시에이터(Annunciator) 정보가 변경 되었을 때 알려 주는 Event
MH_NETWORK_EVENT,
MH_SERIAL_EVENT,
MH_MEDIA_EVENT
};
```
| 이벤트 | 세부 이벤트 | 이벤트 발생 함수/상황 |
|---|---|---|
| `MH_EXIT_EVENT` | - | 플랫폼 종료를 위하여 운영체제에서 발생시킴 |
| `MH_KEY_PRESSEVENT` | - | Key Press |
| `MH_KEY_RELEASEEVENT` | - | Key Release |
| `MH_KEY_REPEATEVENT` | - | 일정 시간 이상 key press 시 |
| `MH_TIMER_EVENT` | - | `MH_timerSet()` |
| `MH_SMS_EVENT` | `MH_SMS_NEW` | SMS 도착 |
| `MH_SMS_EVENT` | `MH_SMS_SEND_NOTIFY` | `MH_smsSend()` |
| `MH_CALL_EVENT` | `MH_CALL_INCOMING` | 전화가 왔을 때 발생 |
| `MH_CALL_EVENT` | `MH_CALL_NOTIFY` | `MH_callPlace()` |
| `MH_ANN_EVENT` | - | Annunciator와 관련된 상태 변화 |
| `MH_NETWORK_EVENT` | `MH_PPP_OPEN` | `MH_netConnect()` |
| `MH_NETWORK_EVENT` | `MH_PPP_CLOSE` | `MH_netClose()` |
| `MH_NETWORK_EVENT` | `MH_SOCKET_CONNECT` | `MH_netSocketConnect()` |
| `MH_NETWORK_EVENT` | `MH_SOCKET_CLOSE` | `MH_netSocketClose()` |
| `MH_NETWORK_EVENT` | `MH_SOCKET_READ` | `MH_netSocketRead()` |
| `MH_NETWORK_EVENT` | `MH_SOCKET_WRITE` | `MH_netSocketWrite()` |
| `MH_SERIAL_EVENT` | `MH_SERIAL_READ` | `MH_serialRead()` |
| `MH_SERIAL_EVENT` | `MH_SERIAL_WRITE` | `MH_serialWrite()` |
| `MH_SERIAL_EVENT` | `MH_SERIAL_ERROR` | 시리얼 H/W 문제 |
| `MH_SERIAL_EVENT` | `MH_SERIAL_DTR` | 시리얼 케이블의 상태 변화 |
| `MH_MEDIA_EVENT` | `MH_MDAEV_MEDIA_EMPTY` | `MH_mdaWriteData()` |
| `MH_MEDIA_EVENT` | `MH_MDAEV_MEDIA_FULL` | `MH_mdaRecord()` |
```c
enum _MH_KeyCode {
MH_KEY_0 = '0',
MH_KEY_1 = '1',
MH_KEY_2 = '2',
MH_KEY_3 = '3',
MH_KEY_4 = '4',
MH_KEY_5 = '5',
MH_KEY_6 = '6',
MH_KEY_7 = '7',
MH_KEY_8 = '8',
MH_KEY_9 = '9',
MH_KEY_ASTERISK = '*',
MH_KEY_POUND = '#',
MH_KEY_UP = -1,
MH_KEY_DOWN = -2,
MH_KEY_LEFT = -3,
MH_KEY_RIGHT = -4,
MH_KEY_SELECT = -5,
MH_KEY_SOFT1 = -6,
MH_KEY_SOFT2 = -7,
MH_KEY_SOFT3 = -8,
MH_KEY_SEND = -10,
MH_KEY_END = -11,
MH_KEY_POWER = -12,
MH_KEY_SIDE_UP = -13,
MH_KEY_SIDE_DOWN = -14,
MH_KEY_SIDE_SEL = -15,
MH_KEY_CLEAR = -16,
MH_KEY_FLIPDOWN = -17,
MH_KEY_FLIPUP = -18,
MH_KEY_INVALID = 0
};
enum MH_CallState {
MH_CS_IDLE = 0,
MH_CS_CALLING,
MH_CS_CALLED,
MH_CS_CALLREJECTED,
MH_CS_INCOMMING, /* 이때, 발신 번호가 매개변수로 전달되어야 함.(?) */
MH_CS_OTHERCALL, /* 통화 중 대기 */
MH_CS_TRANSFERCALL, /* 대기 통화로 전환 */
MH_CS_END
};
enum _MH_Annunciator {
MH_ANN_RSSI, /* 현재 RSSI 수준이 갱신 (열거형의 경우 시작값 명시) */
MH_ANN_BATT, /* 현재 배터리 수준이 갱신 */
MH_ANN_NOSERVICE, /* 통화권 이탈 */
MH_ANN_SILENTMODE, /* 진동, 벨소리 모드 */
MH_ANN_ALARM /* 알람 설정 유무 */
};
typedef enum _MH_Annunciator MH_Annunciator;
struct _MH_AnnInfo {
MH_Annunciator type; /* Annunciator info type */
M_Int32 data; /* */
};
typedef struct _MH_AnnInfo MH_AnnInfo;
```
### MH_sysGetHeapBlock
**설명**
이 함수는 플랫폼이 사용할 휘발성 메모리의 크기와 시작번지를 얻어오는 함수 이 다.
이 메모리는 고정되어야 하며, 플랫폼을 제외한 타 소프트웨어 모듈이 메모리를 사용해서는 안된다.
**프로토타입**
```c
void MH_sysGetHeapBlock (M_Uint32* start, M_Uint32* size)
```
**매개 변수**
- `start` - [out] Heap 의 시작 번지 반환
- `size` - [out] Heap 의 사이즈 반환
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_sysGetInformation
**설명**
이 함수는 단말기의 시스템 정보를 얻어오는 함수이다.
반환할 값이 정수일 때는 10 진수 string 으로 변환하여 버퍼를 통하여 반환한다. 제조사나 이통사가 플랫폼에서 정의되지 않은 정보를 확장하고 싶은 경우, command 값을 추가하여 확장한다.
함수 사용 예)
```c
M_Char buf[16];
MH_sysGetInformation(”ESN”, buf, sizeof(buf));
```
**프로토타입**
```c
M_Int32 MH_sysGetInformation (M_Char* command, M_Char* buf, M_Int32 bufSize)
```
**매개 변수**
- `command` - [in] String 값
- `buf` - [out] 버퍼
- `butSize` - [out] 버퍼 크기
#### command 목록
| command | 비고 |
|---|---|
| `"ESN"` | ESN 번호 |
| `"NID"` | 네트워크 식별 (Network Identification) |
| `"SID"` | 시스템 식별 (System Identification) |
| `"BASEID"` | 기본 스테이션 식별 (Base station Identification) |
| `"BASELAT"` | 기본 스테이션 위도 (Base station Latitude) |
| `"BASELONG"` | 기본 스테이션 경도 (Base station longitude) |
| `"CURRENTCH"` | 현재 채널 번호 (Current Channel number) |
| `"PHONENUMBER"` | 전화 번호 |
| `"RSSILEVEL"` | 현재 RSSI 레벨 |
| `"BATTERYLEVEL"` | 현재 배터리 레벨 |
| `"MAXRSSILEVEL"` | 최대 RSSI 레벨 |
| `"MAXBATTLEVEL"` | 최대 배터리 레벨 |
| `"MAXSERIALNUM"` | 최대 지원되는 시리얼 포트 개수 |
| `"MAXSOCKETNUM"` | 최대 지원되는 소켓 개수 |
| `"MEDIADEVICES"` | 지원하는 미디어 device의 문자열. 여러 개일 경우 `,`로 구분함. 지원되는 device가 없으면 `M_E_NOTSUP`를 반환. (미리 정의된 문자열은 아래 별도 표 참조) |
| `"DNS"` | 도메인 네임 서버를 지정한다. IP 주소 문자열. 예) `"127.0.0.1"` |
| `"TIMEZONE"` | `"GMT+시:분"`, `"GMT-시:분"`과 같은 형태로 현재의 time zone을 반환한다. 시, 분은 각각 두 자리 문자열을 사용한다. 예) `"GMT+09:30"`, `"GMT-12:00"` |
| `"PHONEMODEL"` | 단말기의 모델 ID string (폰 모델) |
| `"KEYREPEAT"` | `"반복시작시간:반복주기시간"`, 단위는 ms이다. 지원하지 않으면 `M_E_NOTSUP` 반환할 수 있다. 예) `"600:250"` - 버튼이 눌려지고 600ms 후에 `MH_KEYREPEAT_EVENT`가 처음 발생한 후, 250ms마다 주기적으로 버튼이 떼어질 때까지 발생한다. |
| `"VIBRATORLEVEL"` | 하드웨어가 지원하는 진동 세기의 단계를 반환한다. (최소 0, 최대 100) 예) `"3"` 3단계 지원, `"1"` 1단계 지원 |
| `"VOLUMELEVEL"` | 하드웨어가 지원하는 볼륨 세기의 단계를 반환한다. (최소 0, 최대 100) 예) `"10"` 10단계 지원, `"4"` 4단계 지원 |
#### `MEDIADEVICES` - 미리 정의된 문자열
| 문자열 | device |
|---|---|
| `"Qualcomm_CMX"` | Qualcomm CMX |
| `"Yamaha_MA1"` | Yamaha MA1 |
| `"Yamaha_MA2"` | Yamaha MA2 |
| `"Yamaha_MA3"` | Yamaha MA3 |
| `"audio/MIDI"` | MIDI 포맷을 play할 수 있는 디바이스일 경우 |
| `"audio/MP3"` | MP3 포맷을 play할 수 있는 디바이스일 경우 |
| `"IS96"` | QCELP-8K |
| `"IS96A"` | QCELP-8K |
| `"IS733"` | QCELP-13K |
| `"IS127"` | EVRC-8K |
> **참고:** 디바이스가 미리 정의된 문자열을 지원할 시에는 정의된 문자열을 반환하고, 그렇지 않을 경우에는 벤더나 이통사에서 정의하여 확장한다. 지원되는 포맷이 하드웨어 종속적이 아닌 경우에는 `"audio/xxx"`와 MIME 타입에 따라 확장한다. 예) 운영체제가 CMX, MA1, EVRC-8K을 지원할 경우, 반환되는 문자열은 `"Qualcomm_CMX, Yamaha_MA1"`.
- `buf` - [out] 해당 데이터 정보를 저장할 버퍼. 모든 값은 string 으 로 반환된다.
- `bufSize` - [in] buf size
**반환 값**
성공
- 0
실패
- `M_E_INVALID` - 지원하지 않는 command 값
- `M_E_NOTSUP` - command 값에 대하여 반환할 문자열이 존재하지 않음
- `M_E_SHORTBUF` - 저장할 버퍼가 작음
**부작용**
없음
**참고 항목**
없음
### MH_sysSetInformation
**설명**
시스템 정보 값을 변경할 때 사용하는 함수이다. HAL 구현시 단말기 기본 소프트 웨어에 따라 변경 불가한 정보가 있을 수 있다.
**프로토타입**
```c
M_Int32 MH_sysSetInformation(M_Char* cmd, M_Char* value)
```
**매개 변수**
- `cmd` - [in] 변경하고자 하는 정보명.
- `value` - [in] cmd 에 해당하는 정보값을 나타내는 문자열
**반환 값**
성공
- 0
실패
- `M_E_ACCESS` - 변경할 수 없는 정보임.
- `M_E_INVALID` - cmd 값이나 value 값이 잘못됨.
**부작용**
없음
**참고 항목**
없음.
### MH_sysLock
**설명**
크리티컬 섹션(Critical Section)을 보호하기 위한 함수 이다.
플랫폼 외부 문맥(external context)의 진입을 금지하는 영역의 시작을 지정한다. `MH_sysUnlock` 에서 진입을 허용한다.
`MH_pltEvent()` 같은 함수는 운영체제가 플랫폼에 이벤트를 전달하기 위하여 부른 다. 운영체제가 `MH_pltEvent()` 를 부를 때는 운영체제 ISR(interrupt service routine)에서 부를 수도 있고, 플랫폼 태스크가 아닌 다른 태스그에서 부를 수도 있다. 이때 호출된 `MH_pltEvent()` 함수와 플랫폼의 context 에서 사용하는 영역간 에 크리티컬 섹션(Critical Section)이 발생한다. 포팅자는 `MH_sysLock()` 이 불려진 경우에는 `MH_sysUnlock()`이 불려질 때까지 운영체제가 `MH_pltEvent()`를 부르지 않도록 HAL 을 구현해야 한다.
`MH_sysLock()`, `MH_sysUnlock` 은 nested 되게 불릴 수 있다. 이때 맨 처음 `MH_sysLock()`이 불려질 때 lock 이 되고, 맨 마지막 `MH_sysUnlock` 이 불려질 때 lock 이 해제 되어야 한다.
**프로토타입**
```c
void MH_sysLock (void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MH_sysUnlock`
### MH_sysUnlock
**설명**
`MH_sysLock` 에서 진입 금지한 상태를 해제 한다.
**프로토타입**
```c
void MH_sysUnlock (void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
`MH_sysLock`
### MH_sysHalInit
**설명**
Hal 초기화 루틴 이다.
이 함수는 어떤 HAL API 도 사용되기 이전에 최초 호출 되어야 한다. HAL 에서 지원하는 API 중 초기화가 필요한 API 는 여기서 초기화 과정을 수행하도록 한다.
**프로토타입**
```c
void MH_sysHalInit (void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_sysHalExit
**설명**
플랫폼 종료시 호출되는 함수이다. HAL 계층에서 사용된 자원 해제 등 HAL 에 맞는 플랫폼 종료시 취해야 할 작업을 정의한다.
**프로토타입**
```c
void MH_sysHalExit()
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_sysWait
**설명**
Binary semaphore wait 기능이다.
플랫폼은 내부적으로 더 이상 처리할 일이 없을 때 이 함수를 부른다. HAL 은 이 함수가 불리면 태스크를 blocking 시켜 CPU power 를 소비하지 않도록 구현해야 한다.
**프로토타입**
```c
void MH_sysWait (void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_sysSignal
**설명**
Binary semaphore signal 기능이다.
이 함수가 불리면 `MH_sysWait()`에서 blocking 된 태스크를 깨워주어야 한다.
이 함수는 주로 `MH_pltEvent()`내에서 주로 사용한다. `MH_sysSignal()`은 ISR 안에서 불려도 동작하게 포팅 해야 한다.
**프로토타입**
```c
void MH_sysSignal (void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
### MH_debugPutChar
**설명**
플랫폼의 디버깅정보를 출력한다. 플랫폼의 표준출력은 모두 이 API 로 오게된다. HAL 구현자는 이 API 를 시리얼, 네트웍, 콘솔(console)등 적절한 곳으로 연결하여 메시지를 볼수 있다.
**프로토타입**
```c
void MH_debugPutChar(M_Char ch);
```
**매개 변수**
- `ch` - [in] 출력한 문자
**반환 값**
없음
**부작용**
없음
**참고 항목**
없음
---
title: "4.9. TIME"
---
플랫폼은 HAL 에서 제공하는 1개의 Timer를 가지고 내부적으로 여러 개의 타이머를 생성하여 사용한다. 그리고, HAL 은 UTC 기준시간 70년 1월 1일 0시 0분 0초 부터 현재시간까지의 milli-second 단위의 시간을 알려준다.
### MH_timerSet
**설명**
타이머를 설정한다.
타이머가 만료되면 HAL은 플랫폼에 `MH_TIMER_EVENT` 를 전달해야 한다. 타이머가 만료되기 전에 다시 `MH_timerSet()`이 불린다면 이전에 설정된 타이머는 해제되고, 새로 설정된 타이머가 동작해야 한다.
**프로토타입**
```c
void MH_timerSet (M_Int64 timeout)
```
**매개 변수**
- `timeout` - [in] milli-second 단위, 64bit
**반환 값**
없음
**부작용**
없음
**참고항목**
없음
### MH_timerClear
**설명**
설정된 타이머를 해제한다.
**프로토타입**
```c
void MH_timerClear (void)
```
**매개 변수**
없음
**반환 값**
없음
**부작용**
없음
**참고항목**
`MH_timerSet`
### MH_timerCurrentTime
**설명**
현재 시간을 얻어 온다.
**프로토타입**
```c
M_Int64 MH_timerCurrentTime (void)
```
**매개 변수**
없음
**반환 값**
UTC 기준시간 70년 1월 1일 0시 0분 0초부터 현재시간까지의 milli-second 단 위의 시간 이다.
**부작용**
없음
**참고항목**
없음
---
title: "4.1. TYPE DEFINITION"
---
변수 타입을 정의한다.
```c
typedef unsigned char M_Boolean // unsigned 8bit. TRUE 또는 FALSE 를 CHECK 한다.
typedef unsigned int M_Uint32 // unsigned 32 bit type typedef unsigned short M_Uint16 // unsigned 16bit type
typedef unsigned char M_Uint8 // unsigned 8bit type, unsigned char type
typedef signed int M_Int32 // signed 32bit type. signed int type
typedef signed short M_Int16 // signed 16bit type. signed short typedef signed char M_Int8 // signed 8bit type. signed char typedef char M_Char // char
typedef unsigned char M_Byte // unsigned 8bit type. unsigned char type
typedef signed long long M_Int64 // signed 64bit type. signed long long type
typedef unsigned long long M_Uint64 // unsigned 64bit type. unsigned long long type
typedef unsigned short M_Ucode // unsigned 16bit. unicode character typedef signed long M_Sint31 // signed 32bit. singed long type typedef signed short M_Sint15 // signed 16bit. signed short type typedef M_Uint32 M_Addr // unsigned 32bit. unsigned int type
#define NULL 0 //NULL 정의
#define TRUE 1 //TRUE 정의
#define FALSE 0 //FALSE 정의
#define inline __inline //inline 정의
```
---
title: "4.10. UTILITY"
---
플랫폼에서 유용하게 사용할 수 있는 함수들을 제공한다. 문자셋을 변환한다.
### MH_utilConvertLocalCodeToUnicode
**설명**
내부 로컬 코드 문자열을 유니코드 문자열로 변환한다. 변환 도중에 변환할 수 없는 문자를 만나면 Space(0x20)로 변경한다.
**프로토타입**
```c
M_Int32 MH_utilConvertLocalCodesToUnicodes (M_Char *psz, int len, M_Uint16 *puni, int buflen)
```
**매개 변수**
- `psz` - [in] 내부 “C” 문자열 (로컬 코드로 되어 있는 문자열; 한국의 경우 EUC_KR임)
- `len` - [in] 문자열의 길이
- `puni` - [out] 변환된 “Unicode” 문자열이 복사될 버퍼
- `buflen` - [in] 버퍼의 길이
**반환 값**
성공
- 변환된 유니코드 문자열 길이
실패
- `M_E_SHORTBUF` - puni버퍼가 충분하지 않은 경우
**부작용**
없음
**참고항목**
없음
### MH_utilConvertUnicodeToLocalCode
**설명**
유니 코드 문자열을 내부 로컬 코드 문자열로 변환한다. 유니 코드가 내부 로컬 코드 문자열에 대응되지 않는 경우에는 0x20(Space)으로 변환한다.
**프로토타입**
```c
M_Int32 MH_utilConvertUnicodeToLocalCode(M_Uint16 *puni, M_Int32 len, M_Uint8 *plocal, M_Int32 buflen);
```
**매개 변수**
- `puni` - [in] “Unicode” 문자열
- `len` - [in] 문자열의 길이
- `plocal` - [out] 변환된 “C” 문자열이 복사될 버퍼(로컬 코드로 되어 있는 문자열; 한국의 경우 EUC_KR임)
- `buflen` - [in] 버퍼의 길이
**반환 값**
성공
- 변환된 로컬 코드 문자열 길이
실패
- `M_E_SHORTBUF` - plocal버퍼가 충분하지 않은 경우
**부작용**
없음
**참고항목**
없음
### MH_utilUnConvertLocalCodeToUnicodeChar
**설명**
내부 로컬 코드 버퍼를 유니코드로 변환할 때 첫번째 변환되는 유니코드와 첫 유니코드 변환시 사용된 로컬 코드 개수를 반환한다.
**프로토타입**
```c
M_UInt16 MH_utilConvertLocalCodeToUnicodeChar(M_Uint8 *psz, M_Int32 len, M_Int32 *pconsumed);
```
**매개 변수**
- `psz` - [in] 로컬 코드 문자 버퍼
- `len` - [in] 로컬 코드 문자 버퍼의 길이
- `pconsumed` - [out] 첫 유니코드로 만들기 위해서 사용된 로컬 코드 개수.
**반환 값**
변환된 Unicode
**부작용**
없음
**참고항목**
없음
### MH_utilGetLocalCodeSizeInUnicode
**설명**
유니코드 문자 버퍼를 내부 코드 문자 버퍼로 변경할 때 내부 코드 문자 버퍼의 크기를 바이트 단위로 돌려준다.
**프로토타입**
```c
M_UInt32 MH_utilLocalCodeSizeToUnicodeChar(M_Uint16 *psz, M_Int32 len);
```
**매개 변수**
- `psz` - [in] 유니코드 문자 버퍼
- `len` - [in] 유니코드의 문자 버퍼 크기(단위:M_Uint16)
**반환 값**
변환시에 필요로 하는 내부 코드 문자 버퍼의 크기(단위: 바이트)
**부작용**
없음
### 참고항목
없음
### MH_utilGetUnicodeSizeInLocalCode
**설명**
내부 로컬 코드 문자 버퍼을 유니코드 문자 버퍼 변환할 때 유니코드 문자 버퍼 크기를 M_Uint16 단위로 돌려준다.
**프로토타입**
```c
M_UInt32 MH_utilGetUnicodeSizeInLocalCode (M_Uint8 *psz, M_Int32 len);
```
**매개 변수**
- `psz` - [in] 로컬 코드 문자 버퍼
- `len` - [in] 로컬 코드 문자 버퍼 길이
**반환 값**
변환시에 필요로 하는 유니코드 문자 버퍼 크기(단위:M_Uint16)
**부작용**
없음
**참고항목**
없음
---
title: "4.15. Virtual Key"
---
응용프로그램에서 단말기의 키를 가상적인 기능 키로 사용할 때 필요한 함수들이 다. 예를 들어 단말기에서 방향 키가 존재하지 않는 경우 번호 키를 매핑 (mapping)해서 사용한다.게임이나 기타 응용 프로그램은 숫자키 외의 키를 받아서 수행된다. 그러나 숫자키 외의 키(조절키)의 존재 여부는 폰 모델에 따라 다르므 로 이런 조절키는 가상 기능키라 정의하고, 이런 가상 기능 키는 , `MH_keyGetVirtualCode` 나 `MH_keyGetKeyCode` 함수로 각각 가상 기능 키 값을 실제 키 값으로, 실제 키 값을 가상 기능 키 값으로 변경하여 일반 응용 프로그램에서 조절키 존재 여부에 상관없이 동작할 수 있도록 해준다. 예를 들어 `MH_VIRGAME_A` 키라는 가상 키가 있으며 이 가상 키는 “7”키나 “1”키 혹은 “SOFT_2”키에 대응될 수 있다.
```c
int a;
a = MH_keyGetVirtualCode(MH_KEY_7); /* a == MH_VIRGAME_A */
/* 관련 자료형 */
#define MH_VIRUP 1 /* UP 기능 키 */
#define MH_VIRDOWN 6 /* DOWN 기능 키 */
#define MH_VIRLEFT 2 /* LEFT 기능 키 */
#define MH_VIRRIGHT 5 /* RIGHT 기능 키 */
#define MH_VIRFIRE 8 /* FIRE(SEL) 기능 키 */
#define MH_VIRGAME_A 9 /* GAME1 기능 키 */
#define MH_VIRGAME_B 10 /* GAME2 기능 키 */
#define MH_VIRGAME_C 11 /* GAME3 기능 키 */
#define MH_VIRGAME_D 12 /* GAME4 기능 키 */
#define MH_VIRSIDE_UP 96 /* SIDE UP 기능 키 */
#define MH_VIRSIDE_DOWN 97 /* SIDE DOWN 기능 키 */
#define MH_VIRSIDE_SEL 98 /* SIDE SEL 기능 키 */
#define MH_VIRSIDE_CLEAR 99 /* SIDE CLEAR 기능 키 */
```
### MH_keyGetVirtualCode
**설명**
주어진 실제 키의 값에 매핑(mapping)되는 가상 키 값을 가져 온다
**프로토타입**
```c
M_Int32 MH_keyGetVirtualCode(M_Int32 keyCode)
```
**매개 변수**
- `keyCode` - [in] 폰의 KeyCode 값. `MH_KeyCode` 참조
**반환 값**
- Virutal Keypad
**부작용**
없음
**참고 항목**
없음
### MH_keyGetKeyCode
**설명**
주어진 가상 키의 값에 매핑(mapping)되는 실제 키 값을 가져 온다
**프로토타입**
```c
M_Int32 MH_keyGetKeyCode(M_Int32 gameAction)
```
**매개 변수**
- `gameAction` - [in] Virtual KeyPad
**반환 값**
폰의 KeyCode 값. `MH_KeyCode` 참조.
**부작용**
없음
**참고 항목**
없음
---
title: "WIPI Wiki"
---
**WIPI 1.2.1** (Wireless Internet Platform for Interoperability) — 2000년대 한국의 피처폰
모바일 표준 플랫폼 규격을 검색 가능한 형태로 정리한 개발자용 레퍼런스입니다.
원본 규격은 무선 인터넷 표준화 포럼 모바일 플랫폼 분과가 작성한
**모바일 표준 플랫폼 규격 V1.2.1** PDF (2003) 와 동시기 배포된 JavaDoc HTML을 기준으로 합니다.
---
## 무엇이 정리되어 있나
| 영역 | 내용 |
|---|---|
| [개요](overview/index.md) | 플랫폼의 목적·범위, 개념적 구조, 단말기 권장 사양 |
| [HAL 규격](hal/index.md) | Handset Adaptation Layer — 단말기 추상화 계층 함수 정의 |
| [C API](c-api/index.md) | WIPI-C 응용프로그래밍 인터페이스 (커널, 그래픽, 네트워크, DB, UI 등) |
| [Java API](java-api/index.md) | WIPI Java (MSF / MSP) 패키지·클래스 레퍼런스 (135 classes) |
| [부속서](appendix/index.md) | EUC-KR 확장, 보안 API, 미디어 확장, 참조 문헌 |
---
## 빠른 진입점
- `MC_*` 로 시작하는 함수가 궁금하다 → [C API](c-api/index.md)
- `MH_*` 로 시작하는 함수가 궁금하다 → [HAL 규격](hal/index.md)
- `org.kwis.*` 클래스가 궁금하다 → [Java API](java-api/index.md)
- 전체 규격서 PDF가 필요하다 → 원본은 무선 인터넷 표준화 포럼 자료를 참조
---
## LLM 친화 진입점
이 사이트는 LLM (Claude, ChatGPT 등) 이 직접 참조하기 좋도록 다음 파일을 함께 배포합니다.
- [`/llms.txt`](llms.txt) — 페이지 인덱스 (요약 + 절대 URL)
- [`/llms-full.txt`](llms-full.txt) — 전체 콘텐츠를 한 파일로 concat
[llmstxt.org](https://llmstxt.org/) 표준을 따릅니다.
---
## 기여 / 이슈
각 페이지 우측 상단의 연필 아이콘으로 GitHub 편집으로 바로 이동할 수 있습니다.
저장소:
---
title: "Java API Reference"
---
JavaDoc HTML 을 Markdown 으로 재구성한 레퍼런스입니다.
## 패키지 목록
- [`java.io`](java/io/index.md) (19 classes)
- [`java.lang`](java/lang/index.md) (41 classes)
- [`java.util`](java/util/index.md) (14 classes)
- [`org.kwis.msf.core`](org/kwis/msf/core/index.md) (3 classes)
- [`org.kwis.msf.io`](org/kwis/msf/io/index.md) (6 classes)
- [`org.kwis.msp.db`](org/kwis/msp/db/index.md) (8 classes)
- [`org.kwis.msp.handset`](org/kwis/msp/handset/index.md) (4 classes)
- [`org.kwis.msp.io`](org/kwis/msp/io/index.md) (2 classes)
- [`org.kwis.msp.lcdui`](org/kwis/msp/lcdui/index.md) (15 classes)
- [`org.kwis.msp.lwc`](org/kwis/msp/lwc/index.md) (31 classes)
- [`org.kwis.msp.media`](org/kwis/msp/media/index.md) (6 classes)
---
title: "Class ByteArrayInputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.InputStream
|
+--java.io.ByteArrayInputStream
```
## 설명
**extends InputStream:**
바이트 형 정보의 입력 스트림을 구현한 클래스.
## 필드 요약
- `protected byte[] buf` — 바이트형 정보가 저장된 버퍼.
- `protected int count` — buf에 저장된 바이트 정보량.
- `protected int mark` — mark기능을 위한 위치정보 저장변수.
- `protected int pos` — buf내에서 다음에 읽을 위치.
## 생성자 요약
- ByteArrayInputStream (byte[] buf) 특정 바이트 배열 정보를 읽을 수 있도록 새로운 ByteArrayInputStream 객체를
생성한다.
- ByteArrayInputStream (byte[] buf,
int offset,
int length) 특정 바이트 배열 정보 중 일부분를 읽을 수 있도록 새로운 ByteArrayInputStream 객체를
생성한다.
## 메서드 요약
- `int available ()` — 현 압력 스트림으로 부터 읽을 수 있는 정보의 갯수를 구한다.
- `void close ()` — 입력스트림을 닫는다.
- `void mark (int readlimit)` — 입력 스트림 내에서 mark정보를 저장한다.
- `boolean markSupported ()` — mark기능을 지원하는지 여부를 구한다.
- `int read ()` — 입력 스트림으로 부터 한 바이트 정보를 읽는다.
- `int read (byte[] buf, int offset, int len)` — 입력 스트림으로 부터 특정 배열로 바이트 정보를 읽는다.
- `void reset ()` — 입력 스트림 내에서 다음에 읽을 위치를 mark메소드를 통해 저장한 값으로 복원한다.
- `long skip (long num_bytes)` — 입력 스트림을 읽지 않고 특정 갯수만큼 건너 뛴다.
## 필드 상세
### buf
```java
protected byte[] buf
```
- 바이트형 정보가 저장된 버퍼.
### pos
```java
protected int pos
```
- buf내에서 다음에 읽을 위치.
### mark
```java
protected int mark
```
- mark기능을 위한 위치정보 저장변수.
### count
```java
protected int count
```
- buf에 저장된 바이트 정보량.
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf)
```
**Parameters:**
- `buf` - 입력스트림을 만들 대상.
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf,
int offset,
int length)
```
**Parameters:**
- `length` - 입력스트림을 만들 대상의 길이.
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
- Following copied from class: `java.io.InputStream`
**Throws:**
- `IOException` -
### available
```java
public int available()
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 현 압력 스트림으로 부터 읽을 수 있는 정보의 갯수.
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 항상 true.
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
### reset
```java
public void reset()
```
**Overrides:**
- `reset` in class `InputStream`
- Following copied from class: `java.io.InputStream`
**Throws:**
- `IOException` -
### skip
```java
public long skip(long num_bytes)
throws IOException
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `num_bytes` - 건너 뛸 갯수.
**Returns:**
- 실제 건너 뛴 갯수.
### read
```java
public int read()
```
**Overrides:**
- `read` in class `InputStream`
**Returns:**
- 읽을 내용이 없으면 -1 아니면 읽은 값.
### read
```java
public int read(byte[] buf,
int offset,
int len)
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽고자 하는 갯수.
**Returns:**
- 읽을 내용이 없으면 -1 아니면 실제 읽은 갯수.## 생성자 상세
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf)
```
**Parameters:**
- `buf` - 입력스트림을 만들 대상.
### ByteArrayInputStream
```java
public ByteArrayInputStream(byte[] buf,
int offset,
int length)
```
**Parameters:**
- `length` - 입력스트림을 만들 대상의 길이.
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
- Following copied from class: `java.io.InputStream`
**Throws:**
- `IOException` -
### available
```java
public int available()
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 현 압력 스트림으로 부터 읽을 수 있는 정보의 갯수.
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 항상 true.
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
### reset
```java
public void reset()
```
**Overrides:**
- `reset` in class `InputStream`
- Following copied from class: `java.io.InputStream`
**Throws:**
- `IOException` -
### skip
```java
public long skip(long num_bytes)
throws IOException
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `num_bytes` - 건너 뛸 갯수.
**Returns:**
- 실제 건너 뛴 갯수.
### read
```java
public int read()
```
**Overrides:**
- `read` in class `InputStream`
**Returns:**
- 읽을 내용이 없으면 -1 아니면 읽은 값.
### read
```java
public int read(byte[] buf,
int offset,
int len)
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽고자 하는 갯수.
**Returns:**
- 읽을 내용이 없으면 -1 아니면 실제 읽은 갯수.## 메서드 상세
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `InputStream`
- Following copied from class: `java.io.InputStream`
**Throws:**
- `IOException` -
### available
```java
public int available()
```
**Overrides:**
- `available` in class `InputStream`
**Returns:**
- 현 압력 스트림으로 부터 읽을 수 있는 정보의 갯수.
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 항상 true.
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
### reset
```java
public void reset()
```
**Overrides:**
- `reset` in class `InputStream`
- Following copied from class: `java.io.InputStream`
**Throws:**
- `IOException` -
### skip
```java
public long skip(long num_bytes)
throws IOException
```
**Overrides:**
- `skip` in class `InputStream`
**Parameters:**
- `num_bytes` - 건너 뛸 갯수.
**Returns:**
- 실제 건너 뛴 갯수.
### read
```java
public int read()
```
**Overrides:**
- `read` in class `InputStream`
**Returns:**
- 읽을 내용이 없으면 -1 아니면 읽은 값.
### read
```java
public int read(byte[] buf,
int offset,
int len)
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽고자 하는 갯수.
**Returns:**
- 읽을 내용이 없으면 -1 아니면 실제 읽은 갯수.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ByteArrayOutputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
|
+--java.io.ByteArrayOutputStream
```
## 설명
**extends OutputStream:**
바이트 형 정보의 출력 스트림을 구현한 클래스.
## 필드 요약
- `protected byte[] buf` — 출력된 바이트형 정보가 저장되는 크기가 자동증가되는 버퍼.
- `protected int count` — 출력된 바이트 갯수.
## 생성자 요약
- ByteArrayOutputStream () 디폴트 사이즈 출력버퍼를 가진 객체를 생성한다.
- ByteArrayOutputStream (int size) 출력버퍼 사이즈를 지정해서 객체를 생성한다.
## 메서드 요약
- `void reset ()` — 출력된 값들을 모두 버린다.
- `int size ()` — 출력된 값들의 갯수를 구한다.
- `byte[] toByteArray ()` — 출력된 값들을 새로운 바이트 배열 객체로 구한다.
- `String toString ()` — 출력된 내용을 문자열로 바꾼다.
- `void write (byte[] buffer, int offset, int add)` — 특정 바이트 배열의 일부분을 출력한다.
- `void write (int oneByte)` — 한 바이트 값을 출력한다.
## 필드 상세
### buf
```java
protected byte[] buf
```
- 출력된 바이트형 정보가 저장되는 크기가 자동증가되는 버퍼.
### count
```java
protected int count
```
- 출력된 바이트 갯수.
### ByteArrayOutputStream
```java
public ByteArrayOutputStream()
```
- 디폴트 사이즈 출력버퍼를 가진 객체를 생성한다.
### ByteArrayOutputStream
```java
public ByteArrayOutputStream(int size)
```
**Parameters:**
- `size` - 출력버퍼 사이즈.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 출력된 내용이 담긴 문자열.
### reset
```java
public void reset()
```
- 출력된 값들을 모두 버린다.
### size
```java
public int size()
```
**Returns:**
- 출력된 값들의 갯수.
### toByteArray
```java
public byte[] toByteArray()
```
**Returns:**
- 출력된 값이 복사된 바이트 배열.
### write
```java
public void write(int oneByte)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `oneByte` - 출력할 값.
### write
```java
public void write(byte[] buffer,
int offset,
int add)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `add` - 출력될 갯수.## 생성자 상세
### ByteArrayOutputStream
```java
public ByteArrayOutputStream()
```
- 디폴트 사이즈 출력버퍼를 가진 객체를 생성한다.
### ByteArrayOutputStream
```java
public ByteArrayOutputStream(int size)
```
**Parameters:**
- `size` - 출력버퍼 사이즈.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 출력된 내용이 담긴 문자열.
### reset
```java
public void reset()
```
- 출력된 값들을 모두 버린다.
### size
```java
public int size()
```
**Returns:**
- 출력된 값들의 갯수.
### toByteArray
```java
public byte[] toByteArray()
```
**Returns:**
- 출력된 값이 복사된 바이트 배열.
### write
```java
public void write(int oneByte)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `oneByte` - 출력할 값.
### write
```java
public void write(byte[] buffer,
int offset,
int add)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `add` - 출력될 갯수.## 메서드 상세
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 출력된 내용이 담긴 문자열.
### reset
```java
public void reset()
```
- 출력된 값들을 모두 버린다.
### size
```java
public int size()
```
**Returns:**
- 출력된 값들의 갯수.
### toByteArray
```java
public byte[] toByteArray()
```
**Returns:**
- 출력된 값이 복사된 바이트 배열.
### write
```java
public void write(int oneByte)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `oneByte` - 출력할 값.
### write
```java
public void write(byte[] buffer,
int offset,
int add)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `add` - 출력될 갯수.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface DataInput"
---
`package java.io`
```text
public void readFully(byte[] b)
throws IOException
```
## 설명
**Parameters:**
- `b` - 읽은 정보를 저장할 배열.
**Throws:**
- `IOException` -
### readFully
**Parameters:**
- `len` - 읽을 정보 갯수.
**Throws:**
- `IOException` -
### skipBytes
**Parameters:**
- `n` - 건너 뛸 갯수.
**Returns:**
- 실제로 건너 뛴 갯수.
**Throws:**
- `IOException` -
### readBoolean
**Returns:**
- boolean 값.
**Throws:**
- `IOException` -
### readByte
**Returns:**
- 읽은 한 signed 바이트.
**Throws:**
- `IOException` -
### readUnsignedByte
**Returns:**
- 읽은 한 unsigned 바이트가 변환된 정수값.
**Throws:**
- `IOException` -
### readShort
**Returns:**
- 읽은 signed short형 정보.
**Throws:**
- `IOException` -
### readUnsignedShort
**Returns:**
- 읽은 두 unsigned short가 변환된 정수값.
**Throws:**
- `IOException` -
### readChar
**Returns:**
- 읽은 char형 정보.
**Throws:**
- `IOException` -
### readInt
**Returns:**
- 읽은 정수형 정보.
**Throws:**
- `IOException` -
### readLong
**Returns:**
- 읽은 Long형 정보.
**Throws:**
- `IOException` -
### readFloat
### readDouble
### readUTF
**Returns:**
- 문자열.
**Throws:**
- `IOException` -## 메서드 요약
- `boolean readBoolean ()` — 입력 스트림에서 한 바이트를 읽은 뒤 0이 아니면 true 0이면 false를 리턴한다.
- `byte readByte ()` — 입력 스트림에서 한 바이트를 읽는다.
- `char readChar ()` — 입력 스트림에서 char형 정보를 읽는다.
- `double readDouble ()`
- `float readFloat ()`
- `void readFully (byte[] b)` — 바이트 배열로 정보를 읽는다.
- `void readFully (byte[] b, int off, int len)` — 바이트 배열 일부분으로 정보를 읽는다.
- `int readInt ()` — 입력 스트림에서 정수형 정보를 읽는다.
- `long readLong ()` — 입력 스트림에서 Long형 정보를 읽는다.
- `short readShort ()` — 입력 스트림에서 두 바이트를 읽는다.
- `int readUnsignedByte ()` — 입력 스트림에서 한 바이트를 읽고 unsigned 바이트로 처리해 정수형 정보로 변환 후 리턴한다.
- `int readUnsignedShort ()` — 입력 스트림에서 두 바이트를 읽고 unsigned short로 처리해 정수형 정보로 변환 후 리턴한다.
- `String readUTF ()` — 입력 스트림에서 UTF형식 정보를 읽어 문자열을 만들어 리턴한다.
- `int skipBytes (int n)` — 입력 스트림에서 정보를 읽지 않고 건너뛴다.
## 메서드 상세
### readFully
```java
public void readFully(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 읽은 정보를 저장할 배열.
**Throws:**
- `IOException` -
### readFully
```java
public void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽을 정보 갯수.
**Throws:**
- `IOException` -
### skipBytes
```java
public int skipBytes(int n)
throws IOException
```
**Parameters:**
- `n` - 건너 뛸 갯수.
**Returns:**
- 실제로 건너 뛴 갯수.
**Throws:**
- `IOException` -
### readBoolean
```java
public boolean readBoolean()
throws IOException
```
**Returns:**
- boolean 값.
**Throws:**
- `IOException` -
### readByte
```java
public byte readByte()
throws IOException
```
**Returns:**
- 읽은 한 signed 바이트.
**Throws:**
- `IOException` -
### readUnsignedByte
```java
public int readUnsignedByte()
throws IOException
```
**Returns:**
- 읽은 한 unsigned 바이트가 변환된 정수값.
**Throws:**
- `IOException` -
### readShort
```java
public short readShort()
throws IOException
```
**Returns:**
- 읽은 signed short형 정보.
**Throws:**
- `IOException` -
### readUnsignedShort
```java
public int readUnsignedShort()
throws IOException
```
**Returns:**
- 읽은 두 unsigned short가 변환된 정수값.
**Throws:**
- `IOException` -
### readChar
```java
public char readChar()
throws IOException
```
**Returns:**
- 읽은 char형 정보.
**Throws:**
- `IOException` -
### readInt
```java
public int readInt()
throws IOException
```
**Returns:**
- 읽은 정수형 정보.
**Throws:**
- `IOException` -
### readLong
```java
public long readLong()
throws IOException
```
**Returns:**
- 읽은 Long형 정보.
**Throws:**
- `IOException` -
### readFloat
```java
public float readFloat()
throws IOException
```
### readDouble
```java
public double readDouble()
throws IOException
```
### readUTF
```java
public String readUTF()
throws IOException
```
**Returns:**
- 문자열.
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class DataInputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.InputStream
|
+--java.io.DataInputStream
```
## 설명
**All Implemented Interfaces:**
- `DataInput`
**implements DataInput:**
바이트 정보를 읽어서 다른 타입의 정보로 변환할 수 있도록
만든 입력스트림 클래스.
## 필드 요약
- `protected InputStream in` — 실제 바이트 정보를 읽어올 입력 스트림.
## 생성자 요약
- DataInputStream ( InputStream in) 새로운 객체를 만든다.
## 메서드 요약
- `int available ()` — 입력 스트림에서 읽을 수 있는 정보량을 구한다.
- `void close ()` — 입력 스트림을 닫는다.
- `void mark (int readlimit)` — 입력 스트림에 mark정보를 설정한다.
- `boolean markSupported ()` — 입력 스트림이 mark기능을 지원하는지 여부를 구한다.
- `int read ()` — 한 바이트를 읽는다.
- `int read (byte[] b)` — 바이트 배열로 읽어 들인다.
- `int read (byte[] b, int off, int len)` — 바이트 배열 일부분으로 읽어 들인다.
- `boolean readBoolean ()` — 입력 스트림에서 한 바이트를 읽은 뒤 0이 아니면 true 0이면 false를 리턴한다.
- `byte readByte ()` — 입력 스트림에서 한 바이트를 읽는다.
- `char readChar ()` — 입력 스트림에서 char형 정보를 읽는다.
- `double readDouble ()`
- `float readFloat ()`
- `void readFully (byte[] b)` — 바이트 배열로 읽어 들인다. read와 다른 점은 바이트 배열이 다 차기 전에 입력받을 정보가 없어지면 EOFException을 발생한다는 점이다.
- `void readFully (byte[] b, int off, int len)` — 바이트 배열 일부분으로 읽어 들인다. read와 다른 점은 원하는 양만큼 읽기 전에 입력받을 정보가 없어지면 EOFException을 발생한다는 점이다.
- `int readInt ()` — 입력 스트림에서 정수형 정보를 읽는다.
- `long readLong ()` — 입력 스트림에서 Long형 정보를 읽는다.
- `short readShort ()` — 입력 스트림에서 두 바이트를 읽는다.
- `int readUnsignedByte ()` — 입력 스트림에서 한 바이트를 읽고 unsigned 바이트로 처리해 정수형 정보로 변환 후 리턴한다.
- `int readUnsignedShort ()` — 입력 스트림에서 두 바이트를 읽고 unsigned short로 처리해 정수형 정보로 변환 후 리턴한다.
- `String readUTF ()` — 입력 스트림에서 UTF형식 정보를 읽어 문자열을 만들어 리턴한다.
- `static String readUTF ( DataInput in)` — 특정 입력 스트림에서 UTF형식 정보를 읽어 문자열을 만들어 리턴한다.
- `void reset ()` — 입력 스트림의 읽는 위치를 mark정보에 설정된 위치로 변경한다.
- `long skip (long n)` — 입력 스트림에서 정보를 읽지 않고 건너뛴다.
- `int skipBytes (int n)` — 입력 스트림에서 정보를 읽지 않고 건너뛴다.
## 필드 상세
### in
```java
protected InputStream in
```
- 실제 바이트 정보를 읽어올 입력 스트림.
### DataInputStream
```java
public DataInputStream(InputStream in)
```
**Parameters:**
- `in` - 실제 바이트 정보를 읽어올 입력 스트림.
### read
```java
public int read()
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Returns:**
- 읽은 바이트 정보.
**Throws:**
- `IOException` -
### read
```java
public final int read(byte[] b)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Returns:**
- 실제 읽은 바이트 수, 읽은 바이트가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public final int read(byte[] b,
int off,
int len)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽을 바이트 수.
**Returns:**
- 실제 읽은 바이트 수, 읽은 바이트가 없으면 -1.
**Throws:**
- `IOException` -
### readFully
```java
public final void readFully(byte[] b)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Throws:**
- `EOFException` - 읽을 량을 채우지 못할 발생.
### readFully
```java
public final void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `len` - 읽을 바이트 수.
**Throws:**
- `IOException` -
### skipBytes
```java
public final int skipBytes(int n)
throws IOException
```
**Specified by:**
- `skipBytes` in interface `DataInput`
**Parameters:**
- `n` - 건너 뛸 갯수.
**Returns:**
- 실제로 건너 뛴 갯수.
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `InputStream`
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 지원하면 true 아니면 false.
### readBoolean
```java
public final boolean readBoolean()
throws IOException
```
**Specified by:**
- `readBoolean` in interface `DataInput`
**Returns:**
- boolean 값.
**Throws:**
- `IOException` -
### readByte
```java
public final byte readByte()
throws IOException
```
**Specified by:**
- `readByte` in interface `DataInput`
**Returns:**
- 읽은 한 signed 바이트.
**Throws:**
- `IOException` -
### readUnsignedByte
```java
public final int readUnsignedByte()
throws IOException
```
**Specified by:**
- `readUnsignedByte` in interface `DataInput`
**Returns:**
- 읽은 한 unsigned 바이트가 변환된 정수값.
**Throws:**
- `IOException` -
### readChar
```java
public final char readChar()
throws IOException
```
**Specified by:**
- `readChar` in interface `DataInput`
**Returns:**
- 읽은 char형 정보.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readShort
```java
public final short readShort()
throws IOException
```
**Specified by:**
- `readShort` in interface `DataInput`
**Returns:**
- 읽은 signed short형 정보.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readUnsignedShort
```java
public final int readUnsignedShort()
throws IOException
```
**Specified by:**
- `readUnsignedShort` in interface `DataInput`
**Returns:**
- 읽은 두 unsigned short가 변환된 정수값.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readInt
```java
public final int readInt()
throws IOException
```
**Specified by:**
- `readInt` in interface `DataInput`
**Returns:**
- 읽은 정수형 정보.
**Throws:**
- `EOFException` - 4바이트를 읽을 수 없을 때 발생.
### readLong
```java
public final long readLong()
throws IOException
```
**Specified by:**
- `readLong` in interface `DataInput`
**Returns:**
- 읽은 Long형 정보.
**Throws:**
- `EOFException` - 8바이트를 읽을 수 없을 때 발생.
### readFloat
```java
public final float readFloat()
throws IOException
```
**Specified by:**
- `readFloat` in interface `DataInput`
### readDouble
```java
public final double readDouble()
throws IOException
```
**Specified by:**
- `readDouble` in interface `DataInput`
### readUTF
```java
public final String readUTF()
throws IOException
```
**Specified by:**
- `readUTF` in interface `DataInput`
**Returns:**
- 문자열.
**Throws:**
- `IOException` -
### readUTF
```java
public static final String readUTF(DataInput in)
throws IOException
```
**Parameters:**
- `in` - UTF형식 정보를 읽어들일 입력 스트림.
**Returns:**
- 문자열.
**Throws:**
- `IOException` -
### available
```java
public int available()
throws IOException
```
**Overrides:**
- `taInput.html#readUTF()">readUTF` in interface `DataInput`
**Returns:**
- 臾몄
## 생성자 상세
### DataInputStream
```java
public DataInputStream(InputStream in)
```
**Parameters:**
- `in` - 실제 바이트 정보를 읽어올 입력 스트림.
### read
```java
public int read()
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Returns:**
- 읽은 바이트 정보.
**Throws:**
- `IOException` -
### read
```java
public final int read(byte[] b)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Returns:**
- 실제 읽은 바이트 수, 읽은 바이트가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public final int read(byte[] b,
int off,
int len)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽을 바이트 수.
**Returns:**
- 실제 읽은 바이트 수, 읽은 바이트가 없으면 -1.
**Throws:**
- `IOException` -
### readFully
```java
public final void readFully(byte[] b)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Throws:**
- `EOFException` - 읽을 량을 채우지 못할 발생.
### readFully
```java
public final void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `len` - 읽을 바이트 수.
**Throws:**
- `IOException` -
### skipBytes
```java
public final int skipBytes(int n)
throws IOException
```
**Specified by:**
- `skipBytes` in interface `DataInput`
**Parameters:**
- `n` - 건너 뛸 갯수.
**Returns:**
- 실제로 건너 뛴 갯수.
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `InputStream`
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 지원하면 true 아니면 false.
### readBoolean
```java
public final boolean readBoolean()
throws IOException
```
**Specified by:**
- `readBoolean` in interface `DataInput`
**Returns:**
- boolean 값.
**Throws:**
- `IOException` -
### readByte
```java
public final byte readByte()
throws IOException
```
**Specified by:**
- `readByte` in interface `DataInput`
**Returns:**
- 읽은 한 signed 바이트.
**Throws:**
- `IOException` -
### readUnsignedByte
```java
public final int readUnsignedByte()
throws IOException
```
**Specified by:**
- `readUnsignedByte` in interface `DataInput`
**Returns:**
- 읽은 한 unsigned 바이트가 변환된 정수값.
**Throws:**
- `IOException` -
### readChar
```java
public final char readChar()
throws IOException
```
**Specified by:**
- `readChar` in interface `DataInput`
**Returns:**
- 읽은 char형 정보.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readShort
```java
public final short readShort()
throws IOException
```
**Specified by:**
- `readShort` in interface `DataInput`
**Returns:**
- 읽은 signed short형 정보.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readUnsignedShort
```java
public final int readUnsignedShort()
throws IOException
```
**Specified by:**
- `readUnsignedShort` in interface `DataInput`
**Returns:**
- 읽은 두 unsigned short가 변환된 정수값.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readInt
```java
public final int readInt()
throws IOException
```
**Specified by:**
- `readInt` in interface `DataInput`
**Returns:**
- 읽은 정수형 정보.
**Throws:**
- `EOFException` - 4바이트를 읽을 수 없을 때 발생.
### readLong
```java
public final long readLong()
throws IOException
```
**Specified by:**
- `readLong` in interface `DataInput`
**Returns:**
- 읽은 Long형 정보.
**Throws:**
- `EOFException` - 8바이트를 읽을 수 없을 때 발생.
### readFloat
```java
public final float readFloat()
throws IOException
```
**Specified by:**
- `readFloat` in interface `DataInput`
### readDouble
```java
public final double readDouble()
throws IOException
```
**Specified by:**
- `readDouble` in interface `DataInput`
### readUTF
```java
public final String readUTF()
throws IOException
```
**Specified by:**
- `readUTF` in interface `DataInput`
**Returns:**
- 문자열.
**Throws:**
- `IOException` -
### readUTF
```java
public static final String readUTF(DataInput in)
throws IOException
```
**Parameters:**
- `in` - UTF형식 정보를 읽어들일 입력 스트림.
**Returns:**
- 문자열.
**Throws:**
- `IOException` -
### available
```java
public int available()
throws IOException
```
**Overrides:**
- `taInput.html#readUTF()">readUTF` in interface `DataInput`
**Returns:**
- 臾몄
## 메서드 상세
### read
```java
public int read()
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Returns:**
- 읽은 바이트 정보.
**Throws:**
- `IOException` -
### read
```java
public final int read(byte[] b)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Returns:**
- 실제 읽은 바이트 수, 읽은 바이트가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public final int read(byte[] b,
int off,
int len)
throws IOException
```
**Overrides:**
- `read` in class `InputStream`
**Parameters:**
- `len` - 읽을 바이트 수.
**Returns:**
- 실제 읽은 바이트 수, 읽은 바이트가 없으면 -1.
**Throws:**
- `IOException` -
### readFully
```java
public final void readFully(byte[] b)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Throws:**
- `EOFException` - 읽을 량을 채우지 못할 발생.
### readFully
```java
public final void readFully(byte[] b,
int off,
int len)
throws IOException
```
**Specified by:**
- `readFully` in interface `DataInput`
**Parameters:**
- `len` - 읽을 바이트 수.
**Throws:**
- `IOException` -
### skipBytes
```java
public final int skipBytes(int n)
throws IOException
```
**Specified by:**
- `skipBytes` in interface `DataInput`
**Parameters:**
- `n` - 건너 뛸 갯수.
**Returns:**
- 실제로 건너 뛴 갯수.
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readlimit)
```
**Overrides:**
- `mark` in class `InputStream`
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `InputStream`
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `InputStream`
**Returns:**
- 지원하면 true 아니면 false.
### readBoolean
```java
public final boolean readBoolean()
throws IOException
```
**Specified by:**
- `readBoolean` in interface `DataInput`
**Returns:**
- boolean 값.
**Throws:**
- `IOException` -
### readByte
```java
public final byte readByte()
throws IOException
```
**Specified by:**
- `readByte` in interface `DataInput`
**Returns:**
- 읽은 한 signed 바이트.
**Throws:**
- `IOException` -
### readUnsignedByte
```java
public final int readUnsignedByte()
throws IOException
```
**Specified by:**
- `readUnsignedByte` in interface `DataInput`
**Returns:**
- 읽은 한 unsigned 바이트가 변환된 정수값.
**Throws:**
- `IOException` -
### readChar
```java
public final char readChar()
throws IOException
```
**Specified by:**
- `readChar` in interface `DataInput`
**Returns:**
- 읽은 char형 정보.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readShort
```java
public final short readShort()
throws IOException
```
**Specified by:**
- `readShort` in interface `DataInput`
**Returns:**
- 읽은 signed short형 정보.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readUnsignedShort
```java
public final int readUnsignedShort()
throws IOException
```
**Specified by:**
- `readUnsignedShort` in interface `DataInput`
**Returns:**
- 읽은 두 unsigned short가 변환된 정수값.
**Throws:**
- `EOFException` - 2바이트를 읽을 수 없을 때 발생.
### readInt
```java
public final int readInt()
throws IOException
```
**Specified by:**
- `readInt` in interface `DataInput`
**Returns:**
- 읽은 정수형 정보.
**Throws:**
- `EOFException` - 4바이트를 읽을 수 없을 때 발생.
### readLong
```java
public final long readLong()
throws IOException
```
**Specified by:**
- `readLong` in interface `DataInput`
**Returns:**
- 읽은 Long형 정보.
**Throws:**
- `EOFException` - 8바이트를 읽을 수 없을 때 발생.
### readFloat
```java
public final float readFloat()
throws IOException
```
**Specified by:**
- `readFloat` in interface `DataInput`
### readDouble
```java
public final double readDouble()
throws IOException
```
**Specified by:**
- `readDouble` in interface `DataInput`
### readUTF
```java
public final String readUTF()
throws IOException
```
**Specified by:**
- `readUTF` in interface `DataInput`
**Returns:**
- 문자열.
**Throws:**
- `IOException` -
### readUTF
```java
public static final String readUTF(DataInput in)
throws IOException
```
**Parameters:**
- `in` - UTF형식 정보를 읽어들일 입력 스트림.
**Returns:**
- 문자열.
**Throws:**
- `IOException` -
### available
```java
public int available()
throws IOException
```
**Overrides:**
- `taInput.html#readUTF()">readUTF` in interface `DataInput`
**Returns:**
- 臾몄
---
title: "Interface DataOutput"
---
`package java.io`
```text
public void write(int b)
throws IOException
```
## 설명
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### write
**Parameters:**
- `b` - 출력할 바이트 배열.
**Throws:**
- `IOException` -
### write
**Parameters:**
- `len` - 출력할 갯수.
**Throws:**
- `IOException` -
### writeBoolean
**Parameters:**
- `v` - 출력할 boolean변수.
**Throws:**
- `IOException` -
### writeByte
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeShort
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeChar
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeInt
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeLong
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeChars
**Parameters:**
- `s` - 출력할 문자열.
**Throws:**
- `IOException` -
### writeFloat
### writeDouble
### writeUTF
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -## 메서드 요약
- `void write (byte[] b)` — 바이트 배열 전체를 출력한다.
- `void write (byte[] b, int off, int len)` — 바이트 배열의 일부분을 출력한다.
- `void write (int b)` — 매개변수로 받은 변수 값 중 상위 24비트는 버리고 나머지 8비트만 출력한다.
- `void writeBoolean (boolean v)` — 매개변수 값이 true이면 1 false이면 0을 출력한다.
- `void writeByte (int v)` — 매개변수로 받은 변수 값 중 상위 24비트는 버리고 나머지 8비트만 출력한다.
- `void writeChar (int v)` — 매개변수로 받은 변수 값 중 상위 16비트는 버리고 8~15비트까지 출력하고 이어 하위 8비트를 출력한다.
- `void writeChars ( String s)` — 문자열을 구성하는 문자들을 인덱스 0 부터 차례대로 출력한다.
- `void writeDouble (double v)`
- `void writeFloat (float v)`
- `void writeInt (int v)` — 매개변수로 받은 변수 값 중 상위 8비트부터 차례대로 8비트 단위로 출력한다.
- `void writeLong (long v)` — 매개변수로 받은 변수 값 중 상위 8비트부터 차례대로 8비트 단위로 출력한다.
- `void writeShort (int v)` — 매개변수로 받은 변수 값 중 상위 16비트는 버리고 8~15비트까지 출력하고 이어 하위 8비트를 출력한다.
- `void writeUTF ( String str)` — 문자열을 UTF형식으로 바꿔 출력한다.
## 메서드 상세
### write
```java
public void write(int b)
throws IOException
```
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] b)
throws IOException
```
**Parameters:**
- `b` - 출력할 바이트 배열.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] b,
int off,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 갯수.
**Throws:**
- `IOException` -
### writeBoolean
```java
public void writeBoolean(boolean v)
throws IOException
```
**Parameters:**
- `v` - 출력할 boolean변수.
**Throws:**
- `IOException` -
### writeByte
```java
public void writeByte(int v)
throws IOException
```
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeShort
```java
public void writeShort(int v)
throws IOException
```
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeChar
```java
public void writeChar(int v)
throws IOException
```
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeInt
```java
public void writeInt(int v)
throws IOException
```
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeLong
```java
public void writeLong(long v)
throws IOException
```
**Parameters:**
- `v` - 출력할 정보.
**Throws:**
- `IOException` -
### writeChars
```java
public void writeChars(String s)
throws IOException
```
**Parameters:**
- `s` - 출력할 문자열.
**Throws:**
- `IOException` -
### writeFloat
```java
public void writeFloat(float v)
throws IOException
```
### writeDouble
```java
public void writeDouble(double v)
throws IOException
```
### writeUTF
```java
public void writeUTF(String str)
throws IOException
```
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class DataOutputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
|
+--java.io.DataOutputStream
```
## 설명
**All Implemented Interfaces:**
- `DataOutput`
**implements DataOutput:**
자바에서 지원하는 타입 객체를 바이트 스트림으로 변환해 출력할 수 있도록
만든 출력 스트림 클래스.
## 필드 요약
- `protected OutputStream out` — 실제 출력할 출력스트림.
- `protected int written` — out로 출력한 바이트 갯수.
## 생성자 요약
- DataOutputStream ( OutputStream out) 새로운 객체를 만든다.
## 메서드 요약
- `void close ()` — 출력 스트림을 닫는다.
- `void flush ()` — 중간 버퍼에 남아있는 정보들을 실제 출력하도록 한다.
- `void write (byte[] buf, int offset, int len)` — 바이트 배열의 일부분을 출력한다.
- `void write (int b)` — 매개변수로 받은 변수 값 중 상위 24비트는 버리고 나머지 8비트만 출력한다.
- `void writeBoolean (boolean b)` — 매개변수 값이 true이면 1 false이면 0을 출력한다.
- `void writeByte (int b)` — 매개변수로 받은 변수 값 중 상위 24비트는 버리고 나머지 8비트만 출력한다.
- `void writeChar (int c)` — 매개변수로 받은 변수 값 중 상위 16비트는 버리고 8~15비트까지 출력하고 이어 하위 8비트를 출력한다.
- `void writeChars ( String s)` — 문자열을 구성하는 문자들을 인덱스 0 부터 차례대로 출력한다.
- `void writeDouble (double v)`
- `void writeFloat (float v)`
- `void writeInt (int i)` — 매개변수로 받은 변수 값 중 상위 8비트부터 차례대로 8비트 단위로 출력한다.
- `void writeLong (long l)` — 매개변수로 받은 변수 값 중 상위 8비트부터 차례대로 8비트 단위로 출력한다.
- `void writeShort (int s)` — 매개변수로 받은 변수 값 중 상위 16비트는 버리고 8~15비트까지 출력하고 이어 하위 8비트를 출력한다.
- `void writeUTF ( String s)` — 문자열을 UTF형식으로 바꿔 출력한다.
## 필드 상세
### written
```java
protected int written
```
- out로 출력한 바이트 갯수.
### out
```java
protected OutputStream out
```
- 실제 출력할 출력스트림.
### DataOutputStream
```java
public DataOutputStream(OutputStream out)
```
**Parameters:**
- `out` - 실제 바이트 정보가 출력될 출력 스트림.
### write
```java
public void write(int b)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] buf,
int offset,
int len)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 출력할 갯수.
**Throws:**
- `IOException` -
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `OutputStream`
- Following copied from class: `java.io.OutputStream`
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` -
### writeBoolean
```java
public final void writeBoolean(boolean b)
throws IOException
```
**Specified by:**
- `writeBoolean` in interface `DataOutput`
**Parameters:**
- `b` - 출력할 boolean변수.
**Throws:**
- `IOException` -
### writeByte
```java
public final void writeByte(int b)
throws IOException
```
**Specified by:**
- `writeByte` in interface `DataOutput`
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### writeShort
```java
public final void writeShort(int s)
throws IOException
```
**Specified by:**
- `writeShort` in interface `DataOutput`
**Parameters:**
- `s` - 출력할 정보.
**Throws:**
- `IOException` -
### writeChar
```java
public final void writeChar(int c)
throws IOException
```
**Specified by:**
- `writeChar` in interface `DataOutput`
**Parameters:**
- `c` - 출력할 정보.
**Throws:**
- `IOException` -
### writeInt
```java
public final void writeInt(int i)
throws IOException
```
**Specified by:**
- `writeInt` in interface `DataOutput`
**Parameters:**
- `i` - 출력할 정보.
**Throws:**
- `IOException` -
### writeLong
```java
public final void writeLong(long l)
throws IOException
```
**Specified by:**
- `writeLong` in interface `DataOutput`
**Parameters:**
- `l` - 출력할 정보.
**Throws:**
- `IOException` -
### writeFloat
```java
public final void writeFloat(float v)
throws IOException
```
**Specified by:**
- `writeFloat` in interface `DataOutput`
### writeDouble
```java
public final void writeDouble(double v)
throws IOException
```
**Specified by:**
- `writeDouble` in interface `DataOutput`
### writeChars
```java
public final void writeChars(String s)
throws IOException
```
**Specified by:**
- `writeChars` in interface `DataOutput`
**Parameters:**
- `s` - 출력할 문자열.
**Throws:**
- `IOException` -
### writeUTF
```java
public final void writeUTF(String s)
throws IOException
```
**Specified by:**
- `writeUTF` in interface `DataOutput`
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -## 생성자 상세
### DataOutputStream
```java
public DataOutputStream(OutputStream out)
```
**Parameters:**
- `out` - 실제 바이트 정보가 출력될 출력 스트림.
### write
```java
public void write(int b)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] buf,
int offset,
int len)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 출력할 갯수.
**Throws:**
- `IOException` -
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `OutputStream`
- Following copied from class: `java.io.OutputStream`
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` -
### writeBoolean
```java
public final void writeBoolean(boolean b)
throws IOException
```
**Specified by:**
- `writeBoolean` in interface `DataOutput`
**Parameters:**
- `b` - 출력할 boolean변수.
**Throws:**
- `IOException` -
### writeByte
```java
public final void writeByte(int b)
throws IOException
```
**Specified by:**
- `writeByte` in interface `DataOutput`
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### writeShort
```java
public final void writeShort(int s)
throws IOException
```
**Specified by:**
- `writeShort` in interface `DataOutput`
**Parameters:**
- `s` - 출력할 정보.
**Throws:**
- `IOException` -
### writeChar
```java
public final void writeChar(int c)
throws IOException
```
**Specified by:**
- `writeChar` in interface `DataOutput`
**Parameters:**
- `c` - 출력할 정보.
**Throws:**
- `IOException` -
### writeInt
```java
public final void writeInt(int i)
throws IOException
```
**Specified by:**
- `writeInt` in interface `DataOutput`
**Parameters:**
- `i` - 출력할 정보.
**Throws:**
- `IOException` -
### writeLong
```java
public final void writeLong(long l)
throws IOException
```
**Specified by:**
- `writeLong` in interface `DataOutput`
**Parameters:**
- `l` - 출력할 정보.
**Throws:**
- `IOException` -
### writeFloat
```java
public final void writeFloat(float v)
throws IOException
```
**Specified by:**
- `writeFloat` in interface `DataOutput`
### writeDouble
```java
public final void writeDouble(double v)
throws IOException
```
**Specified by:**
- `writeDouble` in interface `DataOutput`
### writeChars
```java
public final void writeChars(String s)
throws IOException
```
**Specified by:**
- `writeChars` in interface `DataOutput`
**Parameters:**
- `s` - 출력할 문자열.
**Throws:**
- `IOException` -
### writeUTF
```java
public final void writeUTF(String s)
throws IOException
```
**Specified by:**
- `writeUTF` in interface `DataOutput`
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -## 메서드 상세
### write
```java
public void write(int b)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] buf,
int offset,
int len)
throws IOException
```
**Specified by:**
- `write` in interface `DataOutput`
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 출력할 갯수.
**Throws:**
- `IOException` -
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `OutputStream`
- Following copied from class: `java.io.OutputStream`
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `OutputStream`
**Throws:**
- `IOException` -
### writeBoolean
```java
public final void writeBoolean(boolean b)
throws IOException
```
**Specified by:**
- `writeBoolean` in interface `DataOutput`
**Parameters:**
- `b` - 출력할 boolean변수.
**Throws:**
- `IOException` -
### writeByte
```java
public final void writeByte(int b)
throws IOException
```
**Specified by:**
- `writeByte` in interface `DataOutput`
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### writeShort
```java
public final void writeShort(int s)
throws IOException
```
**Specified by:**
- `writeShort` in interface `DataOutput`
**Parameters:**
- `s` - 출력할 정보.
**Throws:**
- `IOException` -
### writeChar
```java
public final void writeChar(int c)
throws IOException
```
**Specified by:**
- `writeChar` in interface `DataOutput`
**Parameters:**
- `c` - 출력할 정보.
**Throws:**
- `IOException` -
### writeInt
```java
public final void writeInt(int i)
throws IOException
```
**Specified by:**
- `writeInt` in interface `DataOutput`
**Parameters:**
- `i` - 출력할 정보.
**Throws:**
- `IOException` -
### writeLong
```java
public final void writeLong(long l)
throws IOException
```
**Specified by:**
- `writeLong` in interface `DataOutput`
**Parameters:**
- `l` - 출력할 정보.
**Throws:**
- `IOException` -
### writeFloat
```java
public final void writeFloat(float v)
throws IOException
```
**Specified by:**
- `writeFloat` in interface `DataOutput`
### writeDouble
```java
public final void writeDouble(double v)
throws IOException
```
**Specified by:**
- `writeDouble` in interface `DataOutput`
### writeChars
```java
public final void writeChars(String s)
throws IOException
```
**Specified by:**
- `writeChars` in interface `DataOutput`
**Parameters:**
- `s` - 출력할 문자열.
**Throws:**
- `IOException` -
### writeUTF
```java
public final void writeUTF(String s)
throws IOException
```
**Specified by:**
- `writeUTF` in interface `DataOutput`
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class EOFException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.EOFException
```
## 설명
**extends IOException:**
입력 스트림에서 더 이상 읽을 정보가 없을 때 발생하는 exception 클래스.
## 생성자 요약
- EOFException () EOFException객체를 생성한다.
- EOFException ( String s) EOFException을 생성한다.
## 생성자 상세
### EOFException
```java
public EOFException()
```
- EOFException객체를 생성한다.
### EOFException
```java
public EOFException(String s)
```
**Parameters:**
- `s` - EOFException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class IOException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
```
## 설명
**Direct Known Subclasses:**
- `EOFException`, `InterruptedIOException`, `SchemeNotFoundException`, `UnsupportedEncodingException`, `UTFDataFormatException`
**extends Exception:**
입출력 동작에서 오류가 발생했을 때 발생하는 exception 클래스.
## 생성자 요약
- IOException () IOException객체를 생성한다.
- IOException ( String s) IOException을 생성한다.
## 생성자 상세
### IOException
```java
public IOException()
```
- IOException객체를 생성한다.
### IOException
```java
public IOException(String s)
```
**Parameters:**
- `s` - IOException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class InputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.InputStream
```
## 설명
**Direct Known Subclasses:**
- `ByteArrayInputStream`, `DataInputStream`
**extends Object:**
입력 스트림들이 상속받아야 할 추상 클래스.
## 생성자 요약
- InputStream ()
## 메서드 요약
- `int available ()` — 현재 입력 스트림에서 읽을 수 있는 정보량을 구한다.
- `void close ()` — 입력 스트림을 닫는다.
- `void mark (int readlimit)` — 입력 스트림에 mark정보를 설정한다.
- `boolean markSupported ()` — 입력 스트림이 mark기능을 지원하는지 여부를 구한다.
- `abstract int read ()` — 한 바이트를 읽는다.
- `int read (byte[] buf)` — 바이트 배열로 읽는다.
- `int read (byte[] buf, int offset, int len)` — 바이트 배열 일부분으로 읽어 들인다.
- `void reset ()` — 입력 스트림의 읽는 위치를 mark정보에 설정된 위치로 변경한다.
- `long skip (long num_bytes_to_skip)` — 입력 스트림에서 정보를 읽지 않고 건너뛴다.
## 생성자 상세
### InputStream
```java
public InputStream()
```
### read
```java
public abstract int read()
throws IOException
```
**Returns:**
- 성공하면 읽은 바이트 정보 더 이상 읽을 것이 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public int read(byte[] buf)
throws IOException
```
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Returns:**
- 실제 읽은 바이트 수 읽은 내용이 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public int read(byte[] buf,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽을 바이트 수.
**Returns:**
- 실제 읽은 바이트 수 읽은 내용이 없으면 -1.
**Throws:**
- `IOException` -
### skip
```java
public long skip(long num_bytes_to_skip)
throws IOException
```
**Parameters:**
- `n` - 건너 뛸 갯수.
**Returns:**
- 실제로 건너 뛴 갯수.
**Throws:**
- `IOException` -
### available
```java
public int available()
throws IOException
```
**Returns:**
- 입력 스트림에서 읽을 수 있는 정보량.
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readlimit)
```
- 입력 스트림에 mark정보를 설정한다.
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 지원하면 true 아니면 false.
### reset
```java
public void reset()
throws IOException
```
**Throws:**
- `IOException` -## 메서드 상세
### read
```java
public abstract int read()
throws IOException
```
**Returns:**
- 성공하면 읽은 바이트 정보 더 이상 읽을 것이 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public int read(byte[] buf)
throws IOException
```
**Parameters:**
- `b` - 읽은 정보가 저장될 바이트 배열.
**Returns:**
- 실제 읽은 바이트 수 읽은 내용이 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public int read(byte[] buf,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 읽을 바이트 수.
**Returns:**
- 실제 읽은 바이트 수 읽은 내용이 없으면 -1.
**Throws:**
- `IOException` -
### skip
```java
public long skip(long num_bytes_to_skip)
throws IOException
```
**Parameters:**
- `n` - 건너 뛸 갯수.
**Returns:**
- 실제로 건너 뛴 갯수.
**Throws:**
- `IOException` -
### available
```java
public int available()
throws IOException
```
**Returns:**
- 입력 스트림에서 읽을 수 있는 정보량.
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readlimit)
```
- 입력 스트림에 mark정보를 설정한다.
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 지원하면 true 아니면 false.
### reset
```java
public void reset()
throws IOException
```
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class InputStreamReader"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Reader
|
+--java.io.InputStreamReader
```
## 설명
**extends Reader:**
바이트 입력 스트림을 문자 스트림으로 변환해주는 클래스.
Fields inherited from class java.io. Reader lock
Constructor Summary InputStreamReader ( InputStream in) 새로운 객체를 생성한다. InputStreamReader ( InputStream in, String encoding_name) 특정 디코더를 사용하는 새로운 객체를 생성한다.
Method Summary void close () 입력 스트림을 닫는다. void mark (int readAheadLimit) mark를 설정한다. boolean markSupported () mark 기능을 지원하는지 여부를 구한다. int read () 한 문자를 읽는다. int read (char[] buf,
int offset,
int len) 문자 배열의 일부분으로 읽어 들인다. boolean ready () 정보를 읽을 수 있느지 여부를 구한다. void reset () 읽을 위치를 mark로 설정된 위치로 변경한다. long skip (long n) 입력 스트림에서 특정 갯수의 문자을 건너뛴다.
Methods inherited from class java.io. Reader read
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
Constructor Detail
### InputStreamReader
**Parameters:**
- `in` - 바이트 정보를 읽을 입력 스트림.
### InputStreamReader
**Parameters:**
- `encoding_name` - 사용할 디코더.
**Throws:**
- `UnsupportedEncodingException` - encoding_name이 지원할 수 없는 방식일 때 발생.
Method Detail
### ready
**Overrides:**
- `ready` in class `Reader`
**Returns:**
- 읽을 수 있으면 true 아니면 false.
**Throws:**
- `IOException` -
### read
**Overrides:**
- `read` in class `Reader`
**Returns:**
- 읽은 한문자.
**Throws:**
- `IOException` -
### read
**Overrides:**
- `read` in class `Reader`
**Parameters:**
- `len` - 읽은 문자의 갯수.
**Returns:**
- 실제 읽은 문자 수
**Throws:**
- `IOException` -
### skip
**Overrides:**
- `skip` in class `Reader`
**Parameters:**
- `n` - 건너 뛸 문자 수.
**Returns:**
- 실제 건너 뛴 문자 수.
**Throws:**
- `IOException` -
### markSupported
**Overrides:**
- `markSupported` in class `Reader`
**Returns:**
- 지원하면 true 아니면 false.
### mark
**Overrides:**
- `mark` in class `Reader`
- Following copied from class: `java.io.Reader`
**Throws:**
- `IOException` -
### reset
**Overrides:**
- `reset` in class `Reader`
**Throws:**
- `IOException` -
### close
**Overrides:**
- `close` in class `Reader`
**Throws:**
- `IOException` -## 생성자 요약
- InputStreamReader ( InputStream in) 새로운 객체를 생성한다.
- InputStreamReader ( InputStream in, String encoding_name) 특정 디코더를 사용하는 새로운 객체를 생성한다.
## 메서드 요약
- `void close ()` — 입력 스트림을 닫는다.
- `void mark (int readAheadLimit)` — mark를 설정한다.
- `boolean markSupported ()` — mark 기능을 지원하는지 여부를 구한다.
- `int read ()` — 한 문자를 읽는다.
- `int read (char[] buf, int offset, int len)` — 문자 배열의 일부분으로 읽어 들인다.
- `boolean ready ()` — 정보를 읽을 수 있느지 여부를 구한다.
- `void reset ()` — 읽을 위치를 mark로 설정된 위치로 변경한다.
- `long skip (long n)` — 입력 스트림에서 특정 갯수의 문자을 건너뛴다.
## 생성자 상세
### InputStreamReader
```java
public InputStreamReader(InputStream in)
```
**Parameters:**
- `in` - 바이트 정보를 읽을 입력 스트림.
### InputStreamReader
```java
public InputStreamReader(InputStream in,
String encoding_name)
throws UnsupportedEncodingException
```
**Parameters:**
- `encoding_name` - 사용할 디코더.
**Throws:**
- `UnsupportedEncodingException` - encoding_name이 지원할 수 없는 방식일 때 발생.
### ready
```java
public boolean ready()
throws IOException
```
**Overrides:**
- `ready` in class `Reader`
**Returns:**
- 읽을 수 있으면 true 아니면 false.
**Throws:**
- `IOException` -
### read
```java
public int read()
throws IOException
```
**Overrides:**
- `read` in class `Reader`
**Returns:**
- 읽은 한문자.
**Throws:**
- `IOException` -
### read
```java
public int read(char[] buf,
int offset,
int len)
throws IOException
```
**Overrides:**
- `read` in class `Reader`
**Parameters:**
- `len` - 읽은 문자의 갯수.
**Returns:**
- 실제 읽은 문자 수
**Throws:**
- `IOException` -
### skip
```java
public long skip(long n)
throws IOException
```
**Overrides:**
- `skip` in class `Reader`
**Parameters:**
- `n` - 건너 뛸 문자 수.
**Returns:**
- 실제 건너 뛴 문자 수.
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `Reader`
**Returns:**
- 지원하면 true 아니면 false.
### mark
```java
public void mark(int readAheadLimit)
throws IOException
```
**Overrides:**
- `mark` in class `Reader`
- Following copied from class: `java.io.Reader`
**Throws:**
- `IOException` -
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `Reader`
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `Reader`
**Throws:**
- `IOException` -## 메서드 상세
### ready
```java
public boolean ready()
throws IOException
```
**Overrides:**
- `ready` in class `Reader`
**Returns:**
- 읽을 수 있으면 true 아니면 false.
**Throws:**
- `IOException` -
### read
```java
public int read()
throws IOException
```
**Overrides:**
- `read` in class `Reader`
**Returns:**
- 읽은 한문자.
**Throws:**
- `IOException` -
### read
```java
public int read(char[] buf,
int offset,
int len)
throws IOException
```
**Overrides:**
- `read` in class `Reader`
**Parameters:**
- `len` - 읽은 문자의 갯수.
**Returns:**
- 실제 읽은 문자 수
**Throws:**
- `IOException` -
### skip
```java
public long skip(long n)
throws IOException
```
**Overrides:**
- `skip` in class `Reader`
**Parameters:**
- `n` - 건너 뛸 문자 수.
**Returns:**
- 실제 건너 뛴 문자 수.
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Overrides:**
- `markSupported` in class `Reader`
**Returns:**
- 지원하면 true 아니면 false.
### mark
```java
public void mark(int readAheadLimit)
throws IOException
```
**Overrides:**
- `mark` in class `Reader`
- Following copied from class: `java.io.Reader`
**Throws:**
- `IOException` -
### reset
```java
public void reset()
throws IOException
```
**Overrides:**
- `reset` in class `Reader`
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `Reader`
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class InterruptedIOException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.InterruptedIOException
```
## 설명
**extends IOException:**
입출력 동작이 쓰레드의 갑작스러운 종료 등과 같은 이유로
중단瑛
---
title: "Class OutputStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
```
## 설명
**Direct Known Subclasses:**
- `ByteArrayOutputStream`, `DataOutputStream`, `PrintStream`
**extends Object:**
출력 스트림들이 상속받아야 할 추상 클래스.
## 생성자 요약
- OutputStream () 새로운 객체를 생성한다.
## 메서드 요약
- `void close ()` — 출력 스트림을 닫는다.
- `void flush ()` — 중간 버퍼에 남아있는 정보들을 실제 출력한다.
- `void write (byte[] buf)` — 바이트 배열을 출력한다.
- `void write (byte[] buf, int offset, int len)` — 바이트 배열의 일부분을 출력한다.
- `abstract void write (int b)` — 매개변수로 받은 변수 값 중 상위 24비트는 버리고 나머지 8비트만 출력한다.
## 생성자 상세
### OutputStream
```java
public OutputStream()
```
- 새로운 객체를 생성한다.
### flush
```java
public void flush()
throws IOException
```
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` -
### write
```java
public abstract void write(int b)
throws IOException
```
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] buf)
throws IOException
```
**Parameters:**
- `buf` - 출력할 바이트 배열.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] buf,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 갯수.
**Throws:**
- `IOException` -## 메서드 상세
### flush
```java
public void flush()
throws IOException
```
**Throws:**
- `IOException` -
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` -
### write
```java
public abstract void write(int b)
throws IOException
```
**Parameters:**
- `b` - 출력할 정보.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] buf)
throws IOException
```
**Parameters:**
- `buf` - 출력할 바이트 배열.
**Throws:**
- `IOException` -
### write
```java
public void write(byte[] buf,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 갯수.
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class OutputStreamWriter"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Writer
|
+--java.io.OutputStreamWriter
```
## 설명
**extends Writer:**
Unicode로 된 내부 문자열을 KSC5601과 같은 형식의 문자열로
변환하여 출력하는 출력 스트림이다.
Fields inherited from class java.io. Writer lock
Constructor Summary OutputStreamWriter ( OutputStream out) 새로운 출력스트림을 생성한다. OutputStreamWriter ( OutputStream out, String encoding_scheme) 새로운 출력스트림을 생성한다.
Method Summary void close () 출력스트림을 닫는다. void flush () 출력된 정보 중 중간 버퍼에 남아있는 내용을 모두 실제로 출력한다. void write (char c) 한 문자를 출력한다. void write (char[] buf,
int offset,
int len) 문자배열을 출력한다. void write (int c) 정수형 값을 출력한다. void write ( String str,
int offset,
int len) 문자열을 출력한다.
Methods inherited from class java.io. Writer write , write
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
Constructor Detail
### OutputStreamWriter
**Parameters:**
- `out` - 인코딩된 문자열이 실제 출력될 스트림.
### OutputStreamWriter
**Parameters:**
- `encoding_scheme` - 인코딩 방식
**Throws:**
- `UnsupportedEncodingException` - 지원하지 않는 인코딩 방식.
Method Detail
### close
**Overrides:**
- `close` in class `Writer`
**Throws:**
- `IOException` -
### flush
**Overrides:**
- `flush` in class `Writer`
**Throws:**
- `IOException` -
### write
**Parameters:**
- `c` - 출력할 문자열.
**Throws:**
- `IOException` -
### write
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `c` - 출력할 정수 값.
**Throws:**
- `IOException` -
### write
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
### write
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -## 생성자 요약
- OutputStreamWriter ( OutputStream out) 새로운 출력스트림을 생성한다.
- OutputStreamWriter ( OutputStream out, String encoding_scheme) 새로운 출력스트림을 생성한다.
## 메서드 요약
- `void close ()` — 출력스트림을 닫는다.
- `void flush ()` — 출력된 정보 중 중간 버퍼에 남아있는 내용을 모두 실제로 출력한다.
- `void write (char c)` — 한 문자를 출력한다.
- `void write (char[] buf, int offset, int len)` — 문자배열을 출력한다.
- `void write (int c)` — 정수형 값을 출력한다.
- `void write ( String str, int offset, int len)` — 문자열을 출력한다.
## 생성자 상세
### OutputStreamWriter
```java
public OutputStreamWriter(OutputStream out)
```
**Parameters:**
- `out` - 인코딩된 문자열이 실제 출력될 스트림.
### OutputStreamWriter
```java
public OutputStreamWriter(OutputStream out,
String encoding_scheme)
throws UnsupportedEncodingException
```
**Parameters:**
- `encoding_scheme` - 인코딩 방식
**Throws:**
- `UnsupportedEncodingException` - 지원하지 않는 인코딩 방식.
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `Writer`
**Throws:**
- `IOException` -
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `Writer`
**Throws:**
- `IOException` -
### write
```java
public void write(char c)
throws IOException
```
**Parameters:**
- `c` - 출력할 문자열.
**Throws:**
- `IOException` -
### write
```java
public void write(int c)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `c` - 출력할 정수 값.
**Throws:**
- `IOException` -
### write
```java
public void write(char[] buf,
int offset,
int len)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
### write
```java
public void write(String str,
int offset,
int len)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -## 메서드 상세
### close
```java
public void close()
throws IOException
```
**Overrides:**
- `close` in class `Writer`
**Throws:**
- `IOException` -
### flush
```java
public void flush()
throws IOException
```
**Overrides:**
- `flush` in class `Writer`
**Throws:**
- `IOException` -
### write
```java
public void write(char c)
throws IOException
```
**Parameters:**
- `c` - 출력할 문자열.
**Throws:**
- `IOException` -
### write
```java
public void write(int c)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `c` - 출력할 정수 값.
**Throws:**
- `IOException` -
### write
```java
public void write(char[] buf,
int offset,
int len)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
### write
```java
public void write(String str,
int offset,
int len)
throws IOException
```
**Overrides:**
- `write` in class `Writer`
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class PrintStream"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.OutputStream
|
+--java.io.PrintStream
```
## 설명
**extends OutputStream:**
다른 출력스트림에 새로운 라인 값을 덧붙여 출력하기 등 값 출력에 대한 여러
부가적인 기능을 덧붙이는 출력스트림이다.
## 생성자 요약
- PrintStream ( OutputStream out) 새로운 출력스트림을 생성함니다.
## 메서드 요약
- `boolean checkError ()` — 출력 스트림이 오류상태 인지 여부를 구한다.
- `void close ()` — 출력스트림을 닫는다.
- `void flush ()` — 출력된 정보 중 중간 버퍼에 남아있는 내용을 모두 실제로 출력한다.
- `void print (boolean b)` — boolean형 값을 출력한다.
- `void print (char c)` — 한 문자를 출력한다.
- `void print (char[] s)` — 문자배열을 출력한다.
- `void print (int i)` — 정수값을 출력한다.
- `void print (long l)` — long값을 출력한다.
- `void print ( Object obj)` — 특정 객체에 대한 정보를 출력한다.
- `void print ( String s)` — 문자열을 출력한다.
- `void println ()` — 새로운 라인 문자를 출력한다.
- `void println (boolean x)` — boolean형 값을 출력한다.이어서 새로운 라인 문자를 출력한다.
- `void println (char x)` — 한 문자를 출력한다.이어서 새로운 라인 문자를 출력한다.
- `void println (char[] x)` — 문자배열을 출력한다.이어서 새로운 라인 문자를 출력한다.
- `void println (int x)` — 정수값을 출력한다.이어서 새로운 라인 문자를 출력한다.
- `void println (long x)` — long값을 출력한다.이어서 새로운 라인 문자를 출력한다.
- `void println ( Object x)` — 특정 객체에 대한 정보를 출력한다.이어서 새로운 라인 문자를 출력한다.
- `void println ( String x)` — 문자열을 출력한다.이어서 새로운 라인 문자를 출력한다.
- `protected void setError ()` — 출력스트림이 오류상태임을 설정한다.
- `void write (byte[] buf, int off, int len)` — 바이트배열을 출력한다.
- `void write (int b)` — 특정 바이트를 출력한다.
## 생성자 상세
### PrintStream
```java
public PrintStream(OutputStream out)
```
**Parameters:**
- `out` - 실제 출력할 출력스트림.
### flush
```java
public void flush()
```
**Overrides:**
- `flush` in class `OutputStream`
- Following copied from class: `java.io.OutputStream`
**Throws:**
- `IOException` -
### close
```java
public void close()
```
**Overrides:**
- `close` in class `OutputStream`
- Following copied from class: `java.io.OutputStream`
**Throws:**
- `IOException` -
### checkError
```java
public boolean checkError()
```
**Returns:**
- 오류상태이면 true 아니면 false
### setError
```java
protected void setError()
```
- 출력스트림이 오류상태임을 설정한다.
### write
```java
public void write(int b)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 출력할 정수값.
### write
```java
public void write(byte[] buf,
int off,
int len)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 출력할 바이트 갯수.
### print
```java
public void print(boolean b)
```
**Parameters:**
- `b` - 출력할 boolean형 변수.
### print
```java
public void print(char c)
```
**Parameters:**
- `c` - 출력할 문자.
### print
```java
public void print(int i)
```
**Parameters:**
- `i` - 출력할 정수값.
### print
```java
public void print(long l)
```
**Parameters:**
- `l` - 출력할 long값.
### print
```java
public void print(char[] s)
```
**Parameters:**
- `s` - 출력할 문자배열.
### print
```java
public void print(String s)
```
**Parameters:**
- `s` - 출력할 문자열.
### print
```java
public void print(Object obj)
```
**Parameters:**
- `obj` - 출력할 객체.
### println
```java
public void println()
```
- 새로운 라인 문자를 출력한다.
### println
```java
public void println(boolean x)
```
**Parameters:**
- `x` - 출력할 boolean형 변수.
### println
```java
public void println(char x)
```
**Parameters:**
- `x` - 출력할 문자.
### println
```java
public void println(int x)
```
**Parameters:**
- `x` - 출력할 정수값.
### println
```java
public void println(long x)
```
**Parameters:**
- `x` - 출력할 long값.
### println
```java
public void println(char[] x)
```
**Parameters:**
- `x` - 출력할 문자배열.
### println
```java
public void println(String x)
```
**Parameters:**
- `x` - 출력할 문자열.
### println
```java
public void println(Object x)
```
**Parameters:**
- `x` - 출력할 객체.## 메서드 상세
### flush
```java
public void flush()
```
**Overrides:**
- `flush` in class `OutputStream`
- Following copied from class: `java.io.OutputStream`
**Throws:**
- `IOException` -
### close
```java
public void close()
```
**Overrides:**
- `close` in class `OutputStream`
- Following copied from class: `java.io.OutputStream`
**Throws:**
- `IOException` -
### checkError
```java
public boolean checkError()
```
**Returns:**
- 오류상태이면 true 아니면 false
### setError
```java
protected void setError()
```
- 출력스트림이 오류상태임을 설정한다.
### write
```java
public void write(int b)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `b` - 출력할 정수값.
### write
```java
public void write(byte[] buf,
int off,
int len)
```
**Overrides:**
- `write` in class `OutputStream`
**Parameters:**
- `len` - 출력할 바이트 갯수.
### print
```java
public void print(boolean b)
```
**Parameters:**
- `b` - 출력할 boolean형 변수.
### print
```java
public void print(char c)
```
**Parameters:**
- `c` - 출력할 문자.
### print
```java
public void print(int i)
```
**Parameters:**
- `i` - 출력할 정수값.
### print
```java
public void print(long l)
```
**Parameters:**
- `l` - 출력할 long값.
### print
```java
public void print(char[] s)
```
**Parameters:**
- `s` - 출력할 문자배열.
### print
```java
public void print(String s)
```
**Parameters:**
- `s` - 출력할 문자열.
### print
```java
public void print(Object obj)
```
**Parameters:**
- `obj` - 출력할 객체.
### println
```java
public void println()
```
- 새로운 라인 문자를 출력한다.
### println
```java
public void println(boolean x)
```
**Parameters:**
- `x` - 출력할 boolean형 변수.
### println
```java
public void println(char x)
```
**Parameters:**
- `x` - 출력할 문자.
### println
```java
public void println(int x)
```
**Parameters:**
- `x` - 출력할 정수값.
### println
```java
public void println(long x)
```
**Parameters:**
- `x` - 출력할 long값.
### println
```java
public void println(char[] x)
```
**Parameters:**
- `x` - 출력할 문자배열.
### println
```java
public void println(String x)
```
**Parameters:**
- `x` - 출력할 문자열.
### println
```java
public void println(Object x)
```
**Parameters:**
- `x` - 출력할 객체.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Reader"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Reader
```
## 설명
**Direct Known Subclasses:**
- `InputStreamReader`
**extends Object:**
바이트 입력 스트림을 문자 스트림으로 변환해주는 클래스를 위한
추상클래스.
## 필드 요약
- `protected Object lock`
## 생성자 요약
- `protected Reader ()` — Reader를 생성한다.
- `protected Reader ( Object lock)` — Reader를 생성한다.
## 메서드 요약
- `abstract void close ()` — 입력 스트림을 닫는다.
- `void mark (int readLimit)` — mark를 설정한다.
- `boolean markSupported ()` — mark 기능을 지원하는지 여부를 구한다.
- `int read ()` — 한 문자를 읽는다.
- `int read (char[] buf)` — 문자배열로 문자를 읽는다.
- `abstract int read (char[] buf, int offset, int count)` — 문자배열 특정 부분으로 문자를 읽는다.
- `boolean ready ()` — 현 입력스트림에서 문자를 읽을 수 있는 지 여부를 구한다.
- `void reset ()` — 읽을 위치를 mark로 설정된 위치로 변경한다.
- `long skip (long count)` — 특정 갯수의 문자를 읽지 않고 건너 뛴다.
## 필드 상세
### lock
```java
protected Object lock
```
### Reader
```java
protected Reader()
```
- Reader를 생성한다. 동기화를 위한 lock은 자기자신을
사용한다.
### Reader
```java
protected Reader(Object lock)
```
- Reader를 생성한다. 동기화를 위한 lock은 매개변수로 받은
객체를 사용한다.
### read
```java
public int read()
throws IOException
```
**Returns:**
- 성공하면 읽은 문자 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public int read(char[] buf)
throws IOException
```
**Parameters:**
- `buf` - 읽을 문자를 저장할 문자배열.
**Returns:**
- 실제 읽은 문자 갯수 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public abstract int read(char[] buf,
int offset,
int count)
throws IOException
```
**Parameters:**
- `count` - 읽을 문자 갯수.
**Returns:**
- 실제 읽은 문자 갯수 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readLimit)
throws IOException
```
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 지원하면 true 아니면 false.
### ready
```java
public boolean ready()
throws IOException
```
**Returns:**
- 아직 읽을 준비가 안瑛만
## 생성자 상세
### Reader
```java
protected Reader()
```
- Reader를 생성한다. 동기화를 위한 lock은 자기자신을
사용한다.
### Reader
```java
protected Reader(Object lock)
```
- Reader를 생성한다. 동기화를 위한 lock은 매개변수로 받은
객체를 사용한다.
### read
```java
public int read()
throws IOException
```
**Returns:**
- 성공하면 읽은 문자 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public int read(char[] buf)
throws IOException
```
**Parameters:**
- `buf` - 읽을 문자를 저장할 문자배열.
**Returns:**
- 실제 읽은 문자 갯수 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public abstract int read(char[] buf,
int offset,
int count)
throws IOException
```
**Parameters:**
- `count` - 읽을 문자 갯수.
**Returns:**
- 실제 읽은 문자 갯수 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readLimit)
throws IOException
```
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 지원하면 true 아니면 false.
### ready
```java
public boolean ready()
throws IOException
```
**Returns:**
- 아직 읽을 준비가 안瑛만
## 메서드 상세
### read
```java
public int read()
throws IOException
```
**Returns:**
- 성공하면 읽은 문자 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public int read(char[] buf)
throws IOException
```
**Parameters:**
- `buf` - 읽을 문자를 저장할 문자배열.
**Returns:**
- 실제 읽은 문자 갯수 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### read
```java
public abstract int read(char[] buf,
int offset,
int count)
throws IOException
```
**Parameters:**
- `count` - 읽을 문자 갯수.
**Returns:**
- 실제 읽은 문자 갯수 읽은 문자가 없으면 -1.
**Throws:**
- `IOException` -
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` -
### mark
```java
public void mark(int readLimit)
throws IOException
```
**Throws:**
- `IOException` -
### markSupported
```java
public boolean markSupported()
```
**Returns:**
- 지원하면 true 아니면 false.
### ready
```java
public boolean ready()
throws IOException
```
**Returns:**
- 아직 읽을 준비가 안瑛만
---
title: "Class UTFDataFormatException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.UTFDataFormatException
```
## 설명
**extends IOException:**
UTF8 문자가 형식을 제대로 따르지 않았을 때 발생하는 exception.
## 생성자 요약
- UTFDataFormatException () UTFDataFormatException 생성한다.
- UTFDataFormatException ( String s) UTFDataFormatException 생성한다.
## 생성자 상세
### UTFDataFormatException
```java
public UTFDataFormatException()
```
- UTFDataFormatException 생성한다.
### UTFDataFormatException
```java
public UTFDataFormatException(String s)
```
**Parameters:**
- `s` - UTFDataFormatException 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class UnavailableException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.io.UnavailableException
```
## 설명
**extends RuntimeException:**
리소스를 얻을수 없을때 발생하는 exception클래스.
## 생성자 요약
- UnavailableException () UnavailableException을 생성한다.
- UnavailableException ( String s) UnavailableException을 생성한다.
## 생성자 상세
### UnavailableException
```java
public UnavailableException()
```
- UnavailableException을 생성한다.
### UnavailableException
```java
public UnavailableException(String s)
```
**Parameters:**
- `s` - UnavailableException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class UnsupportedEncodingException"
---
`package java.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--java.io.UnsupportedEncodingException
```
## 설명
**extends IOException:**
바이트를 문자로 변환하거나 문자를 바이트로 변환할 때 사용하는
디코딩이나 인코딩 방식을 VM이 지원하지 않을 때 발생하는 exception.
## 생성자 요약
- UnsupportedEncodingException () UnsupportedEncodingException 생성한다.
- UnsupportedEncodingException ( String s) UnsupportedEncodingException 생성한다.
## 생성자 상세
### UnsupportedEncodingException
```java
public UnsupportedEncodingException()
```
- UnsupportedEncodingException 생성한다.
### UnsupportedEncodingException
```java
public UnsupportedEncodingException(String s)
```
**Parameters:**
- `s` - UnsupportedEncodingException 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Writer"
---
`package java.io`
```text
java.lang.Object
|
+--java.io.Writer
```
## 설명
**Direct Known Subclasses:**
- `OutputStreamWriter`
**extends Object:**
Unicode로 된 내부 문자열을 KSC5601과 같은 형식의 문자열로
변환하여 출력하는 출력 스트림의 추상클래스
## 필드 요약
- `protected Object lock`
## 생성자 요약
- `protected Writer ()` — 출력스트림을 생성한다.
- `protected Writer ( Object lock)` — 출력스트림을 생성한다.
## 메서드 요약
- `abstract void close ()` — 출력스트림을 닫는다.
- `abstract void flush ()` — 중간 버퍼에 남아있는 값을 실제로 출력한다.
- `void write (char[] buf)` — 문자배열을 출력한다.
- `abstract void write (char[] buf, int offset, int len)` — 문자배열을 출력한다.
- `void write (int b)` — 한문자를 출력한다.
- `void write ( String str)` — 문자열을 출력한다.
- `void write ( String str, int offset, int len)` — 문자열을 출력한다.
## 필드 상세
### lock
```java
protected Object lock
```
### Writer
```java
protected Writer()
```
- 출력스트림을 생성한다. 동기화를 위한 lock은 자기자신을
사용한다.
### Writer
```java
protected Writer(Object lock)
```
- 출력스트림을 생성한다. 동기화를 위한 lock은 매개변수로 받은
객체를 사용한다.
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` -
### flush
```java
public abstract void flush()
throws IOException
```
**Throws:**
- `IOException` -
### write
```java
public abstract void write(char[] buf,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
### write
```java
public void write(char[] buf)
throws IOException
```
**Parameters:**
- `buf` - 출력할 문자배열.
**Throws:**
- `IOException` -
### write
```java
public void write(int b)
throws IOException
```
**Parameters:**
- `b` - 출력할 문자.
**Throws:**
- `IOException` -
### write
```java
public void write(String str)
throws IOException
```
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -
### write
```java
public void write(String str,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -## 생성자 상세
### Writer
```java
protected Writer()
```
- 출력스트림을 생성한다. 동기화를 위한 lock은 자기자신을
사용한다.
### Writer
```java
protected Writer(Object lock)
```
- 출력스트림을 생성한다. 동기화를 위한 lock은 매개변수로 받은
객체를 사용한다.
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` -
### flush
```java
public abstract void flush()
throws IOException
```
**Throws:**
- `IOException` -
### write
```java
public abstract void write(char[] buf,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
### write
```java
public void write(char[] buf)
throws IOException
```
**Parameters:**
- `buf` - 출력할 문자배열.
**Throws:**
- `IOException` -
### write
```java
public void write(int b)
throws IOException
```
**Parameters:**
- `b` - 출력할 문자.
**Throws:**
- `IOException` -
### write
```java
public void write(String str)
throws IOException
```
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -
### write
```java
public void write(String str,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -## 메서드 상세
### close
```java
public abstract void close()
throws IOException
```
**Throws:**
- `IOException` -
### flush
```java
public abstract void flush()
throws IOException
```
**Throws:**
- `IOException` -
### write
```java
public abstract void write(char[] buf,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
### write
```java
public void write(char[] buf)
throws IOException
```
**Parameters:**
- `buf` - 출력할 문자배열.
**Throws:**
- `IOException` -
### write
```java
public void write(int b)
throws IOException
```
**Parameters:**
- `b` - 출력할 문자.
**Throws:**
- `IOException` -
### write
```java
public void write(String str)
throws IOException
```
**Parameters:**
- `str` - 출력할 문자열.
**Throws:**
- `IOException` -
### write
```java
public void write(String str,
int offset,
int len)
throws IOException
```
**Parameters:**
- `len` - 출력할 문자 갯수.
**Throws:**
- `IOException` -
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package java.io"
---
## Interface Summary
- [DataInput](DataInput.md) — 바이트 정보를 읽어서 다른 타입의 정보로 변환하는 입력 스트림을 위한 인터페이스.
- [DataOutput](DataOutput.md) — 자바에서 지원하는 타입 객체를 바이트 스트림으로 변환해 출력할 수 있도록 지원하는 클래스.
## Class Summary
- [ByteArrayInputStream](ByteArrayInputStream.md) — 바이트 형 정보의 입력 스트림을 구현한 클래스.
- [ByteArrayOutputStream](ByteArrayOutputStream.md) — 바이트 형 정보의 출력 스트림을 구현한 클래스.
- [DataInputStream](DataInputStream.md) — 바이트 정보를 읽어서 다른 타입의 정보로 변환할 수 있도록 만든 입력스트림 클래스.
- [DataOutputStream](DataOutputStream.md) — 자바에서 지원하는 타입 객체를 바이트 스트림으로 변환해 출력할 수 있도록 만든 출력 스트림 클래스.
- [InputStream](InputStream.md) — 입력 스트림들이 상속받아야 할 추상 클래스.
- [InputStreamReader](InputStreamReader.md) — 바이트 입력 스트림을 문자 스트림으로 변환해주는 클래스.
- [OutputStream](OutputStream.md) — 출력 스트림들이 상속받아야 할 추상 클래스.
- [OutputStreamWriter](OutputStreamWriter.md) — Unicode로 된 내부 문자열을 KSC5601과 같은 형식의 문자열로 변환하여 출력하는 출력 스트림이다.
- [PrintStream](PrintStream.md) — 다른 출력스트림에 새로운 라인 값을 덧붙여 출력하기 등 값 출력에 대한 여러 부가적인 기능을 덧붙이는 출력스트림이다.
- [Reader](Reader.md) — 바이트 입력 스트림을 문자 스트림으로 변환해주는 클래스를 위한 추상클래스.
- [Writer](Writer.md) — Unicode로 된 내부 문자열을 KSC5601과 같은 형식의 문자열로 변환하여 출력하는 출력 스트림의 추상클래스
## Exception Summary
- [EOFException](EOFException.md) — 입력 스트림에서 더 이상 읽을 정보가 없을 때 발생하는 exception 클래스.
- [InterruptedIOException](InterruptedIOException.md) — 입출력 동작이 쓰레드의 갑작스러운 종료 등과 같은 이유로 중단瑛
## 기타
- [IOException](IOException.md)
- [UTFDataFormatException](UTFDataFormatException.md)
- [UnavailableException](UnavailableException.md)
- [UnsupportedEncodingException](UnsupportedEncodingException.md)
---
title: "Class ArithmeticException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.ArithmeticException
```
## 설명
**extends RuntimeException:**
0으로 나누기와 같은 수칙 연산 시 올바르게 대처할 수 없는
문제 발생 시 발생되는 Exception 클래스.
## 생성자 요약
- ArithmeticException () ArithmeticException객체를 생성한다.
- ArithmeticException ( String s) ArithmeticException객체를 생성한다.
## 생성자 상세
### ArithmeticException
```java
public ArithmeticException()
```
- ArithmeticException객체를 생성한다.
### ArithmeticException
```java
public ArithmeticException(String s)
```
**Parameters:**
- `s` - ArithmeticException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ArrayIndexOutOfBoundsException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
|
+--java.lang.ArrayIndexOutOfBoundsException
```
## 설명
**extends IndexOutOfBoundsException:**
배열 참조시 배열 범위를 벋어나는 인덱스를 사용할 때 발생하는
Exception 클래스.
## 생성자 요약
- ArrayIndexOutOfBoundsException () ArrayIndexOutOfBoundsException을 생성한다.
- ArrayIndexOutOfBoundsException (int index) ArrayIndexOutOfBoundsException을 생성한다.
- ArrayIndexOutOfBoundsException ( String s) ArrayIndexOutOfBoundsException을 생성한다.
## 생성자 상세
### ArrayIndexOutOfBoundsException
```java
public ArrayIndexOutOfBoundsException()
```
- ArrayIndexOutOfBoundsException을 생성한다.
### ArrayIndexOutOfBoundsException
```java
public ArrayIndexOutOfBoundsException(String s)
```
**Parameters:**
- `s` - ArrayIndexOutOfBoundsException의 세부 메세지.
### ArrayIndexOutOfBoundsException
```java
public ArrayIndexOutOfBoundsException(int index)
```
**Parameters:**
- `index` - ArrayIndexOutOfBoundsException을 발생시킨 인덱스.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ArrayStoreException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.ArrayStoreException
```
## 설명
**extends RuntimeException:**
배열에 저장할 수 없는 종류의 객체를 저장하려 할 때 발생하는
Exception 클래스.
## 생성자 요약
- ArrayStoreException () ArrayStoreException을 생성한다.
- ArrayStoreException ( String s) ArrayStoreException을 생성한다.
## 생성자 상세
### ArrayStoreException
```java
public ArrayStoreException()
```
- ArrayStoreException을 생성한다.
### ArrayStoreException
```java
public ArrayStoreException(String s)
```
**Parameters:**
- `s` - ArrayStoreException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Boolean"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Boolean
```
## 설명
**extends Object:**
Primitive 타입인 Boolean 타입을 지원하기 위한 Wrap 클래스.
## 생성자 요약
- Boolean (boolean value) Boolean 객체를 생성한다.
## 메서드 요약
- `boolean booleanValue ()` — 현 객체의 값을 구한다.
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `int hashCode ()` — 현 객체의 해쉬코드 값을 구한다.
- `String toString ()` — 현 객체 값을 표현할 수 있는 문자열을 구한다.
## 생성자 상세
### Boolean
```java
public Boolean(boolean value)
```
**Parameters:**
- `value` - 초기값.
### booleanValue
```java
public boolean booleanValue()
```
**Returns:**
- 현 객체의 참,거짓 값.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- value값이 참이면 `true` 거짓이면 `false` 문자열.## 메서드 상세
### booleanValue
```java
public boolean booleanValue()
```
**Returns:**
- 현 객체의 참,거짓 값.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- value값이 참이면 `true` 거짓이면 `false` 문자열.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Byte"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Byte
```
## 설명
**extends Object:**
Primitive 타입인 Byte 타입을 지원하기 위한 Wrap 클래스.
## 필드 요약
- `static byte MAX_VALUE` — Byte형의 최대값.
- `static byte MIN_VALUE` — Byte형의 최소값.
## 생성자 요약
- Byte (byte value) Byte형 객체를 생성한다.
## 메서드 요약
- `byte byteValue ()` — 현 객체의 값을 구한다.
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `int hashCode ()` — 현 Byte형 객체의 해쉬코드를 구한다.
- `static byte parseByte ( String s)` — 문자열을 10진법에의해 Byte형으로 변환한다.
- `static byte parseByte ( String s, int radix)` — 문자열을 특정 진법에의해 Byte형으로 변환한다.
- `String toString ()` — 현 객체 값을 표현할 수 있는 문자열을 구한다.
## 필드 상세
### MIN_VALUE
```java
public static final byte MIN_VALUE
```
- Byte형의 최소값.
### MAX_VALUE
```java
public static final byte MAX_VALUE
```
- Byte형의 최대값.
### Byte
```java
public Byte(byte value)
```
**Parameters:**
- `value` - 초기값.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체의 값을 나타내는 문자열.
### parseByte
```java
public static byte parseByte(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 변환된 Byte형 값.
**Throws:**
- `NumberFormatException` - 변환할 수 없는 문자열일 때 발생.
### parseByte
```java
public static byte parseByte(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환시 사용할 진법.
**Returns:**
- 변환된 Byte형 값.
**Throws:**
- `NumberFormatException` - 변환할 수 없는 문자열일 때 발생.
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 현 객체의 값.## 생성자 상세
### Byte
```java
public Byte(byte value)
```
**Parameters:**
- `value` - 초기값.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체의 값을 나타내는 문자열.
### parseByte
```java
public static byte parseByte(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 변환된 Byte형 값.
**Throws:**
- `NumberFormatException` - 변환할 수 없는 문자열일 때 발생.
### parseByte
```java
public static byte parseByte(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환시 사용할 진법.
**Returns:**
- 변환된 Byte형 값.
**Throws:**
- `NumberFormatException` - 변환할 수 없는 문자열일 때 발생.
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 현 객체의 값.## 메서드 상세
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체의 값을 나타내는 문자열.
### parseByte
```java
public static byte parseByte(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 변환된 Byte형 값.
**Throws:**
- `NumberFormatException` - 변환할 수 없는 문자열일 때 발생.
### parseByte
```java
public static byte parseByte(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환시 사용할 진법.
**Returns:**
- 변환된 Byte형 값.
**Throws:**
- `NumberFormatException` - 변환할 수 없는 문자열일 때 발생.
### byteValue
```java
public byte byteValue()
```
**Returns:**
- 현 객체의 값.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Character"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Character
```
## 설명
**extends Object:**
Primitive 타입인 char 타입을 지원하기 위한 Wrap 클래스.
## 필드 요약
- `static int MAX_RADIX` — 문자열로 변환시 사용할 수 있는 최대 진법 값.
- `static char MAX_VALUE` — char형의 최대값.
- `static int MIN_RADIX` — 문자열로 변환시 사용할 수 있는 최소 진법 값.
- `static char MIN_VALUE` — char형의 최소값.
## 생성자 요약
- Character (char value) Character형 객체를 생성한다.
## 메서드 요약
- `char charValue ()` — 현 객체의 값을 구한다.
- `static int digit (char ch, int radix)` — 주어진 문자를 특정 진법에 의해 정수형으로 바꾼다.
- `boolean equals ( Object o)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `int hashCode ()` — 현 객체의 해쉬코르 값을 구한다.
- `static boolean isDigit (char ch)` — 문자가 숫자인지 여부를 구한다.
- `static boolean isLowerCase (char ch)` — 문자가 소문자인지 여부를 구한다.
- `static boolean isUpperCase (char ch)` — 문자가 대문자인지 여부를 구한다.
- `static char toLowerCase (char ch)` — 주어진 문자를 소문자로 바꾼다.
- `String toString ()` — 현 객체를 나타내는 문자열을 구한다.
- `static char toUpperCase (char ch)` — 주어진 문자를 대문자로 바꾼다.
## 필드 상세
### MIN_VALUE
```java
public static final char MIN_VALUE
```
- char형의 최소값.
### MAX_VALUE
```java
public static final char MAX_VALUE
```
- char형의 최대값.
### MIN_RADIX
```java
public static final int MIN_RADIX
```
**See Also:**
- `java.lang.Character#digiti(char,int)`
### MAX_RADIX
```java
public static final int MAX_RADIX
```
**See Also:**
- `java.lang.Character#digiti(char,int)`
### Character
```java
public Character(char value)
```
**Parameters:**
- `value` - 초기값.
### charValue
```java
public char charValue()
```
**Returns:**
- 현 객체의 값.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드값.
### equals
```java
public boolean equals(Object o)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `o` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체 값을 사용해 만든 문자열.
### isLowerCase
```java
public static boolean isLowerCase(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 소문자이면 true 아니면 false.
### toLowerCase
```java
public static char toLowerCase(char ch)
```
**Parameters:**
- `ch` - 변환할 문자.
**Returns:**
- 소문자로 변환된 문자.
### isUpperCase
```java
public static boolean isUpperCase(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 대문자이면 true 아니면 false.
### toUpperCase
```java
public static char toUpperCase(char ch)
```
**Parameters:**
- `ch` - 변환할 문자.
**Returns:**
- 대문자로 변환된 문자.
### isDigit
```java
public static boolean isDigit(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 숫자이면 true 아니면 false.
### digit
```java
public static int digit(char ch,
int radix)
```
**Parameters:**
- `radix` - 변환시 사용할 진법.
**Returns:**
- 문자에 해당하는 정수값.## 생성자 상세
### Character
```java
public Character(char value)
```
**Parameters:**
- `value` - 초기값.
### charValue
```java
public char charValue()
```
**Returns:**
- 현 객체의 값.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드값.
### equals
```java
public boolean equals(Object o)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `o` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체 값을 사용해 만든 문자열.
### isLowerCase
```java
public static boolean isLowerCase(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 소문자이면 true 아니면 false.
### toLowerCase
```java
public static char toLowerCase(char ch)
```
**Parameters:**
- `ch` - 변환할 문자.
**Returns:**
- 소문자로 변환된 문자.
### isUpperCase
```java
public static boolean isUpperCase(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 대문자이면 true 아니면 false.
### toUpperCase
```java
public static char toUpperCase(char ch)
```
**Parameters:**
- `ch` - 변환할 문자.
**Returns:**
- 대문자로 변환된 문자.
### isDigit
```java
public static boolean isDigit(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 숫자이면 true 아니면 false.
### digit
```java
public static int digit(char ch,
int radix)
```
**Parameters:**
- `radix` - 변환시 사용할 진법.
**Returns:**
- 문자에 해당하는 정수값.## 메서드 상세
### charValue
```java
public char charValue()
```
**Returns:**
- 현 객체의 값.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드값.
### equals
```java
public boolean equals(Object o)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `o` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체 값을 사용해 만든 문자열.
### isLowerCase
```java
public static boolean isLowerCase(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 소문자이면 true 아니면 false.
### toLowerCase
```java
public static char toLowerCase(char ch)
```
**Parameters:**
- `ch` - 변환할 문자.
**Returns:**
- 소문자로 변환된 문자.
### isUpperCase
```java
public static boolean isUpperCase(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 대문자이면 true 아니면 false.
### toUpperCase
```java
public static char toUpperCase(char ch)
```
**Parameters:**
- `ch` - 변환할 문자.
**Returns:**
- 대문자로 변환된 문자.
### isDigit
```java
public static boolean isDigit(char ch)
```
**Parameters:**
- `ch` - 검토할 문자.
**Returns:**
- 숫자이면 true 아니면 false.
### digit
```java
public static int digit(char ch,
int radix)
```
**Parameters:**
- `radix` - 변환시 사용할 진법.
**Returns:**
- 문자에 해당하는 정수값.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Class"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Class
```
## 설명
**extends Object:**
Java에서 사용하는 class나 Interface를 대표하는 클래스.
## 메서드 요약
- `static Class forName ( String name)` — 특정 클래스를 찾는다.
- `String getName ()` — 현 클래스 명을 구한다.
- `InputStream getResourceAsStream ( String name)` — 특정 리소스를 구한다.
- `boolean isArray ()` — 현 클래스가 배열 클래스인지 여부를 구한다.
- `boolean isAssignableFrom ( Class c)` — 매개변수로 전달된 클래스에서 파생된 객체를 현 클래스에서 파생된 객체에 할당할 수 있는지 여부를 구한다.
- `boolean isInstance ( Object o)` — 특정 객체가 현 클래스에서 파생된 객체인지 여부를 구한다.
- `boolean isInterface ()` — 현 클래스가 인터페이스인지 여부를 구한다.
- `Object newInstance ()` — 현 클래스를 사용해서 새로운 객체를 생성시킨다.
- `String toString ()` — 현 클래스를 나타내는 문자열을 구한다.
## 메서드 상세
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체를 나타내는 문자열.
### getName
```java
public String getName()
```
**Returns:**
- 클래스명을 나타내는 문자열.
### isInterface
```java
public boolean isInterface()
```
**Returns:**
- 인터페이스이면 true 아니면 false.
### newInstance
```java
public Object newInstance()
throws InstantiationException,
IllegalAccessException
```
**Returns:**
- 생성된 자바 객체.
**Throws:**
- `InstantiationException` - ┚섶薨봇
---
title: "Class ClassCastException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.ClassCastException
```
## 설명
**extends RuntimeException:**
객체를 변환할 수 없는 타입으로 변환할 때 발생하는
exception 클래스.
## 생성자 요약
- ClassCastException () ClassCastException을 생성한다.
- ClassCastException ( String s) ClassCastException을 생성한다.
## 생성자 상세
### ClassCastException
```java
public ClassCastException()
```
- ClassCastException을 생성한다.
### ClassCastException
```java
public ClassCastException(String s)
```
**Parameters:**
- `s` - ClassCastException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ClassNotFoundException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.ClassNotFoundException
```
## 설명
**extends Exception:**
찾고자하는 클래스가 없을 때 발생하는 exception 클래스.
## 생성자 요약
- ClassNotFoundException () ClassNotFoundException을 생성한다.
- ClassNotFoundException ( String s) ClassNotFoundException을 생성한다.
## 생성자 상세
### ClassNotFoundException
```java
public ClassNotFoundException()
```
- ClassNotFoundException을 생성한다.
### ClassNotFoundException
```java
public ClassNotFoundException(String s)
```
**Parameters:**
- `s` - ClassNotFoundException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Double"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Double
```
## 설명
**extends Object:**
## 필드 요약
- `static double MAX_VALUE`
- `static double MIN_VALUE`
- `static double NaN`
- `static double NEGATIVE_INFINITY`
- `static double POSITIVE_INFINITY`
## 생성자 요약
- Double (double value)
## 메서드 요약
- `byte byteValue ()`
- `static long doubleToLongBits (double value)`
- `double doubleValue ()`
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `float floatValue ()`
- `int hashCode ()` — 현 객체의 해쉬코드 값을 구한다.
- `int intValue ()`
- `boolean isInfinite ()`
- `static boolean isInfinite (double v)`
- `boolean isNaN ()`
- `static boolean isNaN (double v)`
- `static double longBitsToDouble (long bits)`
- `long longValue ()`
- `static double parseDouble ( String s)`
- `static double parseDouble0 ( String s)`
- `short shortValue ()`
- `String toString ()` — 현 객체를 나타내는 문자열을 구한다.
- `static String toString (double d)`
- `static Double valueOf ( String s)`
## 필드 상세
### POSITIVE_INFINITY
```java
public static final double POSITIVE_INFINITY
```
### NEGATIVE_INFINITY
```java
public static final double NEGATIVE_INFINITY
```
### NaN
```java
public static final double NaN
```
### MAX_VALUE
```java
public static final double MAX_VALUE
```
### MIN_VALUE
```java
public static final double MIN_VALUE
```
### Double
```java
public Double(double value)
```
### toString
```java
public static String toString(double d)
```
### valueOf
```java
public static Double valueOf(String s)
throws NumberFormatException
```
### parseDouble
```java
public static double parseDouble(String s)
throws NumberFormatException
```
### parseDouble0
```java
public static double parseDouble0(String s)
throws NumberFormatException
```
### isNaN
```java
public static boolean isNaN(double v)
```
### isInfinite
```java
public static boolean isInfinite(double v)
```
### isNaN
```java
public boolean isNaN()
```
### isInfinite
```java
public boolean isInfinite()
```
### toString
```java
public String toString()
```
- **Description copied from class: `Object`**
**Overrides:**
- `toString` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체를 나타내는 문자열.
### byteValue
```java
public byte byteValue()
```
### shortValue
```java
public short shortValue()
```
### intValue
```java
public int intValue()
```
### longValue
```java
public long longValue()
```
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### hashCode
```java
public int hashCode()
```
- **Description copied from class: `Object`**
**Overrides:**
- `hashCode` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
- **Description copied from class: `Object`**
**Overrides:**
- `equals` in class `Object`
- Following copied from class: `java.lang.Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### doubleToLongBits
```java
public static long doubleToLongBits(double value)
```
### longBitsToDouble
```java
public static double longBitsToDouble(long bits)
```## 생성자 상세
### Double
```java
public Double(double value)
```
### toString
```java
public static String toString(double d)
```
### valueOf
```java
public static Double valueOf(String s)
throws NumberFormatException
```
### parseDouble
```java
public static double parseDouble(String s)
throws NumberFormatException
```
### parseDouble0
```java
public static double parseDouble0(String s)
throws NumberFormatException
```
### isNaN
```java
public static boolean isNaN(double v)
```
### isInfinite
```java
public static boolean isInfinite(double v)
```
### isNaN
```java
public boolean isNaN()
```
### isInfinite
```java
public boolean isInfinite()
```
### toString
```java
public String toString()
```
- **Description copied from class: `Object`**
**Overrides:**
- `toString` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체를 나타내는 문자열.
### byteValue
```java
public byte byteValue()
```
### shortValue
```java
public short shortValue()
```
### intValue
```java
public int intValue()
```
### longValue
```java
public long longValue()
```
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### hashCode
```java
public int hashCode()
```
- **Description copied from class: `Object`**
**Overrides:**
- `hashCode` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
- **Description copied from class: `Object`**
**Overrides:**
- `equals` in class `Object`
- Following copied from class: `java.lang.Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### doubleToLongBits
```java
public static long doubleToLongBits(double value)
```
### longBitsToDouble
```java
public static double longBitsToDouble(long bits)
```## 메서드 상세
### toString
```java
public static String toString(double d)
```
### valueOf
```java
public static Double valueOf(String s)
throws NumberFormatException
```
### parseDouble
```java
public static double parseDouble(String s)
throws NumberFormatException
```
### parseDouble0
```java
public static double parseDouble0(String s)
throws NumberFormatException
```
### isNaN
```java
public static boolean isNaN(double v)
```
### isInfinite
```java
public static boolean isInfinite(double v)
```
### isNaN
```java
public boolean isNaN()
```
### isInfinite
```java
public boolean isInfinite()
```
### toString
```java
public String toString()
```
- **Description copied from class: `Object`**
**Overrides:**
- `toString` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체를 나타내는 문자열.
### byteValue
```java
public byte byteValue()
```
### shortValue
```java
public short shortValue()
```
### intValue
```java
public int intValue()
```
### longValue
```java
public long longValue()
```
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### hashCode
```java
public int hashCode()
```
- **Description copied from class: `Object`**
**Overrides:**
- `hashCode` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
- **Description copied from class: `Object`**
**Overrides:**
- `equals` in class `Object`
- Following copied from class: `java.lang.Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### doubleToLongBits
```java
public static long doubleToLongBits(double value)
```
### longBitsToDouble
```java
public static double longBitsToDouble(long bits)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Error"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Error
```
## 설명
**Direct Known Subclasses:**
- `VirtualMachineError`
**extends Throwable:**
Exception보다 중요한 오류 발생시 발생한다. 비정상적인 경우가
많슴니다.
## 생성자 요약
- Error () Error를 생성한다.
- Error ( String s) Error를 생성한다.
## 생성자 상세
### Error
```java
public Error()
```
- Error를 생성한다.
### Error
```java
public Error(String s)
```
**Parameters:**
- `s` - Error의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Exception"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
```
## 설명
**Direct Known Subclasses:**
- `ClassNotFoundException`, `DataBaseException`, `DataBaseRecordException`, `IllegalAccessException`, `InstantiationException`, `InterruptedException`, `IOException`, `JletStateChangeException`, `RuntimeException`
**extends Throwable:**
application에서 대응할 수 있는 오류를 나타낼 때 사용한다.
## 생성자 요약
- Exception () Exception을 생성한다.
- Exception ( String s) Exception을 생성한다.
## 생성자 상세
### Exception
```java
public Exception()
```
- Exception을 생성한다.
### Exception
```java
public Exception(String s)
```
**Parameters:**
- `s` - Exception의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Float"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Float
```
## 설명
**extends Object:**
## 필드 요약
- `static float MAX_VALUE`
- `static float MIN_VALUE`
- `static float NaN`
- `static float NEGATIVE_INFINITY`
- `static float POSITIVE_INFINITY`
## 생성자 요약
- Float (double value)
- Float (float value)
## 메서드 요약
- `byte byteValue ()`
- `double doubleValue ()`
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `static int floatToIntBits (float value)`
- `float floatValue ()`
- `int hashCode ()` — 현 객체의 해쉬코드 값을 구한다.
- `static float intBitsToFloat (int bits)`
- `int intValue ()`
- `boolean isInfinite ()`
- `static boolean isInfinite (float v)`
- `boolean isNaN ()`
- `static boolean isNaN (float v)`
- `long longValue ()`
- `static float parseFloat ( String s)`
- `short shortValue ()`
- `String toString ()` — 현 객체를 나타내는 문자열을 구한다.
- `static String toString (float f)`
- `static Float valueOf ( String s)`
## 필드 상세
### MAX_VALUE
```java
public static final float MAX_VALUE
```
### MIN_VALUE
```java
public static final float MIN_VALUE
```
### NEGATIVE_INFINITY
```java
public static final float NEGATIVE_INFINITY
```
### POSITIVE_INFINITY
```java
public static final float POSITIVE_INFINITY
```
### NaN
```java
public static final float NaN
```
### Float
```java
public Float(float value)
```
### Float
```java
public Float(double value)
```
### toString
```java
public static String toString(float f)
```
### valueOf
```java
public static Float valueOf(String s)
throws NumberFormatException
```
### parseFloat
```java
public static float parseFloat(String s)
throws NumberFormatException
```
### isNaN
```java
public static boolean isNaN(float v)
```
### isInfinite
```java
public static boolean isInfinite(float v)
```
### isNaN
```java
public boolean isNaN()
```
### isInfinite
```java
public boolean isInfinite()
```
### toString
```java
public String toString()
```
- **Description copied from class: `Object`**
**Overrides:**
- `toString` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체를 나타내는 문자열.
### byteValue
```java
public byte byteValue()
```
### shortValue
```java
public short shortValue()
```
### intValue
```java
public int intValue()
```
### longValue
```java
public long longValue()
```
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### hashCode
```java
public int hashCode()
```
- **Description copied from class: `Object`**
**Overrides:**
- `hashCode` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
- **Description copied from class: `Object`**
**Overrides:**
- `equals` in class `Object`
- Following copied from class: `java.lang.Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### floatToIntBits
```java
public static int floatToIntBits(float value)
```
### intBitsToFloat
```java
public static float intBitsToFloat(int bits)
```## 생성자 상세
### Float
```java
public Float(float value)
```
### Float
```java
public Float(double value)
```
### toString
```java
public static String toString(float f)
```
### valueOf
```java
public static Float valueOf(String s)
throws NumberFormatException
```
### parseFloat
```java
public static float parseFloat(String s)
throws NumberFormatException
```
### isNaN
```java
public static boolean isNaN(float v)
```
### isInfinite
```java
public static boolean isInfinite(float v)
```
### isNaN
```java
public boolean isNaN()
```
### isInfinite
```java
public boolean isInfinite()
```
### toString
```java
public String toString()
```
- **Description copied from class: `Object`**
**Overrides:**
- `toString` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체를 나타내는 문자열.
### byteValue
```java
public byte byteValue()
```
### shortValue
```java
public short shortValue()
```
### intValue
```java
public int intValue()
```
### longValue
```java
public long longValue()
```
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### hashCode
```java
public int hashCode()
```
- **Description copied from class: `Object`**
**Overrides:**
- `hashCode` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
- **Description copied from class: `Object`**
**Overrides:**
- `equals` in class `Object`
- Following copied from class: `java.lang.Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### floatToIntBits
```java
public static int floatToIntBits(float value)
```
### intBitsToFloat
```java
public static float intBitsToFloat(int bits)
```## 메서드 상세
### toString
```java
public static String toString(float f)
```
### valueOf
```java
public static Float valueOf(String s)
throws NumberFormatException
```
### parseFloat
```java
public static float parseFloat(String s)
throws NumberFormatException
```
### isNaN
```java
public static boolean isNaN(float v)
```
### isInfinite
```java
public static boolean isInfinite(float v)
```
### isNaN
```java
public boolean isNaN()
```
### isInfinite
```java
public boolean isInfinite()
```
### toString
```java
public String toString()
```
- **Description copied from class: `Object`**
**Overrides:**
- `toString` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체를 나타내는 문자열.
### byteValue
```java
public byte byteValue()
```
### shortValue
```java
public short shortValue()
```
### intValue
```java
public int intValue()
```
### longValue
```java
public long longValue()
```
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### hashCode
```java
public int hashCode()
```
- **Description copied from class: `Object`**
**Overrides:**
- `hashCode` in class `Object`
- Following copied from class: `java.lang.Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### equals
```java
public boolean equals(Object obj)
```
- **Description copied from class: `Object`**
**Overrides:**
- `equals` in class `Object`
- Following copied from class: `java.lang.Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### floatToIntBits
```java
public static int floatToIntBits(float value)
```
### intBitsToFloat
```java
public static float intBitsToFloat(int bits)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class IllegalAccessException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.IllegalAccessException
```
## 설명
**extends Exception:**
접근 권한이 없는 클래스에 접근하려 할 때 발생하는
exception 클래스.
## 생성자 요약
- IllegalAccessException () IllegalAccessException을 생성한다.
- IllegalAccessException ( String s) IllegalAccessException을 생성한다.
## 생성자 상세
### IllegalAccessException
```java
public IllegalAccessException()
```
- IllegalAccessException을 생성한다.
### IllegalAccessException
```java
public IllegalAccessException(String s)
```
**Parameters:**
- `s` - IllegalAccessException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class IllegalArgumentException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalArgumentException
```
## 설명
**Direct Known Subclasses:**
- `IllegalThreadStateException`, `NumberFormatException`
**extends RuntimeException:**
함수 매개변수 값에 적절하지 않은 값이 할당되면 발생하는
exception 클래스.
## 생성자 요약
- IllegalArgumentException () IllegalArgumentException을 생성한다.
- IllegalArgumentException ( String s) IllegalArgumentException을 생성한다.
## 생성자 상세
### IllegalArgumentException
```java
public IllegalArgumentException()
```
- IllegalArgumentException을 생성한다.
### IllegalArgumentException
```java
public IllegalArgumentException(String s)
```
**Parameters:**
- `s` - IllegalArgumentException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class IllegalMonitorStateException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalMonitorStateException
```
## 설명
**extends RuntimeException:**
한 쓰레드가 소유하지 않은 모니터를 사용해서 wait아 notify를 할 때
발생하는 exception 클래스.
## 생성자 요약
- IllegalMonitorStateException () IllegalMonitorStateException을 생성한다.
- IllegalMonitorStateException ( String s) IllegalMonitorStateException을 생성한다.
## 생성자 상세
### IllegalMonitorStateException
```java
public IllegalMonitorStateException()
```
- IllegalMonitorStateException을 생성한다.
### IllegalMonitorStateException
```java
public IllegalMonitorStateException(String s)
```
**Parameters:**
- `s` - IllegalMonitorStateException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class IllegalStateException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalStateException
```
## 설명
**extends RuntimeException:**
Signals that a method has been invoked at an illegal or
inappropriate time. In other words, the Java environment or
Java application is not in an appropriate state for the requested
operation.
**Since:**
- JDK1.1
## 생성자 요약
- IllegalStateException () Constructs an IllegalStateException with no detail message.
- IllegalStateException ( String s) Constructs an IllegalStateException with the specified detail
message.
## 생성자 상세
### IllegalStateException
```java
public IllegalStateException()
```
- Constructs an IllegalStateException with no detail message.
A detail message is a String that describes this particular exception.
### IllegalStateException
```java
public IllegalStateException(String s)
```
**Parameters:**
- `s` - the String that contains a detailed message
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class IllegalThreadStateException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalArgumentException
|
+--java.lang.IllegalThreadStateException
```
## 설명
**extends IllegalArgumentException:**
쓰레드의 현 상태가 주어진 동작을 취하기에 적절치않은 경우에
발생하는 exception 클래스.
## 생성자 요약
- IllegalThreadStateException () IllegalThreadStateException을 생성한다.
- IllegalThreadStateException ( String s) IllegalThreadStateException을 생성한다.
## 생성자 상세
### IllegalThreadStateException
```java
public IllegalThreadStateException()
```
- IllegalThreadStateException을 생성한다.
### IllegalThreadStateException
```java
public IllegalThreadStateException(String s)
```
**Parameters:**
- `s` - IllegalThreadStateException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class IndexOutOfBoundsException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
```
## 설명
**Direct Known Subclasses:**
- `ArrayIndexOutOfBoundsException`, `StringIndexOutOfBoundsException`
**extends RuntimeException:**
Vector나 문자열, 배열 같이 인데스를 통해 접근가는한 객체에
범위 밖의 인덱스를 사용할 때 발생하는 exception 클래스.
## 생성자 요약
- IndexOutOfBoundsException () IndexOutOfBoundsException을 생성한다.
- IndexOutOfBoundsException ( String s) IndexOutOfBoundsException을 생성한다.
## 생성자 상세
### IndexOutOfBoundsException
```java
public IndexOutOfBoundsException()
```
- IndexOutOfBoundsException을 생성한다.
### IndexOutOfBoundsException
```java
public IndexOutOfBoundsException(String s)
```
**Parameters:**
- `s` - IndexOutOfBoundsException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class InstantiationException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.InstantiationException
```
## 설명
**extends Exception:**
newInstace를 통해 객체를 생성할 때 클래스가 추상 클래스나
인터페이스일 때 발생하는 exception 클래스.
## 생성자 요약
- InstantiationException () InstantiationException을 생성한다.
- InstantiationException ( String s) InstantiationException을 생성한다.
## 생성자 상세
### InstantiationException
```java
public InstantiationException()
```
- InstantiationException을 생성한다.
### InstantiationException
```java
public InstantiationException(String s)
```
**Parameters:**
- `s` - InstantiationException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Integer"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Integer
```
## 설명
**extends Object:**
Primitive 타입인 Int 타입을 지원하기 위한 Wrap 클래스.
## 필드 요약
- `static int MAX_VALUE` — Interger의 최대값.
- `static int MIN_VALUE` — Interger의 최소값.
## 생성자 요약
- Integer (int value) Interger 객체를 생성한다.
## 메서드 요약
- `byte byteValue ()` — 현 객체의 값을 Byte형으로 구한다.
- `double doubleValue ()`
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `float floatValue ()`
- `int hashCode ()` — 현 객체의 해쉬코드 값을 구한다.
- `int intValue ()` — 현 객체의 값을 Int형으로 구한다.
- `long longValue ()` — 현 객체의 값을 Long형으로 구한다.
- `static int parseInt ( String s)` — 주어진 문자열을 10진법에 의해 Int형으로 변환한다.
- `static int parseInt ( String s, int radix)` — 주어진 문자열을 특정 진법에 의해 Int형으로 변환한다.
- `short shortValue ()` — 현 객체의 값을 Short형으로 구한다.
- `static String toBinaryString (int i)` — 정수형 매개변수를 이진수 문자열로 변환한다.
- `static String toHexString (int i)` — 정수형 매개변수를 16진수 문자열로 변환한다.
- `static String toOctalString (int i)` — 정수형 매개변수를 8진수 문자열로 변환한다.
- `String toString ()` — 현 객체값을 나타내는 문자열을 구한다.
- `static String toString (int i)` — 정수형 매개변수를 10진수 문자열로 변환한다.
- `static String toString (int i, int radix)` — 정수형 매개변수를 특정 진수 문자열로 변환한다.
- `static Integer valueOf ( String s)` — 주어진 문자열을 10진법 변환을 사용해 정수값을 구한다.
- `static Integer valueOf ( String s, int radix)` — 주어진 문자열을 특정 진법 변환을 사용해 정수값을 구한다.
## 필드 상세
### MIN_VALUE
```java
public static final int MIN_VALUE
```
- Interger의 최소값.
### MAX_VALUE
```java
public static final int MAX_VALUE
```
- Interger의 최대값.
### Integer
```java
public Integer(int value)
```
**Parameters:**
- `value` - 초기값.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### byteValue
```java
public byte byteValue()
```
**Returns:**
- Byte형으로 변환된 현 객체의 값.
### shortValue
```java
public short shortValue()
```
**Returns:**
- Short형으로 변환된 현 객체의 값.
### intValue
```java
public int intValue()
```
**Returns:**
- Int형으로 변환된 현 객체의 값.
### longValue
```java
public long longValue()
```
**Returns:**
- Long형으로 변환된 현 객체의 값.
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### parseInt
```java
public static int parseInt(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseInt
```java
public static int parseInt(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### toBinaryString
```java
public static String toBinaryString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 이진수 문자열.
### toHexString
```java
public static String toHexString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 16진수 문자열.
### toOctalString
```java
public static String toOctalString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 8진수 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.
### toString
```java
public static String toString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 10진수 문자열.
### toString
```java
public static String toString(int i,
int radix)
```
**Parameters:**
- `redix` - 변환 진법.
**Returns:**
- i가 변환된 radix진수 문자열.
### valueOf
```java
public static Integer valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- s가 10진법으로 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### valueOf
```java
public static Integer valueOf(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- s가 radix진법으로 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.## 생성자 상세
### Integer
```java
public Integer(int value)
```
**Parameters:**
- `value` - 초기값.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### byteValue
```java
public byte byteValue()
```
**Returns:**
- Byte형으로 변환된 현 객체의 값.
### shortValue
```java
public short shortValue()
```
**Returns:**
- Short형으로 변환된 현 객체의 값.
### intValue
```java
public int intValue()
```
**Returns:**
- Int형으로 변환된 현 객체의 값.
### longValue
```java
public long longValue()
```
**Returns:**
- Long형으로 변환된 현 객체의 값.
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### parseInt
```java
public static int parseInt(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseInt
```java
public static int parseInt(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### toBinaryString
```java
public static String toBinaryString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 이진수 문자열.
### toHexString
```java
public static String toHexString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 16진수 문자열.
### toOctalString
```java
public static String toOctalString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 8진수 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.
### toString
```java
public static String toString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 10진수 문자열.
### toString
```java
public static String toString(int i,
int radix)
```
**Parameters:**
- `redix` - 변환 진법.
**Returns:**
- i가 변환된 radix진수 문자열.
### valueOf
```java
public static Integer valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- s가 10진법으로 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### valueOf
```java
public static Integer valueOf(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- s가 radix진법으로 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.## 메서드 상세
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### byteValue
```java
public byte byteValue()
```
**Returns:**
- Byte형으로 변환된 현 객체의 값.
### shortValue
```java
public short shortValue()
```
**Returns:**
- Short형으로 변환된 현 객체의 값.
### intValue
```java
public int intValue()
```
**Returns:**
- Int형으로 변환된 현 객체의 값.
### longValue
```java
public long longValue()
```
**Returns:**
- Long형으로 변환된 현 객체의 값.
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### parseInt
```java
public static int parseInt(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseInt
```java
public static int parseInt(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### toBinaryString
```java
public static String toBinaryString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 이진수 문자열.
### toHexString
```java
public static String toHexString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 16진수 문자열.
### toOctalString
```java
public static String toOctalString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 8진수 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.
### toString
```java
public static String toString(int i)
```
**Parameters:**
- `i` - 변환할 정수.
**Returns:**
- i가 변환된 10진수 문자열.
### toString
```java
public static String toString(int i,
int radix)
```
**Parameters:**
- `redix` - 변환 진법.
**Returns:**
- i가 변환된 radix진수 문자열.
### valueOf
```java
public static Integer valueOf(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- s가 10진법으로 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### valueOf
```java
public static Integer valueOf(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- s가 radix진법으로 변환된 정수값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class InterruptedException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.InterruptedException
```
## 설명
**extends Exception:**
한 쓰레드가 wait,sleep,pause瑛
---
title: "Class Long"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Long
```
## 설명
**extends Object:**
Primitive 타입인 Long 타입을 지원하기 위한 Wrap 클래스.
## 필드 요약
- `static long MAX_VALUE` — Long타입의 최대값.
- `static long MIN_VALUE` — Long타입의 최소값.
## 생성자 요약
- Long (long value) Long 객체를 생성한다.
## 메서드 요약
- `double doubleValue ()`
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `float floatValue ()`
- `int hashCode ()` — 현 객체의 해쉬코드 값을 구한다.
- `long longValue ()` — 현 객체의 값을 구한다.
- `static long parseLong ( String s)` — 주어진 문자열을 10진법에 의해 Long형으로 변환한다.
- `static long parseLong ( String s, int radix)` — 주어진 문자열을 특정 진법에 의해 Long형으로 변환한다.
- `String toString ()` — 현 객체값을 나타내는 문자열을 구한다.
- `static String toString (long i)` — Long형 매개변수를 10진수 문자열로 변환한다.
- `static String toString (long i, int radix)` — Long형 매개변수를 특정 진수 문자열로 변환한다.
## 필드 상세
### MIN_VALUE
```java
public static final long MIN_VALUE
```
- Long타입의 최소값.
### MAX_VALUE
```java
public static final long MAX_VALUE
```
- Long타입의 최대값.
### Long
```java
public Long(long value)
```
**Parameters:**
- `value` - 초기값.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### longValue
```java
public long longValue()
```
**Returns:**
- Long타입인 현 객체 값.
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### parseLong
```java
public static long parseLong(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 Long값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseLong
```java
public static long parseLong(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 Long값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### toString
```java
public static String toString(long i)
```
**Parameters:**
- `i` - 변환할 Long타입 값.
**Returns:**
- i가 변환된 10진수 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.
### toString
```java
public static String toString(long i,
int radix)
```
**Parameters:**
- `redix` - 변환 진법.
**Returns:**
- i가 변환된 radix진수 문자열.## 생성자 상세
### Long
```java
public Long(long value)
```
**Parameters:**
- `value` - 초기값.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### longValue
```java
public long longValue()
```
**Returns:**
- Long타입인 현 객체 값.
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### parseLong
```java
public static long parseLong(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 Long값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseLong
```java
public static long parseLong(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 Long값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### toString
```java
public static String toString(long i)
```
**Parameters:**
- `i` - 변환할 Long타입 값.
**Returns:**
- i가 변환된 10진수 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.
### toString
```java
public static String toString(long i,
int radix)
```
**Parameters:**
- `redix` - 변환 진법.
**Returns:**
- i가 변환된 radix진수 문자열.## 메서드 상세
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### longValue
```java
public long longValue()
```
**Returns:**
- Long타입인 현 객체 값.
### floatValue
```java
public float floatValue()
```
### doubleValue
```java
public double doubleValue()
```
### parseLong
```java
public static long parseLong(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 Long값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseLong
```java
public static long parseLong(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 Long값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### toString
```java
public static String toString(long i)
```
**Parameters:**
- `i` - 변환할 Long타입 값.
**Returns:**
- i가 변환된 10진수 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.
### toString
```java
public static String toString(long i,
int radix)
```
**Parameters:**
- `redix` - 변환 진법.
**Returns:**
- i가 변환된 radix진수 문자열.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Math"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Math
```
## 설명
**extends Object:**
기본적인 수칙연산을 포함한 클래스.
## 필드 요약
- `static double E`
- `static double PI`
## 메서드 요약
- `static double abs (double d)`
- `static float abs (float f)`
- `static int abs (int a)` — 절대값을 구한다.
- `static long abs (long a)` — 절대값을 구한다.
- `static double ceil (double a)`
- `static double floor (double a)`
- `static double max (double a, double b)`
- `static float max (float a, float b)`
- `static int max (int a, int b)` — 두 매개변수 중 큰 값을 구한다.
- `static long max (long a, long b)` — 두 매개변수 중 큰 값을 구한다.
- `static double min (double a, double b)`
- `static float min (float a, float b)`
- `static int min (int a, int b)` — 두 매개변수 중 작은 값을 구한다.
- `static long min (long a, long b)` — 두 매개변수 중 작은 값을 구한다.
- `static double toDegrees (double rads)`
- `static double toRadians (double degrees)`
## 필드 상세
### E
```java
public static final double E
```
### PI
```java
public static final double PI
```
### toRadians
```java
public static double toRadians(double degrees)
```
### toDegrees
```java
public static double toDegrees(double rads)
```
### ceil
```java
public static double ceil(double a)
```
### floor
```java
public static double floor(double a)
```
### abs
```java
public static int abs(int a)
```
**Parameters:**
- `a` - 정수형 매개변수.
**Returns:**
- 정수형인 a의 절대값.
### abs
```java
public static long abs(long a)
```
**Parameters:**
- `a` - Long형 매개변수.
**Returns:**
- Long인 a의 절대값.
### abs
```java
public static float abs(float f)
```
### abs
```java
public static double abs(double d)
```
### min
```java
public static float min(float a,
float b)
```
### min
```java
public static double min(double a,
double b)
```
### min
```java
public static int min(int a,
int b)
```
**Parameters:**
- `b` - 정수형 변수.
**Returns:**
- a,b중 작은 값.
### min
```java
public static long min(long a,
long b)
```
**Parameters:**
- `b` - Long형 변수.
**Returns:**
- a,b중 작은 값.
### max
```java
public static int max(int a,
int b)
```
**Parameters:**
- `b` - 정수형 변수.
**Returns:**
- a,b중 큰 값.
### max
```java
public static long max(long a,
long b)
```
**Parameters:**
- `b` - Long형 변수.
**Returns:**
- a,b중 큰 값.
### max
```java
public static float max(float a,
float b)
```
### max
```java
public static double max(double a,
double b)
```## 메서드 상세
### toRadians
```java
public static double toRadians(double degrees)
```
### toDegrees
```java
public static double toDegrees(double rads)
```
### ceil
```java
public static double ceil(double a)
```
### floor
```java
public static double floor(double a)
```
### abs
```java
public static int abs(int a)
```
**Parameters:**
- `a` - 정수형 매개변수.
**Returns:**
- 정수형인 a의 절대값.
### abs
```java
public static long abs(long a)
```
**Parameters:**
- `a` - Long형 매개변수.
**Returns:**
- Long인 a의 절대값.
### abs
```java
public static float abs(float f)
```
### abs
```java
public static double abs(double d)
```
### min
```java
public static float min(float a,
float b)
```
### min
```java
public static double min(double a,
double b)
```
### min
```java
public static int min(int a,
int b)
```
**Parameters:**
- `b` - 정수형 변수.
**Returns:**
- a,b중 작은 값.
### min
```java
public static long min(long a,
long b)
```
**Parameters:**
- `b` - Long형 변수.
**Returns:**
- a,b중 작은 값.
### max
```java
public static int max(int a,
int b)
```
**Parameters:**
- `b` - 정수형 변수.
**Returns:**
- a,b중 큰 값.
### max
```java
public static long max(long a,
long b)
```
**Parameters:**
- `b` - Long형 변수.
**Returns:**
- a,b중 큰 값.
### max
```java
public static float max(float a,
float b)
```
### max
```java
public static double max(double a,
double b)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class NegativeArraySizeException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.NegativeArraySizeException
```
## 설명
**extends RuntimeException:**
배열 생성시 크기가 음수일 때 발생하는 exception 클래스.
## 생성자 요약
- NegativeArraySizeException () NegativeArraySizeException을 생성한다.
- NegativeArraySizeException ( String s) NegativeArraySizeException을 생성한다.
## 생성자 상세
### NegativeArraySizeException
```java
public NegativeArraySizeException()
```
- NegativeArraySizeException을 생성한다.
### NegativeArraySizeException
```java
public NegativeArraySizeException(String s)
```
**Parameters:**
- `s` - NegativeArraySizeException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class NullPointerException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.NullPointerException
```
## 설명
**extends RuntimeException:**
객체정보가 필요한 자리에 null이 존재할 때 발생하는 exception 클래스.
## 생성자 요약
- NullPointerException () NullPointerException을 생성한다.
- NullPointerException ( String s) NullPointerException을 생성한다.
## 생성자 상세
### NullPointerException
```java
public NullPointerException()
```
- NullPointerException을 생성한다.
### NullPointerException
```java
public NullPointerException(String s)
```
**Parameters:**
- `s` - NullPointerException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class NumberFormatException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalArgumentException
|
+--java.lang.NumberFormatException
```
## 설명
**extends IllegalArgumentException:**
문자열을 정수나 Long형으로 변환할 때 문자열이 변환될 수 없을 때
발생하는 exception 클래스.
## 생성자 요약
- NumberFormatException () NumberFormatException을 생성한다.
- NumberFormatException ( String s) NumberFormatException을 생성한다.
## 생성자 상세
### NumberFormatException
```java
public NumberFormatException()
```
- NumberFormatException을 생성한다.
### NumberFormatException
```java
public NumberFormatException(String s)
```
**Parameters:**
- `s` - NumberFormatException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Object"
---
`package java.lang`
```text
java.lang.Object
```
## 설명
**public class Object:**
Java 클래스 계층의 루트 클래스.
## 생성자 요약
- Object ()
## 메서드 요약
- `boolean equals ( Object o)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `Class getClass ()` — 현 객체의 클래스를 구한다.
- `int hashCode ()` — 현 객체의 해쉬코드 값을 구한다.
- `void notify ()` — 현 객체에 대해 wait하고 있는 쓰레드들 중 하나를 깨운다.
- `void notifyAll ()` — 현 객체에 대해 wait하고 있는 쓰레드를 모두 깨운다.
- `String toString ()` — 현 객체를 나타내는 문자열을 구한다.
- `void wait ()` — 다른 쓰레드가 notify나 notifyAll할 때 까지 wait한다.
- `void wait (long ms)` — 다른 쓰레드가 notify나 notifyAll할 때 까지 wait한다.
- `void wait (long ms, int ns)` — 다른 쓰레드가 notify나 notifyAll할 때 까지 wait한다.
## 생성자 상세
### Object
```java
public Object()
```
### equals
```java
public boolean equals(Object o)
```
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### getClass
```java
public final Class getClass()
```
**Returns:**
- java.lang.Class형인 현 객체의 클래스 객체.
### hashCode
```java
public int hashCode()
```
**Returns:**
- 현 객체의 정수형 해쉬코드.
### notify
```java
public final void notify()
```
- 현 객체에 대해 wait하고 있는 쓰레드들 중 하나를 깨운다.
### notifyAll
```java
public final void notifyAll()
```
- 현 객체에 대해 wait하고 있는 쓰레드를 모두 깨운다.
### toString
```java
public String toString()
```
**Returns:**
- 현 객체를 나타내는 문자열.
### wait
```java
public final void wait()
throws IllegalMonitorStateException,
InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 쓰레드가 현 쓰레드를 interrupt했을 때 발생.
### wait
```java
public final void wait(long ms)
throws IllegalMonitorStateException,
InterruptedException
```
**Parameters:**
- `ms` - Long타입의 timeout milliseconds 시간.
**Throws:**
- `InterruptedException` - 다른 쓰레드가 현 쓰레드를 interrupt했을 때 발생.
### wait
```java
public final void wait(long ms,
int ns)
throws IllegalMonitorStateException,
InterruptedException
```
**Parameters:**
- `ns` - Int타입의 timeout nanoseconds 시간.
**Throws:**
- `InterruptedException` - 다른 쓰레드가 현 쓰레드를 interrupt했을 때 발생.## 메서드 상세
### equals
```java
public boolean equals(Object o)
```
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### getClass
```java
public final Class getClass()
```
**Returns:**
- java.lang.Class형인 현 객체의 클래스 객체.
### hashCode
```java
public int hashCode()
```
**Returns:**
- 현 객체의 정수형 해쉬코드.
### notify
```java
public final void notify()
```
- 현 객체에 대해 wait하고 있는 쓰레드들 중 하나를 깨운다.
### notifyAll
```java
public final void notifyAll()
```
- 현 객체에 대해 wait하고 있는 쓰레드를 모두 깨운다.
### toString
```java
public String toString()
```
**Returns:**
- 현 객체를 나타내는 문자열.
### wait
```java
public final void wait()
throws IllegalMonitorStateException,
InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 쓰레드가 현 쓰레드를 interrupt했을 때 발생.
### wait
```java
public final void wait(long ms)
throws IllegalMonitorStateException,
InterruptedException
```
**Parameters:**
- `ms` - Long타입의 timeout milliseconds 시간.
**Throws:**
- `InterruptedException` - 다른 쓰레드가 현 쓰레드를 interrupt했을 때 발생.
### wait
```java
public final void wait(long ms,
int ns)
throws IllegalMonitorStateException,
InterruptedException
```
**Parameters:**
- `ns` - Int타입의 timeout nanoseconds 시간.
**Throws:**
- `InterruptedException` - 다른 쓰레드가 현 쓰레드를 interrupt했을 때 발생.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class OutOfMemoryError"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Error
|
+--java.lang.VirtualMachineError
|
+--java.lang.OutOfMemoryError
```
## 설명
**extends VirtualMachineError:**
메모리 부족으로 인해 새로운 객체를 생성할 수 없을 때
발생하는 에러 클래스.
## 생성자 요약
- OutOfMemoryError () OutOfMemoryError을 생성한다.
- OutOfMemoryError ( String s) OutOfMemoryError을 생성한다.
## 생성자 상세
### OutOfMemoryError
```java
public OutOfMemoryError()
```
- OutOfMemoryError을 생성한다.
### OutOfMemoryError
```java
public OutOfMemoryError(String s)
```
**Parameters:**
- `s` - OutOfMemoryError의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface Runnable"
---
`package java.lang`
```text
public void run()
```
## 설명
- Thread.start에 의해 run메소스가 호출된다.## 메서드 요약
- `void run ()` — Thread.start에 의해 run메소스가 호출된다.
## 메서드 상세
### run
```java
public void run()
```
- Thread.start에 의해 run메소스가 호출된다.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Runtime"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Runtime
```
## 설명
**extends Object:**
VM에 Runtime객체는 하나만 존재하며 이 객체를 통해 프로그램이
동작하는 환경에 대한 정보를 얻을 수 있다.
## 메서드 요약
- `void exit (int status)` — 현재 수행 중인 프로그램을 종료한다.
- `long freeMemory ()` — 현재 사용 가능한 메모리량을 구한다.
- `void gc ()` — garbage Collection을 기동 시킴니다.
- `static Runtime getRuntime ()` — 시스템내에 존재하는 Runtime객체 정보를 구한다.
- `long totalMemory ()` — 시스템 내에 존재하는 메모리 총량을 구한다.
## 메서드 상세
### exit
```java
public void exit(int status)
```
**Parameters:**
- `status` - 종료 상황에 대한 정보를 나타내는 정수값.
### freeMemory
```java
public long freeMemory()
```
**Returns:**
- long형으로 사용가능한 바이트 수.
### gc
```java
public void gc()
```
- garbage Collection을 기동 시킴니다.
### getRuntime
```java
public static Runtime getRuntime()
```
**Returns:**
- Runtime객체.
### totalMemory
```java
public long totalMemory()
```
**Returns:**
- long형으로 메모리 총 바이트 수
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class RuntimeException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
```
## 설명
**Direct Known Subclasses:**
- `ArithmeticException`, `ArrayStoreException`, `ClassCastException`, `EmptyStackException`, `IllegalArgumentException`, `IllegalMonitorStateException`, `IllegalStateException`, `IndexOutOfBoundsException`, `MediaUnsupportedException`, `NegativeArraySizeException`, `NoSuchElementException`, `NullPointerException`, `ProgramExitException`, `SecurityException`, `UnavailableException`
**extends Exception:**
VM의 일반적 동작 중에 발생하는 exception들의 수퍼클래스.
## 생성자 요약
- RuntimeException () RuntimeException을 생성한다.
- RuntimeException ( String s) RuntimeException을 생성한다.
## 생성자 상세
### RuntimeException
```java
public RuntimeException()
```
- RuntimeException을 생성한다.
### RuntimeException
```java
public RuntimeException(String s)
```
**Parameters:**
- `s` - RuntimeException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class SecurityException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.SecurityException
```
## 설명
**extends RuntimeException:**
보안 관련 Exception 클래스.
## 생성자 요약
- SecurityException () SecurityException을 생성한다.
- SecurityException ( String s) SecurityException을 생성한다.
## 생성자 상세
### SecurityException
```java
public SecurityException()
```
- SecurityException을 생성한다.
### SecurityException
```java
public SecurityException(String s)
```
**Parameters:**
- `s` - SecurityException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Short"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Short
```
## 설명
**extends Object:**
Primitive 타입인 Short 타입을 지원하기 위한 Wrap 클래스.
## 필드 요약
- `static short MAX_VALUE` — short타입의 최대값.
- `static short MIN_VALUE` — short타입의 최소값.
## 생성자 요약
- Short (short value) Short 객체를 생성한다.
## 메서드 요약
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `int hashCode ()` — 현 객체의 해쉬코드 값을 구한다.
- `static short parseShort ( String s)` — 주어진 문자열을 10진법에 의해 Short형으로 변환한다.
- `static short parseShort ( String s, int radix)` — 주어진 문자열을 특정 진법에 의해 Short형으로 변환한다.
- `short shortValue ()` — 현 객체의 값을 구한다.
- `String toString ()` — 현 객체값을 나타내는 문자열을 구한다.
## 필드 상세
### MIN_VALUE
```java
public static final short MIN_VALUE
```
- short타입의 최소값.
### MAX_VALUE
```java
public static final short MAX_VALUE
```
- short타입의 최대값.
### Short
```java
public Short(short value)
```
**Parameters:**
- `value` - 초기값.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### parseShort
```java
public static short parseShort(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 Short값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseShort
```java
public static short parseShort(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 Short값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### shortValue
```java
public short shortValue()
```
**Returns:**
- Short타입인 현 객체 값.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.## 생성자 상세
### Short
```java
public Short(short value)
```
**Parameters:**
- `value` - 초기값.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### parseShort
```java
public static short parseShort(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 Short값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseShort
```java
public static short parseShort(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 Short값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### shortValue
```java
public short shortValue()
```
**Returns:**
- Short타입인 현 객체 값.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.## 메서드 상세
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체의 정수형 해쉬코드.
### parseShort
```java
public static short parseShort(String s)
throws NumberFormatException
```
**Parameters:**
- `s` - 변환할 문자열.
**Returns:**
- 문자열이 변환된 Short값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### parseShort
```java
public static short parseShort(String s,
int radix)
throws NumberFormatException
```
**Parameters:**
- `radix` - 변환 진법.
**Returns:**
- 문자열이 변환된 Short값.
**Throws:**
- `NumberFormatException` - 문자열이 변환될 수 없울 때 발생.
### shortValue
```java
public short shortValue()
```
**Returns:**
- Short타입인 현 객체 값.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체값을 10진수로 변환한 문자열.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class String"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.String
```
## 설명
**extends Object:**
문자열을 지원하는 클래스.
## 생성자 요약
- String () 길이가 0인 문자열을 생성한다.
- String (byte[] bytes) 바이트 배열 전체를 유니코드 문자로 변환 후 새로운 문자열을
만든다.
- String (byte[] bytes,
int off,
int len) 바이트 배열 중 일부분을 유니코드 문자로 변환 후 새로운 문자열을
만든다.
- String (byte[] bytes,
int off,
int len, String enc) 바이트 배열 중 일부분을 특정 디코딩 방식을 통해 유니코드 문자로 변환 후
새로운 문자열을 만든다.
- String (byte[] bytes, String enc) 바이트 배열 전체를 특정 디코딩 방식을 통해 유니코드 문자로 변환 후
새로운 문자열을 만든다.
- String (char[] value) 문자 배열을 가지고 문자열을 만든다.
- String (char[] value,
int offset,
int count) 문자열의 일부를 복사해 새로운 문자열을 만든다.
- String ( String value) 문자열을 복사해 새로운 문자열을 만든다.
- String ( StringBuffer buffer) StringBuffer에 저장된 값들을 사용해 새로운 문자열을 만든다.
## 메서드 요약
- `char charAt (int index)` — 현 문자열 중 index에 해당하는 문자를 구한다.
- `int compareTo ( String anotherString)` — 현 문자열과 다른 문자열을 비교한다.
- `String concat ( String str)` — 현 문자열에 특정 문자열을 덧붙여 새로운 문자열을 만든다.
- `boolean endsWith ( String suffix)` — 현 문자열이 특정 문자열로 끝나는지 여부를 구한다.
- `boolean equals ( Object anObject)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `boolean equalsIgnoreCase ( String anotherString)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.단 대소문자 구별을 하지 안는다.
- `byte[] getBytes ()` — 현 문자열을 유니코드에서 byte배열로 변환시킨다.
- `byte[] getBytes ( String enc)` — 현 문자열을 특정 인코딩 방식을 사용해 유니코드에서 byte배열로 변환시킨다.
- `void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)` — 문자열의 일부분을 문자 배열로 복사한다.
- `int hashCode ()` — 현 문자열의 해쉬코드 값을 구한다.
- `int indexOf (int ch)` — 현 문자열에서 특정 문자의 첫번째 위치를 구한다.
- `int indexOf (int ch, int fromIndex)` — 현 문자열의 특정 위치 이후 특정 문자의 첫번째 위치를 구한다.
- `int indexOf ( String str)` — 현 문자열에서 특정 문자열의 첫번째 위치를 구한다.
- `int indexOf ( String str, int fromIndex)` — 현 문자열의 특정 위치 이후 특정 문자열의 첫번째 위치를 구한다.
- `int lastIndexOf (int ch)` — 현 문자열에서 특정 문자의 마지막 위치를 구한다.
- `int lastIndexOf (int ch, int fromIndex)` — 현 문자열의 특정 위치까지 특정 문자의 마지막 위치를 구한다.
- `int length ()` — 현 문자열의 길이를 구한다.
- `boolean regionMatches (boolean ignoreCase, int toffset, String other, int ooffset, int len)` — 현 문자열의 일부와 다른 문자열의 일부를 비교해 동일한지 여부를 구한다.
- `String replace (char oldChar, char newChar)` — 현 문자열에서 특정 문자를 모두 다른 문자로 대체한 새로운 문자열을 만든다.
- `boolean startsWith ( String prefix)` — 현 문자열이 특정 문자열로 시작하는지 여부를 구한다.
- `boolean startsWith ( String prefix, int toffset)` — 현 문자열 특정 위치에 특정 문자열이 존재하는 지 여부를 구한다.
- `String substring (int beginIndex)` — 현 문자열 중 일부분을 사용해서 새로운 문자열을 생성한다.
- `String substring (int beginIndex, int endIndex)` — 현 문자열 중 일부분을 사용해서 새로운 문자열을 생성한다.
- `char[] toCharArray ()` — 현 문자열을 사용해 새로운 문자 배열을 만든다.
- `String toLowerCase ()` — 현 문자열의 대문자를 모두 소문자로 바꾼 새로운 문자열을 만든다.
- `String toString ()` — 자기 자신이 문자열이므로 자기자신을 리턴한다.
- `String toUpperCase ()` — 현 문자열의 소문자를 모두 대문자로 바꾼 새로운 문자열을 만든다.
- `String trim ()` — 현 문자열의 시작과 끝에 있는 공백문자를 모두 제거한 새로운 문자열을 만든다.
- `static String valueOf (boolean b)` — boolean객체를 설명하는 문자열을 구한다.
- `static String valueOf (char c)` — 문자열 길이가 1인 새로운 문자열을 만든다.
- `static String valueOf (char[] data)` — 문자 배열을 사용해서 새로운 문자열을 만든다.
- `static String valueOf (char[] data, int offset, int count)` — 문자 배열 일부분을 사용해서 새로운 문자열을 만든다.
- `static String valueOf (double d)`
- `static String valueOf (float f)`
- `static String valueOf (int i)` — 정수 값을 10진법으로 표현한 새로운 문자열을 만든다.
- `static String valueOf (long l)` — Long 값을 10진법으로 표현한 새로운 문자열을 만든다.
- `static String valueOf ( Object obj)` — 매개변수 객체를 설명하는 문자열을 구한다.
## 생성자 상세
### String
```java
public String()
```
- 길이가 0인 문자열을 생성한다.
### String
```java
public String(byte[] bytes)
```
**Parameters:**
- `bytes` - 문자열을 만들 바이트 배열.
### String
```java
public String(byte[] bytes,
int off,
int len)
```
**Parameters:**
- `len` - bytes배열에서 변환할 byte갯수.
### String
```java
public String(char[] value)
```
**Parameters:**
- `value` - 문자열을 만든 문자 배열.
### String
```java
public String(String value)
```
**Parameters:**
- `value` - 복사할 문자열.
### String
```java
public String(char[] value,
int offset,
int count)
```
**Parameters:**
- `count` - 복사할 길이.
### String
```java
public String(byte[] bytes,
String enc)
throws UnsupportedEncodingException
```
**Parameters:**
- `bytes` - 문자열을 만들 바이트 배열.
### String
```java
public String(byte[] bytes,
int off,
int len,
String enc)
throws UnsupportedEncodingException
```
**Parameters:**
- `len` - bytes배열에서 변환할 byte갯수.
### String
```java
public String(StringBuffer buffer)
```
**Parameters:**
- `buffer` - 문자열 생성에 사용할 StringBuffer.
### length
```java
public int length()
```
**Returns:**
- 문자열의 길이.
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 구하고자 하는 문자 인덱스.
**Returns:**
- index에 해당하는 문자.
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - 문자 배열dst에서 저장이 시작될 인덱스.
### getBytes
```java
public byte[] getBytes(String enc)
throws UnsupportedEncodingException,
IOException
```
**Parameters:**
- `enc` - 인코딩방식.
**Returns:**
- 인코딩된 Byte배열.
**Throws:**
- `UnsupportedEncodingException` - enc에 해당하는 인코더가 없을 때 발생.
### getBytes
```java
public byte[] getBytes()
```
**Returns:**
- 인코딩된 Byte배열.
### equals
```java
public boolean equals(Object anObject)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `anObject` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### equalsIgnoreCase
```java
public boolean equalsIgnoreCase(String anotherString)
```
**Parameters:**
- `anotherString` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### compareTo
```java
public int - enc
```
## 메서드 상세
### length
```java
public int length()
```
**Returns:**
- 문자열의 길이.
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 구하고자 하는 문자 인덱스.
**Returns:**
- index에 해당하는 문자.
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - 문자 배열dst에서 저장이 시작될 인덱스.
### getBytes
```java
public byte[] getBytes(String enc)
throws UnsupportedEncodingException,
IOException
```
**Parameters:**
- `enc` - 인코딩방식.
**Returns:**
- 인코딩된 Byte배열.
**Throws:**
- `UnsupportedEncodingException` - enc에 해당하는 인코더가 없을 때 발생.
### getBytes
```java
public byte[] getBytes()
```
**Returns:**
- 인코딩된 Byte배열.
### equals
```java
public boolean equals(Object anObject)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `anObject` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### equalsIgnoreCase
```java
public boolean equalsIgnoreCase(String anotherString)
```
**Parameters:**
- `anotherString` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### compareTo
```java
public int - enc
```
---
title: "Class StringBuffer"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.StringBuffer
```
## 설명
**extends Object:**
문자들이 저장될 버퍼와 버퍼에 대한 삽입,확장,제거등에 대한 메소드가
정의 된 클래스.
## 생성자 요약
- StringBuffer () 버퍼사이즈가 16바이트인 객체를 생성한다.
- StringBuffer (int length) 특정 크기의 버퍼를 가진 객체를 생성한다.
- StringBuffer ( String str) 특정 문자열 길이+16 크기를 가진 버퍼와 초기값으로 특정 문자열의
문자 정보를 가진 객체를 생성한다.
## 메서드 요약
- `StringBuffer append (boolean b)` — 문자 버퍼에 boolean변수 값을 끝에 추가한다.
- `StringBuffer append (char c)` — 문자 버퍼에 문자를 끝에 추가한다.
- `StringBuffer append (char[] str)` — 문자 버퍼에 문자 배열을 끝에 추가한다.
- `StringBuffer append (char[] str, int offset, int len)` — 문자 버퍼에 문자 배열 일부분을 끝에 추가한다.
- `StringBuffer append (double dnum)`
- `StringBuffer append (float fnum)`
- `StringBuffer append (int i)` — 문자 버퍼에 특정 정수값을 나타내는 문자열을 끝에 추가한다.
- `StringBuffer append (long l)` — 문자 버퍼에 특정 Long값을 나타내는 문자열을 끝에 추가한다.
- `StringBuffer append ( Object obj)` — 문자 버퍼에 객체를 설명하는 문자열을 끝에 추가한다.
- `StringBuffer append ( String str)` — 문자 버퍼에 특정 문자열을 끝에 추가한다.
- `int capacity ()` — 현재 버퍼 크기를 구한다.
- `char charAt (int index)` — 문자 버퍼 특정위치의 문자를 구한다.
- `StringBuffer delete (int start, int end)` — 문자 버퍼의 일부분을 제거한다.
- `StringBuffer deleteCharAt (int index)` — 문자 버퍼에서 특정 위치 문자를 제거한다.
- `void ensureCapacity (int minimumCapacity)` — 버퍼 크기가 특정 크기 이상이 되도록 한다.
- `void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)` — 문자 버퍼의 일부분을 문자 배열로 복사한다.
- `StringBuffer insert (int offset, boolean b)` — 문자 버퍼에 boolean변수 값을 중간에 삽입한다.
- `StringBuffer insert (int offset, char c)` — 문자 버퍼에 문자를 중간에 삽입한다.
- `StringBuffer insert (int offset, char[] str)` — 문자버퍼 중간에 특정 문자 배열을 삽입한다.
- `StringBuffer insert (int offset, double dnum)`
- `StringBuffer insert (int offset, float fnum)`
- `StringBuffer insert (int offset, int i)` — 문자 버퍼에 특정 정수값을 나타내는 문자열을 중간에 추가한다.
- `StringBuffer insert (int offset, long l)` — 문자 버퍼에 특정 Long값을 나타내는 문자열을 끝에 삽입한다.
- `StringBuffer insert (int offset, Object obj)` — 문자버퍼 중간에 특정 객체에 대한 설명 문자열을 삽입한다.
- `StringBuffer insert (int offset, String str)` — 문자버퍼 중간에 특정 문자열을 삽입한다.
- `int length ()` — 현재 버퍼에 저장된 문자 갯수를 구한다.
- `StringBuffer reverse ()` — 문자 버퍼에 저장된 값을 역으로 뒤집는다.
- `void setCharAt (int index, char ch)` — 문자 버퍼의 특정 위치 문자를 다른 문자로 바꾼다.
- `void setLength (int newLength)` — 문자 버퍼를 특정 크기로 만든다.
- `String toString ()` — 현 문자버퍼를 가지고 새 문자열을 만든다.
## 생성자 상세
### StringBuffer
```java
public StringBuffer()
```
- 버퍼사이즈가 16바이트인 객체를 생성한다.
### StringBuffer
```java
public StringBuffer(int length)
```
- 특정 크기의 버퍼를 가진 객체를 생성한다.
### StringBuffer
```java
public StringBuffer(String str)
```
**Parameters:**
- `str` - 문자 버퍼의 초기값.
### length
```java
public int length()
```
**Returns:**
- 저장된 문자 갯수.
### capacity
```java
public int capacity()
```
**Returns:**
- 버퍼 크기.
### ensureCapacity
```java
public void ensureCapacity(int minimumCapacity)
```
**Parameters:**
- `minimumCapacity` - 버퍼의 최소 크기
### setLength
```java
public void setLength(int newLength)
```
**Parameters:**
- `newLength` - 새로운 버퍼 크기.
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 구하고자 하는 문자의 위치.
**Returns:**
- 구하는 문자.
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - dst내에서 정보가 저장될 시작위치.
### setCharAt
```java
public void setCharAt(int index,
char ch)
```
**Parameters:**
- `ch` - 바꿀 문자.
### append
```java
public StringBuffer append(Object obj)
```
**Parameters:**
- `obj` - 문자 버퍼에 설명이 추가될 객체.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(String str)
```
**Parameters:**
- `str` - 문자 버퍼에 추가될 문자열.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(char[] str)
```
**Parameters:**
- `str` - 문자 버퍼에 추가될 문자배열.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(char[] str,
int offset,
int len)
```
**Parameters:**
- `len` - 추가될 길이.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(boolean b)
```
**Parameters:**
- `b` - 문자 버퍼에 추가될 boolean 변수.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(char c)
```
**Parameters:**
- `b` - 문자 버퍼에 추가될 문자.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(int i)
```
**Parameters:**
- `i` - 문자 버퍼에 추가될 정수값.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(long l)
```
**Parameters:**
- `l` - 문자 버퍼에 추가될 Long값.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(float fnum)
```
### append
```java
public StringBuffer append(double dnum)
```
### delete
```java
public StringBuffer delete(int start,
int end)
```
**Parameters:**
- `end` - 제거가 끝나는 위치+1값.
**Returns:**
- 현 문자 버퍼.
### deleteCharAt
```java
public StringBuffer deleteCharAt(int index)
```
**Parameters:**
- `index` - 제거할 위치.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
Object obj)
```
**Parameters:**
- `obj` - 문자 버퍼에 설명이 삽입될 객체.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
String str)
```
**Parameters:**
- `str` - 문자 버퍼에 삽입될 문자열.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
char[] str)
```
**Parameters:**
- `str` - 문자 버퍼에 삽입될 문자 배열.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
boolean b)
```
**Parameters:**
- `b` - 문자 버퍼에 추가될 boolean 변수.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
char c)
```
**Parameters:**
- `c` - 문자 버퍼에 추가될 문자변수.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
int i)
```
**Parameters:**
- `i` - 문자 버퍼에 삽입될 정수값.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
long l)
```
**Parameters:**
- `l` - 문자 버퍼에 추가될 Long값.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
float fnum)
```
### insert
```java
public StringBuffer insert(int offset,
double dnum)
```
### reverse
```java
public StringBuffer reverse()
```
**Returns:**
- 현 문자 버퍼.
### toString
## 메서드 상세
### length
```java
public int length()
```
**Returns:**
- 저장된 문자 갯수.
### capacity
```java
public int capacity()
```
**Returns:**
- 버퍼 크기.
### ensureCapacity
```java
public void ensureCapacity(int minimumCapacity)
```
**Parameters:**
- `minimumCapacity` - 버퍼의 최소 크기
### setLength
```java
public void setLength(int newLength)
```
**Parameters:**
- `newLength` - 새로운 버퍼 크기.
### charAt
```java
public char charAt(int index)
```
**Parameters:**
- `index` - 구하고자 하는 문자의 위치.
**Returns:**
- 구하는 문자.
### getChars
```java
public void getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)
```
**Parameters:**
- `dstBegin` - dst내에서 정보가 저장될 시작위치.
### setCharAt
```java
public void setCharAt(int index,
char ch)
```
**Parameters:**
- `ch` - 바꿀 문자.
### append
```java
public StringBuffer append(Object obj)
```
**Parameters:**
- `obj` - 문자 버퍼에 설명이 추가될 객체.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(String str)
```
**Parameters:**
- `str` - 문자 버퍼에 추가될 문자열.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(char[] str)
```
**Parameters:**
- `str` - 문자 버퍼에 추가될 문자배열.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(char[] str,
int offset,
int len)
```
**Parameters:**
- `len` - 추가될 길이.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(boolean b)
```
**Parameters:**
- `b` - 문자 버퍼에 추가될 boolean 변수.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(char c)
```
**Parameters:**
- `b` - 문자 버퍼에 추가될 문자.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(int i)
```
**Parameters:**
- `i` - 문자 버퍼에 추가될 정수값.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(long l)
```
**Parameters:**
- `l` - 문자 버퍼에 추가될 Long값.
**Returns:**
- 현 문자버퍼.
### append
```java
public StringBuffer append(float fnum)
```
### append
```java
public StringBuffer append(double dnum)
```
### delete
```java
public StringBuffer delete(int start,
int end)
```
**Parameters:**
- `end` - 제거가 끝나는 위치+1값.
**Returns:**
- 현 문자 버퍼.
### deleteCharAt
```java
public StringBuffer deleteCharAt(int index)
```
**Parameters:**
- `index` - 제거할 위치.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
Object obj)
```
**Parameters:**
- `obj` - 문자 버퍼에 설명이 삽입될 객체.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
String str)
```
**Parameters:**
- `str` - 문자 버퍼에 삽입될 문자열.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
char[] str)
```
**Parameters:**
- `str` - 문자 버퍼에 삽입될 문자 배열.
**Returns:**
- 현 문자 버퍼.
### insert
```java
public StringBuffer insert(int offset,
boolean b)
```
**Parameters:**
- `b` - 문자 버퍼에 추가될 boolean 변수.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
char c)
```
**Parameters:**
- `c` - 문자 버퍼에 추가될 문자변수.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
int i)
```
**Parameters:**
- `i` - 문자 버퍼에 삽입될 정수값.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
long l)
```
**Parameters:**
- `l` - 문자 버퍼에 추가될 Long값.
**Returns:**
- 현 문자버퍼.
### insert
```java
public StringBuffer insert(int offset,
float fnum)
```
### insert
```java
public StringBuffer insert(int offset,
double dnum)
```
### reverse
```java
public StringBuffer reverse()
```
**Returns:**
- 현 문자 버퍼.
### toString
---
title: "Class StringIndexOutOfBoundsException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
|
+--java.lang.StringIndexOutOfBoundsException
```
## 설명
**extends IndexOutOfBoundsException:**
문자열내 문자 배열 범위를 벋어나는 영역를 접근하려 할 때 발생하는
exception 클래스.
## 생성자 요약
- StringIndexOutOfBoundsException () StringIndexOutOfBoundsException객체를 생성한다.
- StringIndexOutOfBoundsException (int index) StringIndexOutOfBoundsException객체를 생성한다.
- StringIndexOutOfBoundsException ( String s) StringIndexOutOfBoundsException객체를 생성한다.
## 생성자 상세
### StringIndexOutOfBoundsException
```java
public StringIndexOutOfBoundsException()
```
- StringIndexOutOfBoundsException객체를 생성한다.
### StringIndexOutOfBoundsException
```java
public StringIndexOutOfBoundsException(String s)
```
**Parameters:**
- `s` - StringIndexOutOfBoundsException의 세부 메세지.
### StringIndexOutOfBoundsException
```java
public StringIndexOutOfBoundsException(int index)
```
**Parameters:**
- `index` - exception을 발생하게 한 인덱스.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class System"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.System
```
## 설명
**extends Object:**
VM에 관련된 기능과 유용한 메소드 등을 모아놓은 클래스.
## 필드 요약
- `static PrintStream err` — VM에서 공통적으로 사용하는 에러 스트림.
- `static PrintStream out` — VM내에서 공통적으로 사용하는 출력 스트림.
## 메서드 요약
- `static void arraycopy ( Object src, int srcStart, Object dest, int destStart, int len)` — 자바 객체로 이루어진 배열끼리 복사한다.
- `static long currentTimeMillis ()` — 현재 시각을 1970년 1월1일 정오(UTC)기준으로 millisecond단위로 얻어온다.
- `static void exit (int status)` — 현재 수행 중인 자바 프로그램을 종료한다.
- `static void gc ()` — garbage collection을 기동 시킨다.
- `static String getProperty ( String key)` — VM 프로퍼티 값을 구한다.
- `static int identityHashCode ( Object o)` — 객체에 대한 해쉬 코드 값을 구한다.
## 필드 상세
### out
```java
public static PrintStream out
```
- VM내에서 공통적으로 사용하는 출력 스트림. 에뮬레이터에서는 콘솔에 화면 출력
폰에서는 시리얼 출력이 될 수 있다.
### err
```java
public static PrintStream err
```
- VM에서 공통적으로 사용하는 에러 스트림. 에뮬레이터에서는 콘솔에 화면 출력
폰에서는 시리얼 출력이 될 수 있다.
### arraycopy
```java
public static void arraycopy(Object src,
int srcStart,
Object dest,
int destStart,
int len)
```
**Parameters:**
- `len` - 복사될 객체 수.
### currentTimeMillis
```java
public static long currentTimeMillis()
```
**Returns:**
- 현재 시각을 나타내는 long값.
### exit
```java
public static void exit(int status)
```
**Parameters:**
- `status` - 종료원인을 나타낸는 정수값.
### gc
```java
public static void gc()
```
- garbage collection을 기동 시킨다.
### getProperty
```java
public static String getProperty(String key)
```
**Parameters:**
- `key` - 구하고자 하는 프로퍼티.
**Returns:**
- key에 해당하는 프로퍼티 값.
### identityHashCode
```java
public static int identityHashCode(Object o)
```
**Parameters:**
- `o` - 해쉬코드를 구하고자 하는 객체.
**Returns:**
- o에 해당하는 해쉬코드 정수 값.## 메서드 상세
### arraycopy
```java
public static void arraycopy(Object src,
int srcStart,
Object dest,
int destStart,
int len)
```
**Parameters:**
- `len` - 복사될 객체 수.
### currentTimeMillis
```java
public static long currentTimeMillis()
```
**Returns:**
- 현재 시각을 나타내는 long값.
### exit
```java
public static void exit(int status)
```
**Parameters:**
- `status` - 종료원인을 나타낸는 정수값.
### gc
```java
public static void gc()
```
- garbage collection을 기동 시킨다.
### getProperty
```java
public static String getProperty(String key)
```
**Parameters:**
- `key` - 구하고자 하는 프로퍼티.
**Returns:**
- key에 해당하는 프로퍼티 값.
### identityHashCode
```java
public static int identityHashCode(Object o)
```
**Parameters:**
- `o` - 해쉬코드를 구하고자 하는 객체.
**Returns:**
- o에 해당하는 해쉬코드 정수 값.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Thread"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Thread
```
## 설명
**extends Object:**
VM에서 사용하는 쓰레드에 관한 클래스.
## 필드 요약
- `static int MAX_PRIORITY` — 쓰레드 우선 순위 최대값.
- `static int MIN_PRIORITY` — 쓰레드 우선 순위 최소값.
- `static int NORM_PRIORITY` — 쓰레드 우선 순위 디폴트 값.
## 생성자 요약
- Thread () 쓰레드객체를 생성한다.
- Thread ( Runnable toRun) 쓰레드에서 실제로 기동시킬 대상을 지정해서 쓰레드 객체를 생성한다.
## 메서드 요약
- `static int activeCount ()` — VM내의 active한 쓰레드 갯수를 구한다.
- `static Thread currentThread ()` — 현재 실행되고 있는 쓰레드를 구한다.
- `int getPriority ()` — 현 쓰레드의 우선순위를 구한다.
- `boolean isAlive ()` — 현 쓰레드가 살아있는 지 여부를 구한다.
- `void join ()` — 현재 실행되는 쓰레드가 현 쓰레드 객체가 죽기 까지 기다리게 한다.
- `void run ()` — 현 쓰레드가 시작되면 먼저 이메소드가 호출된다.
- `void setPriority (int newPriority)` — 현 쓰레드의 우선 순위를 바꾼다.
- `static void sleep (long millis)` — 현재 수행 중인 쓰레드가 특정 시간 만큼 동작을 멈춘다.
- `void start ()` — 쓰레드가 동작을 시작한다.
- `String toString ()` — 현 쓰레드를 나타내는 문자열을 구한다.
- `static void yield ()` — 현재 수행되는 쓰레드가 다른 쓰레드가 실행되도록 자신의 순번을 양보한다.
## 필드 상세
### MAX_PRIORITY
```java
public static final int MAX_PRIORITY
```
- 쓰레드 우선 순위 최대값.
### NORM_PRIORITY
```java
public static final int NORM_PRIORITY
```
- 쓰레드 우선 순위 디폴트 값.
### MIN_PRIORITY
```java
public static final int MIN_PRIORITY
```
- 쓰레드 우선 순위 최소값.
### Thread
```java
public Thread()
```
- 쓰레드객체를 생성한다.
### Thread
```java
public Thread(Runnable toRun)
```
**Parameters:**
- `toRun` - 쓰레드에서 기동 시킬 대상이며 Runnable 인터페이스를 구현해야 함.
### activeCount
```java
public static int activeCount()
```
**Returns:**
- VM내에서 active한 쓰레드 갯수.
### currentThread
```java
public static Thread currentThread()
```
**Returns:**
- 현재 실행되고 있는 쓰레드.
### getPriority
```java
public final int getPriority()
```
**Returns:**
- 현 쓰레드 우선순위.
### isAlive
```java
public final boolean isAlive()
```
**Returns:**
- 현 쓰레드가 살아있으면 true 아니면 false.
### join
```java
public final void join()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 쓰레드에서 join상태인 쓰레드에
Interrput을 걸었을 때 발생.
### run
```java
public void run()
```
- 현 쓰레드가 시작되면 먼저 이메소드가 호출된다.
### setPriority
```java
public final void setPriority(int newPriority)
```
**Parameters:**
- `newPriority` - 바뀔 우선 순위.
### sleep
```java
public static void sleep(long millis)
throws InterruptedException
```
**Parameters:**
- `millis` - 동작이 정지되는 시간.
**Throws:**
- `InterruptedException` - 다른 쓰레드에서 sleep상태인 쓰레드에
Interrput을 걸었을 때 발생.
### start
```java
public void start()
```
- 쓰레드가 동작을 시작한다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 쓰레드를 나타내는 문자열.
### yield
```java
public static void yield()
```
- 현재 수행되는 쓰레드가 다른 쓰레드가 실행되도록 자신의
순번을 양보한다.## 생성자 상세
### Thread
```java
public Thread()
```
- 쓰레드객체를 생성한다.
### Thread
```java
public Thread(Runnable toRun)
```
**Parameters:**
- `toRun` - 쓰레드에서 기동 시킬 대상이며 Runnable 인터페이스를 구현해야 함.
### activeCount
```java
public static int activeCount()
```
**Returns:**
- VM내에서 active한 쓰레드 갯수.
### currentThread
```java
public static Thread currentThread()
```
**Returns:**
- 현재 실행되고 있는 쓰레드.
### getPriority
```java
public final int getPriority()
```
**Returns:**
- 현 쓰레드 우선순위.
### isAlive
```java
public final boolean isAlive()
```
**Returns:**
- 현 쓰레드가 살아있으면 true 아니면 false.
### join
```java
public final void join()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 쓰레드에서 join상태인 쓰레드에
Interrput을 걸었을 때 발생.
### run
```java
public void run()
```
- 현 쓰레드가 시작되면 먼저 이메소드가 호출된다.
### setPriority
```java
public final void setPriority(int newPriority)
```
**Parameters:**
- `newPriority` - 바뀔 우선 순위.
### sleep
```java
public static void sleep(long millis)
throws InterruptedException
```
**Parameters:**
- `millis` - 동작이 정지되는 시간.
**Throws:**
- `InterruptedException` - 다른 쓰레드에서 sleep상태인 쓰레드에
Interrput을 걸었을 때 발생.
### start
```java
public void start()
```
- 쓰레드가 동작을 시작한다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 쓰레드를 나타내는 문자열.
### yield
```java
public static void yield()
```
- 현재 수행되는 쓰레드가 다른 쓰레드가 실행되도록 자신의
순번을 양보한다.## 메서드 상세
### activeCount
```java
public static int activeCount()
```
**Returns:**
- VM내에서 active한 쓰레드 갯수.
### currentThread
```java
public static Thread currentThread()
```
**Returns:**
- 현재 실행되고 있는 쓰레드.
### getPriority
```java
public final int getPriority()
```
**Returns:**
- 현 쓰레드 우선순위.
### isAlive
```java
public final boolean isAlive()
```
**Returns:**
- 현 쓰레드가 살아있으면 true 아니면 false.
### join
```java
public final void join()
throws InterruptedException
```
**Throws:**
- `InterruptedException` - 다른 쓰레드에서 join상태인 쓰레드에
Interrput을 걸었을 때 발생.
### run
```java
public void run()
```
- 현 쓰레드가 시작되면 먼저 이메소드가 호출된다.
### setPriority
```java
public final void setPriority(int newPriority)
```
**Parameters:**
- `newPriority` - 바뀔 우선 순위.
### sleep
```java
public static void sleep(long millis)
throws InterruptedException
```
**Parameters:**
- `millis` - 동작이 정지되는 시간.
**Throws:**
- `InterruptedException` - 다른 쓰레드에서 sleep상태인 쓰레드에
Interrput을 걸었을 때 발생.
### start
```java
public void start()
```
- 쓰레드가 동작을 시작한다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 쓰레드를 나타내는 문자열.
### yield
```java
public static void yield()
```
- 현재 수행되는 쓰레드가 다른 쓰레드가 실행되도록 자신의
순번을 양보한다.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Throwable"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
```
## 설명
**Direct Known Subclasses:**
- `Error`, `Exception`
**extends Object:**
Java에서 발생하는 Error나Exception의 최상위 클래스.
## 생성자 요약
- Throwable () Throwable 객체를 생성한다.
- Throwable ( String message) Throwable 객체를 생성한다.
## 메서드 요약
- `String getMessage ()` — Throwable이 발생한 원인에 대한 문자열을 구한다.
- `void printStackTrace ()` — 빈함수 임니다.
- `String toString ()` — 현 객체를 설명할 수 있는 문자열을 구한다.
## 생성자 상세
### Throwable
```java
public Throwable()
```
- Throwable 객체를 생성한다.
### Throwable
```java
public Throwable(String message)
```
**Parameters:**
- `message` - Throwable이 발생하게된 원인에 대한 세부 설명.
### getMessage
```java
public String getMessage()
```
**Returns:**
- Throwable이 발생한 원인에 대한 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 설명할 수 있는 문자열.
### printStackTrace
```java
public void printStackTrace()
```
- 빈함수 임니다.## 메서드 상세
### getMessage
```java
public String getMessage()
```
**Returns:**
- Throwable이 발생한 원인에 대한 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 설명할 수 있는 문자열.
### printStackTrace
```java
public void printStackTrace()
```
- 빈함수 임니다.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class VirtualMachineError"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Error
|
+--java.lang.VirtualMachineError
```
## 설명
**Direct Known Subclasses:**
- `OutOfMemoryError`
**extends Error:**
자원 부족같이 VM정상 동작하기 어려울 때 발생하는 에러 클래스.
## 생성자 요약
- VirtualMachineError () VirtualMachineError객체를 생성한다.
- VirtualMachineError ( String s) VirtualMachineError객체를 생성한다.
## 생성자 상세
### VirtualMachineError
```java
public VirtualMachineError()
```
- VirtualMachineError객체를 생성한다.
### VirtualMachineError
```java
public VirtualMachineError(String s)
```
**Parameters:**
- `s` - VirtualMachineError의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package java.lang"
---
## Interface Summary
- [Runnable](Runnable.md) — Thread.start를 사용해서 active되는 클래스는 모두 이 인터페이스를 구현 해야 된다.
## Class Summary
- [Boolean](Boolean.md) — Primitive 타입인 Boolean 타입을 지원하기 위한 Wrap 클래스.
- [Byte](Byte.md) — Primitive 타입인 Byte 타입을 지원하기 위한 Wrap 클래스.
- [Character](Character.md) — Primitive 타입인 char 타입을 지원하기 위한 Wrap 클래스.
- [Class](Class.md) — Java에서 사용하는 class나 Interface를 대표하는 클래스.
- [Double](Double.md) —
- [Float](Float.md) —
- [Integer](Integer.md) — Primitive 타입인 Int 타입을 지원하기 위한 Wrap 클래스.
- [Long](Long.md) — Primitive 타입인 Long 타입을 지원하기 위한 Wrap 클래스.
- [Math](Math.md) — 기본적인 수칙연산을 포함한 클래스.
- [Object](Object.md) — Java 클래스 계층의 루트 클래스.
- [Runtime](Runtime.md) — VM에 Runtime객체는 하나만 존재하며 이 객체를 통해 프로그램이 동작하는 환경에 대한 정보를 얻을 수 있다.
- [Short](Short.md) — Primitive 타입인 Short 타입을 지원하기 위한 Wrap 클래스.
- [String](String.md) — 문자열을 지원하는 클래스.
- [StringBuffer](StringBuffer.md) — 문자들이 저장될 버퍼와 버퍼에 대한 삽입,확장,제거등에 대한 메소드가 정의 된 클래스.
- [System](System.md) — VM에 관련된 기능과 유용한 메소드 등을 모아놓은 클래스.
- [Thread](Thread.md) — VM에서 사용하는 쓰레드에 관한 클래스.
- [Throwable](Throwable.md) — Java에서 발생하는 Error나Exception의 최상위 클래스.
## Exception Summary
- [ArithmeticException](ArithmeticException.md) — 0으로 나누기와 같은 수칙 연산 시 올바르게 대처할 수 없는 문제 발생 시 발생되는 Exception 클래스.
- [ArrayIndexOutOfBoundsException](ArrayIndexOutOfBoundsException.md) — 배열 참조시 배열 범위를 벋어나는 인덱스를 사용할 때 발생하는 Exception 클래스.
- [ArrayStoreException](ArrayStoreException.md) — 배열에 저장할 수 없는 종류의 객체를 저장하려 할 때 발생하는 Exception 클래스.
- [ClassCastException](ClassCastException.md) — 객체를 변환할 수 없는 타입으로 변환할 때 발생하는 exception 클래스.
- [ClassNotFoundException](ClassNotFoundException.md) — 찾고자하는 클래스가 없을 때 발생하는 exception 클래스.
- [Exception](Exception.md) — application에서 대응할 수 있는 오류를 나타낼 때 사용한다.
- [IllegalAccessException](IllegalAccessException.md) — 접근 권한이 없는 클래스에 접근하려 할 때 발생하는 exception 클래스.
- [IllegalArgumentException](IllegalArgumentException.md) — 함수 매개변수 값에 적절하지 않은 값이 할당되면 발생하는 exception 클래스.
- [IllegalMonitorStateException](IllegalMonitorStateException.md) — 한 쓰레드가 소유하지 않은 모니터를 사용해서 wait아 notify를 할 때 발생하는 exception 클래스.
- [IllegalStateException](IllegalStateException.md) — Signals that a method has been invoked at an illegal or inappropriate time.
- [IllegalThreadStateException](IllegalThreadStateException.md) — 쓰레드의 현 상태가 주어진 동작을 취하기에 적절치않은 경우에 발생하는 exception 클래스.
- [IndexOutOfBoundsException](IndexOutOfBoundsException.md) — Vector나 문자열, 배열 같이 인데스를 통해 접근가는한 객체에 범위 밖의 인덱스를 사용할 때 발생하는 exception 클래스.
- [InstantiationException](InstantiationException.md) — newInstace를 통해 객체를 생성할 때 클래스가 추상 클래스나 인터페이스일 때 발생하는 exception 클래스.
- [InterruptedException](InterruptedException.md) — 한 쓰레드가 wait,sleep,pause瑛
## 기타
- [Error](Error.md)
- [NegativeArraySizeException](NegativeArraySizeException.md)
- [NullPointerException](NullPointerException.md)
- [NumberFormatException](NumberFormatException.md)
- [OutOfMemoryError](OutOfMemoryError.md)
- [RuntimeException](RuntimeException.md)
- [SecurityException](SecurityException.md)
- [StringIndexOutOfBoundsException](StringIndexOutOfBoundsException.md)
- [VirtualMachineError](VirtualMachineError.md)
---
title: "Class Calendar"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Calendar
```
## 설명
**Direct Known Subclasses:**
- `GregorianCalendar`
**extends Object:**
연도,월,일,요일 등의 정보를 얻기 위한 캘린더 클래스들이
상속받아야 할 추상 클래스.
## 필드 요약
- `static int AM`
- `static int AM_PM`
- `static int APRIL`
- `protected boolean areFieldsSet`
- `static int AUGUST`
- `static int DATE`
- `static int DAY_OF_MONTH`
- `static int DAY_OF_WEEK`
- `static int DAY_OF_WEEK_IN_MONTH`
- `static int DAY_OF_YEAR`
- `static int DECEMBER`
- `static int DST_OFFSET`
- `static int ERA`
- `static int FEBRUARY`
- `static int FIELD_COUNT`
- `protected int[] fields`
- `static int FRIDAY`
- `static int HOUR`
- `static int HOUR_OF_DAY`
- `protected boolean[] isSet`
- `protected boolean isTimeSet`
- `static int JANUARY`
- `static int JULY`
- `static int JUNE`
- `static int MARCH`
- `static int MAY`
- `static int MILLISECOND`
- `static int MINUTE`
- `static int MONDAY`
- `static int MONTH`
- `static int NOVEMBER`
- `static int OCTOBER`
- `static int PM`
- `static int SATURDAY`
- `static int SECOND`
- `static int SEPTEMBER`
- `static int SUNDAY`
- `static int THURSDAY`
- `protected long time`
- `static int TUESDAY`
- `static int UNDECIMBER`
- `static int WEDNESDAY`
- `static int WEEK_OF_MONTH`
- `static int WEEK_OF_YEAR`
- `static int YEAR`
- `static int ZONE_OFFSET`
## 생성자 요약
- `protected Calendar ()` — 새로운 객체를 만든다.
- `protected Calendar ( TimeZone zne)` — 새로운 객체를 만든다.
## 메서드 요약
- `boolean after ( Object when)` — 현 객체에 설정된 시각와 매개변수로 넘어온 시각을 비교한다.
- `boolean before ( Object when)` — 현 객체에 설정된 시각와 매개변수로 넘어온 시각을 비교한다.
- `protected void complete ()` — 현 캘랜더에 설정한 시각을 가지고 날짜,년도,월 등을 구한 다음 저장하고 현 시각에 대응하는 GMT+0시각을 구해 저장한다.
- `protected abstract void computeFields ()` — 캘린더 내에 년도,월,일등을 저장하는 fields 필드에 현 캘랜더가 나타내는 시각을 기준으로 계산해서 얻은 값을 저장한다.
- `protected abstract void computeTime ()` — 현 시각을 GMT시각으로 변환 후 time 필드에 저장한다.
- `boolean equals ( Object when)` — 현 객체에 설정된 시각와 매개변수로 넘어온 시각을 비교한다.
- `int get (int field)` — 년도,월,일,요일 등 field값에 따라 필요한 정보를 구한다.
- `protected int getFirstDayOfWeek ()` — 일주일의 첫번째 요일이 무엇인지 구한다.
- `protected abstract int getGreatestMinimum (int field)`
- `static Calendar getInstance ()` — VM에서 사용하는 디폴트 캘랜더 객체를 얻는다.
- `static Calendar getInstance ( TimeZone zone)` — 특정 시간대를 사용하는 캘랜더 객체를 얻는다.
- `protected abstract int getLeastMaximum (int field)`
- `protected abstract int getMaximum (int field)`
- `protected int getMinimalDaysInFirstWeek ()`
- `protected abstract int getMinimum (int field)`
- `Date getTime ()` — 현 시간을 구한다.
- `protected long getTimeInMillis ()` — 현 캘랜더가 나타내는 시각을 GMT+0시각으로 변환한 값을 구한다.
- `TimeZone getTimeZone ()` — 현 객체가 사용하는 시간대를 구한다.
- `static void initialize ()`
- `protected int internalGet (int field)`
- `protected boolean isLenient ()`
- `protected boolean isSet (int field)`
- `void set (int field, int value)` — 캘랜더의 관련 필드에 값을 설정한다.
- `protected void set (int year, int month, int date)` — 현 캘랜더가 나타내는 년도,달,날짜를 재설정한다.
- `void setTime ( Date date)` — 캘랜더의 현 날짜를 설정한다.
- `protected void setTimeInMillis (long millis)` — 현 캘랜더가 나타내는 시각을 재설정한다.
- `void setTimeZone ( TimeZone value)` — 캘랜더의 시간대를 바꾼다.
## 필드 상세
### ERA
```java
public static final int ERA
```
### YEAR
```java
public static final int YEAR
```
### MONTH
```java
public static final int MONTH
```
### WEEK_OF_YEAR
```java
public static final int WEEK_OF_YEAR
```
### WEEK_OF_MONTH
```java
public static final int WEEK_OF_MONTH
```
### DATE
```java
public static final int DATE
```
---
title: "Class Date"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Date
```
## 설명
**extends Object:**
millisecond단위로 특정 시간을 나타내는 클래스
## 생성자 요약
- Date () VM의 현재 시각을 기준으로 객체를 생성한다.
- Date (long date) 특정 시각을 나타내는 객체를 생성한다.
## 메서드 요약
- `boolean equals ( Object obj)` — 현 객체와 매개변수로 전달된 객체 값이 일치함을 검사한다.
- `long getTime ()` — 현 객체가 나타내는 시각을 구한다.
- `int hashCode ()` — 현 객체의 해쉬코드를 구한다.
- `void setTime (long time)` — 현 객체의 시각을 특정 시각으로 바꾼다.
## 생성자 상세
### Date
```java
public Date()
```
- VM의 현재 시각을 기준으로 객체를 생성한다.
### Date
```java
public Date(long date)
```
**Parameters:**
- `date` - 나타내고자 하는 millesecond단위 시각.
### getTime
```java
public long getTime()
```
**Returns:**
- millisecond단위로 나타낸 현 객체 시각.
### setTime
```java
public void setTime(long time)
```
**Parameters:**
- `time` - 바꾸고자 하는 millisecond단위 시각.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.## 메서드 상세
### getTime
```java
public long getTime()
```
**Returns:**
- millisecond단위로 나타낸 현 객체 시각.
### setTime
```java
public void setTime(long time)
```
**Parameters:**
- `time` - 바꾸고자 하는 millisecond단위 시각.
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `obj` - 비교할 대상.
**Returns:**
- 두 객체가 모두 같은 값을 가지면 참 아니면 거짓.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class EmptyStackException"
---
`package java.util`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.util.EmptyStackException
```
## 설명
**extends RuntimeException:**
스택이 비었을 때 발생하는 exception 클래스.
## 생성자 요약
- EmptyStackException () EmptyStackException객체를 생성한다.
## 생성자 상세
### EmptyStackException
```java
public EmptyStackException()
```
- EmptyStackException객체를 생성한다.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface Enumeration"
---
`package java.util`
```text
public boolean hasMoreElements()
```
## 설명
**Returns:**
- 객체가 남아있다면 true 아니면 false.
### nextElement
**Returns:**
- 다음 순서의 객체.
**Throws:**
- `NoSuchElementException` - 더 이상 객체가 없을 때 발생.## 메서드 요약
- `boolean hasMoreElements ()` — Enumeration안에 남아있는 객체가 있는지 여부를 구한다.
- `Object nextElement ()` — Enumeration에서 다음 객체를 구한다.
## 메서드 상세
### hasMoreElements
```java
public boolean hasMoreElements()
```
**Returns:**
- 객체가 남아있다면 true 아니면 false.
### nextElement
```java
public Object nextElement()
```
**Returns:**
- 다음 순서의 객체.
**Throws:**
- `NoSuchElementException` - 더 이상 객체가 없을 때 발생.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class GregorianCalendar"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Calendar
|
+--java.util.GregorianCalendar
```
## 설명
**extends Calendar:**
그레고리안 역법을 이용한 캘랜더 클래스.
## 필드 요약
- `static int AD`
- `static int BC`
## 생성자 요약
- GregorianCalendar () 새로운 객체를 만든다.
- GregorianCalendar (int year,
int month,
int date) 새로운 객체를 만든다.
- GregorianCalendar ( TimeZone zone) 새로운 객체를 만든다.
## 메서드 요약
- `boolean after ( Object when)` — 현 객체에 설정된 시각와 매개변수로 넘어온 시각을 비교한다.
- `boolean before ( Object when)` — 현 객체에 설정된 시각와 매개변수로 넘어온 시각을 비교한다.
- `protected void computeFields ()` — 캘린더 내에 년도,월,일등을 저장하는 fields 필드에 현 캘랜더가 나타내는 시각을 기준으로 계산해서 얻은 값을 저장한다.
- `protected void computeTime ()` — 현 시각을 GMT시각으로 변환 후 time 필드에 저장한다.
- `boolean equals ( Object obj)` — 현 객체에 설정된 시각와 매개변수로 넘어온 시각을 비교한다.
- `protected int getGreatestMinimum (int field)`
- `protected int getLeastMaximum (int field)`
- `protected int getMaximum (int field)`
- `protected int getMinimum (int field)`
- `int hashCode ()` — 현 객체를 나타내기 위한 정수형의 해쉬코드를 구한다.
- `boolean isLeapYear (int year)` — 특정 연도가 윤년인지 여부를 구한다.
## 필드 상세
### BC
```java
public static final int BC
```
### AD
```java
public static final int AD
```
### GregorianCalendar
```java
public GregorianCalendar()
```
- 새로운 객체를 만든다. 사용하는 시간대는 VM에 설정된 시간대를
사용한다.
### GregorianCalendar
```java
public GregorianCalendar(TimeZone zone)
```
**Parameters:**
- `zone` - 사용할 시간대.
### GregorianCalendar
```java
public GregorianCalendar(int year,
int month,
int date)
```
**Parameters:**
- `date` - 일.
### after
```java
public boolean after(Object when)
```
**Overrides:**
- `after` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 나중이면 true 아니면 false.
### before
```java
public boolean before(Object when)
```
**Overrides:**
- `before` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 이전이면 true 아니면 false.
### computeFields
```java
protected void computeFields()
```
- **Description copied from class: `Calendar`**
**Overrides:**
- `computeFields` in class `Calendar`
### computeTime
```java
protected void computeTime()
```
- **Description copied from class: `Calendar`**
**Overrides:**
- `computeTime` in class `Calendar`
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 같으면 true 아니면 false.
### getGreatestMinimum
```java
protected int getGreatestMinimum(int field)
```
**Overrides:**
- `getGreatestMinimum` in class `Calendar`
### getLeastMaximum
```java
protected int getLeastMaximum(int field)
```
**Overrides:**
- `getLeastMaximum` in class `Calendar`
### getMaximum
```java
protected int getMaximum(int field)
```
**Overrides:**
- `getMaximum` in class `Calendar`
### getMinimum
```java
protected int getMinimum(int field)
```
**Overrides:**
- `getMinimum` in class `Calendar`
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.
### isLeapYear
```java
public boolean isLeapYear(int year)
```
**Parameters:**
- `year` - 검토하고자 하는 년도.
**Returns:**
- 윤년이면 true 아니면 false.## 생성자 상세
### GregorianCalendar
```java
public GregorianCalendar()
```
- 새로운 객체를 만든다. 사용하는 시간대는 VM에 설정된 시간대를
사용한다.
### GregorianCalendar
```java
public GregorianCalendar(TimeZone zone)
```
**Parameters:**
- `zone` - 사용할 시간대.
### GregorianCalendar
```java
public GregorianCalendar(int year,
int month,
int date)
```
**Parameters:**
- `date` - 일.
### after
```java
public boolean after(Object when)
```
**Overrides:**
- `after` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 나중이면 true 아니면 false.
### before
```java
public boolean before(Object when)
```
**Overrides:**
- `before` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 이전이면 true 아니면 false.
### computeFields
```java
protected void computeFields()
```
- **Description copied from class: `Calendar`**
**Overrides:**
- `computeFields` in class `Calendar`
### computeTime
```java
protected void computeTime()
```
- **Description copied from class: `Calendar`**
**Overrides:**
- `computeTime` in class `Calendar`
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 같으면 true 아니면 false.
### getGreatestMinimum
```java
protected int getGreatestMinimum(int field)
```
**Overrides:**
- `getGreatestMinimum` in class `Calendar`
### getLeastMaximum
```java
protected int getLeastMaximum(int field)
```
**Overrides:**
- `getLeastMaximum` in class `Calendar`
### getMaximum
```java
protected int getMaximum(int field)
```
**Overrides:**
- `getMaximum` in class `Calendar`
### getMinimum
```java
protected int getMinimum(int field)
```
**Overrides:**
- `getMinimum` in class `Calendar`
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.
### isLeapYear
```java
public boolean isLeapYear(int year)
```
**Parameters:**
- `year` - 검토하고자 하는 년도.
**Returns:**
- 윤년이면 true 아니면 false.## 메서드 상세
### after
```java
public boolean after(Object when)
```
**Overrides:**
- `after` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 나중이면 true 아니면 false.
### before
```java
public boolean before(Object when)
```
**Overrides:**
- `before` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 이전이면 true 아니면 false.
### computeFields
```java
protected void computeFields()
```
- **Description copied from class: `Calendar`**
**Overrides:**
- `computeFields` in class `Calendar`
### computeTime
```java
protected void computeTime()
```
- **Description copied from class: `Calendar`**
**Overrides:**
- `computeTime` in class `Calendar`
### equals
```java
public boolean equals(Object obj)
```
**Overrides:**
- `equals` in class `Calendar`
**Parameters:**
- `when` - 비교 대상이 되는 객체이며 Calendar에서 생성된 객체.
**Returns:**
- 현 객체에 생성된 시각이 같으면 true 아니면 false.
### getGreatestMinimum
```java
protected int getGreatestMinimum(int field)
```
**Overrides:**
- `getGreatestMinimum` in class `Calendar`
### getLeastMaximum
```java
protected int getLeastMaximum(int field)
```
**Overrides:**
- `getLeastMaximum` in class `Calendar`
### getMaximum
```java
protected int getMaximum(int field)
```
**Overrides:**
- `getMaximum` in class `Calendar`
### getMinimum
```java
protected int getMinimum(int field)
```
**Overrides:**
- `getMinimum` in class `Calendar`
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 정수형의 해쉬코드.
### isLeapYear
```java
public boolean isLeapYear(int year)
```
**Parameters:**
- `year` - 검토하고자 하는 년도.
**Returns:**
- 윤년이면 true 아니면 false.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Hashtable"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Hashtable
```
## 설명
**extends Object:**
해쉬 테이블을 지원하는 클래스.
## 생성자 요약
- Hashtable () 디폴트로 크기가 11인 해쉬 테이블을 가진 객체를 생성한다.
- Hashtable (int capacity) 특정 크기의 해쉬 테이블을 가진 객체를 생성한다.
## 메서드 요약
- `void clear ()` — 해쉬테이블을 비운다.
- `boolean contains ( Object value)` — 매개변수로 넘어온 객체와 동일한 value가 해쉬테이블내에 있는지 검사한다.
- `boolean containsKey ( Object key)` — 매개변수로 넘어온 객체와 동일한 Key가 해쉬테이블내에 있는지 검사한다.
- `Enumeration elements ()` — 해쉬테이블의 value를 Enumeration 형태로 구한다.
- `Object get ( Object key)` — 특정 Key에 해당하는 value를 구한다.
- `boolean isEmpty ()` — 현재 해쉬테이블이 비었는지 여부를 구한다..
- `Enumeration keys ()` — 해쉬테이블의 key를 Enumeration 형태로 구한다..
- `Object put ( Object key, Object value)` — 해쉬 테이블에 특정 key와value를 추가한다.
- `protected void rehash ()` — 해쉬테이블 크기가 커질 때 해쉬테이블에 등록된 객체들을 모두 재휘쉬한다.
- `Object remove ( Object key)` — 특정 key에 해당하는 HashtableEntry 객체를 제거한다.
- `int size ()` — 현재 해쉬테이블에 저장된 객체의 갯수를 구한다.
- `String toString ()` — 현 객체를 나타내기 위한 문자열을 구한다.
## 생성자 상세
### Hashtable
```java
public Hashtable(int capacity)
```
**Parameters:**
- `capacity` - 초기 해쉬테이블의 크기.
### Hashtable
```java
public Hashtable()
```
- 디폴트로 크기가 11인 해쉬 테이블을 가진 객체를 생성한다.
### size
```java
public int size()
```
**Returns:**
- 현재 해쉬테이블에 저장된 객체의 갯수.
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 해쉬테이블이 비었으면 true 아니면 false.
### keys
```java
public Enumeration keys()
```
**Returns:**
- 해쉬테이블의 key로 이루어진 Enumeration.
### elements
```java
public Enumeration elements()
```
**Returns:**
- 해쉬테이블의 value로 이루어진 Enumeration.
### contains
```java
public boolean contains(Object value)
```
**Returns:**
- 객체가 존재하면 true 아니면 false.
### containsKey
```java
public boolean containsKey(Object key)
```
**Returns:**
- 객체가 존재하면 true 아니면 false.
### get
```java
public Object get(Object key)
```
**Parameters:**
- `key` - 찾고자하는 value에 대한 Key.
**Returns:**
- key에 대응하는 value 값 없으면 null.
### rehash
```java
protected void rehash()
```
- 해쉬테이블 크기가 커질 때 해쉬테이블에 등록된 객체들을 모두 재휘쉬한다.
### put
```java
public Object put(Object key,
Object value)
```
**Parameters:**
- `value` - 추가할 value.
**Returns:**
- 이미 key에 해당하는 value가 존재하면 기 존재하던 value를 아니면
null.
### remove
```java
public Object remove(Object key)
```
**Parameters:**
- `key` - 제거할 대상의 key값.
**Returns:**
- 제거된 대상의 value값 제거 대상이 없으면 null.
### clear
```java
public void clear()
```
- 해쉬테이블을 비운다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 나타내기 위한 문자열.## 메서드 상세
### size
```java
public int size()
```
**Returns:**
- 현재 해쉬테이블에 저장된 객체의 갯수.
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 해쉬테이블이 비었으면 true 아니면 false.
### keys
```java
public Enumeration keys()
```
**Returns:**
- 해쉬테이블의 key로 이루어진 Enumeration.
### elements
```java
public Enumeration elements()
```
**Returns:**
- 해쉬테이블의 value로 이루어진 Enumeration.
### contains
```java
public boolean contains(Object value)
```
**Returns:**
- 객체가 존재하면 true 아니면 false.
### containsKey
```java
public boolean containsKey(Object key)
```
**Returns:**
- 객체가 존재하면 true 아니면 false.
### get
```java
public Object get(Object key)
```
**Parameters:**
- `key` - 찾고자하는 value에 대한 Key.
**Returns:**
- key에 대응하는 value 값 없으면 null.
### rehash
```java
protected void rehash()
```
- 해쉬테이블 크기가 커질 때 해쉬테이블에 등록된 객체들을 모두 재휘쉬한다.
### put
```java
public Object put(Object key,
Object value)
```
**Parameters:**
- `value` - 추가할 value.
**Returns:**
- 이미 key에 해당하는 value가 존재하면 기 존재하던 value를 아니면
null.
### remove
```java
public Object remove(Object key)
```
**Parameters:**
- `key` - 제거할 대상의 key값.
**Returns:**
- 제거된 대상의 value값 제거 대상이 없으면 null.
### clear
```java
public void clear()
```
- 해쉬테이블을 비운다.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 나타내기 위한 문자열.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class NoSuchElementException"
---
`package java.util`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.util.NoSuchElementException
```
## 설명
**extends RuntimeException:**
Enumeration에서 더 이상 객체가 없을 때 발생하는 Exception 클래스.
## 생성자 요약
- NoSuchElementException () NoSuchElementException객체를 생성한다.
- NoSuchElementException ( String detail) NoSuchElementException객체를 생성한다.
## 생성자 상세
### NoSuchElementException
```java
public NoSuchElementException()
```
- NoSuchElementException객체를 생성한다.
### NoSuchElementException
```java
public NoSuchElementException(String detail)
```
**Parameters:**
- `detail` - NoSuchElementException의 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Random"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Random
```
## 설명
**extends Object:**
난수 발생을 위한 클래스.
## 생성자 요약
- Random () 현재 시각을 seed로하는 객체를 생성한다.
- Random (long seed) 특정 seed값을 초기값으로 가지는 객체를 생성한다.
## 메서드 요약
- `protected int next (int bits)`
- `int nextInt ()` — 정수형의 다음 난수를 구한다.
- `long nextLong ()` — Long형의 다음 난수를 구한다.
- `void setSeed (long seed)` — 객체의 seed를 변경한다.
## 생성자 상세
### Random
```java
public Random()
```
- 현재 시각을 seed로하는 객체를 생성한다.
### Random
```java
public Random(long seed)
```
**Parameters:**
- `seed` - 사용하고자 하는 seed값.
### setSeed
```java
public void setSeed(long seed)
```
**Parameters:**
- `seed` - 새로운 seed값.
### next
```java
protected int next(int bits)
```
### nextInt
```java
public int nextInt()
```
**Returns:**
- 정수형의 새로운 난수.
### nextLong
```java
public long nextLong()
```
**Returns:**
- Long형의 새로운 난수.## 메서드 상세
### setSeed
```java
public void setSeed(long seed)
```
**Parameters:**
- `seed` - 새로운 seed값.
### next
```java
protected int next(int bits)
```
### nextInt
```java
public int nextInt()
```
**Returns:**
- 정수형의 새로운 난수.
### nextLong
```java
public long nextLong()
```
**Returns:**
- Long형의 새로운 난수.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class SimpleTimeZone"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.TimeZone
|
+--java.util.SimpleTimeZone
```
## 설명
**extends TimeZone:**
실제 사용하게 될 시간대 객체 클래스.
## 생성자 요약
- SimpleTimeZone (int rawOffset, String ID) SimpleTimeZone 새로운 객체를 생성한다.
- SimpleTimeZone (int rawOffset, String ID,
int startMonth,
int startDayOfWeekInMonth,
int startDayOfWeek,
int startTime,
int endMonth,
int endDayOfWeekInMonth,
int endDayOfWeek,
int endTime) 썸머 타임을 적용하는 새로운 객체를 만든다.
## 메서드 요약
- `boolean equals ( Object o)` — 현 시간대와 다른 시간대가 일치하는지 여부를 구한다.
- `int getOffset (int era, int year, int month, int day, int dayOfWeek, int millis)` — 특정 시각에서의 GMT대상으로 한 millisecond단위의 offset을 구한다.
- `int getRawOffset ()` — 썸머 타임을 무시한 GMT기준 offset을 구한다.
- `int hashCode ()` — 현객체를 위한 정수형의 해쉬코드를 구한다.
- `boolean inDaylightTime ( Date date)` — 특정일이 썸머 타임 기간 중인지 여부를 구한다.
- `void setRawOffset (int offsetMillis)` — GMT기준 offset값을 변경한다.
- `void setStartYear (int year)` — 섬머타임이 시작된 연수를 설정한다.
- `boolean useDaylightTime ()` — 현 시간대가 썸머타임을 사용하는지 여부를 구한다.
## 생성자 상세
### SimpleTimeZone
```java
public SimpleTimeZone(int rawOffset,
String ID)
```
**Parameters:**
- `ID` - 이 시간대 대표하는 문자열.
### SimpleTimeZone
```java
public SimpleTimeZone(int rawOffset,
String ID,
int startMonth,
int startDayOfWeekInMonth,
int startDayOfWeek,
int startTime,
int endMonth,
int endDayOfWeekInMonth,
int endDayOfWeek,
int endTime)
```
**Parameters:**
- `endTime` - 썸머타임 종료 시간 millisecond단위.
### equals
```java
public boolean equals(Object o)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `o` - 비교할 대상.
**Returns:**
- 일치하면 true아니면 false.
### getOffset
```java
public int getOffset(int era,
int year,
int month,
int day,
int dayOfWeek,
int millis)
```
**Overrides:**
- `getOffset` in class `TimeZone`
**Parameters:**
- `millis` - 시각.
**Returns:**
- GMT기준 offset.
### getRawOffset
```java
public int getRawOffset()
```
**Overrides:**
- `getRawOffset` in class `TimeZone`
**Returns:**
- GMT기준 offset.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체를 나타내는 해쉬코드.
### inDaylightTime
```java
public boolean inDaylightTime(Date date)
```
**Parameters:**
- `date` - 검토할 시각.
**Returns:**
- 썸머타임 기간 중이면 true 아니면 false.
### setRawOffset
```java
public void setRawOffset(int offsetMillis)
```
**Parameters:**
- `offsetMillis` - 변경할 offset.
### setStartYear
```java
public void setStartYear(int year)
```
**Parameters:**
- `year` - 섬머타임이 시작된 연수.
### useDaylightTime
```java
public boolean useDaylightTime()
```
**Overrides:**
- `useDaylightTime` in class `TimeZone`
**Returns:**
- 썸머타임을 사용하면 true 아니면 false.## 메서드 상세
### equals
```java
public boolean equals(Object o)
```
**Overrides:**
- `equals` in class `Object`
**Parameters:**
- `o` - 비교할 대상.
**Returns:**
- 일치하면 true아니면 false.
### getOffset
```java
public int getOffset(int era,
int year,
int month,
int day,
int dayOfWeek,
int millis)
```
**Overrides:**
- `getOffset` in class `TimeZone`
**Parameters:**
- `millis` - 시각.
**Returns:**
- GMT기준 offset.
### getRawOffset
```java
public int getRawOffset()
```
**Overrides:**
- `getRawOffset` in class `TimeZone`
**Returns:**
- GMT기준 offset.
### hashCode
```java
public int hashCode()
```
**Overrides:**
- `hashCode` in class `Object`
**Returns:**
- 현 객체를 나타내는 해쉬코드.
### inDaylightTime
```java
public boolean inDaylightTime(Date date)
```
**Parameters:**
- `date` - 검토할 시각.
**Returns:**
- 썸머타임 기간 중이면 true 아니면 false.
### setRawOffset
```java
public void setRawOffset(int offsetMillis)
```
**Parameters:**
- `offsetMillis` - 변경할 offset.
### setStartYear
```java
public void setStartYear(int year)
```
**Parameters:**
- `year` - 섬머타임이 시작된 연수.
### useDaylightTime
```java
public boolean useDaylightTime()
```
**Overrides:**
- `useDaylightTime` in class `TimeZone`
**Returns:**
- 썸머타임을 사용하면 true 아니면 false.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Stack"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Vector
|
+--java.util.Stack
```
## 설명
**extends Vector:**
스택 구조체을 위한 클래스.
Fields inherited from class java.util. Vector capacityIncrement , elementCount , elementData
Constructor Summary Stack () 새로운 스택 객체를 만든다.
Method Summary boolean empty () 스택이 비었는지 여부를 구한다. Object peek () 스택 맨위 객체를 스택에서 제거하지 않고 구한다. Object pop () 스택에 객체를 pop한다. Object push ( Object item) 스택에 객체를 push한다. int search ( Object o) 특정 객체가 스택 맨위에서 부터 몇번째에 위치하는지 구한다.
Methods inherited from class java.util. Vector addElement , capacity , contains , copyInto , elementAt , elements , ensureCapacity , firstElement , indexOf , indexOf , insertElementAt , isEmpty , lastElement , lastIndexOf , lastIndexOf , removeAllElements , removeElement , removeElementAt , setElementAt , setSize , size , toString , trimToSize
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### Stack
- 새로운 스택 객체를 만든다.
Method Detail
### push
**Parameters:**
- `item` - push할 대상.
**Returns:**
- push할 대상.
### pop
**Returns:**
- pop한 객체.
**Throws:**
- `EmptyStackException` - 스택이 비었을 때.
### peek
**Returns:**
- 스택 맨위 객체.
**Throws:**
- `EmptyStackException` - 스택이 비었을 때.
### empty
**Returns:**
- 비었으면 true 아니면 false.
### search
**Returns:**
- 스택 맨위로 부터 객체의 위치까지 offset 없으면 -1.## 생성자 요약
- Stack () 새로운 스택 객체를 만든다.
## 메서드 요약
- `boolean empty ()` — 스택이 비었는지 여부를 구한다.
- `Object peek ()` — 스택 맨위 객체를 스택에서 제거하지 않고 구한다.
- `Object pop ()` — 스택에 객체를 pop한다.
- `Object push ( Object item)` — 스택에 객체를 push한다.
- `int search ( Object o)` — 특정 객체가 스택 맨위에서 부터 몇번째에 위치하는지 구한다.
## 생성자 상세
### Stack
```java
public Stack()
```
- 새로운 스택 객체를 만든다.
### push
```java
public Object push(Object item)
```
**Parameters:**
- `item` - push할 대상.
**Returns:**
- push할 대상.
### pop
```java
public Object pop()
```
**Returns:**
- pop한 객체.
**Throws:**
- `EmptyStackException` - 스택이 비었을 때.
### peek
```java
public Object peek()
```
**Returns:**
- 스택 맨위 객체.
**Throws:**
- `EmptyStackException` - 스택이 비었을 때.
### empty
```java
public boolean empty()
```
**Returns:**
- 비었으면 true 아니면 false.
### search
```java
public int search(Object o)
```
**Returns:**
- 스택 맨위로 부터 객체의 위치까지 offset 없으면 -1.## 메서드 상세
### push
```java
public Object push(Object item)
```
**Parameters:**
- `item` - push할 대상.
**Returns:**
- push할 대상.
### pop
```java
public Object pop()
```
**Returns:**
- pop한 객체.
**Throws:**
- `EmptyStackException` - 스택이 비었을 때.
### peek
```java
public Object peek()
```
**Returns:**
- 스택 맨위 객체.
**Throws:**
- `EmptyStackException` - 스택이 비었을 때.
### empty
```java
public boolean empty()
```
**Returns:**
- 비었으면 true 아니면 false.
### search
```java
public int search(Object o)
```
**Returns:**
- 스택 맨위로 부터 객체의 위치까지 offset 없으면 -1.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class TimeZone"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.TimeZone
```
## 설명
**Direct Known Subclasses:**
- `SimpleTimeZone`
**extends Object:**
시간대 객체의 추상 클래스.
## 생성자 요약
- TimeZone () 새로운 객체를 생성한다.
## 메서드 요약
- `static String [] getAvailableIDs ()` — VM에서 지원가능한 TimeZone 문자열 배열을 구한다.
- `static String [] getAvailableIDs (int rawOffset)` — VM에서 지원가능하고 특정 offset도 지원하는 TimeZone 문자열 배열을 구한다.
- `static TimeZone getDefault ()` — VM에서 디폴트로 사용하는 TimeZone객체를 구한다.
- `String getID ()` — 현 객체를 나타낼 수 있는 시간대 문자열을 구한다.
- `abstract int getOffset (int era, int year, int month, int day, int dayOfWeek, int milliseconds)` — 특정 시각에서의 GMT대상으로 한 millisecond단위의 offset을 구한다.
- `abstract int getRawOffset ()` — 썸머 타임을 무시한 GMT기준 offset을 구한다.
- `static TimeZone getTimeZone ( String ID)` — 특정 시간대를 지원하는 TimeZone객체를 구한다.
- `static void initialize ()`
- `void setID ( String ID)` — 현 객체를 특정 시간대로 변환한다.
- `String toString ()` — 현 객체를 설명할 수 있는 문자열을 구한다.
- `abstract boolean useDaylightTime ()` — 현 시간대가 썸머타임을 사용하는지 여부를 구한다.
## 생성자 상세
### TimeZone
```java
public TimeZone()
```
- 새로운 객체를 생성한다.
### initialize
```java
public static void initialize()
```
### getOffset
```java
public abstract int getOffset(int era,
int year,
int month,
int day,
int dayOfWeek,
int milliseconds)
```
**Parameters:**
- `milliseconds` - 시각.
**Returns:**
- GMT기준 offset.
### getRawOffset
```java
public abstract int getRawOffset()
```
**Returns:**
- GMT기준 offset.
### useDaylightTime
```java
public abstract boolean useDaylightTime()
```
**Returns:**
- 썸머타임을 사용하면 true 아니면 false.
### getID
```java
public String getID()
```
**Returns:**
- 시간대 문자열.
### getTimeZone
```java
public static TimeZone getTimeZone(String ID)
```
**Parameters:**
- `ID` - 시간대 문자열
**Returns:**
- TimeZone객체.
### getDefault
```java
public static TimeZone getDefault()
```
**Returns:**
- TimeZone객체.
### getAvailableIDs
```java
public static String[] getAvailableIDs()
```
**Returns:**
- VM에서 지원가능한 TimeZone 문자열 배열.
### getAvailableIDs
```java
public static String[] getAvailableIDs(int rawOffset)
```
**Parameters:**
- `rawOffset` - TimeZone이 지원해야 할 offset값.
**Returns:**
- TimeZone 문자열 배열 대상이 없으면 null.
### setID
```java
public void setID(String ID)
```
**Parameters:**
- `ID` - 변환할 시간대 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 설명할 수 있는 문자열.## 메서드 상세
### initialize
```java
public static void initialize()
```
### getOffset
```java
public abstract int getOffset(int era,
int year,
int month,
int day,
int dayOfWeek,
int milliseconds)
```
**Parameters:**
- `milliseconds` - 시각.
**Returns:**
- GMT기준 offset.
### getRawOffset
```java
public abstract int getRawOffset()
```
**Returns:**
- GMT기준 offset.
### useDaylightTime
```java
public abstract boolean useDaylightTime()
```
**Returns:**
- 썸머타임을 사용하면 true 아니면 false.
### getID
```java
public String getID()
```
**Returns:**
- 시간대 문자열.
### getTimeZone
```java
public static TimeZone getTimeZone(String ID)
```
**Parameters:**
- `ID` - 시간대 문자열
**Returns:**
- TimeZone객체.
### getDefault
```java
public static TimeZone getDefault()
```
**Returns:**
- TimeZone객체.
### getAvailableIDs
```java
public static String[] getAvailableIDs()
```
**Returns:**
- VM에서 지원가능한 TimeZone 문자열 배열.
### getAvailableIDs
```java
public static String[] getAvailableIDs(int rawOffset)
```
**Parameters:**
- `rawOffset` - TimeZone이 지원해야 할 offset값.
**Returns:**
- TimeZone 문자열 배열 대상이 없으면 null.
### setID
```java
public void setID(String ID)
```
**Parameters:**
- `ID` - 변환할 시간대 문자열.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 설명할 수 있는 문자열.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Timer"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Timer
```
## 설명
**extends Object:**
## 생성자 요약
- Timer ()
## 메서드 요약
- `void cancel ()`
- `void schedule ( TimerTask task, Date time)`
- `void schedule ( TimerTask task, Date firstTime, long period)`
- `void schedule ( TimerTask task, long delay)`
- `void schedule ( TimerTask task, long delay, long period)`
- `void scheduleAtFixedRate ( TimerTask task, Date firstTime, long period)`
- `void scheduleAtFixedRate ( TimerTask task, long delay, long period)`
## 생성자 상세
### Timer
```java
public Timer()
```
### schedule
```java
public void schedule(TimerTask task,
long delay)
```
### schedule
```java
public void schedule(TimerTask task,
Date time)
```
### schedule
```java
public void schedule(TimerTask task,
long delay,
long period)
```
### schedule
```java
public void schedule(TimerTask task,
Date firstTime,
long period)
```
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
long delay,
long period)
```
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
Date firstTime,
long period)
```
### cancel
```java
public void cancel()
```## 메서드 상세
### schedule
```java
public void schedule(TimerTask task,
long delay)
```
### schedule
```java
public void schedule(TimerTask task,
Date time)
```
### schedule
```java
public void schedule(TimerTask task,
long delay,
long period)
```
### schedule
```java
public void schedule(TimerTask task,
Date firstTime,
long period)
```
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
long delay,
long period)
```
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
Date firstTime,
long period)
```
### cancel
```java
public void cancel()
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class TimerTask"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.TimerTask
```
## 설명
**All Implemented Interfaces:**
- `Runnable`
**implements Runnable:**
A task that can be scheduled for one-time or repeated execution by a
`Timer`.
**Since:**
- 1.3
**See Also:**
- ``Timer``
## 생성자 요약
- `protected TimerTask ()`
## 메서드 요약
- `boolean cancel ()`
- `abstract void run ()` — Thread.start에 의해 run메소스가 호출된다.
- `long scheduledExecutionTime ()`
## 생성자 상세
### TimerTask
```java
protected TimerTask()
```
### run
```java
public abstract void run()
```
- **Description copied from interface: `Runnable`**
**Specified by:**
- `run` in interface `Runnable`
### cancel
```java
public boolean cancel()
```
### scheduledExecutionTime
```java
public long scheduledExecutionTime()
```## 메서드 상세
### run
```java
public abstract void run()
```
- **Description copied from interface: `Runnable`**
**Specified by:**
- `run` in interface `Runnable`
### cancel
```java
public boolean cancel()
```
### scheduledExecutionTime
```java
public long scheduledExecutionTime()
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Vector"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Vector
```
## 설명
**Direct Known Subclasses:**
- `Stack`
**extends Object:**
크기가 유동적인 자바 객체 배열-벡터- 클래스 .
## 필드 요약
- `protected int capacityIncrement`
- `protected int elementCount`
- `protected Object [] elementData`
## 생성자 요약
- Vector () 버퍼의 초기 크기가 10인 객체를 생성한다.
- Vector (int initialCapacity) 특정 크기의 버퍼를 가진 객체를 생성한다.
- Vector (int initialCapacity,
int capacityIncrement) 초기 크기와 벡터의 증가 단위를 지정해서 객체를 생성한다.
## 메서드 요약
- `void addElement ( Object obj)` — 벡터의 끝에 새로운 객체를 추가한다.
- `int capacity ()` — 현재 벡터내 버퍼의 크기를 구한다.
- `boolean contains ( Object elem)` — 특정 객체가 벡터 내에 있는지 여부를 구한다.
- `void copyInto ( Object [] anArray)` — 벡터를 객체 배열에 복사한다.
- `Object elementAt (int index)` — 벡터 내에 특정 위치에 있는 객체를 구한다.
- `Enumeration elements ()` — 벡터 내용을 Enumeration 객체로 구한다.
- `void ensureCapacity (int minCapacity)` — 벡터 버퍼의 크기를 특정 크기까지 확장한다.
- `Object firstElement ()` — 벡터의 첫번째 객체를 구한다.
- `int indexOf ( Object elem)` — 특정 객체의 첫번째 위치를 구한다.
- `int indexOf ( Object e, int index)` — 특정 객체의 특정 인덱스 이 후 첫번째 위치를 구한다.
- `void insertElementAt ( Object obj, int index)` — 특정 객체를 특정 위치에 삽입한다.
- `boolean isEmpty ()` — 벡터가 비었는지 여부를 구한다.
- `Object lastElement ()` — 벡터의 마지막 객체를 구한다.
- `int lastIndexOf ( Object elem)` — 벡터내 특정 객체의 마지막 위치를 구한다.
- `int lastIndexOf ( Object e, int index)` — 특정 객체의 특정위치 이전 마지막 위치를 구한다.
- `void removeAllElements ()` — 벡터내 모든 객체를 제거한다.
- `boolean removeElement ( Object obj)` — 특정 객체를 찾아 제거한다.
- `void removeElementAt (int index)` — 특정 위치의 객체를 제거한다.
- `void setElementAt ( Object obj, int index)` — 벡터 내 특정 위치에 특정 객체를 저장한다.
- `void setSize (int newSize)` — 벡터의 크기를 재 설정한다.
- `int size ()` — 벡터의 크기를 구한다.
- `String toString ()` — 현 객체를 나타낼 수 있는 문자열을 구한다.
- `void trimToSize ()` — 벡터를 저장하기 위한 버퍼에서 사용하지 않는 공간을 제거한다
## 필드 상세
### capacityIncrement
```java
protected int capacityIncrement
```
### elementCount
```java
protected int elementCount
```
### elementData
```java
protected Object[] elementData
```
### Vector
```java
public Vector()
```
- 버퍼의 초기 크기가 10인 객체를 생성한다.
### Vector
```java
public Vector(int initialCapacity)
```
**Parameters:**
- `initialCapacity` - 초기 크기.
### Vector
```java
public Vector(int initialCapacity,
int capacityIncrement)
```
**Parameters:**
- `capacityIncrement` - 벡터의 증가 단위.
### addElement
```java
public void addElement(Object obj)
```
**Parameters:**
- `obj` - 추가할 객체.
### capacity
```java
public int capacity()
```
**Returns:**
- 벡터내 버퍼의 크기.
### contains
```java
public boolean contains(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 객체가 존재하면 true 아니면 false.
### copyInto
```java
public void copyInto(Object[] anArray)
```
**Parameters:**
- `anArray` - 벡터 내용을 복사할 객체 배열.
### elementAt
```java
public Object elementAt(int index)
```
**Parameters:**
- `index` - 구할 객체의 위치.
**Returns:**
- 벡터 내에 특정 위치에 있는 객체
### elements
```java
public Enumeration elements()
```
**Returns:**
- 벡터 내용을 모두 복사해 가진 Enumeration객체.
### ensureCapacity
```java
public void ensureCapacity(int minCapacity)
```
**Parameters:**
- `minCapacity` - 보장되야 할 벡터 크기.
### firstElement
```java
public Object firstElement()
```
**Returns:**
- 벡터의 첫번째 객체.
### indexOf
```java
public int indexOf(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 특정 객체의 첫번째 위치.
### indexOf
```java
public int indexOf(Object e,
int index)
```
**Parameters:**
- `index` - 검색 시작 위치.
**Returns:**
- 특정 객체의 첫번째 위치 없으면 -1.
### insertElementAt
```java
public void insertElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 삽입할 위치.
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 벡터가 비었으면 true 아니면 false.
### lastElement
```java
public Object lastElement()
```
**Returns:**
- 벡터의 마지막 객체.
### lastIndexOf
```java
public int lastIndexOf(Object e,
int index)
```
**Parameters:**
- `index` - 인덱스 0부터 index까지 찾슴니다.
**Returns:**
- 객체가 존재하면 위치 아니면 -1.
### lastIndexOf
```java
public int lastIndexOf(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 객체가 존재하면 위치 아니면 -1.
### removeAllElements
```java
public void removeAllElements()
```
- 벡터내 모든 객체를 제거한다.
### removeElementAt
```java
public void removeElementAt(int index)
```
**Parameters:**
- `index` - 제거할 위치.
### removeElement
```java
public boolean removeElement(Object obj)
```
**Parameters:**
- `obj` - 찾을 객체.
**Returns:**
- 객체를 찾아 제거했으면 true 아니면 false.
### setElementAt
```java
public void setElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 저장할 위치.
### setSize
```java
public void setSize(int newSize)
```
**Parameters:**
- `newSize` - 변경할 벡터의 크기.
### size
```java
public int size()
```
**Returns:**
- 벡터의 크기.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 나타낼 수 있는 문자열.
### trimToSize
```java
public void trimToSize()
```
- 벡터를 저장하기 위한 버퍼에서 사용하지 않는 공간을 제거한다## 생성자 상세
### Vector
```java
public Vector()
```
- 버퍼의 초기 크기가 10인 객체를 생성한다.
### Vector
```java
public Vector(int initialCapacity)
```
**Parameters:**
- `initialCapacity` - 초기 크기.
### Vector
```java
public Vector(int initialCapacity,
int capacityIncrement)
```
**Parameters:**
- `capacityIncrement` - 벡터의 증가 단위.
### addElement
```java
public void addElement(Object obj)
```
**Parameters:**
- `obj` - 추가할 객체.
### capacity
```java
public int capacity()
```
**Returns:**
- 벡터내 버퍼의 크기.
### contains
```java
public boolean contains(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 객체가 존재하면 true 아니면 false.
### copyInto
```java
public void copyInto(Object[] anArray)
```
**Parameters:**
- `anArray` - 벡터 내용을 복사할 객체 배열.
### elementAt
```java
public Object elementAt(int index)
```
**Parameters:**
- `index` - 구할 객체의 위치.
**Returns:**
- 벡터 내에 특정 위치에 있는 객체
### elements
```java
public Enumeration elements()
```
**Returns:**
- 벡터 내용을 모두 복사해 가진 Enumeration객체.
### ensureCapacity
```java
public void ensureCapacity(int minCapacity)
```
**Parameters:**
- `minCapacity` - 보장되야 할 벡터 크기.
### firstElement
```java
public Object firstElement()
```
**Returns:**
- 벡터의 첫번째 객체.
### indexOf
```java
public int indexOf(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 특정 객체의 첫번째 위치.
### indexOf
```java
public int indexOf(Object e,
int index)
```
**Parameters:**
- `index` - 검색 시작 위치.
**Returns:**
- 특정 객체의 첫번째 위치 없으면 -1.
### insertElementAt
```java
public void insertElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 삽입할 위치.
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 벡터가 비었으면 true 아니면 false.
### lastElement
```java
public Object lastElement()
```
**Returns:**
- 벡터의 마지막 객체.
### lastIndexOf
```java
public int lastIndexOf(Object e,
int index)
```
**Parameters:**
- `index` - 인덱스 0부터 index까지 찾슴니다.
**Returns:**
- 객체가 존재하면 위치 아니면 -1.
### lastIndexOf
```java
public int lastIndexOf(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 객체가 존재하면 위치 아니면 -1.
### removeAllElements
```java
public void removeAllElements()
```
- 벡터내 모든 객체를 제거한다.
### removeElementAt
```java
public void removeElementAt(int index)
```
**Parameters:**
- `index` - 제거할 위치.
### removeElement
```java
public boolean removeElement(Object obj)
```
**Parameters:**
- `obj` - 찾을 객체.
**Returns:**
- 객체를 찾아 제거했으면 true 아니면 false.
### setElementAt
```java
public void setElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 저장할 위치.
### setSize
```java
public void setSize(int newSize)
```
**Parameters:**
- `newSize` - 변경할 벡터의 크기.
### size
```java
public int size()
```
**Returns:**
- 벡터의 크기.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 나타낼 수 있는 문자열.
### trimToSize
```java
public void trimToSize()
```
- 벡터를 저장하기 위한 버퍼에서 사용하지 않는 공간을 제거한다## 메서드 상세
### addElement
```java
public void addElement(Object obj)
```
**Parameters:**
- `obj` - 추가할 객체.
### capacity
```java
public int capacity()
```
**Returns:**
- 벡터내 버퍼의 크기.
### contains
```java
public boolean contains(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 객체가 존재하면 true 아니면 false.
### copyInto
```java
public void copyInto(Object[] anArray)
```
**Parameters:**
- `anArray` - 벡터 내용을 복사할 객체 배열.
### elementAt
```java
public Object elementAt(int index)
```
**Parameters:**
- `index` - 구할 객체의 위치.
**Returns:**
- 벡터 내에 특정 위치에 있는 객체
### elements
```java
public Enumeration elements()
```
**Returns:**
- 벡터 내용을 모두 복사해 가진 Enumeration객체.
### ensureCapacity
```java
public void ensureCapacity(int minCapacity)
```
**Parameters:**
- `minCapacity` - 보장되야 할 벡터 크기.
### firstElement
```java
public Object firstElement()
```
**Returns:**
- 벡터의 첫번째 객체.
### indexOf
```java
public int indexOf(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 특정 객체의 첫번째 위치.
### indexOf
```java
public int indexOf(Object e,
int index)
```
**Parameters:**
- `index` - 검색 시작 위치.
**Returns:**
- 특정 객체의 첫번째 위치 없으면 -1.
### insertElementAt
```java
public void insertElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 삽입할 위치.
### isEmpty
```java
public boolean isEmpty()
```
**Returns:**
- 벡터가 비었으면 true 아니면 false.
### lastElement
```java
public Object lastElement()
```
**Returns:**
- 벡터의 마지막 객체.
### lastIndexOf
```java
public int lastIndexOf(Object e,
int index)
```
**Parameters:**
- `index` - 인덱스 0부터 index까지 찾슴니다.
**Returns:**
- 객체가 존재하면 위치 아니면 -1.
### lastIndexOf
```java
public int lastIndexOf(Object elem)
```
**Parameters:**
- `elem` - 찾을 객체.
**Returns:**
- 객체가 존재하면 위치 아니면 -1.
### removeAllElements
```java
public void removeAllElements()
```
- 벡터내 모든 객체를 제거한다.
### removeElementAt
```java
public void removeElementAt(int index)
```
**Parameters:**
- `index` - 제거할 위치.
### removeElement
```java
public boolean removeElement(Object obj)
```
**Parameters:**
- `obj` - 찾을 객체.
**Returns:**
- 객체를 찾아 제거했으면 true 아니면 false.
### setElementAt
```java
public void setElementAt(Object obj,
int index)
```
**Parameters:**
- `index` - 저장할 위치.
### setSize
```java
public void setSize(int newSize)
```
**Parameters:**
- `newSize` - 변경할 벡터의 크기.
### size
```java
public int size()
```
**Returns:**
- 벡터의 크기.
### toString
```java
public String toString()
```
**Overrides:**
- `toString` in class `Object`
**Returns:**
- 현 객체를 나타낼 수 있는 문자열.
### trimToSize
```java
public void trimToSize()
```
- 벡터를 저장하기 위한 버퍼에서 사용하지 않는 공간을 제거한다
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package java.util"
---
## Interface Summary
- [Enumeration](Enumeration.md) — 객체의 순차적 구조체인 Enumeration을 위한 인터페이스 클래스.
## Class Summary
- [Calendar](Calendar.md) — 연도,월,일,요일 등의 정보를 얻기 위한 캘린더 클래스들이 상속받아야 할 추상 클래스.
- [Date](Date.md) — millisecond단위로 특정 시간을 나타내는 클래스
- [GregorianCalendar](GregorianCalendar.md) — 그레고리안 역법을 이용한 캘랜더 클래스.
- [Hashtable](Hashtable.md) — 해쉬 테이블을 지원하는 클래스.
- [Random](Random.md) — 난수 발생을 위한 클래스.
- [SimpleTimeZone](SimpleTimeZone.md) — 실제 사용하게 될 시간대 객체 클래스.
- [Stack](Stack.md) — 스택 구조체을 위한 클래스.
- [Timer](Timer.md) —
- [TimerTask](TimerTask.md) — A task that can be scheduled for one-time or repeated execution by a Timer .
- [TimeZone](TimeZone.md) — 시간대 객체의 추상 클래스.
- [Vector](Vector.md) — 크기가 유동적인 자바 객체 배열-벡터- 클래스 .
## Exception Summary
- [EmptyStackException](EmptyStackException.md) — 스택이 비었을 때 발생하는 exception 클래스.
- [NoSuchElementException](NoSuchElementException.md) — Enumeration에서 더 이상 객체가 없을 때 발생하는 Exception 클래스.
---
title: "Class Kernel"
---
`package org.kwis.msf.core`
```text
java.lang.Object
|
+--org.kwis.msf.core.Kernel
```
## 설명
**extends Object:**
## 필드 요약
- `static int DIR_SHARED_READ_REQ_MASK` — shared directory read가능
- `static int DIR_SHARED_WRITE_REQ_MASK` — shared directory write가능
- `static int DIR_SYS_READ_REQ_MASK` — system directory read가능
- `static int DIR_SYS_WRITE_REQ_MASK` — system directory write가능
- `static int NETWORK_ACCESS_REQ_MASK` — network API사용 가능
- `static int PRGTYPE_CAPP`
- `static int PRGTYPE_CDLL`
- `static int PRGTYPE_JAVAAPP`
- `static int PRGTYPE_JAVADLL`
- `static int PRGTYPE_JAVASYSDLL`
- `static int SERIAL_ACCESS_REQ_MASK` — serial API사용 가능
- `static int SYSTEM1_ACCESS_REQ_MASK` — system group1에 속한 API사용가능(system group1에 속할 API들은 각 이통사가 정의)
- `static int SYSTEM2_ACCESS_REQ_MASK` — system group2에 속한 API사용가능(system group2에 속할 API들은 각 이통사가 정의)
## 생성자 요약
- Kernel ()
## 메서드 요약
- `static int execute ( String execName, String [] args)` — 플랫폼에 설치된 프로그램을 실행시킨다.
- `static int getAccessLevel ()` — 프로그램의 접근 수준을 구합니다.
- `static int getAMID ()` — 응용프로그램 관리자의 프로그램의 ID를 구한다.
- `static String [] getExecNames ( String prgName, String version, String vendor)` — 플랫폼에 설치된 애플리케이션중 prgName(프로그램이름), version, vendor와 일치하는 애플리케이션 식별이름을 반환한다.
- `static int getParentPrgID ()` — 부모 프로그램의 ID를 구한다
- `static int getPrgID ()` — 현재 프로그램의 ID를 구한다.
- `static int[] getPrgInfo ()` — 현재 동작중인 프로그램에 대한 정보를 얻는다. int array의 length는 현재 동작중인 프로그램의 수를 나타내고, 각 index에 속한 값은 해당 index에 해당하는 프로그램의 type를 나타낸다.
- `static String getPrgName ()` — 자기 자신의 프로그램 이름을 구한다.
- `static int letThrowExceptionWhenProgramExit ()` — 프로그램이 종료하면 이 함수를 부른 thread에 ProgramExitException exception이 발생하게 만든다.
- `static int load ( String execName, String [] args)` — 플랫폼에 설치된 동적로딩라이브러리를 로딩합니다.
- `static int mExecute ( String symName, String [] args)` — 프로그램에 설치된 프로그램을 실행시킵니다.
- `static int mLoad ( String symName, String [] args)` — 프로그램에 설치된 동적로딩라이브러리를 로딩합니다.
- `static void stop (int prgID)` — 프로그램을 강제로 종료시킨다.
## 필드 상세
### PRGTYPE_JAVAAPP
```java
public static final int PRGTYPE_JAVAAPP
```
### PRGTYPE_CAPP
```java
public static final int PRGTYPE_CAPP
```
### PRGTYPE_CDLL
```java
public static final int PRGTYPE_CDLL
```
### PRGTYPE_JAVADLL
```java
public static final int PRGTYPE_JAVADLL
```
### PRGTYPE_JAVASYSDLL
```java
public static final int PRGTYPE_JAVASYSDLL
```
### DIR_SYS_READ_REQ_MASK
```java
public static final int DIR_SYS_READ_REQ_MASK
```
- system directory read가능
### DIR_SYS_WRITE_REQ_MASK
```java
public static final int DIR_SYS_WRITE_REQ_MASK
```
- system directory write가능
### DIR_SHARED_READ_REQ_MASK
```java
public static final int DIR_SHARED_READ_REQ_MASK
```
- shared directory read가능
### DIR_SHARED_WRITE_REQ_MASK
```java
public static final int DIR_SHARED_WRITE_REQ_MASK
```
- shared directory write가능
### NETWORK_ACCESS_REQ_MASK
```java
public static final int NETWORK_ACCESS_REQ_MASK
```
- network API사용 가능
### SERIAL_ACCESS_REQ_MASK
```java
public static final int SERIAL_ACCESS_REQ_MASK
```
- serial API사용 가능
### SYSTEM1_ACCESS_REQ_MASK
```java
public static final int SYSTEM1_ACCESS_REQ_MASK
```
- system group1에 속한 API사용가능(system group1에 속할 API들은 각 이통사가 정의)
### SYSTEM2_ACCESS_REQ_MASK
```java
public static final int SYSTEM2_ACCESS_REQ_MASK
```
- system group2에 속한 API사용가능(system group2에 속할 API들은 각 이통사가 정의)
### Kernel
```java
public Kernel()
```
### execute
```java
public static int execute(String execName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 매개변수
**Returns:**
- 성공이면 살행된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
**See Also:**
- ``getExecNames(String prgName, String version, String vendor)``
### mExecute
```java
public static int mExecute(String symName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 매개변수
**Returns:**
- 성공이면 살행된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
### load
```java
public static int load(String execName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 parameter
**Returns:**
- 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
**See Also:**
- ``getExecNames(String prgName, String version, String vendor)``
### mLoad
```java
public static int mLoad(String symName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 parameter
**Returns:**
- 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
### getExecNames
```java
public static String[] getExecNames(String prgName,
String version,
String vendor)
```
**Parameters:**
- `vendor` - 프로그램 공급자
**Returns:**
- 프로그램 이름 string array
### getPrgID
```java
public static int getPrgID()
```
**Returns:**
- 프로그램 ID
### getAMID
```java
public static int getAMID()
```
**Returns:**
- 프로그램 ID
### getParentPrgID
```java
public static int getParentPrgID()
```
**Returns:**
- 프로그램 ID
### getPrgInfo
```java
public static int[] getPrgInfo()
```
**Returns:**
- 동작중인 프로그램의 type을 포함하는 integer array
### stop
```java
public static void stop(int prgID)
```
**Parameters:**
- `prgID` - 강제 종료시킬 프로그램이 ID
### letThrowExceptionWhenProgramExit
```java
public static int letThrowExceptionWhenProgramExit()
```
**Returns:**
- 0보다 크면 가장 최근에 종료된 프로그램의 ID
### getAccessLevel
```java
public static int getAccessLevel()
```
**Returns:**
- 접근수준(각 마스크값의 OR값)
### getPrgName
```java
public static String getPrgName()
```
**Returns:**
- 프로그램 이름## 생성자 상세
### Kernel
```java
public Kernel()
```
### execute
```java
public static int execute(String execName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 매개변수
**Returns:**
- 성공이면 살행된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
**See Also:**
- ``getExecNames(String prgName, String version, String vendor)``
### mExecute
```java
public static int mExecute(String symName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 매개변수
**Returns:**
- 성공이면 살행된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
### load
```java
public static int load(String execName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 parameter
**Returns:**
- 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
**See Also:**
- ``getExecNames(String prgName, String version, String vendor)``
### mLoad
```java
public static int mLoad(String symName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 parameter
**Returns:**
- 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
### getExecNames
```java
public static String[] getExecNames(String prgName,
String version,
String vendor)
```
**Parameters:**
- `vendor` - 프로그램 공급자
**Returns:**
- 프로그램 이름 string array
### getPrgID
```java
public static int getPrgID()
```
**Returns:**
- 프로그램 ID
### getAMID
```java
public static int getAMID()
```
**Returns:**
- 프로그램 ID
### getParentPrgID
```java
public static int getParentPrgID()
```
**Returns:**
- 프로그램 ID
### getPrgInfo
```java
public static int[] getPrgInfo()
```
**Returns:**
- 동작중인 프로그램의 type을 포함하는 integer array
### stop
```java
public static void stop(int prgID)
```
**Parameters:**
- `prgID` - 강제 종료시킬 프로그램이 ID
### letThrowExceptionWhenProgramExit
```java
public static int letThrowExceptionWhenProgramExit()
```
**Returns:**
- 0보다 크면 가장 최근에 종료된 프로그램의 ID
### getAccessLevel
```java
public static int getAccessLevel()
```
**Returns:**
- 접근수준(각 마스크값의 OR값)
### getPrgName
```java
public static String getPrgName()
```
**Returns:**
- 프로그램 이름## 메서드 상세
### execute
```java
public static int execute(String execName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 매개변수
**Returns:**
- 성공이면 살행된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
**See Also:**
- ``getExecNames(String prgName, String version, String vendor)``
### mExecute
```java
public static int mExecute(String symName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 매개변수
**Returns:**
- 성공이면 살행된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
### load
```java
public static int load(String execName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 parameter
**Returns:**
- 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
**See Also:**
- ``getExecNames(String prgName, String version, String vendor)``
### mLoad
```java
public static int mLoad(String symName,
String[] args)
```
**Parameters:**
- `args` - Main method()로 전달될 parameter
**Returns:**
- 성공이면 load된 프로그램의 프로그램ID 반환, 실패하면 음수 반환
### getExecNames
```java
public static String[] getExecNames(String prgName,
String version,
String vendor)
```
**Parameters:**
- `vendor` - 프로그램 공급자
**Returns:**
- 프로그램 이름 string array
### getPrgID
```java
public static int getPrgID()
```
**Returns:**
- 프로그램 ID
### getAMID
```java
public static int getAMID()
```
**Returns:**
- 프로그램 ID
### getParentPrgID
```java
public static int getParentPrgID()
```
**Returns:**
- 프로그램 ID
### getPrgInfo
```java
public static int[] getPrgInfo()
```
**Returns:**
- 동작중인 프로그램의 type을 포함하는 integer array
### stop
```java
public static void stop(int prgID)
```
**Parameters:**
- `prgID` - 강제 종료시킬 프로그램이 ID
### letThrowExceptionWhenProgramExit
```java
public static int letThrowExceptionWhenProgramExit()
```
**Returns:**
- 0보다 크면 가장 최근에 종료된 프로그램의 ID
### getAccessLevel
```java
public static int getAccessLevel()
```
**Returns:**
- 접근수준(각 마스크값의 OR값)
### getPrgName
```java
public static String getPrgName()
```
**Returns:**
- 프로그램 이름
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ProgramExitException"
---
`package org.kwis.msf.core`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--org.kwis.msf.core.ProgramExitException
```
## 설명
**extends RuntimeException:**
## 생성자 요약
- ProgramExitException ()
- ProgramExitException ( String s)
## 생성자 상세
### ProgramExitException
```java
public ProgramExitException()
```
### ProgramExitException
```java
public ProgramExitException(String s)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Shared"
---
`package org.kwis.msf.core`
```text
java.lang.Object
|
+--org.kwis.msf.core.Shared
```
## 설명
**extends Object:**
## 메서드 요약
- `static byte[] createBuf (int size)` — 공유 버퍼를 create한다.
- `static byte[] createBuf ( String name, int size)` — 네임(name) 공유 버퍼를 create한다.
- `static void destroyBuf (byte[] sharedBuf)` — 생성된 공유버퍼를 파괴한다.
- `static byte[] getBuf ()` — shared 버퍼를 얻는다.
- `static byte[] getBuf ( String name)` — 공유 버퍼를 얻는다.
- `static void initialize ()`
- `static byte[] resizeBuf (byte[] sharedBuf, int size)` — 공유버퍼의 크기를 변경한다.
- `static byte[] resizeBuf (int size)` — 공유버퍼의 크기를 변경한다.
## 메서드 상세
### initialize
```java
public static void initialize()
```
### createBuf
```java
public static byte[] createBuf(String name,
int size)
```
**Parameters:**
- `size` - 생성시킬 byte array 버퍼의 크기
**Returns:**
- 성공이면 생성된 buf를 돌려주고, 이미 생성된 버퍼가 존재하거나 더이상
공유버퍼를 생성할 수 없으면 null을 돌려준다.
### getBuf
```java
public static byte[] getBuf(String name)
```
**Parameters:**
- `name` - 얻어올 공유버퍼의 이름
**Returns:**
- 성공이면 공유버퍼, 실패하면 null을 돌려줌
### resizeBuf
```java
public static byte[] resizeBuf(byte[] sharedBuf,
int size)
```
**Parameters:**
- `size` - 변경할 공유버퍼 크기
**Returns:**
- 크기가 변경된 공유버퍼
### destroyBuf
```java
public static void destroyBuf(byte[] sharedBuf)
```
**Parameters:**
- `sharedBuf` - 파괴시킬 공유버퍼 첨조자(reference)
### createBuf
```java
public static byte[] createBuf(int size)
```
**Parameters:**
- `size` - 생성시킬 byte array 버퍼의 크기
**Returns:**
- 성공이면 생성된 buf를 돌려주고, 이미 생성된 버퍼가 존재하면 null을 돌려준다.
### getBuf
```java
public static byte[] getBuf()
```
**Returns:**
- 성공이면 공유버퍼, 실패하면 null을 돌려줌
### resizeBuf
```java
public static byte[] resizeBuf(int size)
```
**Parameters:**
- `size` - 변경할 공유버퍼 크기
**Returns:**
- 크기가 변경된 공유버퍼
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package org.kwis.msf.core"
---
## Class Summary
- [Kernel](Kernel.md) —
- [Shared](Shared.md) —
## Exception Summary
- [ProgramExitException](ProgramExitException.md) —
---
title: "Interface HttpSocket"
---
`package org.kwis.msf.io`
## 필드 요약
- `static String CONNECT` — HTTP Connect 요청 메쏘드 이다.
- `static String DELETE` — HTTP Delete 요청 메쏘드 이다.
- `static String GET` — HTTP Get 요청 메쏘드 이다.
- `static String HEAD` — HTTP Head 요청 메쏘드 이다.
- `static int HTTP_ACCEPTED` — 서버응답코드 ACCEPTED 이다.
- `static int HTTP_BAD_GATEWAY` — 서버응답코드 BAD GATEWAY 이다.
- `static int HTTP_BAD_REQ` — 서버응답코드 BAD REQUEST 이다.
- `static int HTTP_CONFLICT` — 서버응답코드 CONFLICT 이다.
- `static int HTTP_CREATED` — 서버응답코드 CREATED 이다.
- `static int HTTP_ENTITY_TOO_LARGE` — 서버응답코드 TOO LARGE 이다.
- `static int HTTP_EXPECT_FAIL` — 서버응답코드 EXPECTATION FAILED 이다.
- `static int HTTP_FORBIDDEN` — 서버응답코드 FORBIDDEN 이다.
- `static int HTTP_GATEWAY_TIMEOUT` — 서버응답코드 GATEWAY TIMEOUT 이다.
- `static int HTTP_GONE` — 서버응답코드 GONE 이다.
- `static int HTTP_LENGTH_REQUIRED` — 서버응답코드 LENGTH REQUIRED 이다.
- `static int HTTP_METHOD_NOT_ALLOWED` — 서버응답코드 METHOD NOT ALLOWED 이다.
- `static int HTTP_MOVED_PERMANENTLY` — 서버응답코드 MOVED PETMANENTLY 이다.
- `static int HTTP_MOVED_TEMPORARILY` — 서버응답코드 MOVED TEMPORARILY 이다.
- `static int HTTP_MULTIPLE_CHOICE` — 서버응답코드 MULTIPLE CHOICE 이다.
- `static int HTTP_NO_CONTENT` — 서버응답코드 NO CONTENT 이다.
- `static int HTTP_NON_AUTHORITATIVE` — 서버응답코드 NOT AUTHORITATIVE 이다.
- `static int HTTP_NOT_ACCEPTABLE` — 서버응답코드 NOT ACCEPTABLE 이다.
- `static int HTTP_NOT_FOUND` — 서버응답코드 NOT FOUND 이다.
- `static int HTTP_NOT_IMPL` — 서버응답코드 NOT IMPLEMENTED 이다.
- `static int HTTP_NOT_MODIFIED` — 서버응답코드 NOT MODIFIED 이다.
- `static int HTTP_OK` — 서버응답코드 OK 이다.
- `static int HTTP_PARTIAL_CONTENT` — 서버응답코드 PARTIAL CONTENT 이다.
- `static int HTTP_PAYMENT_REQUIRED` — 서버응답코드 PAYMENT REQUIRED 이다.
- `static int HTTP_PRECONDITION_FAILED` — 서버응답코드 PRECONDITION FAILED 이다.
- `static int HTTP_PROXY_AUTHENTICATION_REQUIRED` — 서버응답코드 PROXY AUTHENTICATION REQUITRED 이다.
- `static int HTTP_REQ_RANGE` — 서버응답코드 REQUEST RANGE NOT SATISFIABLE이다.
- `static int HTTP_REQ_TIMEOUT` — 서버응답코드 REQUEST TIMEOUT 이다.
- `static int HTTP_REQ_TOO_LONG` — 서버응답코드 REQUEST TOO LONG 이다.
- `static int HTTP_RESET_CONTENT` — 서버응답코드 RESET CONTENT 이다.
- `static int HTTP_SEE_OTHER` — 서버응답코드 SEE OTHER 이다.
- `static int HTTP_SERVER_ERR` — 서버응답코드 INTERNAL SERVER ERROR 이다.
- `static int HTTP_UNAUTHORIZED` — 서버응답코드 UNAUTHORIZED 이다.
- `static int HTTP_UNAVAILABLE` — 서버응답코드 UNAVAILABLE 이다.
- `static int HTTP_UNSUPPORTED_TYPE` — 서버응답코드 UNSUPPORTED TYPE 이다.
- `static int HTTP_USE_PROXY` — 서버응답코드 USE PROXY 이다.
- `static int HTTP_VERSION` — 서버응답코드 VERSION NOT SUPPORTED 이다.
- `static String OPTIONS` — HTTP Options 요청 메쏘드 이다.
- `static String POST` — HTTP Post 요청 메쏘드 이다.
- `static String PUT` — HTTP Put 요청 메쏘드 이다.
- `static String TRACE` — HTTP Trace 요청 메쏘드 이다.
## 메서드 요약
- `void close ()` — HTTP 소켓을 닫는다.
- `long getDate ()` — 컨텐트의 작성일을 리턴한다.
- `String getEncoding ()` — 수신한 컨텐트의 인코딩을 리턴한다.
- `long getExpiration ()` — 컨텐트의 만료일을 리턴한다.
- `String getFile ()` — URL 의 파일 부분을 리턴한다.
- `String getHeaderField ( String name)` — 서버로 부터의 응답 헤더 값을 리턴한다.
- `String getHost ()` — URL 의 호스트 부분을 리턴한다.
- `InputStream getInputStream ()` — InputStream 을 리턴한다.
- `long getLastModified ()` — 컨텐트의 최근 수정시간을 리턴한다.
- `long getLength ()` — 수신한 컨텐트의 길이를 바이트 단위로 리턴한다.
- `OutputStream getOutputStream ()` — OutputStream 을 리턴한다.
- `int getPort ()` — URL 의 포트 부분을 리턴한다.
- `String getProtocol ()` — URL 의 프로토콜 부분을 리턴한다.
- `String getQuery ()` — URL 의 query 부분을 리턴한다.
- `String getRef ()` — URL 의 anchor 부분을 리턴한다.
- `String getRequestMethod ()` — 요청 메쏘드를 리턴한다.
- `String getRequestProperty ( String key)` — 매개변수 key 에 해당하는 request property 값을 리턴한다.
- `int getResponseCode ()` — 서버의 응답코드를 리턴한다.
- `String getResponseMessage ()` — 서버의 응답메세지를 리턴한다.
- `String getType ()` — 수신한 컨텐트의 타입을 리턴한다.
- `String getURL ()` — URL 을 리턴한다.
- `boolean isRelocatable ()` — 컨텐츠의 위치가 옮겨져서 서버가 다른 서버로의 접속을 유도하는 경우를 알려 준다.
- `HttpSocket relocation ()` — 컨텐츠의 위치가 옮겨져서 서버가 다른 서버로의 접속을 유도하여 다른 서버로 접속하여 새로운 HTTP 소켓을 리턴한다.
- `void setProxy ( String host, int port)` — HTTP 프락시를 지정한다.
- `void setRequestMethod ( String method)` — 요청 메쏘드를 설정한다.
- `void setRequestProperty ( String key, String value)` — request property 를 설정한다.
## 필드 상세
---
title: "Class Message"
---
`package org.kwis.msf.io`
```text
java.lang.Object
|
+--org.kwis.msf.io.Message
```
## 설명
**extends Object:**
소켓으로 전송할 수 있는 메세지를 정의한 클래스이다.
## 생성자 요약
- Message (byte[] data) 단말로부터 메세지를 읽어들인 버퍼 Object를 생성한다.
- Message ( String addr,
byte[] data) 소켓으로 전송할 메세지를 생성한다.
- Message ( String addr,
byte[] data,
int off,
int len) 소켓으로 전송할 메세지를 생성한다.
## 메서드 요약
- `String getAddress ()` — 메세지의 주소를 리턴한다.
- `int getAddressInt ()` — 메세지의 주소를 정수형으로 리턴한다.
- `byte getClassification ()` — 메세지의 상태를 리턴한다.
- `byte[] getData ()` — 메세지 버퍼를 리턴한다.
- `Date getDate ()` — 메세지의 전송시간을 리턴한다.
- `byte getIndex ()` — 메세지 인덱스를 리턴한다.
- `int getLength ()` — 메세지 길이를 리턴한다.
- `int getOffset ()` — 메세지 버퍼의 오프셋을 리턴한다.
- `int getTeleServiceID ()` — 메세지의 텔리서비스 ID를 리턴한다.
- `void setAddress ( String addr)` — 메세지의 주소를 설정한다.
- `void setAddressInt (int addr)` — 메세지의 정수형 주소값을 지정한다.
- `void setClassification (byte newClassification)` — 메세지의 상태를 설정한다.
- `void setDate ( Date date)` — 메세지 전송시간을 설정한다.
- `void setIndex (byte newIndex)` — 메세지의 인덱스를 설정한다.
- `int setLength (int val)` — 메세지 길이를 설정한다.
- `int setOffset (int val)` — 메세지 버퍼의 오프셋을 설정한다.
- `void setTeleServiceID (int newTeleServiceID)` — 메세지의 텔리서비스 ID를 설정한다.
## 생성자 상세
### Message
```java
public Message(byte[] data)
```
- 단말로부터 메세지를 읽어들인 버퍼 Object를 생성한다.
### Message
```java
public Message(String addr,
byte[] data)
```
**Parameters:**
- `data` - 메세지 내용
### Message
```java
public Message(String addr,
byte[] data,
int off,
int len)
```
**Parameters:**
- `len` - 메세지 버퍼의 길이
### getIndex
```java
public byte getIndex()
```
**Returns:**
- 메세지 인덱스
### setIndex
```java
public void setIndex(byte newIndex)
```
- 메세지의 인덱스를 설정한다.
### getTeleServiceID
```java
public int getTeleServiceID()
```
**Returns:**
- 텔리서비스 ID
### setTeleServiceID
```java
public void setTeleServiceID(int newTeleServiceID)
```
- 메세지의 텔리서비스 ID를 설정한다.
### getClassification
```java
public byte getClassification()
```
- 메세지의 상태를 리턴한다.
### setClassification
```java
public void setClassification(byte newClassification)
```
- 메세지의 상태를 설정한다.(Local Object에 대해서만 사용가능)
### getData
```java
public byte[] getData()
```
**Returns:**
- 메세지 버퍼
### getLength
```java
public int getLength()
```
**Returns:**
- 메세지 길이
### setLength
```java
public int setLength(int val)
```
**Parameters:**
- `val` - 메세지 길이
**Returns:**
- 설정된 길이
### getOffset
```java
public int getOffset()
```
**Returns:**
- 메세지 버퍼의 오프셋
### setOffset
```java
public int setOffset(int val)
```
**Returns:**
- 설정된 오프셋
### getAddress
```java
public String getAddress()
```
**Returns:**
- 메세지 주소
### setAddress
```java
public void setAddress(String addr)
```
**Parameters:**
- `addr` - 메세지 주소
### getAddressInt
```java
public int getAddressInt()
```
**Returns:**
- 정수형 주소값
### setAddressInt
```java
public void setAddressInt(int addr)
```
**Parameters:**
- `addr` - 정수형 주소값
### getDate
```java
public Date getDate()
```
**Returns:**
- 성공: 메세지 전송시간, 실패: 전송시간을 알 수 없을 경우 null
### setDate
```java
public void setDate(Date date)
```
**Parameters:**
- `date` - java.util.Date 형의 전송시간## 메서드 상세
### getIndex
```java
public byte getIndex()
```
**Returns:**
- 메세지 인덱스
### setIndex
```java
public void setIndex(byte newIndex)
```
- 메세지의 인덱스를 설정한다.
### getTeleServiceID
```java
public int getTeleServiceID()
```
**Returns:**
- 텔리서비스 ID
### setTeleServiceID
```java
public void setTeleServiceID(int newTeleServiceID)
```
- 메세지의 텔리서비스 ID를 설정한다.
### getClassification
```java
public byte getClassification()
```
- 메세지의 상태를 리턴한다.
### setClassification
```java
public void setClassification(byte newClassification)
```
- 메세지의 상태를 설정한다.(Local Object에 대해서만 사용가능)
### getData
```java
public byte[] getData()
```
**Returns:**
- 메세지 버퍼
### getLength
```java
public int getLength()
```
**Returns:**
- 메세지 길이
### setLength
```java
public int setLength(int val)
```
**Parameters:**
- `val` - 메세지 길이
**Returns:**
- 설정된 길이
### getOffset
```java
public int getOffset()
```
**Returns:**
- 메세지 버퍼의 오프셋
### setOffset
```java
public int setOffset(int val)
```
**Returns:**
- 설정된 오프셋
### getAddress
```java
public String getAddress()
```
**Returns:**
- 메세지 주소
### setAddress
```java
public void setAddress(String addr)
```
**Parameters:**
- `addr` - 메세지 주소
### getAddressInt
```java
public int getAddressInt()
```
**Returns:**
- 정수형 주소값
### setAddressInt
```java
public void setAddressInt(int addr)
```
**Parameters:**
- `addr` - 정수형 주소값
### getDate
```java
public Date getDate()
```
**Returns:**
- 성공: 메세지 전송시간, 실패: 전송시간을 알 수 없을 경우 null
### setDate
```java
public void setDate(Date date)
```
**Parameters:**
- `date` - java.util.Date 형의 전송시간
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Network"
---
`package org.kwis.msf.io`
```text
java.lang.Object
|
+--org.kwis.msf.io.Network
```
## 설명
**extends Object:**
응용 프로그램이 TCP/IP 인터넷 통신을 하기 위한 인터넷 접근 API 를 모은 것이다.
## 생성자 요약
- Network ()
## 메서드 요약
- `static int connect ()` — TCP/IP 인터넷 접근을 시도한다.
- `static void disconnect ()` — TCP/IO 인터넷 접근을 종료한다.
## 생성자 상세
### Network
```java
public Network()
```
### connect
```java
public static int connect()
```
**Returns:**
- 현재 접근이 가능하다면 0을 돌려주고, 접근되어 있지 않은 상태에서 접근에 성공하면 1을 돌려준다. 만일 실패하면 -1을 돌려준다
### disconnect
```java
public static void disconnect()
```
- TCP/IO 인터넷 접근을 종료한다.## 메서드 상세
### connect
```java
public static int connect()
```
**Returns:**
- 현재 접근이 가능하다면 0을 돌려주고, 접근되어 있지 않은 상태에서 접근에 성공하면 1을 돌려준다. 만일 실패하면 -1을 돌려준다
### disconnect
```java
public static void disconnect()
```
- TCP/IO 인터넷 접근을 종료한다.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class SchemeNotFoundException"
---
`package org.kwis.msf.io`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--org.kwis.msf.io.SchemeNotFoundException
```
## 설명
**extends IOException:**
## 생성자 요약
- SchemeNotFoundException ()
- SchemeNotFoundException ( String s)
## 생성자 상세
### SchemeNotFoundException
```java
public SchemeNotFoundException()
```
### SchemeNotFoundException
```java
public SchemeNotFoundException(String s)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface Socket"
---
`package org.kwis.msf.io`
```text
public InputStream getInputStream()
throws IOException
```
## 설명
**Returns:**
- InputStream 을 리턴한다
**Throws:**
- `IOException` - stream 소켓이 아니거나 InputStream 을 리턴하지 못할 경우
### getOutputStream
**Returns:**
- OutputStream 을 리턴한다
**Throws:**
- `IOException` - stream 소켓이 아니거나 OutputStream 을 리턴하지 못할 경우
### isStream
**Returns:**
- stream 소켓이면 true, 아니면 false
### getMessageCount
**Returns:**
- 앞으로 읽을 수 있는 메세지 갯수. 메세지 갯수를 알수 없을 경우
-1을 리턴한다.
**Throws:**
- `IOException` - stream 소켓일 경우
### getMessageMaxLength
**Returns:**
- 메세지 데이타의 최대길이
**Throws:**
- `IOException` - stream 소켓일 경우
### send
**Throws:**
- `IOException` - stream 소켓이거나 메세지를 전송하지 못할 경우
### recv
**Parameters:**
- `m` - 수신된 데이타가 저장될 메세지 버퍼
**Throws:**
- `IOException` - stream 소켓이거나 메세지를 수신하지 못할 경우
### close
**Throws:**
- `IOException` - 에러 발생시
### accept
**Returns:**
- 새로 연결된 소켓
**Throws:**
- `IOException` - 서버 기능을 지원하는 소켓이 아니거나 I/O 에러가 발생할 경우## 메서드 요약
- `Socket accept ()` — 서버 기능을 지원하는 소켓이 새롭게 연결된 소켓을 리턴한다.
- `void close ()` — 소켓을 닫는다. stream 소켓일 경우 만약 getInputStream() 이나 getOutputStream() 으로 InputStream 혹은 OutputStream 을 리턴한 경우 소켓이 완전히 닫히기 위해서는 이 메쏘드와 함께 InputStream 혹은 OutputStream 의 close() 메쏘드가 불려 져야 한다.
- `InputStream getInputStream ()` — stream 소켓일 경우 InputStream 을 리턴한다.
- `int getMessageCount ()` — stream 소켓이 아닐 경우 앞으로 이 소켓으로 부터 읽을 수 있는 메세지 갯수를 알려준다.
- `int getMessageMaxLength ()` — stream 소켓이 아닐경우 한 메세지에 실을 수 있는 데이타의 최대길이를 알려준다.
- `OutputStream getOutputStream ()` — stream 소켓일 경우 OutputStream 을 리턴한다.
- `boolean isStream ()` — stream 소켓인지여부를 알려준다.
- `void recv ( Message m)` — stream 소켓이 아닐 경우 메세지를 수신한다.
- `void send ( Message m)` — stream 소켓이 아닐 경우 메세지를 전송한다.
## 메서드 상세
### getInputStream
```java
public InputStream getInputStream()
throws IOException
```
**Returns:**
- InputStream 을 리턴한다
**Throws:**
- `IOException` - stream 소켓이 아니거나 InputStream 을 리턴하지 못할 경우
### getOutputStream
```java
public OutputStream getOutputStream()
throws IOException
```
**Returns:**
- OutputStream 을 리턴한다
**Throws:**
- `IOException` - stream 소켓이 아니거나 OutputStream 을 리턴하지 못할 경우
### isStream
```java
public boolean isStream()
```
**Returns:**
- stream 소켓이면 true, 아니면 false
### getMessageCount
```java
public int getMessageCount()
throws IOException
```
**Returns:**
- 앞으로 읽을 수 있는 메세지 갯수. 메세지 갯수를 알수 없을 경우
-1을 리턴한다.
**Throws:**
- `IOException` - stream 소켓일 경우
### getMessageMaxLength
```java
public int getMessageMaxLength()
throws IOException
```
**Returns:**
- 메세지 데이타의 최대길이
**Throws:**
- `IOException` - stream 소켓일 경우
### send
```java
public void send(Message m)
throws IOException
```
**Throws:**
- `IOException` - stream 소켓이거나 메세지를 전송하지 못할 경우
### recv
```java
public void recv(Message m)
throws IOException
```
**Parameters:**
- `m` - 수신된 데이타가 저장될 메세지 버퍼
**Throws:**
- `IOException` - stream 소켓이거나 메세지를 수신하지 못할 경우
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - 에러 발생시
### accept
```java
public Socket accept()
throws IOException
```
**Returns:**
- 새로 연결된 소켓
**Throws:**
- `IOException` - 서버 기능을 지원하는 소켓이 아니거나 I/O 에러가 발생할 경우
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class URL"
---
`package org.kwis.msf.io`
```text
java.lang.Object
|
+--org.kwis.msf.io.URL
```
## 설명
**extends Object:**
플랫폼 외부와의 데이타 통신을 위해 소켓을 생성해주는 클래스이다.
모든 소켓은 URL(RFC1738 참조) 방식으로 생성된다.
URL 의 sheme 부분에 의해 생성되는 소켓의 성격이 구분된다. 소켓의 성격은
stream 소켓과 그렇지 않은 것으로 나뉜다.
## 생성자 요약
- URL ()
## 메서드 요약
- `static Socket find ( String url)` — 매개변수 url 에 따라 소켓을 생성한다.
## 생성자 상세
### URL
```java
public URL()
```
### find
```java
public static Socket find(String url)
throws SchemeNotFoundException
```
**Throws:**
- `SchemeNotFoundException` - 소켓을 생성하지 못할 경우## 메서드 상세
### find
```java
public static Socket find(String url)
throws SchemeNotFoundException
```
**Throws:**
- `SchemeNotFoundException` - 소켓을 생성하지 못할 경우
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package org.kwis.msf.io"
---
## Interface Summary
- [HttpSocket](HttpSocket.md) — HTTP 연결에 관련된 소켓 인터페이스이다.
- [Socket](Socket.md) — 플랫폼 외부와의 데이타 통신을 가능하게 하는 클래스이다.
## Class Summary
- [Message](Message.md) — 소켓으로 전송할 수 있는 메세지를 정의한 클래스이다.
- [Network](Network.md) — 응용 프로그램이 TCP/IP 인터넷 통신을 하기 위한 인터넷 접근 API 를 모은 것이다.
- [URL](URL.md) — 플랫폼 외부와의 데이타 통신을 위해 소켓을 생성해주는 클래스이다.
## Exception Summary
- [SchemeNotFoundException](SchemeNotFoundException.md) —
---
title: "Class DataBase"
---
`package org.kwis.msp.db`
```text
java.lang.Object
|
+--org.kwis.msp.db.DataBase
```
## 설명
**extends Object:**
영속적인 데이터를 저장하고, 찾으며, 관리하기 위한 메카니즘을 제공합니다.
Jlet에서 간단한 데이터베이스를 구현하기 위한 클래스입니다.
데이터베이스에는 여러개의 레코드(데이터)들이 저장되고 또 읽혀질 수 있습니다.
실제 레코드는 플랫폼의 영속적인 영역에 저장되어 Jlet이 수행이 종료
되거나, 플랫폼이 다운되더라도 이미 저장된 레코드의
최소한의(예를 들어 레코드를 저장하는 중에 플랫폼이 다운 되었다면
해당 레코드의 무결성은 보장할 수 없습니다) 무결성은 보장됩니다
레코드는 바이트 어레이의 형태로 저장됩니다. 저장되는 데이터의 의미는
무시됩니다. 저장된 데이터의 논리적인 의미를 파악하는 것은 사용자의
몫입니다. 레코드의 크기는 처음 해당 데이터베이스를 생성할 때 지정한
크기를 초과할 수는 없습니다.
각각의 레코드는 데이터베이스 상에서 레코드 ID라는 Integer 값으로
표현됩니다. 레코드 ID는 0부터 시작하며 레코드의 삭제가 없는 한
레코드 ID는 레코드를 하나 저장할 때 마다 1씩 증가합니다.
레코드가 중간에 삭제되면 다음 레코드를 저장할 때는
삭제된 레코드 ID를 재사용합니다.
레코드의 빈번한 추가/삭제로 데이터베이스에 저장된 레코드의 개수와
데이터베이스가 실제 플랫폼의 파일시스템에 차지하는 용량이 차이가
날 수 있습니다. QTP는 이런 빈 공간을 없애는 메카니즘(compaction)은
제공하지 않습니다.
하나의 Jlet은 여러개의 데이터베이스를 생성할 수 있으며 한 Jlet은
자신의 Jlet이 생성한 데이터베이스 모두에 접근이 가능합니다.
하지만 대부분의 경우 다른 Jlet이 생성한 데이터베이스에 접근할
수는 없습니다.
데이터베이스는 공유 디렉토리에 생성시키는 방법으로 여러 Jlet이
공유할 수도 있으며, 시스템 어플리케이션이 사용하는 데이터베이스에
접근할 수도 있습니다. 이는 데이터베이스를 오픈할 때 플래그를 줌으로써
이루어집니다.
Jlet이 플랫폼 상에서 지워지면 데이터베이스도 삭제되며,
해당 데이터베이스가 플랫폼의 물리적인 영역에 생성한
자원들(주로 파일)도 동시에 삭제됩니다.
데이터베이스를 정렬하기 위해서 `DataFilter`
인터페이스와 `DataComparator` 인터페이스를 구현해야 합니다.
전자는 정렬에 필요한 레코드를 골라내는 역할을 하며, 후자는 정렬을
위해 레코드 두개를 비교하는 역할을 합니다.
## 메서드 요약
- `void closeDataBase ()` — 데이터베이스를 닫습니다.
- `static void deleteDataBase ( String dataBaseName)` — 데이터베이스를 삭제합니다.
- `static void deleteDataBase ( String dataBaseName, int flag)` — 데이터베이스를 삭제합니다.
- `void deleteRecord (int recordId)` — 레코드를 데이터베이스에서 삭제합니다.
- `static int getAccessMode ( String dbName)` — 데이터베이스의 접근 권한을 돌려줍니다.
- `String getDataBaseName ()` — 데이터베이스의 이름을 돌려줍니다.
- `int getDataBaseSize ()` — 데이터베이스의 크기를 돌려줍니다.
- `long getLastModified ()` — 데이터베이스가 가장 최근에 갱신된 시간을 돌려줍니다.
- `int getNumberOfRecords ()` — 데이터베이스에 저장된 레코드의 개수를 돌려줍니다.
- `int getRecordSize ()` — 데이터베이스의 하나의 레코드 크기를 돌려 줍니다.
- `int getSizeAvailable ()` — 앞으로 저장할 수 있는 남은 용량의 크기를 돌려줍니다.
- `int insertRecord (byte[] data)` — 새로운 레코드를 데이터베이스에 추가합니다.
- `int insertRecord (byte[] data, int offset, int numBytes)` — 새로운 레코드를 데이터베이스에 추가합니다.
- `static String [] listDataBases ()` — 데이터베이스의 이름의 어레이를 돌려줍니다.
- `static DataBase openDataBase ( String dataBaseName, int recordSize, boolean create)` — 데이터베이스를 엽니다.
- `static DataBase openDataBase ( String dataBaseName, int recordSize, boolean create, int flag)` — 데이터베이스를 엽니다.
- `byte[] selectRecord (int recordId)` — 특정 레코드 ID에 저장된 데이터를 돌려줍니다.
- `void selectRecord (int recordId, byte[] buffer, int offset)` — 특정 레코드 ID에 저장된 데이터를 돌려줍니다.
- `int[] sortRecord ( DataFilter filter, DataComparator comparator)` — 레코드를 정의한 비교 방법과 제한 조건으로 정렬합니다.
- `void updateRecord (int recordId, byte[] newData)` — 특정 레코드의 데이터의 내용을 바꿉니다.
- `void updateRecord (int recordId, byte[] newData, int offset, int numBytes)` — 특정 레코드의 데이터의 내용을 바꿉니다.
## 메서드 상세
### openDataBase
```java
public static DataBase openDataBase(String dataBaseName,
int recordSize,
boolean create)
throws DataBaseException,
IllegalArgumentException
```
**Parameters:**
- `create` - 만약 데이터베이스가 존재하지 않으면 새로 만들 것인지 여부
**Returns:**
- 연 데이터베이스
**Throws:**
- `IllegalArgumentException` - `create`가
`true`인데, `recordSize`가 0이거나 음수인 경우
### openDataBase
```java
public static DataBase openDataBase(String dataBaseName,
int recordSize,
boolean create,
int flag)
throws DataBaseException,
IllegalArgumentException
```
**Parameters:**
- `flag` - 데이터베이스의 공유 방법을 지정,
`FileSystem.PRIVATE_ACCESS`,
`FileSystem.SHARED_ACCESS`,
`FileSystem.SYSTEM_ACCESS` 가능
**Returns:**
- 연 데이터베이스
**Throws:**
- `IllegalArgumentException` - `create`가
`true`인데, `recordSize`가 0이거나 음수인 경우
### closeDataBase
```java
public void closeDataBase()
throws DataBaseException
```
**Throws:**
- `DataBaseException` - 데이터베이스 관리 정보를 저장할 수 없거나
파일을 닫을 수 없는 경우
### deleteDataBase
```java
public static void deleteDataBase(String dataBaseName)
throws DataBaseException
```
**Parameters:**
- `dataBaseName` - 삭제할 데이터베이스 이름
**Throws:**
- `DataBaseException` - 삭제할 데이터베이스가 없거나
지우지 못한 경우
### deleteDataBase
```java
public static void deleteDataBase(String dataBaseName,
int flag)
throws DataBaseException
```
**Parameters:**
- `flag` - 어떤 접근권한에 있는 데이터베이스를 지울 것인지를 나타냄,
`FileSystem.PRIVATE_ACCESS`,
`FileSystem.SHARED_ACCESS`,
`FileSystem.SYSTEM_ACCESS` 가능.
**Throws:**
- `DataBaseException` - 삭제할 데이터베이스가 없거나
지우지 못한 경우
### insertRecord
```java
public int insertRecord(byte[] data,
int offset,
int numBytes)
throws DataBaseRecordException,
DataBaseException,
IllegalArgumentException
```
**Parameters:**
- `numBytes` - 저장할 바이트 수
**Returns:**
- 저장된 레코드의 레코드 ID
**Throws:**
- `IllegalArgumentException` - data의 길이에서 offset을 뺀 값이 numBytes 보다 작은 경우
### insertRecord
```java
public int insertRecord(byte[] data)
throws DataBaseRecordException,
DataBaseException
```
**Parameters:**
- `data` - 저장할 데이터가 들어있는 버퍼
**Returns:**
- 저장된 레코드의 레코드 ID
**Throws:**
- `DataBaseException` - 레코드를 저장할 수 없는 경우
### deleteRecord
```java
public void deleteRecord(int recordId)
throws DataBaseException,
DataBaseRecordException
```
**Parameters:**
- `recordId` - 지울 레코드의 ID
**Throws:**
- `DataBaseRecordException` - 레코드 ID가 없는 경우
### selectRecord
```java
public byte[] selectRecord(int recordId)
throws DataBaseException,
DataBaseRecordException
```
**Parameters:**
- `recordId` - 레코드 ID
**Returns:**
- 해당 레코드 ID에 저장된 데이터
**Throws:**
- `DataBaseRecordException` - 레코드 ID가 존재하지 않는 경우
### selectRecord
```java
public void selectRecord(int recordId,
byte[] buffer,
int offset)
throws DataBaseException,
DataBaseRecordException,
IllegalArgumentException
```
**Parameters:**
- `offset` - 버퍼에서 복사를 시작할 첫번째 바이트 오프셋
**Throws:**
- `DataBaseRecordException` - 레코드 ID가 존재하지 않는 경우
### updateRecord
```java
public void updateRecord(int recordId,
byte[] newData,
int offset,
int numBytes)
throws DataBaseRecordException,
DataBaseException,
IllegalArgumentException
```
**Parameters:**
- `numBytes` - 저장할 바이트 수
**Throws:**
---
title: "Class DataBaseException"
---
`package org.kwis.msp.db`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--org.kwis.msp.db.DataBaseException
```
## 설명
**extends Exception:**
데이터베이스와 관련된 일반적인 예외 상황에서 발생합니다.
## 생성자 요약
- DataBaseException () 새 DataBaseException 인스턴스를 생성합니다.
- DataBaseException ( String message) 새 DataBaseException 인스턴스를 메시지와 함께 생성합니다.
## 생성자 상세
### DataBaseException
```java
public DataBaseException(String message)
```
**Parameters:**
- `message` - 예외에 대한 자세한 메시지.
### DataBaseException
```java
public DataBaseException()
```
- 새 `DataBaseException` 인스턴스를 생성합니다.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class DataBaseRecordException"
---
`package org.kwis.msp.db`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--org.kwis.msp.db.DataBaseRecordException
```
## 설명
**extends Exception:**
데이터베이스의 레코드와 관련된 일반적인 예외 상황에서 발생합니다.
## 생성자 요약
- DataBaseRecordException () 새 DataBaseRecord 인스턴스를 생성합니다.
- DataBaseRecordException ( String message) 새 DataBaseRecordException 인스턴스를
메시지와 함께 생성합니다.
## 생성자 상세
### DataBaseRecordException
```java
public DataBaseRecordException(String message)
```
**Parameters:**
- `message` - 예외에 대한 자세한 메시지.
### DataBaseRecordException
```java
public DataBaseRecordException()
```
- 새 `DataBaseRecord` 인스턴스를 생성합니다.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface DataComparator"
---
`package org.kwis.msp.db`
```text
public static final int EQUIVALENT
```
## 설명
- 레코드 정렬이나 검색시 파라미터로 받은
두개의 레코드가 순서상 같다는 의미입니다.
### FOLLOWS
- 레코드 정렬이나 검색시 파라미터로 받은
첫번째 레코드가 두번째 레코드 다음에 온다는 의미입니다.
### PRECEDES
- 레코드 정렬이나 검색시 파라미터로 받은
두번째 레코드가 첫번째 레코드 다음에 온다는 의미입니다.
Method Detail
### compare
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`## 필드 요약
- `static int EQUIVALENT` — 레코드 정렬이나 검색시 파라미터로 받은 두개의 레코드가 순서상 같다는 의미입니다.
- `static int FOLLOWS` — 레코드 정렬이나 검색시 파라미터로 받은 첫번째 레코드가 두번째 레코드 다음에 온다는 의미입니다.
- `static int PRECEDES` — 레코드 정렬이나 검색시 파라미터로 받은 두번째 레코드가 첫번째 레코드 다음에 온다는 의미입니다.
## 메서드 요약
- `int compare (byte[] data1, byte[] data2)` — 레코드를 비교하는 메쏘드(비교자, comparator)입니다.
## 필드 상세
### EQUIVALENT
```java
public static final int EQUIVALENT
```
- 레코드 정렬이나 검색시 파라미터로 받은
두개의 레코드가 순서상 같다는 의미입니다.
### FOLLOWS
```java
public static final int FOLLOWS
```
- 레코드 정렬이나 검색시 파라미터로 받은
첫번째 레코드가 두번째 레코드 다음에 온다는 의미입니다.
### PRECEDES
```java
public static final int PRECEDES
```
- 레코드 정렬이나 검색시 파라미터로 받은
두번째 레코드가 첫번째 레코드 다음에 온다는 의미입니다.
### compare
```java
public int compare(byte[] data1,
byte[] data2)
```
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`## 메서드 상세
### compare
```java
public int compare(byte[] data1,
byte[] data2)
```
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class DataComparatorInteger"
---
`package org.kwis.msp.db`
```text
java.lang.Object
|
+--org.kwis.msp.db.DataComparatorInteger
```
## 설명
**All Implemented Interfaces:**
- `DataComparator`
**implements DataComparator:**
두개의 레코드를 정수로 비교하는 클래스입니다.
데이터베이스의 `sortRecord`메쏘드를 호출할 때 필요합니다.
Fields inherited from interface org.kwis.msp.db. DataComparator EQUIVALENT , FOLLOWS , PRECEDES
Constructor Summary DataComparatorInteger (int offset) 두개의 레코드를 정수로 비교하는 클래스입니다.
Method Summary int compare (byte[] data1,
byte[] data2) 레코드를 비교하는 메쏘드(비교자, comparator)입니다.
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
Constructor Detail
### DataComparatorInteger
**Parameters:**
- `offset` - 레코드에서 비교할 정수가 시작되는 바이트 오프셋
Method Detail
### compare
- **Description copied from interface: `DataComparator`**
**Specified by:**
- `compare` in interface `DataComparator`
- Following copied from interface: `org.kwis.msp.db.DataComparator`
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`## 생성자 요약
- DataComparatorInteger (int offset) 두개의 레코드를 정수로 비교하는 클래스입니다.
## 메서드 요약
- `int compare (byte[] data1, byte[] data2)` — 레코드를 비교하는 메쏘드(비교자, comparator)입니다.
## 생성자 상세
### DataComparatorInteger
```java
public DataComparatorInteger(int offset)
```
**Parameters:**
- `offset` - 레코드에서 비교할 정수가 시작되는 바이트 오프셋
### compare
```java
public int compare(byte[] data1,
byte[] data2)
```
- **Description copied from interface: `DataComparator`**
**Specified by:**
- `compare` in interface `DataComparator`
- Following copied from interface: `org.kwis.msp.db.DataComparator`
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`## 메서드 상세
### compare
```java
public int compare(byte[] data1,
byte[] data2)
```
- **Description copied from interface: `DataComparator`**
**Specified by:**
- `compare` in interface `DataComparator`
- Following copied from interface: `org.kwis.msp.db.DataComparator`
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class DataComparatorString"
---
`package org.kwis.msp.db`
```text
java.lang.Object
|
+--org.kwis.msp.db.DataComparatorString
```
## 설명
**All Implemented Interfaces:**
- `DataComparator`
**implements DataComparator:**
두개의 레코드를 문자열로 비교하는 클래스입니다.
데이터베이스의 `sortRecord`메쏘드를 호출할 때 필요합니다.
Fields inherited from interface org.kwis.msp.db. DataComparator EQUIVALENT , FOLLOWS , PRECEDES
Constructor Summary DataComparatorString (int offset) 두개의 레코드를 문자열로 비교하는 클래스입니다.
Method Summary int compare (byte[] data1,
byte[] data2) 레코드를 비교하는 메쏘드(비교자, comparator)입니다.
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
Constructor Detail
### DataComparatorString
**Parameters:**
- `offset` - 레코드에서 비교할 문자열이 시작되는 바이트 오프셋
Method Detail
### compare
- **Description copied from interface: `DataComparator`**
**Specified by:**
- `compare` in interface `DataComparator`
- Following copied from interface: `org.kwis.msp.db.DataComparator`
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`## 생성자 요약
- DataComparatorString (int offset) 두개의 레코드를 문자열로 비교하는 클래스입니다.
## 메서드 요약
- `int compare (byte[] data1, byte[] data2)` — 레코드를 비교하는 메쏘드(비교자, comparator)입니다.
## 생성자 상세
### DataComparatorString
```java
public DataComparatorString(int offset)
```
**Parameters:**
- `offset` - 레코드에서 비교할 문자열이 시작되는 바이트 오프셋
### compare
```java
public int compare(byte[] data1,
byte[] data2)
```
- **Description copied from interface: `DataComparator`**
**Specified by:**
- `compare` in interface `DataComparator`
- Following copied from interface: `org.kwis.msp.db.DataComparator`
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`## 메서드 상세
### compare
```java
public int compare(byte[] data1,
byte[] data2)
```
- **Description copied from interface: `DataComparator`**
**Specified by:**
- `compare` in interface `DataComparator`
- Following copied from interface: `org.kwis.msp.db.DataComparator`
**Parameters:**
- `data2` - 비교할 레코드의 데이터
**Returns:**
- 두 레코드가 순서상 같으면
`DataComparator.EQUIVALENT`,
`data2`다음에 `data1`이 오는 순서이면
(즉 `data1`이 `data2`를 따르는 순서이면)
`DataComparator.FOLLOWS`,
`data1` 다음에 `data2`가 오는 순서이면
`DataComparator.PRECEDES`
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface DataFilter"
---
`package org.kwis.msp.db`
```text
public boolean filter(byte[] data)
```
## 설명
**Parameters:**
- `data` - 레코드에 저장된 데이터를 나타내는 바이트 어레이
**Returns:**
- 해당 레코드가 정렬에 포함된다면 true, 아니면 false## 메서드 요약
- `boolean filter (byte[] data)` — 정렬에 사용할 레코드를 제한하는 메쏘드입니다.
## 메서드 상세
### filter
```java
public boolean filter(byte[] data)
```
**Parameters:**
- `data` - 레코드에 저장된 데이터를 나타내는 바이트 어레이
**Returns:**
- 해당 레코드가 정렬에 포함된다면 true, 아니면 false
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class DataFilterInteger"
---
`package org.kwis.msp.db`
```text
java.lang.Object
|
+--org.kwis.msp.db.DataFilterInteger
```
## 설명
**All Implemented Interfaces:**
- `DataFilter`
**implements DataFilter:**
정렬에 사용할 레코드를 한정합니다.
정수로 정렬할 때 사용합니다.
레코드의 데이터인 바이트 어레이에서,
특정 오프셋에 저장된 데이터가 정수(int)라 가정하고,
이 값이 일정 범위(min, max로 지정된)에 속한 레코드만
정렬에 포함합니다.
`sortRecord` 메쏘드를 호출할 때 사용합니다.
## 필드 요약
- `protected int max` — 최대값
- `protected int min` — 최소값
- `protected int offset` — 비교할 오프셋
## 생성자 요약
- DataFilterInteger (int offset,
int min,
int max) 정렬에 사용할 레코드를 한정합니다.
## 메서드 요약
- `boolean filter (byte[] data)` — 정렬에 사용할 레코드를 제한하는 메쏘드입니다.
## 필드 상세
### offset
```java
protected int offset
```
- 비교할 오프셋
### min
```java
protected int min
```
- 최소값
### max
```java
protected int max
```
- 최대값
### DataFilterInteger
```java
public DataFilterInteger(int offset,
int min,
int max)
throws IllegalArgumentException
```
**Parameters:**
- `max` - 최대값. `Integer.MAX_VALUE` 이면
`min` 이상을 의미
**Throws:**
- `IllegalArgumentException` - `offset`이 음수이거나
`min`, `max`가 제대로 주어지지 않은 경우
### filter
```java
public boolean filter(byte[] data)
```
- **Description copied from interface: `DataFilter`**
**Specified by:**
- `filter` in interface `DataFilter`
- Following copied from interface: `org.kwis.msp.db.DataFilter`
**Parameters:**
- `data` - 레코드에 저장된 데이터를 나타내는 바이트 어레이
**Returns:**
- 해당 레코드가 정렬에 포함된다면 true, 아니면 false## 생성자 상세
### DataFilterInteger
```java
public DataFilterInteger(int offset,
int min,
int max)
throws IllegalArgumentException
```
**Parameters:**
- `max` - 최대값. `Integer.MAX_VALUE` 이면
`min` 이상을 의미
**Throws:**
- `IllegalArgumentException` - `offset`이 음수이거나
`min`, `max`가 제대로 주어지지 않은 경우
### filter
```java
public boolean filter(byte[] data)
```
- **Description copied from interface: `DataFilter`**
**Specified by:**
- `filter` in interface `DataFilter`
- Following copied from interface: `org.kwis.msp.db.DataFilter`
**Parameters:**
- `data` - 레코드에 저장된 데이터를 나타내는 바이트 어레이
**Returns:**
- 해당 레코드가 정렬에 포함된다면 true, 아니면 false## 메서드 상세
### filter
```java
public boolean filter(byte[] data)
```
- **Description copied from interface: `DataFilter`**
**Specified by:**
- `filter` in interface `DataFilter`
- Following copied from interface: `org.kwis.msp.db.DataFilter`
**Parameters:**
- `data` - 레코드에 저장된 데이터를 나타내는 바이트 어레이
**Returns:**
- 해당 레코드가 정렬에 포함된다면 true, 아니면 false
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package org.kwis.msp.db"
---
## Interface Summary
- [DataComparator](DataComparator.md) — 두개의 레코드를 비교하는 인터페이스입니다.
- [DataFilter](DataFilter.md) — 정렬에 사용할 레코드를 제한합니다.
## Class Summary
- [DataBase](DataBase.md) — 영속적인 데이터를 저장하고, 찾으며, 관리하기 위한 메카니즘을 제공합니다.
- [DataComparatorInteger](DataComparatorInteger.md) — 두개의 레코드를 정수로 비교하는 클래스입니다.
- [DataComparatorString](DataComparatorString.md) — 두개의 레코드를 문자열로 비교하는 클래스입니다.
- [DataFilterInteger](DataFilterInteger.md) — 정렬에 사용할 레코드를 한정합니다.
## Exception Summary
- [DataBaseException](DataBaseException.md) — 데이터베이스와 관련된 일반적인 예외 상황에서 발생합니다.
- [DataBaseRecordException](DataBaseRecordException.md) — 데이터베이스의 레코드와 관련된 일반적인 예외 상황에서 발생합니다.
---
title: "Class BackLight"
---
`package org.kwis.msp.handset`
```text
java.lang.Object
|
+--org.kwis.msp.handset.BackLight
```
## 설명
**extends Object:**
LCD 의 백라이트를 조절하는 클래스이다.
## 메서드 요약
- `static void alwaysOn ()` — 백라이트를 계속해서 킨다
- `static void before ()` — 백라이트를 프로그램 실행 이전 상태로 유지한다
- `static void off ()` — 백라이트를 끈다
- `static void on (int id, int color, int duration)` — 백라이트를 제어하는 함수 이다.
## 메서드 상세
### on
```java
public static void on(int id,
int color,
int duration)
```
**Parameters:**
- `duration` - 백라이트가 켜져있는 시간을(msec 단위로)
### off
```java
public static void off()
```
- 백라이트를 끈다
### before
```java
public static void before()
```
- 백라이트를 프로그램 실행 이전 상태로 유지한다
### alwaysOn
```java
public static void alwaysOn()
```
- 백라이트를 계속해서 킨다
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Call"
---
`package org.kwis.msp.handset`
```text
java.lang.Object
|
+--org.kwis.msp.handset.Call
```
## 설명
**extends Object:**
전화 통화에 관련된 클래스이다.
## 메서드 요약
- `static void accept ()` — 걸려온 전화를 받다
- `protected static void accept0 ()`
- `static void end ()` — 전화 거는 중 혹은 현재 통화하고 있는 중에 통화를 종료 한다
- `protected static void end0 ()`
- `static void place ( String phonenumber)` — 전화를 건다.
- `protected static void place0 ( String phonenumber)`
- `static void reject ()` — 걸려온 전화를 거부한다
- `protected static void reject0 ()`
- `static void securePPPSession ()` — 전화통화에 필요한 PPP Session을 확보한다.
- `protected static void securePPPSession0 ()`
## 메서드 상세
### securePPPSession
```java
public static void securePPPSession()
```
**Throws:**
- `IOException` - 응용 프로그램 관리자이외의 프로그램에서 불릴 경우나 기타 에러 발생
### accept
```java
public static void accept()
```
**Throws:**
- `IOException` - 응용 프로그램 관리자이외의 프로그램에서 불릴 경우나 기타 에러 발생
### reject
```java
public static void reject()
```
**Throws:**
- `IOException` - 응용 프로그램 관리자이외의 프로그램에서 불릴 경우나 기타 에러 발생
### end
```java
public static void end()
```
**Throws:**
- `IOException` - 응용 프로그램 관리자이외의 프로그램에서 불릴 경우나 기타 에러 발생
### place
```java
public static void place(String phonenumber)
```
**Parameters:**
- `phonenumber` - 전화번호
**Throws:**
- `IOException` - 응용 프로그램 관리자이외의 프로그램에서 불릴 경우나 기타 에러 발생
### securePPPSession0
```java
protected static void securePPPSession0()
```
### accept0
```java
protected static void accept0()
```
### reject0
```java
protected static void reject0()
```
### end0
```java
protected static void end0()
```
### place0
```java
protected static void place0(String phonenumber)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class HandsetProperty"
---
`package org.kwis.msp.handset`
```text
java.lang.Object
|
+--org.kwis.msp.handset.HandsetProperty
```
## 설명
**extends Object:**
단말기에 특화된 값들을 관리하는 클래스이다
## 메서드 요약
- `static String getSystemProperty ( String id)` — 단말기에 특화된 값을 읽어 온다
- `static boolean setSystemProperty ( String id, String val)` — 단말기에 특화된 값을 설정 한다
## 메서드 상세
### getSystemProperty
```java
public static String getSystemProperty(String id)
```
**Parameters:**
- `id` - 특화된 값에 대한 식별 문자열
**Returns:**
- 특화된 값
### setSystemProperty
```java
public static boolean setSystemProperty(String id,
String val)
```
**Parameters:**
- `val` - 설정 할 값
**Returns:**
- true면 설정성공, false면 설정 실패
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class LED"
---
`package org.kwis.msp.handset`
```text
java.lang.Object
|
+--org.kwis.msp.handset.LED
```
## 설명
**extends Object:**
LED(Light Emitting Diodes) 를 조절하는 클래스이다.
## 메서드 요약
- `static int get ()` — LED의 on/off상태를 읽어온다
- `static int getCount ()` — 시스템의 LED 개수를 리턴한다
- `static void set (int leds)` — LED on/off를 설정한다.
## 메서드 상세
### getCount
```java
public static int getCount()
```
**Returns:**
- 시스템의 LED 개수
### set
```java
public static void set(int leds)
```
- LED on/off를 설정한다. 각bit가 1이면 on, 0이면 off를 나타낸다.
예)
외장 LED가 4개 존재한다면 LSB BIT 부터 4개를 사용한다.
0 bit
+---------------------+
| |*|*|*|*|
+---------------------+
set(0x3) led2개를 켜고, 두개를 끈다.
### get
```java
public static int get()
```
**Returns:**
- 각 led의 on/off상태의 bit OR값
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package org.kwis.msp.handset"
---
## Class Summary
- [BackLight](BackLight.md) — LCD 의 백라이트를 조절하는 클래스이다.
- [Call](Call.md) — 전화 통화에 관련된 클래스이다.
- [HandsetProperty](HandsetProperty.md) — 단말기에 특화된 값들을 관리하는 클래스이다
- [LED](LED.md) — LED(Light Emitting Diodes) 를 조절하는 클래스이다.
---
title: "Class File"
---
`package org.kwis.msp.io`
```text
java.lang.Object
|
+--org.kwis.msp.io.File
```
## 설명
**extends Object:**
파일에 대한 읽기/쓰기와 같은 기본적인 기능과 Stream 기능 지원을 위한 클래스입니다.
파일이름은 모두 절대경로로 되어 있습니다. 실제로는 플랫폼에서 허용하는
디렉토리안에서 모든 파일을 만들고 지울 수 있게 되어있습니다.
사용자입장에서는 플랫폼에서 어떤 식으로 지원하든 상관없이 절대경로로
사용하면 됩니다.
구분자(separator)의 경우 유닉스 시스템의 관행을 따랐습니다.
그러므로 `"/"`를 사용하면 됩니다.
FileSystem 클래스와 마찬가지로 경로를 지정하는 메소드의 경우 접근 방법에 대한 제한이 있습니다.
접근방법은 아래와 같은 3가지가 있습니다.
``FileSystem.PRIVATE_ACCESS``, ``FileSystem.SHARED_ACCESS``, ``FileSystem.SYSTEM_ACCESS``
아래와 같은 메소드를 호출하기 위해서는 반드시 접근 수준을 명시해야 합니다.
- open(String, int, int)
어떤 모드로 open하느냐에 따라 열 수 있는 stream의 갯수가 제한되어 있습니다.
- Read Only모드로 open할 경우 input stream을 하나만 열 수 있고 output stream은 열 수 없습니다.
- Write Only모드로 open할 경우 output stream은 하나만 열 수 있고, input stream은 열 수 없습니다.
- Read/Write모드로 open할 경우 output stream은 모두 하나씩 열 수 있습니다.
File 메소드 중에서는 low level로 보다 빠른 접근을 가능하게 하는 API가 있습니다.
- ``read(byte[])``
- ``read(byte[], int, int)``
- ``write(byte[])``
- ``write(byte[], int, int)``
- ``write(int)``
- ``seek(int)``
- ``sizeOf()``
등이 바로 그런 API입니다.
`openInputStream()`,
`openOutputStream()`,
`openDataInputStream()`,
`openDataOutputStream()`
을 이용해서 파일에서 읽고 파일에 쓰는 것 보다 빠르게 접근할 수 있습니다.
## 필드 요약
- `protected int maxInputStream` — 열 수 있는 최대 InputStream 갯수
- `protected int maxOutputStream` — 열 수 있는 최대 OutputStream 갯수
- `static int READ_ONLY` — 읽기만 할 때 쓰는 옵션
- `static int READ_WRITE` — 읽기와 쓰기를 동시에 하기 위한 옵션
- `static int WRITE` — 기존의 파일이 있으면 파일의 제일 끝부터 쓰기 시작하기 위한 옵션
- `static int WRITE_TRUNC` — 기존의 파일이 있으면 크기를 0으로 만들고 열기위한 옵션
## 생성자 요약
- File ( String filename,
int mode) 응용프로그램 자신만의 디렉토리에 지정된 파일을 생성합니다.
- File ( String filename,
int mode,
int flag) 파일을 생성합니다.
## 메서드 요약
- `void close ()` — 파일을 닫습니다.
- `DataInputStream openDataInputStream ()` — DataInputStream 을 가져옵니다.
- `DataOutputStream openDataOutputStream ()` — DataOutputStream 을 가져옵니다.
- `InputStream openInputStream ()` — InputStream 을 가져옵니다.
- `OutputStream openOutputStream ()` — OutputStream 을 가져옵니다.
- `int read (byte[] buf)` — input stream으로 부터 데이타를 읽어 들입니다.
- `int read (byte[] buf, int off, int len)` — input stream으로 부터 데이타를 len 바이트수만큼 읽어 들입니다.
- `void seek (int pos)` — 파일 포인터를 특정 위치로 옮깁니다.
- `int sizeOf ()` — 파일의 크기를 알려줍니다.
- `int write (byte[] buf)` — 파일에 buf 에 들어 있는 데이타를 buf 의 길이만큼 씁니다.
- `int write (byte[] buf, int off, int len)` — 파일에 buf 에 들어 있는 데이타를 off 부터 시작해서 len 만큼 씁니다.
- `int write (int b)` — 파일에 한 바이트만 쓸 때 사용합니다.
## 필드 상세
### maxInputStream
```java
protected int maxInputStream
```
- 열 수 있는 최대 InputStream 갯수
### maxOutputStream
```java
protected int maxOutputStream
```
- 열 수 있는 최대 OutputStream 갯수
### READ_ONLY
```java
public static final int READ_ONLY
```
- 읽기만 할 때 쓰는 옵션
### WRITE
```java
public static final int WRITE
```
- 기존의 파일이 있으면 파일의 제일 끝부터 쓰기 시작하기 위한 옵션
### WRITE_TRUNC
```java
public static final int WRITE_TRUNC
```
- 기존의 파일이 있으면 크기를 0으로 만들고 열기위한 옵션
### READ_WRITE
```java
public static final int READ_WRITE
```
- 읽기와 쓰기를 동시에 하기 위한 옵션
### File
```java
public File(String filename,
int mode)
throws IOException
```
**Parameters:**
- `mode` - `READ_ONLY`, `WRITE`,`WRITE_TRUNC`, `READ_WRITE`중 하나
**Throws:**
- `IOException` - 파일을 열 수 없을 경우
**See Also:**
- ``FileSystem``
### File
```java
public File(String filename,
int mode,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - ``FileSystem.PRIVATE_ACCESS``, ``FileSystem.SHARED_ACCESS``, ``FileSystem.SYSTEM_ACCESS``중 하나
**Throws:**
- `SecurityException` - 접근할 수 없는 디렉토리를 접근할려고 할려고할 경우
**See Also:**
- ``FileSystem``
### openInputStream
```java
public InputStream openInputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `InputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `InputStream`이 열려 있을 경우
**See Also:**
- ``InputStream``
### openDataInputStream
```java
public DataInputStream openDataInputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `DataInputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `InputStream`이 열려 있을 경우
**See Also:**
- ``DataInputStream``
### openOutputStream
```java
public OutputStream openOutputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `OutputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `OutputStream`이 열려 있을 경우
**See Also:**
- ``OutputStream``
### openDataOutputStream
```java
public DataOutputStream openDataOutputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `DataOutputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `OutputStream`이 열려 있을 경우
**See Also:**
- ``DataOutputStream``
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - 파일을 제대로 닫을 수 없을 경우
### write
```java
public int write(int b)
throws IOException
```
**Parameters:**
- `b` - 쓸 한 바이트
**Throws:**
- `IOException` - `close`함수로 닫혀진 `File`에서 write하는 경우이거나, 제대로 쓸 수 없을 경우
### write
```java
public int write(byte[] buf)
throws IOException,
NullPointerException
```
**Parameters:**
- `buf` - 실제 데이타가 들어있는 byte array
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### write
```java
public int write(byte[] buf,
int off,
int len)
throws IOException,
NullPointerException
```
**Parameters:**
- `len` - 실제로 쓸 데이타 크기
**Throws:**
- `IOException` - `buf`가 `null`인 경우
### read
```java
public int read(byte[] buf)
throws IOException,
NullPointerException
```
**Parameters:**
- `buf` - 읽은 데이타를 담을 바이트 배열
**Returns:**
- 읽은 바이트수 또는 한 바이트도 읽기전에 EOF를 만나면 -1
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### read
```java
public int read(byte[] buf,
int off,
int len)
throws IOException,
NullPointerException
```
**Parameters:**
- `len` - 얼마만큼 읽을 것인가를 나타냅니다.
**Returns:**
- 읽은 바이트수 또는 한 바이트도 읽기전에 EOF를 만나면 -1
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### seek
```java
public void seek(int pos)
throws IOException
```
**Parameters:**
- `pos` - 옮길 파일 포인터 위치, 반드시 파일의 처음부터의 절대 값이여야합니다.
**Throws:**
- `IOException` - 파일 handle이 제대로 세팅되지 않았거나 파일 포인터를 옮기는 도중 에러가 발생했을 경우
### sizeOf
```java
public int sizeOf()
throws IOException
```
**Returns:**
- 파일의 크기
**Throws:**
- `IOException` - 파일 handle이 제대로 세팅되지 않았거나 크기를 읽어 오는도중 에러가 발생했을 경우
## 생성자 상세
### File
```java
public File(String filename,
int mode)
throws IOException
```
**Parameters:**
- `mode` - `READ_ONLY`, `WRITE`,`WRITE_TRUNC`, `READ_WRITE`중 하나
**Throws:**
- `IOException` - 파일을 열 수 없을 경우
**See Also:**
- ``FileSystem``
### File
```java
public File(String filename,
int mode,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - ``FileSystem.PRIVATE_ACCESS``, ``FileSystem.SHARED_ACCESS``, ``FileSystem.SYSTEM_ACCESS``중 하나
**Throws:**
- `SecurityException` - 접근할 수 없는 디렉토리를 접근할려고 할려고할 경우
**See Also:**
- ``FileSystem``
### openInputStream
```java
public InputStream openInputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `InputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `InputStream`이 열려 있을 경우
**See Also:**
- ``InputStream``
### openDataInputStream
```java
public DataInputStream openDataInputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `DataInputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `InputStream`이 열려 있을 경우
**See Also:**
- ``DataInputStream``
### openOutputStream
```java
public OutputStream openOutputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `OutputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `OutputStream`이 열려 있을 경우
**See Also:**
- ``OutputStream``
### openDataOutputStream
```java
public DataOutputStream openDataOutputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `DataOutputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `OutputStream`이 열려 있을 경우
**See Also:**
- ``DataOutputStream``
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - 파일을 제대로 닫을 수 없을 경우
### write
```java
public int write(int b)
throws IOException
```
**Parameters:**
- `b` - 쓸 한 바이트
**Throws:**
- `IOException` - `close`함수로 닫혀진 `File`에서 write하는 경우이거나, 제대로 쓸 수 없을 경우
### write
```java
public int write(byte[] buf)
throws IOException,
NullPointerException
```
**Parameters:**
- `buf` - 실제 데이타가 들어있는 byte array
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### write
```java
public int write(byte[] buf,
int off,
int len)
throws IOException,
NullPointerException
```
**Parameters:**
- `len` - 실제로 쓸 데이타 크기
**Throws:**
- `IOException` - `buf`가 `null`인 경우
### read
```java
public int read(byte[] buf)
throws IOException,
NullPointerException
```
**Parameters:**
- `buf` - 읽은 데이타를 담을 바이트 배열
**Returns:**
- 읽은 바이트수 또는 한 바이트도 읽기전에 EOF를 만나면 -1
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### read
```java
public int read(byte[] buf,
int off,
int len)
throws IOException,
NullPointerException
```
**Parameters:**
- `len` - 얼마만큼 읽을 것인가를 나타냅니다.
**Returns:**
- 읽은 바이트수 또는 한 바이트도 읽기전에 EOF를 만나면 -1
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### seek
```java
public void seek(int pos)
throws IOException
```
**Parameters:**
- `pos` - 옮길 파일 포인터 위치, 반드시 파일의 처음부터의 절대 값이여야합니다.
**Throws:**
- `IOException` - 파일 handle이 제대로 세팅되지 않았거나 파일 포인터를 옮기는 도중 에러가 발생했을 경우
### sizeOf
```java
public int sizeOf()
throws IOException
```
**Returns:**
- 파일의 크기
**Throws:**
- `IOException` - 파일 handle이 제대로 세팅되지 않았거나 크기를 읽어 오는도중 에러가 발생했을 경우
## 메서드 상세
### openInputStream
```java
public InputStream openInputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `InputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `InputStream`이 열려 있을 경우
**See Also:**
- ``InputStream``
### openDataInputStream
```java
public DataInputStream openDataInputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `DataInputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `InputStream`이 열려 있을 경우
**See Also:**
- ``DataInputStream``
### openOutputStream
```java
public OutputStream openOutputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `OutputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `OutputStream`이 열려 있을 경우
**See Also:**
- ``OutputStream``
### openDataOutputStream
```java
public DataOutputStream openDataOutputStream()
throws IOException
```
**Returns:**
- 파일에 대한 `DataOutputStream`
**Throws:**
- `IOException` - 파일이 아직 열리지 않았거나 이미 `OutputStream`이 열려 있을 경우
**See Also:**
- ``DataOutputStream``
### close
```java
public void close()
throws IOException
```
**Throws:**
- `IOException` - 파일을 제대로 닫을 수 없을 경우
### write
```java
public int write(int b)
throws IOException
```
**Parameters:**
- `b` - 쓸 한 바이트
**Throws:**
- `IOException` - `close`함수로 닫혀진 `File`에서 write하는 경우이거나, 제대로 쓸 수 없을 경우
### write
```java
public int write(byte[] buf)
throws IOException,
NullPointerException
```
**Parameters:**
- `buf` - 실제 데이타가 들어있는 byte array
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### write
```java
public int write(byte[] buf,
int off,
int len)
throws IOException,
NullPointerException
```
**Parameters:**
- `len` - 실제로 쓸 데이타 크기
**Throws:**
- `IOException` - `buf`가 `null`인 경우
### read
```java
public int read(byte[] buf)
throws IOException,
NullPointerException
```
**Parameters:**
- `buf` - 읽은 데이타를 담을 바이트 배열
**Returns:**
- 읽은 바이트수 또는 한 바이트도 읽기전에 EOF를 만나면 -1
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### read
```java
public int read(byte[] buf,
int off,
int len)
throws IOException,
NullPointerException
```
**Parameters:**
- `len` - 얼마만큼 읽을 것인가를 나타냅니다.
**Returns:**
- 읽은 바이트수 또는 한 바이트도 읽기전에 EOF를 만나면 -1
**Throws:**
- `NullPointerException` - `buf`가 `null`인 경우
### seek
```java
public void seek(int pos)
throws IOException
```
**Parameters:**
- `pos` - 옮길 파일 포인터 위치, 반드시 파일의 처음부터의 절대 값이여야합니다.
**Throws:**
- `IOException` - 파일 handle이 제대로 세팅되지 않았거나 파일 포인터를 옮기는 도중 에러가 발생했을 경우
### sizeOf
```java
public int sizeOf()
throws IOException
```
**Returns:**
- 파일의 크기
**Throws:**
- `IOException` - 파일 handle이 제대로 세팅되지 않았거나 크기를 읽어 오는도중 에러가 발생했을 경우
---
title: "Class FileSystem"
---
`package org.kwis.msp.io`
```text
java.lang.Object
|
+--org.kwis.msp.io.FileSystem
```
## 설명
**extends Object:**
FileSystem 클래스는 파일에 관련된 생성/삭제/이름 바꾸기와 같은 일반적인 기능을 정의하고 있습니다.
모든 파일 또는 디렉토리 경로는 모두 절대적인 경로입니다.
그렇다고 해서 사용자가 임의로 절대경로를 지정할 수는 없습니다.
아래에 설명하는 3가지 접근 방식으로만 지정할 수 있고, 그에 따라 시스템에서
절대경로를 지정해 줍니다.
파일에 접근하는 방식은 모두 3가지가 있습니다.
- 응용프로그램 자신만이 쓰는 디렉토리로의 접근은 ``PRIVATE_ACCESS`` 플래그를 사용하고,
- 다른 프로그램과 공유할 디렉토리로 접근 하고자 할 때는 ``SHARED_ACCESS``를 사용합니다.
- 그리고 마지막으로 시스템 디렉토리로 접근하고자 할 때는 ``SYSTEM_ACCESS`` 방식으로 접근하면 됩니다.
경로를 지정하는 모든 메소드는 접근방식을 지정해야만 합니다. 아래는 접근 방식을 지정하는 메소드들입니다.
- `exists(java.lang.String, int)`
- `isDirectory(java.lang.String, int)`
- `isFile(java.lang.String, int)`
- `list(java.lang.String, int)`
- `mkdir(java.lang.String, int)`
- `rmdir(java.lang.String, int)`
- `remove(java.lang.String, int)`
- `rename(java.lang.String, int)`
만약 응용프로그램 자신만의 디렉토리에 있는 `test`라는 파일이 존재하는 지 여부를 알고 싶다면 다음과 같이 할 수 있습니다.
또는 아래와 같이 지정하지 않을 경우는 기본값으로 자신만의 디렉토리에서
찾게 됩니다.
위의 예에서 보듯이 test라는 파일의 존재유무를 확인하고자 할 때 test라는 파일
이름은 시스템이 만들어주는 절대경로에서 찾게 됩니다.
## 필드 요약
- `static int MAX_FILENAME_LENGTH` — filename길이에 제한이 있습니다.
- `static int PRIVATE_ACCESS` — 응용프로그램 자신만이 접근할 수 있는 디렉토리를 접근하고자 할 때 쓰는 플래그. 1로 정의되어 있습니다.
- `static int SHARED_ACCESS` — 공유할 수 있는 디렉토리를 접근하고자 할 때 쓰는 플래그.
- `static int SYSTEM_ACCESS` — 시스템 응용프로그램이 사용하는 디렉토리를 접근하고자 할 때 쓰는 플래그.
## 생성자 요약
- FileSystem ()
## 메서드 요약
- `static int available ()` — 응용 프로그램이 사용할 수 있는 공간이 얼마나 남았는지 알려줍니다.
- `static boolean exists ( String name)` — 응용프로그램 자신만의 디렉토리의 파일이나 디렉토리가 존재하는지를 확인합니다.
- `static boolean exists ( String name, int flag)` — 지정된 디렉토리아래 파일이나 디렉토리가 존재하는 지를 확인합니다.
- `static int getCreationTime ( String name)` — 응용프로그램 자신만의 디렉토리에 있는 파일의 생성시간을 알아옵니다.
- `static int getCreationTime ( String name, int flag)` — 파일의 생성시간을 알아옵니다.
- `static int getMaxFilenameLength ()` — 사용할 수 있는 파일이름의 최대길이를 확인합니다.
- `static boolean isDirectory ( String name)` — 응용프로그램 자신만의 디렉토리에 있는 디렉토리인지를 확인합니다.
- `static boolean isDirectory ( String name, int flag)` — 디렉토리인지를 확인합니다.
- `static boolean isFile ( String name)` — 응용프로그램 자신만의 디렉토리에 지정된 이름의 파일이 존재하는지 확인한다.
- `static boolean isFile ( String name, int flag)` — 지정된 이름의 파일이 존재하는지 확인한다.
- `static Vector list ( String dirname)` — 응용프로그램 자신만의 디렉토리안에 있는 파일과 디렉토리를 모두 보여줍니다.
- `static Vector list ( String dirname, int flag)` — 지정된 디렉토리안에 있는 파일과 디렉토리를 모두 보여줍니다.
- `static void mkdir ( String dirname)` — 응용프로그램 자신만의 디렉토리에 디렉토리를 만듭니다.
- `static void mkdir ( String dirname, int flag)` — 디렉토리를 만듭니다.
- `static void remove ( String filename)` — 응용프로그램 자신만의 디렉토리의 파일을 지웁니다.
- `static void remove ( String filename, int flag)` — 파일을 지웁니다.
- `static void rename ( String oldName, String newName)` — 응용프로그램 자신만의 디렉토리내에 있는 파일의 이름을 바꿉니다.
- `static void rename ( String oldName, String newName, int flag)` — 파일 이름을 바꿉니다.
- `static void rmdir ( String dirname)` — 응용프로그램 자신만의 디렉토리에 있는 디렉토리를 지웁니다.
- `static void rmdir ( String dirname, int flag)` — 디렉토리를 지웁니다.
- `static byte[] toCString ( String jStr)` — Java String을 C String으로 바꾸어 줍니다.
- `static int totalSpace ()`
## 필드 상세
### PRIVATE_ACCESS
```java
public static final int PRIVATE_ACCESS
```
- 응용프로그램 자신만이 접근할 수 있는 디렉토리를 접근하고자 할 때 쓰는
플래그.
1로 정의되어 있습니다.
### SHARED_ACCESS
```java
public static final int SHARED_ACCESS
```
- 공유할 수 있는 디렉토리를 접근하고자 할 때 쓰는 플래그.
공유하고자 하는 디렉토리는 이미 프로그램이 설치될 때
ADF 파일에 명시된데로 지정되며,
사용자가 임의로 공유 디렉토리를 변경할 수는 없습니다.
2로 정의되어 있습니다.
### SYSTEM_ACCESS
```java
public static final int SYSTEM_ACCESS
```
- 시스템 응용프로그램이 사용하는 디렉토리를 접근하고자 할 때 쓰는 플래그.
공유하고자 하는 디렉토리는 이미 프로그램이 설치될 때
ADF파일에 명시된데로 지정되며
사용자가 임의로 공유 디렉토리를 변경할 수는 없습니다.
3으로 정의되어 있습니다.
### MAX_FILENAME_LENGTH
```java
public static int MAX_FILENAME_LENGTH
```
- filename길이에 제한이 있습니다.
모든 파일 이름이 들어가는 API는 파일 이름이 MAX_FILENAME_LENGTH보다 길면 IOException을 발생시킨다.
### FileSystem
```java
public FileSystem()
```
### getMaxFilenameLength
```java
public static int getMaxFilenameLength()
```
**Returns:**
- 파일이름 최대 길이
### list
```java
public static Vector list(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Returns:**
- `dirname`아래에 있는 모든 파일이름과 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리가 존재하지 않을 경우
### list
```java
public static Vector list(String dirname,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Returns:**
- `dirname`아래에 있는 모든 파일 이름과 디렉토리 이름
**Throws:**
- `IOException` - `dirname`이 존재하지 않을 경우
### exists
```java
public static boolean exists(String name)
throws IOException
```
**Parameters:**
- `name` - 파일이나 디렉토리 이름
**Returns:**
- 존재하면 true, 존재하지 않으면 false
### exists
```java
public static boolean exists(String name,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Returns:**
- 존재하면 true, 존재하지 않으면 false
**Throws:**
- `SecurityException` - 접근할 수 없는 디렉토리를 접근하려고 할 경우
### remove
```java
public static void remove(String filename)
throws IOException
```
**Parameters:**
- `filename` - 파일 이름
**Throws:**
- `IOException` - 파일을 지울 때 제대로 지우지 못할 경우, 파일이 존재하지 않을 경우
### remove
```java
public static void remove(String filename,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Throws:**
- `IOException` - 파일을 지울 때 제대로 지우지 못할 경우, 파일이 존재하지 않을 경우
### mkdir
```java
public static void mkdir(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리를 만들 수 없을 경우나 디렉토리가 이미 존재할 경우, 또는 파일 이름 길이가 최대값을 넘어 갈 경우
### mkdir
```java
public static void mkdir(String dirname,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Throws:**
- `IOException` - 디렉토리를 만들 수 없을 경우나 디렉토리가 이미 존재할 경우, 또는 파일 이름 길이가 최대값을 넘어 갈 경우
### rmdir
```java
public static void rmdir(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리가 비어있지 않거나 디렉토리를 지울 수 없을 경우, 또는 디렉토리가 존재하지 않을 경우
### rmdir
```java
public static void rmdir(String dirname,
ang/String.html">String dirname,
int flag)
throws IOException,
SecurityException
```
## 생성자 상세
### FileSystem
```java
public FileSystem()
```
### getMaxFilenameLength
```java
public static int getMaxFilenameLength()
```
**Returns:**
- 파일이름 최대 길이
### list
```java
public static Vector list(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Returns:**
- `dirname`아래에 있는 모든 파일이름과 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리가 존재하지 않을 경우
### list
```java
public static Vector list(String dirname,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Returns:**
- `dirname`아래에 있는 모든 파일 이름과 디렉토리 이름
**Throws:**
- `IOException` - `dirname`이 존재하지 않을 경우
### exists
```java
public static boolean exists(String name)
throws IOException
```
**Parameters:**
- `name` - 파일이나 디렉토리 이름
**Returns:**
- 존재하면 true, 존재하지 않으면 false
### exists
```java
public static boolean exists(String name,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Returns:**
- 존재하면 true, 존재하지 않으면 false
**Throws:**
- `SecurityException` - 접근할 수 없는 디렉토리를 접근하려고 할 경우
### remove
```java
public static void remove(String filename)
throws IOException
```
**Parameters:**
- `filename` - 파일 이름
**Throws:**
- `IOException` - 파일을 지울 때 제대로 지우지 못할 경우, 파일이 존재하지 않을 경우
### remove
```java
public static void remove(String filename,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Throws:**
- `IOException` - 파일을 지울 때 제대로 지우지 못할 경우, 파일이 존재하지 않을 경우
### mkdir
```java
public static void mkdir(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리를 만들 수 없을 경우나 디렉토리가 이미 존재할 경우, 또는 파일 이름 길이가 최대값을 넘어 갈 경우
### mkdir
```java
public static void mkdir(String dirname,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Throws:**
- `IOException` - 디렉토리를 만들 수 없을 경우나 디렉토리가 이미 존재할 경우, 또는 파일 이름 길이가 최대값을 넘어 갈 경우
### rmdir
```java
public static void rmdir(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리가 비어있지 않거나 디렉토리를 지울 수 없을 경우, 또는 디렉토리가 존재하지 않을 경우
### rmdir
```java
public static void rmdir(String dirname,
ang/String.html">String dirname,
int flag)
throws IOException,
SecurityException
```
## 메서드 상세
### getMaxFilenameLength
```java
public static int getMaxFilenameLength()
```
**Returns:**
- 파일이름 최대 길이
### list
```java
public static Vector list(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Returns:**
- `dirname`아래에 있는 모든 파일이름과 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리가 존재하지 않을 경우
### list
```java
public static Vector list(String dirname,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Returns:**
- `dirname`아래에 있는 모든 파일 이름과 디렉토리 이름
**Throws:**
- `IOException` - `dirname`이 존재하지 않을 경우
### exists
```java
public static boolean exists(String name)
throws IOException
```
**Parameters:**
- `name` - 파일이나 디렉토리 이름
**Returns:**
- 존재하면 true, 존재하지 않으면 false
### exists
```java
public static boolean exists(String name,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Returns:**
- 존재하면 true, 존재하지 않으면 false
**Throws:**
- `SecurityException` - 접근할 수 없는 디렉토리를 접근하려고 할 경우
### remove
```java
public static void remove(String filename)
throws IOException
```
**Parameters:**
- `filename` - 파일 이름
**Throws:**
- `IOException` - 파일을 지울 때 제대로 지우지 못할 경우, 파일이 존재하지 않을 경우
### remove
```java
public static void remove(String filename,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Throws:**
- `IOException` - 파일을 지울 때 제대로 지우지 못할 경우, 파일이 존재하지 않을 경우
### mkdir
```java
public static void mkdir(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리를 만들 수 없을 경우나 디렉토리가 이미 존재할 경우, 또는 파일 이름 길이가 최대값을 넘어 갈 경우
### mkdir
```java
public static void mkdir(String dirname,
int flag)
throws IOException,
SecurityException
```
**Parameters:**
- `flag` - 접근하고자 하는 디렉토리
**Throws:**
- `IOException` - 디렉토리를 만들 수 없을 경우나 디렉토리가 이미 존재할 경우, 또는 파일 이름 길이가 최대값을 넘어 갈 경우
### rmdir
```java
public static void rmdir(String dirname)
throws IOException
```
**Parameters:**
- `dirname` - 디렉토리 이름
**Throws:**
- `IOException` - 디렉토리가 비어있지 않거나 디렉토리를 지울 수 없을 경우, 또는 디렉토리가 존재하지 않을 경우
### rmdir
```java
public static void rmdir(String dirname,
ang/String.html">String dirname,
int flag)
throws IOException,
SecurityException
```
---
title: "package org.kwis.msp.io"
---
## Class Summary
- [File](File.md) — 파일에 대한 읽기/쓰기와 같은 기본적인 기능과 Stream 기능 지원을 위한 클래스입니다.
- [FileSystem](FileSystem.md) — FileSystem 클래스는 파일에 관련된 생성/삭제/이름 바꾸기와 같은 일반적인 기능을 정의하고 있습니다.
---
title: "Class Card"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Card
```
## 설명
**Direct Known Subclasses:**
- `ProxyCard`, `TextComponent.ModeViewer`
**extends Object:**
화면에 출력될 수 있는 하나의 단위 클래스입니다.
이 클래스는 화면에 출력할 수 있는 단위가 되며 한 화면은 여러 카드가
쌓인 스택으로 구성됩니다.
스택에 싸인 여러 카드는 한 화면(``Display``)에 보여집니다.
한 카드는 여러 화면에 넣을 수는 없습니다.
카드는 화면상에서의 위치와 크기를 가지고 있습니다.
`move`나 `resize`함수를 이용하여
그 위치나 크기를 변경할 수 있습니다.
`repaint`라는 함수를 사용하게 되면, 카드의 일부분에
대해서 다시 이벤트
처리 쓰레드에 의해서 `paint` 함수가 불려서 화면에 내용이
나타나도록 되어 있습니다.
카드는 사용자 입력을 받을 수 있습니다.
`keyNotify`, `pointerNotify`,
등의 사용자에 의해서 불려지는 함수가 있으며,
모든 이벤트는 일단 스택 상위의 `Card`로 전달됩니다.
전달된 이벤트가
그 카드에서 처리를 한다면 위의 불려지는 함수는 `true`를 돌려주며,
그러면, 하위 `Card`는 이벤트를 받지 못합니다. 그러나 반대로
`false`
를 돌려주면, 하위 카드에게 이벤트를 전달하며, 같은 식으로 이벤트를
받은 하위 카드는 `true`, `false`를 돌려줍니다.
이 과정은 맨 하위
`Card`까지 반복이 됩니다.
카드가 입력받은 키는 기본적으로 ITU-Key '0'부터 '9' 그리고 '#', '*'
이 가능합니다. 이 키들은 휴대폰에 꼭 존재하는 키입니다. 그외의 키들은
게임키로 판별이 가능합니다. 지원되는 키들은 `EventQueue.UP`,
`EventQueue.DOWN`, `EventQueue.LEFT`,
`EventQueue.RIGHT`,
`EventQueue.FIRE`등이며, `EventQueue.SOFT1`,
`EventQueue.SOFT2`도 있지만,
이 경우에는 폰에서 지원하지 않는
경우가 있으므로 유의해서 사용하십시오.
게임 키로 판별할 경우에는 ``Display.getGameAction(int)``와
``Display.getKeyCode(int)``라는 함수로
키 코드와 게임 키로의 서로의 변환이 가능합니다.
카드가 `pushCard`, `popCard`에 의해서 보여지거나,
보이지 않게되는 경우에 `showNotify`라는
함수가 불립니다.
좌표체계는 화면 좌측 상단이 원점이 되고, 밑으로 가면 y축의 값이 증가하고,
오른쪽으로 가면 x축의 값이 증가하도록 되어 있습니다.
## 필드 요약
- `protected boolean bTrans` — Card가 투명한지 아닌지 여부.
- `protected int h` — Card의 화면상의 높이.
- `protected int w` — Card의 화면상의 폭.
- `protected int x` — card의 화면상의 x축 좌표.
- `protected int y` — Card의 화면상의 y축 좌표.
## 생성자 요약
- Card () 화면 크기 만큼의 카드를 생성합니다.
- Card (boolean bTrans)
- Card ( Display d) 화면 크기의 카드를 생성합니다.
- Card ( Display d,
int x,
int y,
int w,
int h) 지정한 display를 위해서 지정한 크기와 위치로 카드를 생성합니다.
- Card ( Display d,
int x,
int y,
int w,
int h,
boolean bTrans)
- Card (int x,
int y,
int w,
int h) 지정한 크기와 위치로 카드를 생성합니다.
## 메서드 요약
- `Display getDisplay ()` — 카드의 display를 돌려줍니다.
- `int getHeight ()` — 카드의 높이를 얻어 옵니다.
- `int getWidth ()` — 카드의 폭을 얻어 옵니다.
- `int getX ()` — 카드의 x축 위치를 얻어 옵니다.
- `int getY ()` — 카드의 y축 위치를 얻어 옵니다.
- `boolean isShown ()` — Card가 화면에 보이는지 안 보이는지 여부를 돌려줍니다.
- `protected boolean keyNotify (int type, int key)` — 사용자 키 입력이 생성되면 불립니다.
- `void move (int x, int y)` — 카드의 화면상의 위치를 변경합니다.
- `protected abstract void paint ( Graphics g)` — Card의 내용을 그려줍니다.
- `protected boolean pointerNotify (int type, int x, int y)` — 사용자 포인팅 디바이스의 입력이 생성되면 불립니다.
- `void repaint ()` — Card전체 영역을 다시 그려줍니다.
- `void repaint (int x, int y, int w, int h)` — 지정된 영역을 다시 그려줍니다.
- `void resize (int w, int h)` — 카드의 크기를 변경합니다. w, h 둘중 하나가 0보다 작거나 같은 경우에는 IllegalArgumentException 오류를 발생 시킵니다.
- `void serviceRepaints ()` — repaint영역을 다시 그리고, 화면에 출력합니다. repaint할 영역을 강제적으로 그립니다.
- `protected void showNotify (boolean bShow)` — 이 카드가 보이기 바로 직전이나, 카드가 화면에서 삭제되는 경우에 불립니다.
## 필드 상세
### x
```java
protected int x
```
- card의 화면상의 x축 좌표.
### y
```java
protected int y
```
- Card의 화면상의 y축 좌표.
### w
```java
protected int w
```
- Card의 화면상의 폭.
### h
```java
protected int h
```
- Card의 화면상의 높이.
### bTrans
```java
protected boolean bTrans
```
- Card가 투명한지 아닌지 여부.
이 옵션을 사용하면, 현재 카드 바로 하위 컴포넌트가 그린후에
카드가 그려지므로, 알파 블랜딩이나 다양한 형태의
카드를 그릴 수 있습니다.
### Card
```java
public Card()
```
- 화면 크기 만큼의 카드를 생성합니다.
기본적으로 화면의 크기 만큼의 카드를 생성합니다.
이때 `Display.getDefaultDisplay`함수가
돌려주는 `Display`의 크기로 잡힙니다.
### Card
```java
public Card(boolean bTrans)
```
### Card
```java
public Card(Display d)
```
**Parameters:**
- `d` - 카드를 생성할 display
### Card
```java
public Card(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - Card의 높이
**Throws:**
- `IllegalArgumentException` - w나 h가 0 이하인 경우
### Card
```java
public Card(Display d,
int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - Card의 높이
**Throws:**
- `IllegalArgumentException` - w나 h가 0 이하인 경우
### Card
```java
public Card(Display d,
int x,
int y,
int w,
int h,
boolean bTrans)
```
### move
```java
public void move(int x,
int y)
```
**Parameters:**
- `y` - Card의 display상에서의 y축 좌표
### resize
```java
public void resize(int w,
int h)
```
**Parameters:**
- `h` - 카드의 높이
**Throws:**
- `IllegalArgumentException` - w나 h가 0 이하인 경우
### getWidth
```java
public int getWidth()
```
**Returns:**
- 카드의 폭
### getHeight
```java
public int getHeight()
```
**Returns:**
- 카드의 높이
### getX
```java
public int getX()
```
**Returns:**
- 카드의 x축 상의 좌표
### getY
```java
public int getY()
```
**Returns:**
- 카드의 y축 상의 좌표
### showNotify
```java
protected void showNotify(boolean bShow)
```
**Parameters:**
- `bShow` - 보이는지 안보이는지 여부
### keyNotify
```java
protected boolean keyNotify(int type,
int key)
```
**Parameters:**
- `key` - keyCode값; 자세한 키코드는 ``EventQueue``를 참조
**Returns:**
- 하위 카드에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### pointerNotify
```java
protected boolean pointerNotify(int type,
int x,
int y)
```
**Parameters:**
- `key` - 키 코드 값
**Returns:**
- 하위 `Card`에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### paint
```java
protected abstract void paint(Graphics g)
```
**Parameters:**
- `g` - 칠해질 graphics
### repaint
```java
public void repaint(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - 특정영역을 폭
### repaint
```java
public void repaint()
```
- Card전체 영역을 다시 그려줍니다.
`repaint(0, 0, getWidth(), getHeight())`을
부르는것과 마찬가지 효과입니다.
### serviceRepaints
```java
public void serviceRepaints()
```
- repaint영역을 다시 그리고, 화면에 출력합니다.
repaint할 영역을 강제적으로 그립니다. 이 함수 내에서 직접 paint
함수를 부릅니다.
### isShown
```java
public boolean isShown()
```
**Returns:**
- 보이는지 안 보이는 지 여부
### getDisplay
```java
public Display getDisplay()
```
**Returns:**
- 吏
## 생성자 상세
### Card
```java
public Card()
```
- 화면 크기 만큼의 카드를 생성합니다.
기본적으로 화면의 크기 만큼의 카드를 생성합니다.
이때 `Display.getDefaultDisplay`함수가
돌려주는 `Display`의 크기로 잡힙니다.
### Card
```java
public Card(boolean bTrans)
```
### Card
```java
public Card(Display d)
```
**Parameters:**
- `d` - 카드를 생성할 display
### Card
```java
public Card(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - Card의 높이
**Throws:**
- `IllegalArgumentException` - w나 h가 0 이하인 경우
### Card
```java
public Card(Display d,
int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - Card의 높이
**Throws:**
- `IllegalArgumentException` - w나 h가 0 이하인 경우
### Card
```java
public Card(Display d,
int x,
int y,
int w,
int h,
boolean bTrans)
```
### move
```java
public void move(int x,
int y)
```
**Parameters:**
- `y` - Card의 display상에서의 y축 좌표
### resize
```java
public void resize(int w,
int h)
```
**Parameters:**
- `h` - 카드의 높이
**Throws:**
- `IllegalArgumentException` - w나 h가 0 이하인 경우
### getWidth
```java
public int getWidth()
```
**Returns:**
- 카드의 폭
### getHeight
```java
public int getHeight()
```
**Returns:**
- 카드의 높이
### getX
```java
public int getX()
```
**Returns:**
- 카드의 x축 상의 좌표
### getY
```java
public int getY()
```
**Returns:**
- 카드의 y축 상의 좌표
### showNotify
```java
protected void showNotify(boolean bShow)
```
**Parameters:**
- `bShow` - 보이는지 안보이는지 여부
### keyNotify
```java
protected boolean keyNotify(int type,
int key)
```
**Parameters:**
- `key` - keyCode값; 자세한 키코드는 ``EventQueue``를 참조
**Returns:**
- 하위 카드에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### pointerNotify
```java
protected boolean pointerNotify(int type,
int x,
int y)
```
**Parameters:**
- `key` - 키 코드 값
**Returns:**
- 하위 `Card`에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### paint
```java
protected abstract void paint(Graphics g)
```
**Parameters:**
- `g` - 칠해질 graphics
### repaint
```java
public void repaint(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - 특정영역을 폭
### repaint
```java
public void repaint()
```
- Card전체 영역을 다시 그려줍니다.
`repaint(0, 0, getWidth(), getHeight())`을
부르는것과 마찬가지 효과입니다.
### serviceRepaints
```java
public void serviceRepaints()
```
- repaint영역을 다시 그리고, 화면에 출력합니다.
repaint할 영역을 강제적으로 그립니다. 이 함수 내에서 직접 paint
함수를 부릅니다.
### isShown
```java
public boolean isShown()
```
**Returns:**
- 보이는지 안 보이는 지 여부
### getDisplay
```java
public Display getDisplay()
```
**Returns:**
- 吏
## 메서드 상세
### move
```java
public void move(int x,
int y)
```
**Parameters:**
- `y` - Card의 display상에서의 y축 좌표
### resize
```java
public void resize(int w,
int h)
```
**Parameters:**
- `h` - 카드의 높이
**Throws:**
- `IllegalArgumentException` - w나 h가 0 이하인 경우
### getWidth
```java
public int getWidth()
```
**Returns:**
- 카드의 폭
### getHeight
```java
public int getHeight()
```
**Returns:**
- 카드의 높이
### getX
```java
public int getX()
```
**Returns:**
- 카드의 x축 상의 좌표
### getY
```java
public int getY()
```
**Returns:**
- 카드의 y축 상의 좌표
### showNotify
```java
protected void showNotify(boolean bShow)
```
**Parameters:**
- `bShow` - 보이는지 안보이는지 여부
### keyNotify
```java
protected boolean keyNotify(int type,
int key)
```
**Parameters:**
- `key` - keyCode값; 자세한 키코드는 ``EventQueue``를 참조
**Returns:**
- 하위 카드에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### pointerNotify
```java
protected boolean pointerNotify(int type,
int x,
int y)
```
**Parameters:**
- `key` - 키 코드 값
**Returns:**
- 하위 `Card`에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### paint
```java
protected abstract void paint(Graphics g)
```
**Parameters:**
- `g` - 칠해질 graphics
### repaint
```java
public void repaint(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - 특정영역을 폭
### repaint
```java
public void repaint()
```
- Card전체 영역을 다시 그려줍니다.
`repaint(0, 0, getWidth(), getHeight())`을
부르는것과 마찬가지 효과입니다.
### serviceRepaints
```java
public void serviceRepaints()
```
- repaint영역을 다시 그리고, 화면에 출력합니다.
repaint할 영역을 강제적으로 그립니다. 이 함수 내에서 직접 paint
함수를 부릅니다.
### isShown
```java
public boolean isShown()
```
**Returns:**
- 보이는지 안 보이는 지 여부
### getDisplay
```java
public Display getDisplay()
```
**Returns:**
- 吏
---
title: "Class Display"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Display
```
## 설명
**extends Object:**
화면의 출력 관련 함수와 정보를 가지는 클래스입니다.
기본적으로 화면에 무언가를 출력하기 위해서 `Display`를 구한후에
`Card`를 생성하고,
`pushCard`함수를 호출하여 `Display`에
`Card`를 등록 시킵니다.
이후에 `Card`의 `paint`함수에서
그려지는 내용이 화면에 출력됩니다.
한 화면(LCD)은 `Display`에 대응합니다.
응용프로그램은 `Display`을 여러개 가질 수 있습니다.
이는 휴대폰중에 듀얼 LCD가 있는 모델을 지원하기 위하여
JLet상에서 두 화면을 사용할 수도록
하기 위함입니다.
`Display`를 얻어 오기 위해서는 ``getDisplay(java.lang.String)``함수를 사용하여
가져옵니다.
한 화면을 여러개의 `Card`로 구성됩니다.
`Card`는 맨 아래 `Card`부터 시작해서
하나씩 그려지며, 맨 마지막에는 스택 맨 상위에 있는 `Card`가
그려집니다.
이런 메커니즘으로 대화 상자등을 처리할 수 있도록 하였습니다.
입력은 반대 방향으로 맨 상위에 있는 `Card`에게
전달되며 이 `Card`는 자신이
이벤트를 처리했는지 않했는지 여부를 돌려줍니다. 만일 처리했다면, 더이상
이벤트는 하위 `Card`에게 전달되지 않지만, 처리하지
않았다면 하위 `Card`에게
전달되며, 다시한번 처리여부를 확인하게 되어 맨 아래 `Card`까지
전달 될
수도 있습니다. 실제로 `InputMethodHandler`에 의해서
생성되는 창이나 기타 대화 상자등은
이런 식으로 처리가 됩니다.
듀얼 LCD에 대응하는 `Display`에서는 사용자
입력 이벤트(키 이벤트, 포인터 이벤트)가 발생하지
않음을 유의하십시오.
**See Also:**
- ``Card``
## 메서드 요약
- `void addJletEventListener ( JletEventListener qel)` — JletEvent 를 받을 리스너를 등록합니다. key, repaint, point외에 발생하는 모든 이벤트가 발생시에 호출되는 리스너를 등록합니다.
- `void callSerially ( Runnable r)` — 이벤트가 다 처리되고 난 후에 특정 Runnable 의 함수 run 을 호출하도록 합니다.
- `void callSerially ( Runnable r, int timeout)` — 이벤트가 다 처리되고 난 후에 특정 Runnable 의 함수 run 을 호출하도록 합니다.
- `int countCard ()` — Display에 등록된 카드의 갯수를 가져옵니다.
- `void flush ()` — 내부의 버퍼의 내용을 화면에 출력하도록 합니다.
- `int getBitsPerPixel ()` — 화면의 한 픽셀당 차지하는 비트(bit)를 돌려줍니다.
- `static Display getDefaultDisplay ()` — 기본 Display 를 얻어 옵니다.
- `static Display getDisplay ( String str)` — 문자열에 대응하는 Display 를 얻어 옵니다.
- `Card getDockedCard ()` — 붙여진 카드를 돌려줍니다.
- `static int getGameAction (int key)` — 지정한 키 코드에 대응하는 게임키를 구합니다.
- `int getHeight ()` — 화면의 높이를 돌려줍니다.
- `static int getKeyCode (int gameKey)` — 게임키에 대응하는 키 코드값을 얻어 옵니다. gameKey는 EventQueue.UP, EventQueue.DOWN, EventQueue.LEFT, EventQueue.RIGHT, EventQueue.FIRE, EventQueue.GAME_A, EventQueue.GAME_B, EventQueue.GAME_C, EventQueue.GAME_D, ```java 중 하나가 되며, 돌려주는 값은 실제적인 키 코드 값이 됩니다. ```
- `static String getKeyName (int key)` — 키 코드에 대응하는 키 이름의 문자열을 돌려 받습니다.
- `int getWidth ()` — 화면의 폭을 돌려줍니다.
- `void grabKey (int key, JletEventListener qel)` — 특정 키를 함수를 부르는 응용 프로그램에서 소유하게 합니다.
- `boolean hasPointerEvents ()` — 시스템에 포인터 디바이스관련 이벤트가 있는지 여부를 돌려줍니다.
- `boolean hasPointerMotionEvents ()` — 시스템에 포인터 움직임 디바이스 이벤트가 있는지 여부를 돌려줍니다.
- `boolean hasRepeatEvents ()` — 키 반복 이벤트가 발생할 수 있는지 없는지 여부를 돌려줍니다.
- `boolean isColor ()` — 화면이 컬러 색상을 지원하는지 여부를 돌려줍니다.
- `boolean isDoubleBuffered ()` — 화면이 더블 버퍼링(double buffering)인지 여부를 돌려줍니다.
- `int numColors ()` — 화면에서 사용할 수 있는 색상의 갯수를 돌려줍니다.
- `Card popCard ()` — 카드를 꺼내옵니다.
- `void pushCard ( Card c)` — 카드를 화면에 보일 수 있도록 합니다.
- `void removeAllCards ()` — 모든 카드를 제거합니다.
- `boolean removeCard ( Card c)` — 특정 카드를 제거합니다.
- `void removeJletEventListener ( JletEventListener qel)` — JletEvent 를 받을 리스너를 삭제합니다.
- `void setDockedCard ( Card cd, int where)`
- `void setJletEventListener ( JletEventListener qel)`
- `void ungrabKey (int key)` — grabKey 로 인한 이벤트 소유를 이전 상태로 돌립니다.
- `static void where ()`
## 메서드 상세
### getDefaultDisplay
```java
public static Display getDefaultDisplay()
```
**Returns:**
- 기본 display
**Throws:**
- `NullPointerException` - ql이 null인 경우
### getDisplay
```java
public static final Display getDisplay(String str)
```
**Parameters:**
- `str` - display를 가르키는 문자열
**Returns:**
- display 객체
**Throws:**
- `NullPointerException` - ql이 null인 경우
### pushCard
```java
public final void pushCard(Card c)
```
**Parameters:**
- `c` - 화면에 맨 상위에 보여질 카드.
**Throws:**
- `NullPointerException` - c가 null인 경우
### popCard
```java
public final Card popCard()
```
**Returns:**
- 꺼내온 카드
### removeCard
```java
public final boolean removeCard(Card c)
```
**Parameters:**
- `c` - 삭제할 카드
**Returns:**
- 성공적으로 스택에 카드를 제거했는지 여부
### removeAllCards
```java
public void removeAllCards()
```
- 모든 카드를 제거합니다.
현재 수행중인 `Jlet`이 생성한
모든 카드를 `Display`
에서 제거합니다.
각 카드의 `showNotify()`가 각각 불리며,
더 이상 카드는 화면에 나타나지 않습니다.
### countCard
```java
public final int countCard()
```
**Returns:**
- 카드 스택에 있는 카드의 갯수
### callSerially
```java
public final void callSerially(Runnable r)
```
**Parameters:**
- `r` - 수행할 runnable 객체
**Throws:**
- `NullPointerException` - `r`이 `null`인 경우
### callSerially
```java
public final void callSerially(Runnable r,
int timeout)
```
**Parameters:**
- `timeout` - Runnable이 불려질 시간(밀리 세컨드 단위)
**Throws:**
- `IllegalArgumentException` - `timeout이 음수인 경우`
### getDockedCard
```java
public Card getDockedCard()
```
- 붙여진 카드를 돌려줍니다.
### setDockedCard
```java
public void setDockedCard(Card cd,
int where)
```
### isColor
```java
public final boolean isColor()
```
**Returns:**
- 컬러 지원 여부
### numColors
```java
public final int numColors()
```
**Returns:**
- 색상 갯수
### hasPointerEvents
```java
public final boolean hasPointerEvents()
```
**Returns:**
- 포인터 이벤트 여부
### hasPointerMotionEvents
```java
public final boolean hasPointerMotionEvents()
```
**Returns:**
- 포인터 움직임 이벤트 여부
### hasRepeatEvents
```java
public final boolean hasRepeatEvents()
```
**Returns:**
- 키 반복 이벤트 여부
### getWidth
```java
public final int getWidth()
```
**Returns:**
- 화면의 폭
### getHeight
```java
public final int getHeight()
```
**Returns:**
- 화면의 높이
### isDoubleBuffered
```java
public boolean isDoubleBuffered()
```
**Returns:**
- double buffer 여부
### getKeyCode
```java
public static int getKeyCode(int gameKey)
```
- 게임키에 대응하는 키 코드값을 얻어 옵니다.
gameKey는
```java
EventQueue.UP, EventQueue.DOWN, EventQueue.LEFT,
EventQueu
```
---
title: "Class DisplayProxy"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.DisplayProxy
```
## 설명
**extends Object:**
## 필드 요약
- `protected static org.kwis.msp.lcdui.EventDispatcher evtDisp`
## 메서드 요약
- `void flush ()`
- `void flush (int x, int y, int w, int h)`
- `int getBitsPerPixel ()`
- `int getHeight ()`
- `int getWidth ()`
- `boolean hasPointerEvents ()`
- `boolean hasPointerMotionEvents ()`
- `boolean hasRepeatEvents ()`
- `boolean isColor ()`
- `boolean isDoubleBuffered ()`
- `int numColors ()`
## 필드 상세
### evtDisp
```java
protected static org.kwis.msp.lcdui.EventDispatcher evtDisp
```
### isColor
```java
public boolean isColor()
```
### numColors
```java
public int numColors()
```
### getBitsPerPixel
```java
public int getBitsPerPixel()
```
### hasPointerEvents
```java
public boolean hasPointerEvents()
```
### hasPointerMotionEvents
```java
public boolean hasPointerMotionEvents()
```
### hasRepeatEvents
```java
public boolean hasRepeatEvents()
```
### getWidth
```java
public int getWidth()
```
### getHeight
```java
public int getHeight()
```
### isDoubleBuffered
```java
public boolean isDoubleBuffered()
```
### flush
```java
public void flush()
```
### flush
```java
public void flush(int x,
int y,
int w,
int h)
```## 메서드 상세
### isColor
```java
public boolean isColor()
```
### numColors
```java
public int numColors()
```
### getBitsPerPixel
```java
public int getBitsPerPixel()
```
### hasPointerEvents
```java
public boolean hasPointerEvents()
```
### hasPointerMotionEvents
```java
public boolean hasPointerMotionEvents()
```
### hasRepeatEvents
```java
public boolean hasRepeatEvents()
```
### getWidth
```java
public int getWidth()
```
### getHeight
```java
public int getHeight()
```
### isDoubleBuffered
```java
public boolean isDoubleBuffered()
```
### flush
```java
public void flush()
```
### flush
```java
public void flush(int x,
int y,
int w,
int h)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class EventQueue"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.EventQueue
```
## 설명
**extends Object:**
시스템에서 발생하는 이벤트를 관리하는 큐 클래스입니다.
응용 프로그램(`Jlet`) 하나에는 이벤트를 관리하는
`EventQueue` 객체가
하나 존재하게 됩니다.
응용 프로그램에 발생한 모든 이벤트는 이 객체에 일단 저장하고.
응용 프로그램은 발생한 이벤트를 하나씩 가져와서 적절히 처리하면,
응용 프로그램이 동작합니다. `Jlet`안에는 이벤트를
가져와서 처리하는 쓰레드가 내부에 존재 합니다.
이벤트를 가져오거나
새로운 이벤트를 넣을 때에는 `EVENT_SIZE`가
지정한 갯수 이상의 정수 어레이를 사용합니다.
이 어레이에 들어가는 내용은 이벤트 타입에 따라서 다릅니다.
각 이벤트 타입에 따른 저장되는 내용은 다음과 같습니다.
event[0] event[1] event[2] event[3] KEY_EVENT KEY_PRESSED | KEY_RELEASED | KEY_REPEATED | KEY_TYPED 키 값(ITU키인 경우에는 ascii값이 아니면 음수) 0 POINTER_EVENT POINTER_PRESSED | POINTER_RELEASED | POINTER_DRAGGED 포인터의 화면상 x축 값 포인터의 화면상 y축 값 TIMER_EVENT 타이머 값
``Main``에서 `getNextEvent`와
`dispatchEvent`를 무한히 수행하도록 되어 있으며, 그 수행 코드는
다음과 같습니다.
```java
int event[] = new int[EventQueue.EVENT_SIZE];
while(true){
eq.getNextEvent(event);
eq.dispatchEvent(event);
}
```
키 코드는 시스템에 따라서 다릅니다. 그러나, ITU-키인 경우에는 '0'
에서 부터 '9', '*', '#'가 들어오며, 그외에 아스키 코드값에
대응되는 키가 들어오게 됩니다.
파워키나 방향키와 같은 제어키는 음수값으로 들어 오며, 그
값은 플랫폼마다 다를 수 있습니다. 플랫폼 마다 다른 제어키를
처리하기 위헤서 `getGameAction`와 `getKeyCode`함수가
존재 합니다. 특정 키가 들어 왔을때 어떤 제어키인지를
알기 위해서 `getGameAction`함수를 사용합니다.
물론 시스템에 따라서 숫자키가 제어키로 사용할 수도 있습니다.
현재 `getGameAction`에 반대되는 함수인
`getKeyCode`함수가 존재하게 됩니다.
## 필드 요약
- `static int ANN_EVENT` — 단말기 indicator Notify 이벤트 상수. 8로 지정되어 있습니다.
- `static int ANNUNCIATOR_CHANGE_EVENT` — 상위 지시자가 변경된 이벤트 상수. 103으로 지정되어 있습니다.
- `static int APP_ACTIVE` — 현재 Active된 프로그램을 자기 자신으로 변경합니다.
- `static int APP_DESTROY` — 응용프로그램 종료 이벤트; APP_EVENT 의 서브타입입니다. 3로 지정되어 있습니다.
- `static int APP_EVENT` — 응용 프로그램 이벤트 상수. 100으로 지정되어 있습니다.
- `static int APP_RESUME` — 응용프로그램 지속 이벤트; APP_EVENT 의 서브타입입니다. 2로 지정되어 있습니다.
- `static int APP_STOP` — 응용프로그램 정지 이벤트; APP_EVENT 의 서브타입입니다. 1로 지정되어 있습니다.
- `static int BATT_EVENT`
- `static int CALL_EVENT` — 단말기 Call Notify 이벤트 상수. 7로 지정되어 있습니다.
- `static int CALL_SERIALLY_EVENT` — 내부 call serially 이벤트 상수.
- `static int CHILDSTART_EVENT` — 하위 프로그램 시작 이벤트 상수. 101로 지정되어 있습니다.
- `static int CHILDSTOP_EVENT` — 하위 프로그램 종료 이벤트 상수. 102로 지정되어 있습니다.
- `static int CLEAR` — CLEAR 게임 키를 지정하는 상수. 99로 지정되어 있습니다.
- `static int DOWN` — DOWN 게임 키를 지정하는 상수. 6로 지정되어 있습니다.
- `static int EVENT_SIZE` — 이벤트 하나가 저장되는 단위크기. 4로 지정되어 있으며, getNextEvent 함수 호출시에 적어도 이 크기 이상의 정수 어레이를 넘겨야만 합니다.
- `static int FIRE` — FIRE 게임 키를 지정하는 상수. 8로 지정되어 있습니다.
- `static int GAME_A` — GAME_A 게임 키를 지정하는 상수. 9로 지정되어 있습니다.
- `static int GAME_B` — GAME_B 게임 키를 지정하는 상수. 10로 지정되어 있습니다.
- `static int GAME_C` — GAME_C 게임 키를 지정하는 상수. 11로 지정되어 있습니다.
- `static int GAME_D` — GAME_D 게임 키를 지정하는 상수. 12로 지정되어 있습니다.
- `static int KEY_EAR_PIECE`
- `static int KEY_EVENT` — 키 이벤트 상수. 1로 지정되어 있습니다.
- `static int KEY_NUM0` — ITU-T '0' 키를 지정하는 상수. 48('0')로 지정되어 있습니다.
- `static int KEY_NUM1` — ITU-T '1' 키를 지정하는 상수. 49('1')로 지정되어 있습니다.
- `static int KEY_NUM2` — ITU-T '2' 키를 지정하는 상수. 50('2')으로 지정되어 있습니다.
- `static int KEY_NUM3` — ITU-T '3' 키를 지정하는 상수. 51('3')로 지정되어 있습니다.
- `static int KEY_NUM4` — ITU-T '4' 키를 지정하는 상수. 52('4')로 지정되어 있습니다.
- `static int KEY_NUM5` — ITU-T '5' 키를 지정하는 상수. 53('5')으로 지정되어 있습니다.
- `static int KEY_NUM6` — ITU-T '6' 키를 지정하는 상수. 54('6')로 지정되어 있습니다.
- `static int KEY_NUM7` — ITU-T '7' 키를 지정하는 상수. 55('7')로 지정되어 있습니다.
- `static int KEY_NUM8` — ITU-T '8' 키를 지정하는 상수. 56('8')으로 지정되어 있습니다.
- `static int KEY_NUM9` — ITU-T '9' 키를 지정하는 상수. 57('9')로 지정되어 있습니다.
- `static int KEY_POUND` — ITU-T '#' 키를 지정하는 상수. 35('#')로 지정되어 있습니다.
- `static int KEY_PRESSED` — 키 누름 이벤트 타입 상수. 1로 지정되어 있습니다.
- `static int KEY_RELEASED` — 키 떼임 이벤트 타입 상수. 2로 지정되어 있습니다.
- `static int KEY_REPEATED` — 키 반복 이벤트 타입 상수. 3로 지정되어 있습니다.
- `static int KEY_SEND`
- `static int KEY_STAR` — ITU-T '*' 키를 지정하는 상수. 42('*')로 지정되어 있습니다.
- `static int KEY_TYPED` — 키 입력 이벤트 타입 상수. 4로 지정되어 있습니다.
- `static int LEFT` — LEFT 게임 키를 지정하는 상수. 2로 지정되어 있습니다.
- `static int MEDIA_EVENT`
- `static int POINT_DRAGGED` — 포인터 기기 드래그 이벤트 타입 상수. 5로 지정되어 있습니다.
- `static int POINT_PRESSED` — 포인터 기기 누름 이벤트 타입 상수. 1로 지정되어 있습니다.
- `static int POINT_RELEASED` — 포인터 기기 떼임 이벤트 타입 상수. 2로 지정되어 있습니다.
- `static int POINTER_EVENT` — 포인터 이벤트 상수. 2로 지정되어 있습니다.
- `static int REPAINT_EVENT`
- `static int RIGHT` — RIGHT 게임 키를 지정하는 상수. 5로 지정되어 있습니다.
- `static int RSSI_EVENT`
- `static int SIDE_DOWN` — SIDE_DOWN 게임 키를 지정하는 상수. 97로 지정되어 있습니다.
- `static int SIDE_SEL` — SIDE_SEL 게임 키를 지정하는 상수. 98로 지정되어 있습니다.
- `static int SIDE_UP` — SIDE_UP 게임 키를 지정하는 상수. 96로 지정되어 있습니다.
- `static int SMS_EVENT` — SMS 이벤트 상수. 4로 지정되어 있습니다.
- `static int SOFT1` — SOFT1 게임 키를 지정하는 상수. 90으로 지정되어 있습니다.
- `static int SOFT2` — SOFT2 게임 키를 지정하는 상수. 91로 지정되어 있습니다.
- `static int SOFT3` — SOFT3 게임 키를 지정하는 상수. 92로 지정되어 있습니다.
- `static int SYSTEM_EVENT_END`
- `static int SYSTEM_USER_EVENT`
- `static int TIMER_EVENT` — 타이머 이벤트 상수.
- `static int UP` — UP 게임 키를 지정하는 상수. 1로 지정되어 있습니다.
- `static int USER_EVENT` — 사용자 이벤트 상수. 0x5000으로 지저오디어 있습니다.
## 메서드 요약
- `void dispatchEvent (int[] event)` — 이벤트를 처리해 줍니다.
- `void getNextEvent (int[] event)` — 발생한 새 이벤트를 가져옵니다.
- `static void hookEvent (int id, JletEventListener lst)`
- `boolean postEvent (int[] event)` — 새로운 이벤트를 넣습니다.
---
title: "Class Font"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Font
```
## 설명
**extends Object:**
글꼴 클래스 입니다.
문자열을 찍는데 사용되는 문자를 나타내는 글꼴 클래스입니다.
`getFont`를 사용해서 원하는 폰트를 가져옵니다.
기본적으로 `getFont`를 해서 가져온
폰트는 내부적으로 공유하므로 자원을 프리해야할 필요는 없습니다.
`getFont`함수로 가져와서
``Graphics.setFont(org.kwis.msp.lcdui.Font)``함수를
통해서 폰트를 지정하여 문자의 화면 출력 외형을 변경할 수 있습니다.
`getFont`를 통해서 시스템에 따라서,
지정한 폰트가 아닌 그와 유사한 폰트를 돌려 받을 수 있습니다.
문자열의 화면 출력 길이를 알기 위해서는 `stringWidth`나
`substringWidth`함수를 사용합니다.
폰트의 스타일은 다음중 하나가 됩니다.
`STYLE_PLAIN`
`STYLE_UNDERLINED `
`STYLE_BOLD`
`STYLE_BOLD | STYLE_UNDERLINED`
`STYLE_ITALIC`
`STYLE_ITALIC | STYLE_UNDERLINED`
`STYLE_BOLD | STYLE_ITALIC`
`STYLE_BOLD | STYLE_ITALIC | STYLE_UNDERLINED`
## 필드 요약
- `protected int face`
- `static int FACE_MONOSPACE` — Monospace폰트 페이스.
- `static int FACE_PROPORTIONAL` — Proportional폰트 페이스.
- `static int FACE_SYSTEM` — System 폰트 페이스.
- `protected int size`
- `static int SIZE_LARGE` — 큰 크기의 폰트 크기.
- `static int SIZE_MEDIUM` — 중간 크기의 폰트 크기.
- `static int SIZE_SMALL` — 작은 크기의 폰트 크기.
- `protected int style`
- `static int STYLE_BOLD` — 진한 폰트 스타일.
- `static int STYLE_ITALIC` — 기운 폰트 스타일.
- `static int STYLE_PLAIN` — 보통 폰트 스타일.
- `static int STYLE_UNDERLINED` — 밑줄 그은 폰트 스타일.
## 메서드 요약
- `int charsWidth (char[] ch, int offset, int length)` — 문자열의 화면상의 폭을 넘겨줍니다.
- `int charWidth (char ch)` — 문자의 화면상의 폭을 넘겨 줍니다.
- `int getBaselinePosition ()` — 문자의 베이스 라인(base line) 높이를 돌려줍니다.
- `static Font getDefaultFont ()` — 시스템의 기본 폰트를 돌려줍니다.
- `int getFace ()` — 폰트의 페이스를 돌려줍니다.
- `static Font getFont (int face, int style, int size)` — 특정 폰트를 얻어 옵니다.
- `int getHeight ()` — 폰트의 높이를 얻어옵니다.
- `int getSize ()` — 폰트의 크기를 얻어 옵니다.
- `int getStyle ()` — 폰트의 스타일을 얻어 옵니다.
- `boolean isBold ()` — 폰트의 스타일을 STYLE_BOLD 인지 아닌지 여부를 돌려줍니다.
- `boolean isItalic ()` — 폰트의 스타일을 STYLE_ITALIC 인지 아닌지 여부를 돌려줍니다.
- `boolean isPlain ()` — 폰트의 스타일을 STYLE_PLAIN 인지 아닌지 여부를 돌려줍니다.
- `boolean isUnderlined ()` — 폰트의 스타일을 STYLE_UNDERLINED 인지 아닌지 여부를 돌려줍니다.
- `int stringWidth ( String str)` — 문자열의 폭을 얻어 옵니다.
- `int substringWidth ( String str, int offset, int len)` — 문자열의 일부의 폭을 얻어 옵니다.
## 필드 상세
### FACE_MONOSPACE
```java
public static int FACE_MONOSPACE
```
- Monospace폰트 페이스.
값 32로 지정되어 있으며, 폭이 일정한 폰트를 지정합니다.
### FACE_PROPORTIONAL
```java
public static int FACE_PROPORTIONAL
```
- Proportional폰트 페이스.
값이 64로 지정되어 있으며, 폭이 일정하지 않은 폰트를 지정합니다.
### FACE_SYSTEM
```java
public static int FACE_SYSTEM
```
- System 폰트 페이스.
값이 0으로 지정되어 있으며, 시스템 폰트에서 사용하는
폰트입니다. MONOSPACE혹은 PROPORTIONAL둘중 하나 입니다.
### SIZE_LARGE
```java
public static int SIZE_LARGE
```
- 큰 크기의 폰트 크기.
값이 16으로 지정되어 있으며, 시스템의 큰 폰트를 지정합니다.
### SIZE_MEDIUM
```java
public static int SIZE_MEDIUM
```
- 중간 크기의 폰트 크기.
값이 0으로 지정되어 있으며, 시스템의 중간 폰트를 지정합니다.
### SIZE_SMALL
```java
public static int SIZE_SMALL
```
- 작은 크기의 폰트 크기.
값이 8로 지정되어 있으며, 시스템의 작은 폰트를 지정합니다.
### STYLE_BOLD
```java
public static int STYLE_BOLD
```
- 진한 폰트 스타일.
다른 폰트 스타일과 혼합되어 사용할 수 있다. 값은 1로 지정합니다.
### STYLE_ITALIC
```java
public static int STYLE_ITALIC
```
- 기운 폰트 스타일.
다른 폰트 스타일과 혼합되어 사용할 수 있다. 값은 2로 지정합니다.
### STYLE_PLAIN
```java
public static int STYLE_PLAIN
```
- 보통 폰트 스타일.
다른 폰트 스타일과 혼합되어 사용할 수 있다. 값은 0로 지정합니다.
### STYLE_UNDERLINED
```java
public static int STYLE_UNDERLINED
```
- 밑줄 그은 폰트 스타일.
다른 폰트 스타일과 혼합되어 사용할 수 있다. 값은 4로 지정되어 있다.
### style
```java
protected int style
```
### size
```java
protected int size
```
### face
```java
protected int face
```
### getFont
```java
public static Font getFont(int face,
int style,
int size)
```
**Parameters:**
- `size` - 폰트 크기; `SIZE_LARGE`,
`SIZE_MEDIUM`, `SIZE_SMALL`중 하나가
올 수 있음
**Throws:**
- `IllegalArgumentException` - `face`, `style`,
`size`중에 하나라도 유효한 값을 가지지 않는 경우.
### charsWidth
```java
public int charsWidth(char[] ch,
int offset,
int length)
```
**Parameters:**
- `length` - 문자 갯수
**Returns:**
- 문자열의 화면상의 픽셀 단위의 폭
**Throws:**
- `NullPointerException` - ch가 null인 경우
### charWidth
```java
public int charWidth(char ch)
```
**Parameters:**
- `ch` - 문자
**Returns:**
- 문자의 화면상의 픽셀 단위의 폭
### getBaselinePosition
```java
public int getBaselinePosition()
```
**Returns:**
- 문자의 baseline
### getDefaultFont
```java
public static Font getDefaultFont()
```
**Returns:**
- 시스템 기본 폰트
### getFace
```java
public int getFace()
```
**Returns:**
- 폰트의 페이스
### getHeight
```java
public int getHeight()
```
**Returns:**
- 폰트의 높이
### getSize
```java
public int getSize()
```
**Returns:**
- 폰트의 크기
### getStyle
```java
public int getStyle()
```
**Returns:**
- 폰트의 스타일
### isBold
```java
public boolean isBold()
```
**Returns:**
- 폰트의 스타일이 `STYLE_BOLD`이면
`true` 그렇지 않으면
`false`
### isItalic
```java
public boolean isItalic()
```
**Returns:**
- 폰트의 스타일이 `STYLE_ITALIC`이면
`true` 그렇지 않으면 `false`
### isPlain
```java
public boolean isPlain()
```
**Returns:**
- 폰트의 스타일이 `STYLE_PLAIN`이면 `true`
그렇지 않으면 `false`
### isUnderlined
```java
public boolean isUnderlined()
```
**Returns:**
- 폰트의 스타일이 `STYLE_UNDERLINED`이면
`true` 그렇지 않으면 `false`
### stringWidth
```java
public int stringWidth(String str)
```
**Parameters:**
- `str` - 폭을 계산할 문자열
**Returns:**
- 문자열의 폭
**Throws:**
- `NullPointerException` - str이 `null`인 경우.
### substringWidth
```java
public int substringWidth(String str,
int offset,
int len)
```
**Parameters:**
- `len` - 문자열의 문자 갯수
**Returns:**
- 문자열의 폭
**Throws:**
- `NullPointerException` - str이 `null`인 경우.## 메서드 상세
### getFont
```java
public static Font getFont(int face,
int style,
int size)
```
**Parameters:**
- `size` - 폰트 크기; `SIZE_LARGE`,
`SIZE_MEDIUM`, `SIZE_SMALL`중 하나가
올 수 있음
**Throws:**
- `IllegalArgumentException` - `face`, `style`,
`size`중에 하나라도 유효한 값을 가지지 않는 경우.
### charsWidth
```java
public int charsWidth(char[] ch,
int offset,
int length)
```
**Parameters:**
- `length` - 문자 갯수
**Returns:**
- 문자열의 화면상의 픽셀 단위의 폭
**Throws:**
- `NullPointerException` - ch가 null인 경우
### charWidth
```java
public int charWidth(char ch)
```
**Parameters:**
- `ch` - 문자
**Returns:**
- 문자의 화면상의 픽셀 단위의 폭
### getBaselinePosition
```java
public int getBaselinePosition()
```
**Returns:**
- 문자의 baseline
### getDefaultFont
```java
public static Font getDefaultFont()
```
**Returns:**
- 시스템 기본 폰트
### getFace
```java
public int getFace()
```
**Returns:**
- 폰트의 페이스
### getHeight
```java
public int getHeight()
```
**Returns:**
- 폰트의 높이
### getSize
```java
public int getSize()
```
**Returns:**
- 폰트의 크기
### getStyle
```java
public int getStyle()
```
**Returns:**
- 폰트의 스타일
### isBold
```java
public boolean isBold()
```
**Returns:**
- 폰트의 스타일이 `STYLE_BOLD`이면
`true` 그렇지 않으면
`false`
### isItalic
```java
public boolean isItalic()
```
**Returns:**
- 폰트의 스타일이 `STYLE_ITALIC`이면
`true` 그렇지 않으면 `false`
### isPlain
```java
public boolean isPlain()
```
**Returns:**
- 폰트의 스타일이 `STYLE_PLAIN`이면 `true`
그렇지 않으면 `false`
### isUnderlined
```java
public boolean isUnderlined()
```
**Returns:**
- 폰트의 스타일이 `STYLE_UNDERLINED`이면
`true` 그렇지 않으면 `false`
### stringWidth
```java
public int stringWidth(String str)
```
**Parameters:**
- `str` - 폭을 계산할 문자열
**Returns:**
- 문자열의 폭
**Throws:**
- `NullPointerException` - str이 `null`인 경우.
### substringWidth
```java
public int substringWidth(String str,
int offset,
int len)
```
**Parameters:**
- `len` - 문자열의 문자 갯수
**Returns:**
- 문자열의 폭
**Throws:**
- `NullPointerException` - str이 `null`인 경우.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Graphics"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Graphics
```
## 설명
**extends Object:**
간단한 2차 기하학적인 도형을 그리는 기능을 제공합니다.
텍스트나 이미지, 선, 사각형, 아크등을 그릴 수 있는 단순한 기능을 제공합니다.
사각형과 아크는 특정 색상으로 칠해 질 수 있고, 사각형은 둥근 모서리를
가질수도 있습니다.
### 좌표 체계
화면의 좌측 상단이 (0, 0)이 되며, 아래로 y축이 증가하고, 오른쪽으로
x축이 증가하는 좌표체계를 가집니다.
그래픽객체에서 사용되는 모든 좌표는 `translate`함수에
의해서 변경 될 수
있는 원점을 가지는 좌표체계 하에 있게 됩니다.
### 앵커
앵커는 이미지나 폰트등을 출력시에 위치를 결정해주는
파라미터가 됩니다. 지정된 좌표에 객체의 어떤 부분을 위치시킬
것인지를 결정합니다.
폰트의 경우에는
앵커는 수평적으로는 `LEFT, HCENTER, RIGHT`중에 하나가
될 수 있으며,
수직적으로는 `TOP, BASELINE, BOTTOM`이 될 수 있습니다.
이 수평/수직적인 내용을 논리적 OR을 사용해서 앵커를 지정합니다.
다음의 코드는 서로 같은 위치에 같은 내용을 출력하는 함수들의
예제 입니다.
```java
g.drawString(str, x, y, g.TOP|g.LEFT);
g.drawString(str, x + f.stringWidth(str)/2, y, g.TOP|g.HCENTER);
g.drawString(str, x + f.stringWidth(str), y, g.TOP|g.RIGHT);
g.drawString(str, x,
y + f.getBaselinePosition(), g.BASELINE|g.LEFT);
g.drawString(str, x + f.stringWidth(str)/2,
y + f.getBaselinePosition(), g.BASELINE|g.HCENTER);
g.drawString(str, x + f.stringWidth(str),
y + f.getBaselinePosition(), g.BASELINE|g.RIGHT);
g.drawString(str, x,
y + f.getHeight(), g.BOTTOM|g.LEFT);
g.drawString(str, x + f.stringWidth(str)/2,
y + f.getHeight(), g.BOTTOM|g.HCENTER);
g.drawString(str, x + f.stringWidth(str),
y + f.getHeight(), g.BOTTOM|g.RIGHT);
```
이미지의 경우에는 `BASELINE`대신에 `VCENTER`를
사용합니다.
수평 앵커는 적어도 하나 지정이 되어야하며, 거기에 OR되는 수직 앵커는
지정되지 않아도 됩니다.
### 스트로크 스타일
스트로크 스타일은 `DOTTED`나 SOLID로 정의됩니다.
이 정의된 스타일은 `drawLine`, `drawArc`등에서만
적용이 되며`fillRect`같이 칠하기 함수에는 적용이되지 않습니다.
### 다른 그림 모드
스트로크 스타일 외에 Graphics에서 지원하는
그리기 모드가 있습니다. 하나는 XOR 모드로 그리기 이며,
또하나는 투명정도를 지정합니다.
``setXORMode(boolean)``함수를 사용하면, 화면의 내용과 현재 출력하는 내용을
XOR하여 출력할 수 있으며
``setAlpha(int)``함수를 사용하면, 화면의 내용과 현재 출력하는 내용을
적절히 섞어서 출력할 수 있씁니다. ` g.setAlpha(255) `
는 일반적으로 화면에 나타나며 ` g.setAlpha(0) `하면
화면에 내용이 출력되지 않습니다. XOR모드나 Alpha모드로 출력시에
속도가 저하 됩니다.
모든 그래픽 오퍼레이션은 클리핑 영역에 영향을 받습니다.
이 클리핑 영역 외에에는 오퍼레이션에 의해서 내용이 바뀌지 않습니다.
클리핑 영역은 `Graphics`객체가 생성될때 사용된
화면이나 이미지의 크기보다는 클 수가 없습니다.
## 필드 요약
- `protected int alpha`
- `static int BASELINE` — 앵커 위치를 문자열의 baseline으로 지정하는 상수.
- `static int BOTTOM` — 앵커의 위치를 문자나 이미지의 아래로 지정하는 상수.
- `protected int clipX1`
- `protected int clipX2`
- `protected int clipY1`
- `protected int clipY2`
- `static int DOTTED` — 도트 스트로크 스타일을 지정하는 상수.
- `protected Font ft`
- `protected int gray`
- `static int HCENTER` — 앵커의 수평 위치를 문자나 이미지의 가운데로 지정하는 상수.
- `protected Image img`
- `static int LEFT` — 앵커의 수평 위치를 문자나 이미지의 왼쪽으로 지정하는 상수.
- `protected int mode`
- `protected int rgb`
- `static int RIGHT` — 앵커의 수평 위치를 문자나 이미지의 오른쪽으로 지정하는 상수.
- `static int SOLID` — 솔리드 스트로크 스타일을 지정하는 상수.
- `protected int style`
- `static int TOP` — 앵커의 수직 위치를 문자나 이미지의 맨 위로 지정하는 상수.
- `protected int transX`
- `protected int transY`
- `static int VCENTER` — 앵커의 수직 위치를 이미지의 가운대로 지정하는 상수.
## 메서드 요약
- `void clipRect (int x, int y, int width, int height)` — 클리핑 영역을 지정된 사각형과 인터섹트(intersect)합니다.
- `void copyArea (int dx, int dy, int sx, int sy, int w, int h)` — 화면이나 이미지를 내부에서 내부로 복사합니다.
- `void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle)` — 현재 그래픽이 지정하는 색상과 스트로크 스타일로 아크를 그립니다.
- `void drawChar (char character, int x, int y, int anchor)` — 그래픽 좌표계에서 현재 그래픽 개체가 가지고 있는 폰트와 색상으로 character가 지정하는 문자를 지정된 위치에 그려 줍니다.
- `void drawChars (char[] data, int offset, int length, int x, int y, int anchor)` — data가 가르키는 문자열의 일부를 현재 그래픽 개체가 가지고 있는 폰트와 색상으로 지정된 위치에 그려줍니다.
- `void drawImage ( Image img, int x, int y, int anchor)` — img가 가르키는 이미지를 지정된 위치에 그려줍니다.
- `void drawLine (int x1, int y1, int x2, int y2)` — 현재 그래픽이 가지고 있는 좌표체계의 두 점에을 연결하는 선을 그래픽 개체가 정의하는 색상과 스트로크 스타일로 그려줍니다.
- `void drawPolygon (int[] x, int[] y)` — 다각형을 그립니다.
- `void drawRect (int x, int y, int width, int height)` — 현재 그래픽이 지정하는 색상과 스트로크 스타일로 사각형을 그립니다.
- `void drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight)` — 현재 그래픽이 지정하는 색상과 스트로크 스타일로 모서리가 둥근 사각형을 그립니다.
- `void drawString ( String str, int x, int y, int anchor)` — 현재 그래픽이 지정하는 색상과 폰트로 문자열을 그립니다.
- `void drawSubstring ( String str, int offset, int len, int x, int y, int anchor)` — 현재 그래픽이 지정하는 색상과 폰트로 문자열의 일부를 그립니다.
- `byte[] encodeImage (int x, int y, int w, int h)` — 화면의 특정 영역을 BMP 포맷으로 인코딩합니다.
- `void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle)` — 현재 그래픽이 지정하는 색상으로 아크를 칠합니다.
- `void fillRect (int x, int y, int width, int height)` — 현재 그래픽이 지정하는 색상으로 사각형을 칠합니다.
- `void fillRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight)` — 현재 그래픽이 지정하는 색상으로 모서리가 둥근 사각형을 칠합니다.
- `int getAlpha ()` — alpha 값을 가져옵니다.
- `int getBlueComponent ()` — 현재 지정된 색상의 파랑색값을 돌려줍니다.
- `int getClipHeight ()` — 클리핑 사각형의 높이를 돌려줍니다.
- `int getClipWidth ()` — 클리핑 사각형의 폭을 돌려줍니다.
- `int getClipX ()` — 클리핑 사각형의 그래픽 좌표계에서의 x축 좌표를 돌려줍니다.
- `int getClipY ()` — 클리핑 사각형의 그래픽 좌표계에서의 y축 좌표를 돌려줍니다.
- `int getColor ()` — 현재 지정된 색상을 돌려줍니다.
- `Font getFont ()` — 현재 지정된 폰트를 돌려줍니다.
- `int getGrayScale ()` — 현재 지정된 색상의 회색조 값을 얻어 옵니다.
- `int getGreenComponent ()` — 현재 지정된 색상의 녹색값을 돌려줍니다.
- `int getPixel (int x, int y)` — 특정 위치의 픽셀을 RGB 형태로 가지고 옵니다.
- `void getPixels (int x, int y, int w, int h, byte[] pixels, int offset, int bpl)` — 화면이나 이미지에서 특정 부분의 픽셀 값들을 가지고 옵니다.
- `int getRedComponent ()` — 현재 지정된 색상의 빨강색값을 돌려줍니다.
- `void getRGBPixels (int x, int y, int w, int h, int[] pixels, int offset, int bpl)` — 화면이나 이미지에서 특정 부분의 픽셀 값들을 가지고 옵니다.
- `int getStrokeStyle ()` — 선, 아크, 사각형 그리기에 사용되는 현재 지정된 스트로크 스타일을 돌려줍니다.
- `int getTranslateX ()` — 그래픽 좌표체계의 원점의 x축 좌표을 돌려줍니다.
- `int getTranslateY ()` — 그래픽 좌표체계의 원점의 y축 좌표을 돌려줍니다.
- `boolean isXORMode ()` — 설정된XOR모드를 리턴합니다
- `int getStrokeStyle ()`
---
title: "Class Image"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Image
```
## 설명
**extends Object:**
이미지를 나타내는 클래스입니다.
이미지 클래스는 gif나 png등의 여러가지 이미지 포멧의 데이타로 부터
생성할 수 있으며, 이전에 있는 이미지로부터 복사하여 생성할 수도 있습니다.
이때 복사된 이미지에 한하여 `getGraphics`로
이미지의 내용의 변경이 가능합니다.
이미지는 변경이 가능한 이미지 변경이 가능하지 않은 이미지로 분류됩니다.
변경이 가능한 이미지는 주로 프로그램에서 임의적으로 만드는 이미지
이며, 이미지 파일로 부터 생성하는 이미지는 변경이 가능하지 않은 이미지
입니다.
변경하기 위해서는 이미지를 복사하여 사용해야 합니다.
코드는 다음과 같습니다.
```java
Image src;
src = Image.createImage("/test.gif");
Image copy = Image.createImage(src);
Graphics g = copy.getGraphics();
g.drawLine(0, 0, 10, 10);
```
복사할때에 애니메이션 이미지인 경우에는 이미지 복사가 되지 않으며,
mask된 이미지인 경우에 mask부분이 힌색으로 변환되어 복사되며,
복사된 이미지는 더이상 mask를 가지고 있지 않습니다.
현재 이미지는 gif(animated), png, bmp(RLE압축포함) 포맷을 지원합니다.
## 생성자 요약
- Image ()
## 메서드 요약
- `static Image createImage (byte[] imagedata, int imageoffset, int imagelength)` — 지정된 이미지 데이타 어레이로 부터 이미지를 생성합니다.
- `static Image createImage ( Image image)` — 지정된 이미지를 복사해서 다른 편집이 가능한 이미지를 생성합니다.
- `static Image createImage (int width, int height)` — 지정된 높이와 폭의 편집 가능한 이미지를 생성합니다.
- `static Image createImage ( String name)` — 지정된 리소스의 이미지를 생성합니다.
- `Graphics getGraphics ()` — 이미지에 그릴수 있는 그래픽을 돌려줍니다.
- `int getHeight ()` — 이미지의 높이를 돌려줍니다.
- `int getWidth ()` — 이미지의 폭를 돌려줍니다.
- `boolean isAnimated ()` — Image가 Animation이 가능한지 여부를 돌려줍니다.
- `boolean isMutable ()` — 이미지의 편집 가능 여부를 돌려줍니다.
- `static Image loadImage ( String str, ImageObserver io)` — 문자열이 지정하는 자료로 부터 이미지를 읽어들입니다.
- `void play ( ImageObserver ob)` — 이미지의 움직임을 시작합니다.
- `void stop ()` — 애니메이션을 중지시킵니다.
- `static void stopImage ( ImageObserver io)` — ImageObserver 에 대응하는 이미지를 읽기를 중단 시킵니다.
## 생성자 상세
### Image
```java
public Image()
```
### createImage
```java
public static Image createImage(byte[] imagedata,
int imageoffset,
int imagelength)
```
**Parameters:**
- `imagelength` - 이미지 자료의 길이
**Returns:**
- 생성된 이미지
**Throws:**
- `ArrayIndexOutOfBoundsException` - `imageoffset`와
`imagelength`가 지정하는 영역이 어레이의 유효한 영역을
벗어 날때
### loadImage
```java
public static Image loadImage(String str,
ImageObserver io)
```
**Parameters:**
- `io` - 이미지 생성을 알려줄 `ImageObserver`
**Returns:**
- 새로 생성된 이미지; 초기에는 아무런 내용이 없음
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우.
**See Also:**
- ``ImageObserver.notify(org.kwis.msp.lcdui.Image, int)``
### createImage
```java
public static Image createImage(Image image)
```
**Parameters:**
- `image` - 복사할 이미지
**Returns:**
- 새로 만들어진 이미지
**Throws:**
- `NullPointerException` - `image`가
`null`인 경우.
### createImage
```java
public static Image createImage(int width,
int height)
```
**Parameters:**
- `height` - 이미지의 높이.
**Throws:**
- `IllegalArgumentException` - `width`와
`height`가 0이하인 경우
### createImage
```java
public static Image createImage(String name)
throws IOException
```
**Parameters:**
- `name` - 자원 경로명
**Returns:**
- 이미지
**Throws:**
- `NullPointerException` - `name`이
`null`인 경우.
**See Also:**
- ``Class.getResourceAsStream(java.lang.String)``
### getGraphics
```java
public Graphics getGraphics()
```
**Returns:**
- 이미지의 Graphics객체
### getHeight
```java
public int getHeight()
```
**Returns:**
- 이미지의 높이
### getWidth
```java
public int getWidth()
```
**Returns:**
- 이미지의 높이
### isMutable
```java
public boolean isMutable()
```
**Returns:**
- 편집 가능한지의 여부
### isAnimated
```java
public boolean isAnimated()
```
**Returns:**
- Animation이 가능한지의 여부
### play
```java
public void play(ImageObserver ob)
```
**Parameters:**
- `ob` - 이미지 Observer
**See Also:**
- ``ImageObserver``
### stop
```java
public void stop()
```
- 애니메이션을 중지시킵니다.
애니메이션을 멈춥니다.
이미지가 Animation Gif와 같은 이미지인 경우에
이 함수가 사용될 수 있습니다. Animation 이미지가 아닌 경우에 아무런
작업도 하지 않습니다.
이미지를 더이상 사용하지 않으면
이 함수를 불러서 이미지의 레퍼런스를 없애야 합니다.
그렇지 않으면, 사용하지 않은 이미지 레퍼런스를 가지게 되므로,
메모리를 낭비할 수 있습니다.
### stopImage
```java
public static void stopImage(ImageObserver io)
```
**Parameters:**
- `io` - 삭제할 이미지에 대응하는 `ImageObserver`## 메서드 상세
### createImage
```java
public static Image createImage(byte[] imagedata,
int imageoffset,
int imagelength)
```
**Parameters:**
- `imagelength` - 이미지 자료의 길이
**Returns:**
- 생성된 이미지
**Throws:**
- `ArrayIndexOutOfBoundsException` - `imageoffset`와
`imagelength`가 지정하는 영역이 어레이의 유효한 영역을
벗어 날때
### loadImage
```java
public static Image loadImage(String str,
ImageObserver io)
```
**Parameters:**
- `io` - 이미지 생성을 알려줄 `ImageObserver`
**Returns:**
- 새로 생성된 이미지; 초기에는 아무런 내용이 없음
**Throws:**
- `NullPointerException` - `str`이
`null`인 경우.
**See Also:**
- ``ImageObserver.notify(org.kwis.msp.lcdui.Image, int)``
### createImage
```java
public static Image createImage(Image image)
```
**Parameters:**
- `image` - 복사할 이미지
**Returns:**
- 새로 만들어진 이미지
**Throws:**
- `NullPointerException` - `image`가
`null`인 경우.
### createImage
```java
public static Image createImage(int width,
int height)
```
**Parameters:**
- `height` - 이미지의 높이.
**Throws:**
- `IllegalArgumentException` - `width`와
`height`가 0이하인 경우
### createImage
```java
public static Image createImage(String name)
throws IOException
```
**Parameters:**
- `name` - 자원 경로명
**Returns:**
- 이미지
**Throws:**
- `NullPointerException` - `name`이
`null`인 경우.
**See Also:**
- ``Class.getResourceAsStream(java.lang.String)``
### getGraphics
```java
public Graphics getGraphics()
```
**Returns:**
- 이미지의 Graphics객체
### getHeight
```java
public int getHeight()
```
**Returns:**
- 이미지의 높이
### getWidth
```java
public int getWidth()
```
**Returns:**
- 이미지의 높이
### isMutable
```java
public boolean isMutable()
```
**Returns:**
- 편집 가능한지의 여부
### isAnimated
```java
public boolean isAnimated()
```
**Returns:**
- Animation이 가능한지의 여부
### play
```java
public void play(ImageObserver ob)
```
**Parameters:**
- `ob` - 이미지 Observer
**See Also:**
- ``ImageObserver``
### stop
```java
public void stop()
```
- 애니메이션을 중지시킵니다.
애니메이션을 멈춥니다.
이미지가 Animation Gif와 같은 이미지인 경우에
이 함수가 사용될 수 있습니다. Animation 이미지가 아닌 경우에 아무런
작업도 하지 않습니다.
이미지를 더이상 사용하지 않으면
이 함수를 불러서 이미지의 레퍼런스를 없애야 합니다.
그렇지 않으면, 사용하지 않은 이미지 레퍼런스를 가지게 되므로,
메모리를 낭비할 수 있습니다.
### stopImage
```java
public static void stopImage(ImageObserver io)
```
**Parameters:**
- `io` - 삭제할 이미지에 대응하는 `ImageObserver`
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface ImageObserver"
---
`package org.kwis.msp.lcdui`
```text
public static final int FRAME_END
```
## 설명
### IMAGE_END
### NOT_EXIST
### DECODE_ERROR
### OUT_OF_MEMORY
Method Detail
### notify
**See Also:**
- ``Image.loadImage(java.lang.String, org.kwis.msp.lcdui.ImageObserver)``,
``Image.play(org.kwis.msp.lcdui.ImageObserver)``## 필드 요약
- `static int DECODE_ERROR`
- `static int FRAME_END`
- `static int IMAGE_END`
- `static int NOT_EXIST`
- `static int OUT_OF_MEMORY`
## 메서드 요약
- `void notify ( Image img, int status)` — 이미지 한 프레임이 완성되었음을 알립니다.
## 필드 상세
### FRAME_END
```java
public static final int FRAME_END
```
### IMAGE_END
```java
public static final int IMAGE_END
```
### NOT_EXIST
```java
public static final int NOT_EXIST
```
### DECODE_ERROR
```java
public static final int DECODE_ERROR
```
### OUT_OF_MEMORY
```java
public static final int OUT_OF_MEMORY
```
### notify
```java
public void notify(Image img,
int status)
```
**See Also:**
- ``Image.loadImage(java.lang.String, org.kwis.msp.lcdui.ImageObserver)``,
``Image.play(org.kwis.msp.lcdui.ImageObserver)``## 메서드 상세
### notify
```java
public void notify(Image img,
int status)
```
**See Also:**
- ``Image.loadImage(java.lang.String, org.kwis.msp.lcdui.ImageObserver)``,
``Image.play(org.kwis.msp.lcdui.ImageObserver)``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class InputMethodHandler"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.InputMethodHandler
```
## 설명
**extends Object:**
`InputMethodHandler`는 사용자 키 입력를 오토마타에게 전달하는
일을 담당합니다.
사용자의 키 입력을 처리하는 메소드는 `#notifyKeyInput(int keyCode)`입니다.
따라서 이 메소드를 호출하여 현재 입력된 키 값을 넘겨줘야 합니다.
또한 키 입력에 따라 처리된 문자를 전달받기 위해서 반드시 구현된 특정
`InputMethodListener`를 지정해야 합니다.
지정된 `InputMethodListener`가 존재하지 않은 경우
``notifyKeyInput(int, int)``에서 `false`를 리턴하고 아무런 일을 하지
않습니다. `InputMethodListener`는 ``setInputMethodListener(org.kwis.msp.lcdui.InputMethodListener)``를
통해 지정할 수 있습니다.
## 생성자 요약
- InputMethodHandler (int constraint) 주어진 입력제한자로 InputMethodHandler 의
인스턴스를 생성합니다.
## 메서드 요약
- `void changeCurrentModeToNext ()` — 현재 지정된 constraint에 따라 현재 입력모드를 기준으로 다음 입력 모드를 계산하여 현재 입력모드를 계산된 다음 입력모드로 변경합니다.
- `int getCurrentInputMode ()` — 현재의 입력모드를 얻어옵니다.
- `int getCurrentMode ()` — 현재 입력모드를 얻어옵니다.
- `String getCurrentModeCode ()` — 현재 입력모드에 해당하는 표준언어코드를 얻어옵니다.
- `void hideSymbolCard ()` — 현재 화면에서 CandidateWindow 를 제거합니다.
- `boolean notifyKeyInput (int keyCode, int type)` — InputMethodHandler 에서 키입력을 처리해야하는 경우 호출되는 메소드입니다.
- `boolean setCurrentMode (int mode)` — 주어진 모드값으로 현재 입력모드를 지정합니다.
- `void setInputMethodListener ( InputMethodListener imListener)` — InputMethodHandler 에서 키 입력에 따라 처리한 문자를 전달할 InputMethodListener 를 지정합니다.
- `void setSymbolPosition (int x, int y, int w, int h)` — InputMethodHandler 의 현재 입력 모드가 IM_SYMBOL 경우 화면에 특수문자카드를 출력할 위치와 넓이, 높이를 설정합니다.
## 생성자 상세
### InputMethodHandler
```java
public InputMethodHandler(int constraint)
```
**Parameters:**
- `constraint` - 입력 제한자
### getCurrentModeCode
```java
public String getCurrentModeCode()
```
**Returns:**
- 입력모드에 해당하는 언어코드.
### notifyKeyInput
```java
public final boolean notifyKeyInput(int keyCode,
int type)
```
**Parameters:**
- `type` - 키의 타입(EventQueue.KEY_PRESSED, EventQueue.KEY_RELEASED)
**Returns:**
- 키 입력에 따른 문자 처리가 이루어진 경우 `true`,
그 외의 경우`false` 리턴.
### getCurrentInputMode
```java
public int getCurrentInputMode()
```
**Returns:**
- 현재 입력 모드
**See Also:**
- `#setInputMode(int inputMode)`
### setInputMethodListener
```java
public void setInputMethodListener(InputMethodListener imListener)
```
**Parameters:**
- `imListener` - `InputMethodListener` 혹은 `null`
### changeCurrentModeToNext
```java
public void changeCurrentModeToNext()
```
- 현재 지정된 constraint에 따라 현재 입력모드를
기준으로 다음 입력 모드를 계산하여 현재 입력모드를
계산된 다음 입력모드로 변경합니다.
### getCurrentMode
```java
public int getCurrentMode()
```
- 현재 입력모드를 얻어옵니다.
### setCurrentMode
```java
public boolean setCurrentMode(int mode)
```
**Parameters:**
- `mode` - 새로지정할 입력모드값
### hideSymbolCard
```java
public void hideSymbolCard()
```
- 현재 화면에서 `CandidateWindow`를 제거합니다.
### setSymbolPosition
```java
public void setSymbolPosition(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - height값.
**Throws:**
- `IllegalArgumentException` - `w,h`값이 '0'이하값인 경우## 메서드 상세
### getCurrentModeCode
```java
public String getCurrentModeCode()
```
**Returns:**
- 입력모드에 해당하는 언어코드.
### notifyKeyInput
```java
public final boolean notifyKeyInput(int keyCode,
int type)
```
**Parameters:**
- `type` - 키의 타입(EventQueue.KEY_PRESSED, EventQueue.KEY_RELEASED)
**Returns:**
- 키 입력에 따른 문자 처리가 이루어진 경우 `true`,
그 외의 경우`false` 리턴.
### getCurrentInputMode
```java
public int getCurrentInputMode()
```
**Returns:**
- 현재 입력 모드
**See Also:**
- `#setInputMode(int inputMode)`
### setInputMethodListener
```java
public void setInputMethodListener(InputMethodListener imListener)
```
**Parameters:**
- `imListener` - `InputMethodListener` 혹은 `null`
### changeCurrentModeToNext
```java
public void changeCurrentModeToNext()
```
- 현재 지정된 constraint에 따라 현재 입력모드를
기준으로 다음 입력 모드를 계산하여 현재 입력모드를
계산된 다음 입력모드로 변경합니다.
### getCurrentMode
```java
public int getCurrentMode()
```
- 현재 입력모드를 얻어옵니다.
### setCurrentMode
```java
public boolean setCurrentMode(int mode)
```
**Parameters:**
- `mode` - 새로지정할 입력모드값
### hideSymbolCard
```java
public void hideSymbolCard()
```
- 현재 화면에서 `CandidateWindow`를 제거합니다.
### setSymbolPosition
```java
public void setSymbolPosition(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - height값.
**Throws:**
- `IllegalArgumentException` - `w,h`값이 '0'이하값인 경우
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface InputMethodListener"
---
`package org.kwis.msp.lcdui`
```text
public void notifyTextChanged(char[] chText,
int length,
int pMode)
```
## 설명
**Parameters:**
- `pMode` - 처리상태 - Insert(-1) / replace(0) / delete(1)## 메서드 요약
- `void notifyTextChanged (char[] chText, int length, int pMode)` — InputMethod를 통해 전달된 문자객체를 받아 처리합니다.
## 메서드 상세
### notifyTextChanged
```java
public void notifyTextChanged(char[] chText,
int length,
int pMode)
```
**Parameters:**
- `pMode` - 처리상태 - Insert(-1) / replace(0) / delete(1)
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Jlet"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Jlet
```
## 설명
**extends Object:**
WIPI 응용 프로그램입니다.
WIPI를 이용하는 모든 응용 프로그램은 `Jlet`을 상속받아서
작성되어야 합니다.
WIPI에서의 자원들은 모두 `Jlet`단위로 응용 프로그램의
자원이 관리됩니다.
WIPI에서 생성한 `Thread`와 Card들은 Jlet이 종료될 때
시스템에서 사라 집니다.
Jlet은 세 가지 상태를 가집니다. Jlet을 생성 시키면 자동적으로
*active*상태가 되고, JAM에서 프로그램을 일시 정지하거나
프로그램이 사용자에 의해서 일시 정지시켜야 하는 경우에는
*pause*상태가 됩니다. 이 상태에서 JAM이나 사용자에 의해서
다시 *active*상태로 돌아 올 수 있습니다.
어떠한 상태던지 Jlet은 *destroyed*상태로 전이할 수 있으며,
이 때에는 Jlet은 프로그램을 종료해야 합니다.
프로그램은 전이하는 상태에서 다음 그림과 같이 각각 `pauseApp()`와
`resumeApp()`, `startApp()`, `destroyApp()`
함수가 불립니다.
프로그램을 처음에 `startApp`함수가 불립니다. 이때에는
파라미터로 `System.execute`함수 호출시 넘긴 파라미터가
넘어 옵니다.
## 필드 요약
- `static int ACTIVE`
- `static int DESTROYED`
- `static int PAUSED`
## 생성자 요약
- `protected Jlet ()` — 새로운 Jlet을 생성합니다.
## 메서드 요약
- `protected abstract void destroyApp (boolean unconditional)` — 프로그램이 종료 됨을 알려주는 함수입니다.
- `static Jlet getActiveJlet ()` — 현재 활성화된 Jlet 를 얻어 옵니다.
- `String getAppProperty ( String key)` — 응용 프로그램마다 지정되어 있는 프라퍼티를 돌려줍니다.
- `static Jlet getCurrentJlet ()` — 현재 수행중인 Jlet 을 얻어 옵니다.
- `int getCurrentProgramID ()` — Jlet을 생성한 프로그램 id를 돌려준다.
- `EventQueue getEventQueue ()` — Jlet 과 연결된 이벤트 큐를 돌려줍니다.
- `static Jlet getJletFromPID (int id)` — 주어진id에 해당하는 Jlet 를 얻어 옵니다.
- `void notifyDestroyed ()` — 프로그램을 종료 시킬때 사용되는 함수.
- `protected void pauseApp ()` — 프로그램을 정지하려고 하는 때 불려집니다.
- `static void removeAllResource (int id)`
- `protected void resumeApp ()` — 정지된 프로그램을 다시 수행을 재기하려할때 불려집니다.
- `static void setActiveJlet ( Jlet ql)` — 지정된 Jlet 을 활성화 시킵니다.
- `protected abstract void startApp ( String [] args)` — 프로그램이 시작될 때 불려집니다.
## 필드 상세
### ACTIVE
```java
public static final int ACTIVE
```
### DESTROYED
```java
public static final int DESTROYED
```
### PAUSED
```java
public static final int PAUSED
```
### Jlet
```java
protected Jlet()
```
- 새로운 Jlet을 생성합니다.
### setActiveJlet
```java
public static void setActiveJlet(Jlet ql)
```
- 지정된 `Jlet`을 활성화 시킵니다.
지정된 Jlet을 활성화 시킵니다.
### getActiveJlet
```java
public static Jlet getActiveJlet()
```
**Returns:**
- 현재 상위에서 수행중에 있는 `Jlet`
### getJletFromPID
```java
public static Jlet getJletFromPID(int id)
```
**Returns:**
- ID에 해당하는 `Jlet`
### getCurrentJlet
```java
public static Jlet getCurrentJlet()
```
**Returns:**
- 현재 수행중인 `Jlet`
### getCurrentProgramID
```java
public int getCurrentProgramID()
```
**Parameters:**
- `id` - Jlet을 생성한 프로그램 id
### startApp
```java
protected abstract void startApp(String[] args)
```
**Parameters:**
- `args` - 사용자가 넘기는 인수.
### pauseApp
```java
protected void pauseApp()
```
- 프로그램을 정지하려고 하는 때 불려집니다.
시스템에서 응용 프로그램에게 일시 정지를 요청할때 이 함수를 부릅니다.
프로그램은 사용자의 인터렉션에 의해서 정지할 수도 있습니다.
정지하는 경우에 사용하고 있던 시스템 자원(네트웍, 시리얼등)을
되돌려 줄수 잇도록 구현하셔야 합니다.
### resumeApp
```java
protected void resumeApp()
```
- 정지된 프로그램을 다시 수행을 재기하려할때 불려집니다.
시스템에서 응용 프로그램에게 수행 재기를 요청할때 이 함수를 부릅니다.
`pauseApp`함수로 정지했던 `Jlet`를 다시
기동시키며, 이 함수내에서 `pauseApp`에서 돌려주었던
시스템 자원들(네트웍, 시리얼등)을
다시 할당 받도록 함수를 구현하셔야 합니다.
### destroyApp
```java
protected abstract void destroyApp(boolean unconditional)
throws JletStateChangeException
```
**Parameters:**
- `unconditonal` - 만일 true이면 프로그램이 무조건 종료가 되고,
false일때에는 `Jlet`은
`JletStateChangeException`을 던져서 프로그램 종료를 막을
수 있음
**Throws:**
- `JletStateChangeException` - 현재 상태에서 프로그램을 종료할 수
없는 경우. 만일 `unconditional`이 `true`이면, 이 예외를 던진다 해도,
프로그램은 종료됩니다.
### notifyDestroyed
```java
public final void notifyDestroyed()
```
- 프로그램을 종료 시킬때 사용되는 함수.
`Jlet`응용 프로그램을 종료할 때 이 함수를 부릅니다.
이 함수를 부르면 프로그램은 *Destoryed*상태로 들어가며,
차후에 `destroyApp`메써드를 호출합니다.
`Jlet.destroyApp()`를 호출함으로써 프로그램이 가지고 있는
모든 자원을 되돌려 줍니다.
### getAppProperty
```java
public final String getAppProperty(String key)
```
**Parameters:**
- `key` - 찾을 프라퍼티에 대응하는 키
**Returns:**
- 해당하는 프라퍼티
### getEventQueue
```java
public final EventQueue getEventQueue()
```
**Returns:**
- 이벤트 큐
### removeAllResource
```java
public static void removeAllResource(int id)
```## 생성자 상세
### Jlet
```java
protected Jlet()
```
- 새로운 Jlet을 생성합니다.
### setActiveJlet
```java
public static void setActiveJlet(Jlet ql)
```
- 지정된 `Jlet`을 활성화 시킵니다.
지정된 Jlet을 활성화 시킵니다.
### getActiveJlet
```java
public static Jlet getActiveJlet()
```
**Returns:**
- 현재 상위에서 수행중에 있는 `Jlet`
### getJletFromPID
```java
public static Jlet getJletFromPID(int id)
```
**Returns:**
- ID에 해당하는 `Jlet`
### getCurrentJlet
```java
public static Jlet getCurrentJlet()
```
**Returns:**
- 현재 수행중인 `Jlet`
### getCurrentProgramID
```java
public int getCurrentProgramID()
```
**Parameters:**
- `id` - Jlet을 생성한 프로그램 id
### startApp
```java
protected abstract void startApp(String[] args)
```
**Parameters:**
- `args` - 사용자가 넘기는 인수.
### pauseApp
```java
protected void pauseApp()
```
- 프로그램을 정지하려고 하는 때 불려집니다.
시스템에서 응용 프로그램에게 일시 정지를 요청할때 이 함수를 부릅니다.
프로그램은 사용자의 인터렉션에 의해서 정지할 수도 있습니다.
정지하는 경우에 사용하고 있던 시스템 자원(네트웍, 시리얼등)을
되돌려 줄수 잇도록 구현하셔야 합니다.
### resumeApp
```java
protected void resumeApp()
```
- 정지된 프로그램을 다시 수행을 재기하려할때 불려집니다.
시스템에서 응용 프로그램에게 수행 재기를 요청할때 이 함수를 부릅니다.
`pauseApp`함수로 정지했던 `Jlet`를 다시
기동시키며, 이 함수내에서 `pauseApp`에서 돌려주었던
시스템 자원들(네트웍, 시리얼등)을
다시 할당 받도록 함수를 구현하셔야 합니다.
### destroyApp
```java
protected abstract void destroyApp(boolean unconditional)
throws JletStateChangeException
```
**Parameters:**
- `unconditonal` - 만일 true이면 프로그램이 무조건 종료가 되고,
false일때에는 `Jlet`은
`JletStateChangeException`을 던져서 프로그램 종료를 막을
수 있음
**Throws:**
- `JletStateChangeException` - 현재 상태에서 프로그램을 종료할 수
없는 경우. 만일 `unconditional`이 `true`이면, 이 예외를 던진다 해도,
프로그램은 종료됩니다.
### notifyDestroyed
```java
public final void notifyDestroyed()
```
- 프로그램을 종료 시킬때 사용되는 함수.
`Jlet`응용 프로그램을 종료할 때 이 함수를 부릅니다.
이 함수를 부르면 프로그램은 *Destoryed*상태로 들어가며,
차후에 `destroyApp`메써드를 호출합니다.
`Jlet.destroyApp()`를 호출함으로써 프로그램이 가지고 있는
모든 자원을 되돌려 줍니다.
### getAppProperty
```java
public final String getAppProperty(String key)
```
**Parameters:**
- `key` - 찾을 프라퍼티에 대응하는 키
**Returns:**
- 해당하는 프라퍼티
### getEventQueue
```java
public final EventQueue getEventQueue()
```
**Returns:**
- 이벤트 큐
### removeAllResource
```java
public static void removeAllResource(int id)
```## 메서드 상세
### setActiveJlet
```java
public static void setActiveJlet(Jlet ql)
```
- 지정된 `Jlet`을 활성화 시킵니다.
지정된 Jlet을 활성화 시킵니다.
### getActiveJlet
```java
public static Jlet getActiveJlet()
```
**Returns:**
- 현재 상위에서 수행중에 있는 `Jlet`
### getJletFromPID
```java
public static Jlet getJletFromPID(int id)
```
**Returns:**
- ID에 해당하는 `Jlet`
### getCurrentJlet
```java
public static Jlet getCurrentJlet()
```
**Returns:**
- 현재 수행중인 `Jlet`
### getCurrentProgramID
```java
public int getCurrentProgramID()
```
**Parameters:**
- `id` - Jlet을 생성한 프로그램 id
### startApp
```java
protected abstract void startApp(String[] args)
```
**Parameters:**
- `args` - 사용자가 넘기는 인수.
### pauseApp
```java
protected void pauseApp()
```
- 프로그램을 정지하려고 하는 때 불려집니다.
시스템에서 응용 프로그램에게 일시 정지를 요청할때 이 함수를 부릅니다.
프로그램은 사용자의 인터렉션에 의해서 정지할 수도 있습니다.
정지하는 경우에 사용하고 있던 시스템 자원(네트웍, 시리얼등)을
되돌려 줄수 잇도록 구현하셔야 합니다.
### resumeApp
```java
protected void resumeApp()
```
- 정지된 프로그램을 다시 수행을 재기하려할때 불려집니다.
시스템에서 응용 프로그램에게 수행 재기를 요청할때 이 함수를 부릅니다.
`pauseApp`함수로 정지했던 `Jlet`를 다시
기동시키며, 이 함수내에서 `pauseApp`에서 돌려주었던
시스템 자원들(네트웍, 시리얼등)을
다시 할당 받도록 함수를 구현하셔야 합니다.
### destroyApp
```java
protected abstract void destroyApp(boolean unconditional)
throws JletStateChangeException
```
**Parameters:**
- `unconditonal` - 만일 true이면 프로그램이 무조건 종료가 되고,
false일때에는 `Jlet`은
`JletStateChangeException`을 던져서 프로그램 종료를 막을
수 있음
**Throws:**
- `JletStateChangeException` - 현재 상태에서 프로그램을 종료할 수
없는 경우. 만일 `unconditional`이 `true`이면, 이 예외를 던진다 해도,
프로그램은 종료됩니다.
### notifyDestroyed
```java
public final void notifyDestroyed()
```
- 프로그램을 종료 시킬때 사용되는 함수.
`Jlet`응용 프로그램을 종료할 때 이 함수를 부릅니다.
이 함수를 부르면 프로그램은 *Destoryed*상태로 들어가며,
차후에 `destroyApp`메써드를 호출합니다.
`Jlet.destroyApp()`를 호출함으로써 프로그램이 가지고 있는
모든 자원을 되돌려 줍니다.
### getAppProperty
```java
public final String getAppProperty(String key)
```
**Parameters:**
- `key` - 찾을 프라퍼티에 대응하는 키
**Returns:**
- 해당하는 프라퍼티
### getEventQueue
```java
public final EventQueue getEventQueue()
```
**Returns:**
- 이벤트 큐
### removeAllResource
```java
public static void removeAllResource(int id)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface JletEventListener"
---
`package org.kwis.msp.lcdui`
```text
public void notifyEvent(int type,
int param1,
int param2)
```
## 설명
**Parameters:**
- `param2` - 이벤트 파라미터
**See Also:**
- ``Display.addJletEventListener(org.kwis.msp.lcdui.JletEventListener)``## 메서드 요약
- `void notifyEvent (int type, int param1, int param2)` — 응용 프로그램 이벤트가 발생하면 불립니다.
## 메서드 상세
### notifyEvent
```java
public void notifyEvent(int type,
int param1,
int param2)
```
**Parameters:**
- `param2` - 이벤트 파라미터
**See Also:**
- ``Display.addJletEventListener(org.kwis.msp.lcdui.JletEventListener)``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class JletStateChangeException"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--org.kwis.msp.lcdui.JletStateChangeException
```
## 설명
**extends Exception:**
Jlet의 상태를 변경할 수 없는 경우에 생성되는 예외 클래스입니다.
프로그램에 의해서 resumeApp나 destroyApp함수 내부에서 던질 수 있는
예외 클래스입니다.
## 생성자 요약
- JletStateChangeException () 상세 메시지 없이 예외를 생성한다.
- JletStateChangeException ( String str) 상세 메시지를 가지는 예외를 생성한다.
## 생성자 상세
### JletStateChangeException
```java
public JletStateChangeException()
```
- 상세 메시지 없이 예외를 생성한다.
### JletStateChangeException
```java
public JletStateChangeException(String str)
```
**Parameters:**
- `str` - 상세 메시지 문자열
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Main"
---
`package org.kwis.msp.lcdui`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Main
```
## 설명
**extends Object:**
## 생성자 요약
- Main ()
## 메서드 요약
- `static void main ( String [] args)`
## 생성자 상세
### Main
```java
public Main()
```
### main
```java
public static void main(String[] args)
```## 메서드 상세
### main
```java
public static void main(String[] args)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface SystemEventListener"
---
`package org.kwis.msp.lcdui`
```text
public void notifySystemEvent(int type,
int event,
int parm1,
int parm2)
```
## 설명
**Parameters:**
- `param2` - 이벤트 파라미터
**See Also:**## 메서드 요약
- `void notifySystemEvent (int type, int event, int parm1, int parm2)` — 시스템 이벤트가 발생하면 불립니다.
## 메서드 상세
### notifySystemEvent
```java
public void notifySystemEvent(int type,
int event,
int parm1,
int parm2)
```
**Parameters:**
- `param2` - 이벤트 파라미터
**See Also:**
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package org.kwis.msp.lcdui"
---
## Interface Summary
- [ImageObserver](ImageObserver.md) — 이미지의 생성 상태를 볼수 있도록 해주는 인터페이스입니다.
- [InputMethodListener](InputMethodListener.md) — InputMethodHandler 에서 사용사 키 입력에 대해 처리된 문자와 입력 상태- 삽입/삭제/수정-를 감지하기 위한 인터페이스입니다.
- [JletEventListener](JletEventListener.md) — 응용 프로그램( Jlet )의 이벤트를 처리해주는 인터페이스.
- [SystemEventListener](SystemEventListener.md) — 응용 프로그램이 시스템 이벤트를 처리할수 있도록 하는 인터페이스.
## Class Summary
- [Card](Card.md) — 화면에 출력될 수 있는 하나의 단위 클래스입니다.
- [Display](Display.md) — 화면의 출력 관련 함수와 정보를 가지는 클래스입니다.
- [DisplayProxy](DisplayProxy.md) —
- [EventQueue](EventQueue.md) — 시스템에서 발생하는 이벤트를 관리하는 큐 클래스입니다.
- [Font](Font.md) — 글꼴 클래스 입니다.
- [Graphics](Graphics.md) — 간단한 2차 기하학적인 도형을 그리는 기능을 제공합니다.
- [Image](Image.md) — 이미지를 나타내는 클래스입니다.
- [InputMethodHandler](InputMethodHandler.md) — InputMethodHandler 는 사용자 키 입력를 오토마타에게 전달하는 일을 담당합니다.
- [Jlet](Jlet.md) — WIPI 응용 프로그램입니다.
- [Main](Main.md) —
## Exception Summary
- [JletStateChangeException](JletStateChangeException.md) — Jlet의 상태를 변경할 수 없는 경우에 생성되는 예외 클래스입니다.
---
title: "Interface ActionListener"
---
`package org.kwis.msp.lwc`
```text
public void action(Component cmp,
Object o)
```
## 설명
**Parameters:**
- `o` - setActionListener시에 넣은 Object 인수## 메서드 요약
- `void action ( Component cmp, Object o)` — 버튼이나 리스트에서 action이 발생하면 불립니다.
## 메서드 상세
### action
```java
public void action(Component cmp,
Object o)
```
**Parameters:**
- `o` - setActionListener시에 넣은 Object 인수
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class AnnunciatorComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ContainerComponent
|
+--org.kwis.msp.lwc.ShellComponent
|
+--org.kwis.msp.lwc.AnnunciatorComponent
```
## 설명
**extends ShellComponent:**
Annunciator를 나타내기 위한 컴포넌트.
ContainerComponent를 상속 받았지만 addComponent, removeComponent등의 함수를 사용할 수 없다.
사용시 IllegalStateException발생.
이 컴포는트는 Display에 추가 되어 들어 가며
**See Also:**
- ``ShellComponent``,
``ContainerComponent``
Fields inherited from class org.kwis.msp.lwc. ShellComponent cd , cmpCommand , cmpTitle , cmpWork , RESIZE_MASK
Fields inherited from class org.kwis.msp.lwc. ContainerComponent cmpFocus , cmps , insetBottom , insetLeft , insetRight , insetTop , ncomp , offsetX , offsetY , useFrame
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary AnnunciatorComponent (boolean bTrans)
Method Summary void addComponent (int idx, Component cmp) 자식 컴포넌트를 하나 추가합니다. void hide () 컴포넌트를 화면에서 삭제 합니다. void layout () 하위 컴포넌트의 크기와 위치를 결정합니다. protected void paint ( Graphics g) void removeComponent ( Component cmp) 지정된 순서의 컴포넌트를 삭제합니다.
index번째 있는 컴포넌트를 삭제합니다. protected void setParameter () void show () 컴포넌트를 화면상에 보여줍니다.
Methods inherited from class org.kwis.msp.lwc. ShellComponent addComponent , configure , controlInset , getCard , getCommand , getNextTraversalComponent , getPrevTraversalComponent , getTitle , getWorkComponent , getX , getY , grabKey , isShown , keyNotify , processEvent , removeAllComponents , repaint , serviceRepaints , setCommand , setGrabKeyListener , setTitle , setTitle , setWorkComponent , showNotify , ungrabKey
Methods inherited from class org.kwis.msp.lwc. ContainerComponent getComponent , getIndexOf , getNumberOfComponent , paintFrame , removeComponent , repaint , scrollTo , setComponent , useFrame , validate
Methods inherited from class org.kwis.msp.lwc. Component calcPreferredSize , canHandleInput , focusNotify , getBackground , getForeground , getHeight , getPreferredHeight , getPreferredHeight , getPreferredWidth , getWidth , getXOnScreen , getYOnScreen , hasFocus , invalidate , isValid , paintContent , pointerNotify , setBackground , setEventListener , setFocus , setForeground , toString
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### AnnunciatorComponent
Method Detail
### addComponent
**Overrides:**
- `addComponent` in class `ShellComponent`
**Parameters:**
- `cmp` - 넣을 컴포넌트
**Throws:**
- `IllegalStateException` - 항상 발생
### removeComponent
**Overrides:**
- `removeComponent` in class `ShellComponent`
**Parameters:**
- `index` - 삭제할 컴포넌트
**Throws:**
- `IllegalStateException` - 항상발생
### layout
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `ShellComponent`
### setParameter
### show
**Overrides:**
- `show` in class `ShellComponent`
### hide
**Overrides:**
- `hide` in class `ShellComponent`
**Throws:**
- `IllegalStateException` - 항상발생
### paint
**Overrides:**
- `paint` in class `ContainerComponent`## 생성자 요약
- AnnunciatorComponent (boolean bTrans)
## 메서드 요약
- `void addComponent (int idx, Component cmp)` — 자식 컴포넌트를 하나 추가합니다.
- `void hide ()` — 컴포넌트를 화면에서 삭제 합니다.
- `void layout ()` — 하위 컴포넌트의 크기와 위치를 결정합니다.
- `protected void paint ( Graphics g)`
- `void removeComponent ( Component cmp)` — 지정된 순서의 컴포넌트를 삭제합니다. index번째 있는 컴포넌트를 삭제합니다.
- `protected void setParameter ()`
- `void show ()` — 컴포넌트를 화면상에 보여줍니다.
## 생성자 상세
### AnnunciatorComponent
```java
public AnnunciatorComponent(boolean bTrans)
```
### addComponent
```java
public void addComponent(int idx,
Component cmp)
```
**Overrides:**
- `addComponent` in class `ShellComponent`
**Parameters:**
- `cmp` - 넣을 컴포넌트
**Throws:**
- `IllegalStateException` - 항상 발생
### removeComponent
```java
public void removeComponent(Component cmp)
```
**Overrides:**
- `removeComponent` in class `ShellComponent`
**Parameters:**
- `index` - 삭제할 컴포넌트
**Throws:**
- `IllegalStateException` - 항상발생
### layout
```java
public void layout()
```
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `ShellComponent`
### setParameter
```java
protected void setParameter()
```
### show
```java
public void show()
```
**Overrides:**
- `show` in class `ShellComponent`
### hide
```java
public void hide()
```
**Overrides:**
- `hide` in class `ShellComponent`
**Throws:**
- `IllegalStateException` - 항상발생
### paint
```java
protected void paint(Graphics g)
```
**Overrides:**
- `paint` in class `ContainerComponent`## 메서드 상세
### addComponent
```java
public void addComponent(int idx,
Component cmp)
```
**Overrides:**
- `addComponent` in class `ShellComponent`
**Parameters:**
- `cmp` - 넣을 컴포넌트
**Throws:**
- `IllegalStateException` - 항상 발생
### removeComponent
```java
public void removeComponent(Component cmp)
```
**Overrides:**
- `removeComponent` in class `ShellComponent`
**Parameters:**
- `index` - 삭제할 컴포넌트
**Throws:**
- `IllegalStateException` - 항상발생
### layout
```java
public void layout()
```
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `ShellComponent`
### setParameter
```java
protected void setParameter()
```
### show
```java
public void show()
```
**Overrides:**
- `show` in class `ShellComponent`
### hide
```java
public void hide()
```
**Overrides:**
- `hide` in class `ShellComponent`
**Throws:**
- `IllegalStateException` - 항상발생
### paint
```java
protected void paint(Graphics g)
```
**Overrides:**
- `paint` in class `ContainerComponent`
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ButtonComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ButtonComponent
```
## 설명
**extends Component:**
버튼 컴포넌트.
"select"키가 눌렸다 떼어 졌을 때 자신에게 등록된
`ActionListener`를 호출합니다.
버튼은 문자열과 이미지 두개로 구성됩니다.
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary ButtonComponent () 버튼을 생성합니다. ButtonComponent ( String str, Image img) 지정된 Image와 문자열을 버튼을 생성합니다.
Method Summary protected void calcPreferredSize (int w) 컴포넌트의 적절한 크기를 계산합니다. Font getFont () 폰트를 돌려줍니다. Image getImage () 현재 버튼의 이미지를 돌려줍니다. String getString () 현재 버튼의 문자열을 돌려줍니다. boolean keyNotify (int type,
int chr) 키 입력을 받으면 호출됩니다. protected void layout () 하위 컴포넌트의 크기와 위치를 결정합니다. void paintContent ( Graphics g) 내부를 칠합니다. void setActionListener ( ActionListener l, Object o) ActionListener 를 등록합니다. void setFont ( Font ft) 버튼의 폰트를 설정합니다. void setImage ( Image img) 버튼의 이미지을 지정합니다. void setString ( String str) 버튼의 문자열을 지정합니다.
Methods inherited from class org.kwis.msp.lwc. Component canHandleInput , configure , focusNotify , getBackground , getCard , getForeground , getHeight , getPreferredHeight , getPreferredHeight , getPreferredWidth , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , pointerNotify , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , showNotify , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### ButtonComponent
- 버튼을 생성합니다.
### ButtonComponent
**Parameters:**
- `img` - 버튼의 이미지
Method Detail
### setFont
**Parameters:**
- `ft` - 지정할 폰트
### getFont
**Returns:**
- 지정된 폰트
### setActionListener
**Parameters:**
- `o` - 불려질때 넘겨질 인수
**See Also:**
- ``ActionListener.action(org.kwis.msp.lwc.Component, java.lang.Object)``
### keyNotify
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setString
**Parameters:**
- `str` - 지정할 문자열
### getString
**Returns:**
- 현재 버튼의 문자열
### getImage
**Returns:**
- 버튼의 이미지
### setImage
**Parameters:**
- `img` - 지정할 이미지
### paintContent
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### layout
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `Component`
### calcPreferredSize
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`## 생성자 요약
- ButtonComponent () 버튼을 생성합니다.
- ButtonComponent ( String str, Image img) 지정된 Image와 문자열을 버튼을 생성합니다.
## 메서드 요약
- `protected void calcPreferredSize (int w)` — 컴포넌트의 적절한 크기를 계산합니다.
- `Font getFont ()` — 폰트를 돌려줍니다.
- `Image getImage ()` — 현재 버튼의 이미지를 돌려줍니다.
- `String getString ()` — 현재 버튼의 문자열을 돌려줍니다.
- `boolean keyNotify (int type, int chr)` — 키 입력을 받으면 호출됩니다.
- `protected void layout ()` — 하위 컴포넌트의 크기와 위치를 결정합니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setActionListener ( ActionListener l, Object o)` — ActionListener 를 등록합니다.
- `void setFont ( Font ft)` — 버튼의 폰트를 설정합니다.
- `void setImage ( Image img)` — 버튼의 이미지을 지정합니다.
- `void setString ( String str)` — 버튼의 문자열을 지정합니다.
## 생성자 상세
### ButtonComponent
```java
public ButtonComponent()
```
- 버튼을 생성합니다.
### ButtonComponent
```java
public ButtonComponent(String str,
Image img)
```
**Parameters:**
- `img` - 버튼의 이미지
### setFont
```java
public void setFont(Font ft)
```
**Parameters:**
- `ft` - 지정할 폰트
### getFont
```java
public Font getFont()
```
**Returns:**
- 지정된 폰트
### setActionListener
```java
public void setActionListener(ActionListener l,
Object o)
```
**Parameters:**
- `o` - 불려질때 넘겨질 인수
**See Also:**
- ``ActionListener.action(org.kwis.msp.lwc.Component, java.lang.Object)``
### keyNotify
```java
public boolean keyNotify(int type,
int chr)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - 지정할 문자열
### getString
```java
public String getString()
```
**Returns:**
- 현재 버튼의 문자열
### getImage
```java
public Image getImage()
```
**Returns:**
- 버튼의 이미지
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 지정할 이미지
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### layout
```java
protected void layout()
```
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `Component`
### calcPreferredSize
```java
protected void calcPreferredSize(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`## 메서드 상세
### setFont
```java
public void setFont(Font ft)
```
**Parameters:**
- `ft` - 지정할 폰트
### getFont
```java
public Font getFont()
```
**Returns:**
- 지정된 폰트
### setActionListener
```java
public void setActionListener(ActionListener l,
Object o)
```
**Parameters:**
- `o` - 불려질때 넘겨질 인수
**See Also:**
- ``ActionListener.action(org.kwis.msp.lwc.Component, java.lang.Object)``
### keyNotify
```java
public boolean keyNotify(int type,
int chr)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - 지정할 문자열
### getString
```java
public String getString()
```
**Returns:**
- 현재 버튼의 문자열
### getImage
```java
public Image getImage()
```
**Returns:**
- 버튼의 이미지
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 지정할 이미지
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### layout
```java
protected void layout()
```
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `Component`
### calcPreferredSize
```java
protected void calcPreferredSize(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface ChangeListener"
---
`package org.kwis.msp.lwc`
```text
public void changed(Component cmp,
Object o)
```
## 설명
**Parameters:**
- `o` - setChangeListener에서 설정한 Object(확장 파라메터)
**See Also:**
- ``CheckboxComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``CheckboxGroup.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``ListComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``ListComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``ProgressComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``## 메서드 요약
- `void changed ( Component cmp, Object o)` — ChangeListener를 설정한 Component에서 CHANGE 이벤트가 발생한 경우 불리게 됩니다.
## 메서드 상세
### changed
```java
public void changed(Component cmp,
Object o)
```
**Parameters:**
- `o` - setChangeListener에서 설정한 Object(확장 파라메터)
**See Also:**
- ``CheckboxComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``CheckboxGroup.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``ListComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``ListComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``,
``ProgressComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class CheckboxComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.LabelComponent
|
+--org.kwis.msp.lwc.CheckboxComponent
```
## 설명
**extends LabelComponent:**
`CheckboxComponent`는 개별 선택가능한 체크버튼과 라디오버튼을 만들기 위한
클래스 입니다.
`CheckboxGroup`의 지정이 없이 생성되는 `CheckboxComponent`
의 경우는 독립적인 체크박스로 동작하며, `CheckboxGroup`이 지정되는 경우
같은 `CheckboxGroup`으로 묶여진 `CheckboxComponent`들은
역여진 라디오버튼으로 동작하게 됩니다.
동일한 `CheckboxGroup`으로 묶여진 CheckBox 들은 초기 값으로 선택되지
않은 상태로 되며, 그중 맨 처음에 추가 된것만 선택되어진 상태로 초기화 됩니다.
이 값을 바꾸기 위해서는 `setState`를 사용하십시오.
**See Also:**
- ``CheckboxGroup``
Fields inherited from class org.kwis.msp.lwc. LabelComponent layout , m_ft , m_image , m_str
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary CheckboxComponent ( String str, Image img) 새로운 CheckboxComponent 를 생성합니다. CheckboxComponent ( String str, Image img,
boolean bSet) 새로운 CheckboxComponent 를 생성합니다. CheckboxComponent ( String str, Image img, CheckboxGroup cb) 새로운 CheckboxComponent 를 생성합니다.
Method Summary boolean getState () CheckboxComponent 의 선택상태를 구합니다. boolean keyNotify (int type,
int key) 키 입력을 받으면 호출됩니다. void paintContent ( Graphics g) 내부를 칠합니다. void setChangeListener ( ChangeListener listener, Object obj) CheckboxComponent 에 ChangeListener 를 등록 합니다. void setState (boolean bState) CheckboxComponent 의 선택상태를 변경합니다.
Methods inherited from class org.kwis.msp.lwc. LabelComponent calcPreferredSize , getFont , getImage , getLabel , setFont , setImage , setLabel , setLayout
Methods inherited from class org.kwis.msp.lwc. Component canHandleInput , configure , focusNotify , getBackground , getCard , getForeground , getHeight , getPreferredHeight , getPreferredHeight , getPreferredWidth , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , layout , pointerNotify , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , showNotify , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### CheckboxComponent
**Parameters:**
- `img` - 체크박스의 이미지.
**See Also:**
- ``CheckboxComponent(String, Image, CheckboxGroup)``,
``CheckboxComponent(String, Image, boolean)``,
`#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``CheckboxGroup``
### CheckboxComponent
**See Also:**
- ``CheckboxComponent(String, Image)``,
``CheckboxComponent(String, Image, boolean)``,
`#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``CheckboxGroup``
### CheckboxComponent
**See Also:**
- ``CheckboxComponent(String, Image)``,
``CheckboxComponent(String, Image, CheckboxGroup)``,
`#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``setState(boolean)``,
``CheckboxGroup``
Method Detail
### setState
**See Also:**
- ``getState()``
### getState
**See Also:**
- ``setState(boolean)``
### paintContent
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `LabelComponent`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
**Parameters:**
- `obj` - Listener가 불려질때 넘겨 받을 Object (확장 파라메터)
**See Also:**
- ``CheckboxGroup.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``## 생성자 요약
- CheckboxComponent ( String str, Image img) 새로운 CheckboxComponent 를 생성합니다.
- CheckboxComponent ( String str, Image img,
boolean bSet) 새로운 CheckboxComponent 를 생성합니다.
- CheckboxComponent ( String str, Image img, CheckboxGroup cb) 새로운 CheckboxComponent 를 생성합니다.
## 메서드 요약
- `boolean getState ()` — CheckboxComponent 의 선택상태를 구합니다.
- `boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setChangeListener ( ChangeListener listener, Object obj)` — CheckboxComponent 에 ChangeListener 를 등록 합니다.
- `void setState (boolean bState)` — CheckboxComponent 의 선택상태를 변경합니다.
## 생성자 상세
### CheckboxComponent
```java
public CheckboxComponent(String str,
Image img)
```
**Parameters:**
- `img` - 체크박스의 이미지.
**See Also:**
- ``CheckboxComponent(String, Image, CheckboxGroup)``,
``CheckboxComponent(String, Image, boolean)``,
`#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``CheckboxGroup``
### CheckboxComponent
```java
public CheckboxComponent(String str,
Image img,
CheckboxGroup cb)
```
**See Also:**
- ``CheckboxComponent(String, Image)``,
``CheckboxComponent(String, Image, boolean)``,
`#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``CheckboxGroup``
### CheckboxComponent
```java
public CheckboxComponent(String str,
Image img,
boolean bSet)
```
**See Also:**
- ``CheckboxComponent(String, Image)``,
``CheckboxComponent(String, Image, CheckboxGroup)``,
`#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``setState(boolean)``,
``CheckboxGroup``
### setState
```java
public void setState(boolean bState)
```
**See Also:**
- ``getState()``
### getState
```java
public boolean getState()
```
**See Also:**
- ``setState(boolean)``
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `LabelComponent`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
```java
public boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```
**Parameters:**
- `obj` - Listener가 불려질때 넘겨 받을 Object (확장 파라메터)
**See Also:**
- ``CheckboxGroup.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``## 메서드 상세
### setState
```java
public void setState(boolean bState)
```
**See Also:**
- ``getState()``
### getState
```java
public boolean getState()
```
**See Also:**
- ``setState(boolean)``
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `LabelComponent`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
```java
public boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```
**Parameters:**
- `obj` - Listener가 불려질때 넘겨 받을 Object (확장 파라메터)
**See Also:**
- ``CheckboxGroup.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class CheckboxGroup"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.CheckboxGroup
```
## 설명
**extends Object:**
`CheckboxGroup`은 여러개의 `CheckboxComponent`들을 역어 구릅된 라디오버튼 처럼 움직이게
합니다.
하나의 `CheckboxGroup`으로 등록된 `CheckBoxComponent`들은 동시에 여러개가 ON상태가 될 수
없고 동시에는 하나의 `CheckboxComponent`만 ON될수 있습니다.
그러므로 하나의 Checkbox가 ON 되면 다른 모든 Group으로 묵인 Checkbox들은
OFF 가 됩니다.
초기 값으로는 맨 처음에 등록된 CheckboxComponent가 ON이 됩니다.
**See Also:**
- ``CheckboxComponent``
## 생성자 요약
- CheckboxGroup () 새로운 CheckboxGroup을 생성합니다.
## 메서드 요약
- `CheckboxComponent getSelectedCheckbox ()` — 이 CheckboxGroup 에 등록된 Checkbox중 현재 ON 상태인 CheckboxComponent 를 구합니다
- `void select ( CheckboxComponent cb)` — CheckboxGroup 으로 묶여 있는 CheckboxComponent 중에 주어진 컴포넌트를 ON상태로 합니다.
- `void setChangeListener ( ChangeListener listener, Object obj)` — CheckboxGroup 에 ChangeListener 를 등록 합니다.
## 생성자 상세
### CheckboxGroup
```java
public CheckboxGroup()
```
**See Also:**
- ``CheckboxComponent``
### select
```java
public void select(CheckboxComponent cb)
```
**Parameters:**
- `cb` - select할 CheckboxComponent.
**Throws:**
- `NullPointerException` - `cb`가 null인 경우.
**See Also:**
- ``getSelectedCheckbox()``
### getSelectedCheckbox
```java
public CheckboxComponent getSelectedCheckbox()
```
**Returns:**
- 현재 ON상태인 `CheckboxComponent`
**See Also:**
- ``select(org.kwis.msp.lwc.CheckboxComponent)``
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```
**Parameters:**
- `obj` - Listener가 불려질때 넘겨 받을 Object (확장 파라메터)
**See Also:**
- `CheckboxComponent#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``CheckboxComponent.CheckboxComponent(String, Image, CheckboxGroup)``,
``CheckboxComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``## 메서드 상세
### select
```java
public void select(CheckboxComponent cb)
```
**Parameters:**
- `cb` - select할 CheckboxComponent.
**Throws:**
- `NullPointerException` - `cb`가 null인 경우.
**See Also:**
- ``getSelectedCheckbox()``
### getSelectedCheckbox
```java
public CheckboxComponent getSelectedCheckbox()
```
**Returns:**
- 현재 ON상태인 `CheckboxComponent`
**See Also:**
- ``select(org.kwis.msp.lwc.CheckboxComponent)``
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```
**Parameters:**
- `obj` - Listener가 불려질때 넘겨 받을 Object (확장 파라메터)
**See Also:**
- `CheckboxComponent#CheckboxComponent(String, Image, CheckboxGroup, boolean)`,
``CheckboxComponent.CheckboxComponent(String, Image, CheckboxGroup)``,
``CheckboxComponent.setChangeListener(org.kwis.msp.lwc.ChangeListener, java.lang.Object)``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ComboComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ComboComponent
```
## 설명
**extends Component:**
`ComboComponent`는 팝업메뉴 기능을 제공하는 클래스입니다.
`ComboComponent`는 팝업 메뉴 항목 중 선택된 항목를 보여주는
영역과 팝업 메뉴의 리스트를 보여주는 영역으로 나뉘어 있습니다.
선택항목을 보여주는 화면에서 `SELECT`키 입력시 팝업 메뉴 리스트가 보여지며
이 중 어떤 항목를 선택하면 팝업 메뉴 리스트는 화면에서 제거되고 새로운 선택 항목만이
보여지게 됩니다.
`ComboComponent`에서는 선택항목의 변경을 감시할 수 있는
`ChangeListener`를 등록하여 사용할 수 있으며, 팝업메뉴에서 새로운 항목을
선택시 `ChangeListener`의 `changed` 메소드를 호출하게됩니다.
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary ComboComponent () ComboComponent 의 인스턴스를 생성합니다.
Method Summary int append ( String str) 주어진 문자데이타로 팝업메뉴의 새로운 항목을 생성하여 팝업메뉴 리스트의 맨 아래
위치에 추가합니다. void delete (int index) 팝업메뉴 리스트의 주어진 index 위치에 있는 항목을 삭제합니다. int getPreferredHeight () 컴포넌트의 적절한 높이를 결정합니다. int getPreferredHeight (int w) 컴포넌트의 적절한 높이를 결정합니다. int getPreferredWidth () 컴포넌트의 적절한 폭을 결정합니다. int getSelectedIndex () 팝업메뉴 리스트의 항목들 중 선택되어 있는 항목의 인덱스를 구합니다 int getSize () ComboComponent 의 팝업메뉴 리스트 항목들의 개수를 구합니다. String getString () 현재 선택되어 있는 항목의 문자열을 구합니다. int insert (int index, String str) 주어진 index 위치에 주어진 문자데이타로 팝업메뉴의 새로운 항목을
생성하여 팝업메뉴 리스트에 삽입합니다. protected boolean keyNotify (int type,
int key) 키 입력을 받으면 호출됩니다. void paintContent ( Graphics g) 내부를 칠합니다. void select (int index) 팝업메뉴 리스트에서 주어진 index 의 항목을 선택합니다. void set (int index, String str) 주어진 index 위치에 주어진 문자데이타로 팝업메뉴 항목을 생성하여
새로 지정합니다. void setChangeListener ( ChangeListener listener, Object obj) ComboComponent 에서 팝업메뉴 리스트의 항목들 중 선택된 항목이
변경된 경우, 변경상태를 감시할 ChangeListener 를 설정합니다.
Methods inherited from class org.kwis.msp.lwc. Component calcPreferredSize , canHandleInput , configure , focusNotify , getBackground , getCard , getForeground , getHeight , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , layout , pointerNotify , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , showNotify , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### ComboComponent
- `ComboComponent`의 인스턴스를 생성합니다.
Method Detail
### append
**Parameters:**
- `str` - 추가될 문자열
**Returns:**
- 추가된 문자열의 인덱스
**Throws:**
- `IllegalArgumentException` - str이 null 일 경우 발생.
### insert
**Parameters:**
- `index` - 삽입할 항목의 인덱스
**Returns:**
- 삽입된 인덱스값
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
**See Also:**
- ``ListComponent.insert(int, java.lang.String, org.kwis.msp.lcdui.Image)``
### set
**Parameters:**
- `index` - 대치할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
### delete
**Parameters:**
- `index` - 삭제할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
### getString
**Returns:**
- 선택된 항목의 문자열, 선택되지 않은경우 null이 리턴.
### getSize
**Returns:**
- 가지고 있는 항목들의 개수
### getSelectedIndex
**Returns:**
- 선택되어있는 항목의 인덱스. 선택된것이 없는 경우 -1을 리턴.
### getPreferredHeight
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredHeight
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredWidth
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
**Parameters:**
- `obj` - 설정할 Object ,사용하지 않을때는 null을 넣는다. 이 Object는 Change이벤트가 발생되어 ChangeListener의 changed 함수가 불려질때 인자로 넘겨집니다.
### select
**Parameters:**
- `index` - 선택할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
## 생성자 요약
- ComboComponent () ComboComponent 의 인스턴스를 생성합니다.
## 메서드 요약
- `int append ( String str)` — 주어진 문자데이타로 팝업메뉴의 새로운 항목을 생성하여 팝업메뉴 리스트의 맨 아래 위치에 추가합니다.
- `void delete (int index)` — 팝업메뉴 리스트의 주어진 index 위치에 있는 항목을 삭제합니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `int getSelectedIndex ()` — 팝업메뉴 리스트의 항목들 중 선택되어 있는 항목의 인덱스를 구합니다
- `int getSize ()` — ComboComponent 의 팝업메뉴 리스트 항목들의 개수를 구합니다.
- `String getString ()` — 현재 선택되어 있는 항목의 문자열을 구합니다.
- `int insert (int index, String str)` — 주어진 index 위치에 주어진 문자데이타로 팝업메뉴의 새로운 항목을 생성하여 팝업메뉴 리스트에 삽입합니다.
- `protected boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void select (int index)` — 팝업메뉴 리스트에서 주어진 index 의 항목을 선택합니다.
- `void set (int index, String str)` — 주어진 index 위치에 주어진 문자데이타로 팝업메뉴 항목을 생성하여 새로 지정합니다.
- `void setChangeListener ( ChangeListener listener, Object obj)` — ComboComponent 에서 팝업메뉴 리스트의 항목들 중 선택된 항목이 변경된 경우, 변경상태를 감시할 ChangeListener 를 설정합니다.
## 생성자 상세
### ComboComponent
```java
public ComboComponent()
```
- `ComboComponent`의 인스턴스를 생성합니다.
### append
```java
public int append(String str)
```
**Parameters:**
- `str` - 추가될 문자열
**Returns:**
- 추가된 문자열의 인덱스
**Throws:**
- `IllegalArgumentException` - str이 null 일 경우 발생.
### insert
```java
public int insert(int index,
String str)
```
**Parameters:**
- `index` - 삽입할 항목의 인덱스
**Returns:**
- 삽입된 인덱스값
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
**See Also:**
- ``ListComponent.insert(int, java.lang.String, org.kwis.msp.lcdui.Image)``
### set
```java
public void set(int index,
String str)
```
**Parameters:**
- `index` - 대치할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
### delete
```java
public void delete(int index)
```
**Parameters:**
- `index` - 삭제할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
### getString
```java
public String getString()
```
**Returns:**
- 선택된 항목의 문자열, 선택되지 않은경우 null이 리턴.
### getSize
```java
public int getSize()
```
**Returns:**
- 가지고 있는 항목들의 개수
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Returns:**
- 선택되어있는 항목의 인덱스. 선택된것이 없는 경우 -1을 리턴.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
```java
protected boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```
**Parameters:**
- `obj` - 설정할 Object ,사용하지 않을때는 null을 넣는다. 이 Object는 Change이벤트가 발생되어 ChangeListener의 changed 함수가 불려질때 인자로 넘겨집니다.
### select
```java
public void select(int index)
```
**Parameters:**
- `index` - 선택할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
## 메서드 상세
### append
```java
public int append(String str)
```
**Parameters:**
- `str` - 추가될 문자열
**Returns:**
- 추가된 문자열의 인덱스
**Throws:**
- `IllegalArgumentException` - str이 null 일 경우 발생.
### insert
```java
public int insert(int index,
String str)
```
**Parameters:**
- `index` - 삽입할 항목의 인덱스
**Returns:**
- 삽입된 인덱스값
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
**See Also:**
- ``ListComponent.insert(int, java.lang.String, org.kwis.msp.lcdui.Image)``
### set
```java
public void set(int index,
String str)
```
**Parameters:**
- `index` - 대치할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
### delete
```java
public void delete(int index)
```
**Parameters:**
- `index` - 삭제할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
### getString
```java
public String getString()
```
**Returns:**
- 선택된 항목의 문자열, 선택되지 않은경우 null이 리턴.
### getSize
```java
public int getSize()
```
**Returns:**
- 가지고 있는 항목들의 개수
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Returns:**
- 선택되어있는 항목의 인덱스. 선택된것이 없는 경우 -1을 리턴.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
```java
protected boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```
**Parameters:**
- `obj` - 설정할 Object ,사용하지 않을때는 null을 넣는다. 이 Object는 Change이벤트가 발생되어 ChangeListener의 changed 함수가 불려질때 인자로 넘겨집니다.
### select
```java
public void select(int index)
```
**Parameters:**
- `index` - 선택할 항목의 인덱스
**Throws:**
- `IndexOutOfBoundsException` - 인덱스 값이 잘못 지정된 경우
---
title: "Class Command"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Command
```
## 설명
**extends Object:**
사용자가 내릴수 있는 명령을 가르키는 클래스입니다.
사용자가 UI컴포넌트 상에서 사용하고자 하는 커맨드를 정의합니다.
커맨드는 문자열과 이미지로 표현하며 `CommandBarComponent`에
에 등록되어 사용합니다.
이미지의 크기는 20x20pixel이어야 합니다.
**See Also:**
- ``CommandBarComponent``
## 생성자 요약
- Command ( String str, Image img, Image imgActive, Object obj) 커맨드를 생성합니다.
- Command ( String str, Image img, Object obj) 커맨드를 생성합니다.
- Command ( String str, Object obj) 커맨드를 생성합니다.
- Command ( String str, String imgString, Object obj) 커맨드를 생성합니다.
- Command ( String str, String imgString1, String imgString2, Object obj) 커맨드를 생성합니다.
## 메서드 요약
- `Image getActiveImage ()` — 활성화되었을때 사용하는 이미지를 얻어 옵니다.
- `Object getExtObject ()` — 생성시 설정한 Object객체를 돌려줍니다 내부에 저장되어 있는 명령을 확장하기위한 객체돌려줍니다.
- `Image getNormalImage ()` — 일반적인 이미지를 얻어 옵니다.
- `String getString ()` — 명령을 나타내는 문자열을 돌려줍니다.
## 생성자 상세
### Command
```java
public Command(String str,
Object obj)
```
**Parameters:**
- `obj` - 확장Object
### Command
```java
public Command(String str,
Image img,
Object obj)
```
**Parameters:**
- `obj` - 확장Object
### Command
```java
public Command(String str,
Image img,
Image imgActive,
Object obj)
```
**Parameters:**
- `obj` - 확장Object
### Command
```java
public Command(String str,
String imgString,
Object obj)
```
**Parameters:**
- `obj` - 확장Object
### Command
```java
public Command(String str,
String imgString1,
String imgString2,
Object obj)
```
**Parameters:**
- `obj` - 확장Object
### getString
```java
public String getString()
```
**Returns:**
- 명령을 나타내는 문자열
### getExtObject
```java
public Object getExtObject()
```
**Returns:**
- 확장Object
### getNormalImage
```java
public Image getNormalImage()
```
**Returns:**
- 이미지
**See Also:**
- ``Image.loadImage(java.lang.String, org.kwis.msp.lcdui.ImageObserver)``
### getActiveImage
```java
public Image getActiveImage()
```
**Returns:**
- 이미지## 메서드 상세
### getString
```java
public String getString()
```
**Returns:**
- 명령을 나타내는 문자열
### getExtObject
```java
public Object getExtObject()
```
**Returns:**
- 확장Object
### getNormalImage
```java
public Image getNormalImage()
```
**Returns:**
- 이미지
**See Also:**
- ``Image.loadImage(java.lang.String, org.kwis.msp.lcdui.ImageObserver)``
### getActiveImage
```java
public Image getActiveImage()
```
**Returns:**
- 이미지
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class CommandBarComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.CommandBarComponent
```
## 설명
**extends Component:**
Command 컴포넌트.
등록된 하나 이상의 커맨드를 바 형태로 구성합니다.
화면에 현재 화면에 사용자가 내릴 수 있는 명령어를 보여주며,
사용자로 부터 명령을 선택 받습니다.
Active된 Index의 초기값은 -1입니다.
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary CommandBarComponent () 커맨드 바 컴포넌트를 생성합니다.
Method Summary int addCommand ( Command cmd) 커맨드를 하나 추가 시킵니다. int getActiveIndex () 선택된 커맨드의 인덱스를 돌려줍니다. Command getCommand (int index) 커맨드를 돌려줍니다. int getPreferredHeight () 컴포넌트의 적절한 높이를 결정합니다. int getPreferredHeight (int w) 컴포넌트의 적절한 높이를 결정합니다. int getPreferredWidth () 컴포넌트의 적절한 폭을 결정합니다. int getSize () 등록된 커맨드의 개수를 구합니다 protected boolean keyNotify (int type,
int chr) 키 입력을 받으면 호출됩니다. void paintContent ( Graphics g) 내부를 칠합니다. protected boolean pointerNotify (int type,
int x,
int y) 포인터 입력을 받으면 호출됩니다. void removeAll () 모든 커맨드를 삭제합니다. void removeCommand ( Command cmd) 커맨드를 삭제합니다. void setActiveIndex (int index) 선택된 커맨드를 지정합니다. void setCommandListener ( CommandListener cl, Object obj) 커맨드 리스너를 지정합니다.
Methods inherited from class org.kwis.msp.lwc. Component calcPreferredSize , canHandleInput , configure , focusNotify , getBackground , getCard , getForeground , getHeight , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , layout , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , showNotify , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### CommandBarComponent
- 커맨드 바 컴포넌트를 생성합니다.
Method Detail
### getPreferredHeight
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### getSize
**Returns:**
- 등록된 Command의 개수
### addCommand
**Parameters:**
- `cmd` - 추가할 커맨드
**Returns:**
- 추가된 Command의 Index , 실패한경우 -1을 리턴합니다.
**See Also:**
- ``Command``,
``setActiveIndex(int)``
### removeCommand
**Parameters:**
- `cmd` - 삭제할 커맨드
**See Also:**
- ``Command``
### removeAll
**Parameters:**
- `cmd` - 삭제할 커맨드
**See Also:**
- ``Command``
### setActiveIndex
**Parameters:**
- `index` - 선택할 커맨드의 인덱스
### getActiveIndex
**Returns:**
- 선택된 커맨드의 인덱스
### getCommand
**Parameters:**
- `index` - 가져올 커맨드의 인덱스
**Returns:**
- 지정한 커맨드
### setCommandListener
**Parameters:**
- `obj` - commandAction시에 넘어가는 Object
### keyNotify
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### pointerNotify
- **Description copied from class: `Component`**
**Overrides:**
- `pointerNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `y` - 디바이스의 'y'축 좌표
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 이벤트를 이 컴포넌트가 처리했다면,
false를 넘김
### paintContent
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``## 생성자 요약
- CommandBarComponent () 커맨드 바 컴포넌트를 생성합니다.
## 메서드 요약
- `int addCommand ( Command cmd)` — 커맨드를 하나 추가 시킵니다.
- `int getActiveIndex ()` — 선택된 커맨드의 인덱스를 돌려줍니다.
- `Command getCommand (int index)` — 커맨드를 돌려줍니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `int getSize ()` — 등록된 커맨드의 개수를 구합니다
- `protected boolean keyNotify (int type, int chr)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `protected boolean pointerNotify (int type, int x, int y)` — 포인터 입력을 받으면 호출됩니다.
- `void removeAll ()` — 모든 커맨드를 삭제합니다.
- `void removeCommand ( Command cmd)` — 커맨드를 삭제합니다.
- `void setActiveIndex (int index)` — 선택된 커맨드를 지정합니다.
- `void setCommandListener ( CommandListener cl, Object obj)` — 커맨드 리스너를 지정합니다.
## 생성자 상세
### CommandBarComponent
```java
public CommandBarComponent()
```
- 커맨드 바 컴포넌트를 생성합니다.
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### getSize
```java
public int getSize()
```
**Returns:**
- 등록된 Command의 개수
### addCommand
```java
public int addCommand(Command cmd)
```
**Parameters:**
- `cmd` - 추가할 커맨드
**Returns:**
- 추가된 Command의 Index , 실패한경우 -1을 리턴합니다.
**See Also:**
- ``Command``,
``setActiveIndex(int)``
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Parameters:**
- `cmd` - 삭제할 커맨드
**See Also:**
- ``Command``
### removeAll
```java
public void removeAll()
```
**Parameters:**
- `cmd` - 삭제할 커맨드
**See Also:**
- ``Command``
### setActiveIndex
```java
public void setActiveIndex(int index)
```
**Parameters:**
- `index` - 선택할 커맨드의 인덱스
### getActiveIndex
```java
public int getActiveIndex()
```
**Returns:**
- 선택된 커맨드의 인덱스
### getCommand
```java
public Command getCommand(int index)
```
**Parameters:**
- `index` - 가져올 커맨드의 인덱스
**Returns:**
- 지정한 커맨드
### setCommandListener
```java
public void setCommandListener(CommandListener cl,
Object obj)
```
**Parameters:**
- `obj` - commandAction시에 넘어가는 Object
### keyNotify
```java
protected boolean keyNotify(int type,
int chr)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### pointerNotify
```java
protected boolean pointerNotify(int type,
int x,
int y)
```
- **Description copied from class: `Component`**
**Overrides:**
- `pointerNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `y` - 디바이스의 'y'축 좌표
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 이벤트를 이 컴포넌트가 처리했다면,
false를 넘김
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``## 메서드 상세
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### getSize
```java
public int getSize()
```
**Returns:**
- 등록된 Command의 개수
### addCommand
```java
public int addCommand(Command cmd)
```
**Parameters:**
- `cmd` - 추가할 커맨드
**Returns:**
- 추가된 Command의 Index , 실패한경우 -1을 리턴합니다.
**See Also:**
- ``Command``,
``setActiveIndex(int)``
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Parameters:**
- `cmd` - 삭제할 커맨드
**See Also:**
- ``Command``
### removeAll
```java
public void removeAll()
```
**Parameters:**
- `cmd` - 삭제할 커맨드
**See Also:**
- ``Command``
### setActiveIndex
```java
public void setActiveIndex(int index)
```
**Parameters:**
- `index` - 선택할 커맨드의 인덱스
### getActiveIndex
```java
public int getActiveIndex()
```
**Returns:**
- 선택된 커맨드의 인덱스
### getCommand
```java
public Command getCommand(int index)
```
**Parameters:**
- `index` - 가져올 커맨드의 인덱스
**Returns:**
- 지정한 커맨드
### setCommandListener
```java
public void setCommandListener(CommandListener cl,
Object obj)
```
**Parameters:**
- `obj` - commandAction시에 넘어가는 Object
### keyNotify
```java
protected boolean keyNotify(int type,
int chr)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### pointerNotify
```java
protected boolean pointerNotify(int type,
int x,
int y)
```
- **Description copied from class: `Component`**
**Overrides:**
- `pointerNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `y` - 디바이스의 'y'축 좌표
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 이벤트를 이 컴포넌트가 처리했다면,
false를 넘김
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface CommandListener"
---
`package org.kwis.msp.lwc`
```text
public static final int FOCUS_CHANGE
```
## 설명
### SELECT
Method Detail
### commandAction
**Parameters:**
- `type` - 커맨드 선택시 SELECT, 커맨드 포커스 변경시 FOCUS_CHANGE## 필드 요약
- `static int FOCUS_CHANGE`
- `static int SELECT`
## 메서드 요약
- `void commandAction ( Command c, int type, Object obj)` — 커맨드의 내용이 선택되었거나 커맨드의 포커스가 변경되었을 경우에 이 함수를 호출하여 줍니다.
## 필드 상세
### FOCUS_CHANGE
```java
public static final int FOCUS_CHANGE
```
### SELECT
```java
public static final int SELECT
```
### commandAction
```java
public void commandAction(Command c,
int type,
Object obj)
```
**Parameters:**
- `type` - 커맨드 선택시 SELECT, 커맨드 포커스 변경시 FOCUS_CHANGE## 메서드 상세
### commandAction
```java
public void commandAction(Command c,
int type,
Object obj)
```
**Parameters:**
- `type` - 커맨드 선택시 SELECT, 커맨드 포커스 변경시 FOCUS_CHANGE
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Component"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
```
## 설명
**Direct Known Subclasses:**
- `ButtonComponent`, `ComboComponent`, `CommandBarComponent`, `ContainerComponent`, `DateFieldComponent`, `ImageComponent`, `LabelComponent`, `ProgressComponent`, `ScrollbarComponent`, `TextComponent`, `TickerComponent`
**extends Object:**
가장 기본이 되는 화면에 보여지는 클래스입니다.
위치과 크기를 가지며, 사용자의 입력을 받아서 적절한 행동을 하는
클래스입니다.
화면에 보여지는 모든 UI 컴포넌트는 이 클래스를 상속 받아서
구현되어야 합니다.
`Component` 클래스를 상속 받은 자식 클래스들의 상위
부모 컴포넌트 상에서의
위치와 폭과 넓이를 가지며,
배경색과 컴포넌트의 특성(입력 가능인지, 입력 포커스등)을 가집니다.
`Component`클래스는 항상 상위 부모가 있어야 하며,
상위 부모가 없어도 되는
`Component`
는 ``ShellComponent``가 됩니다. 즉, 화면에 적어도 하나 이상의
`ShellComponent`
가 있어야지만, `Component`가 화면에 보이게 됩니다.
컴포넌트는 `addComponent`한 후에 다른 부모 컴포넌트에
더이상 `addComponent`할수 없습니다.
모든 컴포넌트는 자신의 폭과 넓이를 프로그램에 의해서 결정할수 있지만,
때에 따라서는 상위 컴포넌트에 의해서 그 크기가 결정이 됩니다.
예를 들면, `FormComponent`위에 있는
`LabelComponent`와 같은 컴포넌트는 내부의 문자열의 길이에 따라서,
`Component`의 크기가 달라집니다.
수행 도중에 사용자가 컴포넌트의 내용을 변경함으로써, 컴포넌트의 크기가
다시 계산될 필요가 있다면, `invalidate`함수를 호출합니다.
그러면, `Component`가 화면에 보여질 때나,
`paintContent`함수가 호출될 때에
`validate()`함수를 호출하며, 이 함수에 의해 하위 컴포넌트까지
다시 모두 적당한 크기가 계산이 됩니다.
컴포넌트는 자신의 적절한 크기를 계산하여 돌려주는 기능을 가집니다.
컴포넌트의 내용에 따라서 적당한 크기를 돌려주며, 이 함수는 상위의
`ContainerComponent`의 `layout`함수에서
하위 컴포넌트의 크기를 결정하기 위해서
사용됩니다. 포맷팅을 할 수 있는 컴포넌트(`Label`,
`TextField`, `TextArea`)를
위해서 특정 폭을 주었을때 적당한 높이을 얻어오는 함수도 있습니다.
컴포넌트의 크기 결정은 자신이 하는 것이 아니라 상위 컴포넌트가 결정합니다.
그 상위 컴포넌트의 전체 크기는 상위 컴포넌트의 상위 컴포넌트가 합니다.
모든 UI컴포넌트는 맨 마지막 상위 컴포넌트는
항상 `ShellComponent`가 되어야 합니다.
컴포넌트는 이벤트에 대해서 처리할 책임을 가집니다.
만일 컴포넌트의 `CanHandleInput`함수가 `true`를
돌려주면,
그 컴포넌트는 `ContainerComponent`의
`setFocus`함수에 의해서 입력
포커스를 가질 수 있으며, 입력 포커스를 가지는 경우에
`keyNotify`함수가 불릴 수 있습니다.
이외에도 `showNotify`함수와 `focusNotify`함수,
`pointerNotify`함수가 불리며,
특히나 화면에 어떤 내용을 칠해야 하는 경우에는
`paintContent`함수가 불립니다.
`keyNotify`함수나 `pointerNotify`함수는
자기 자신이 이벤트를 처리했으면,
`true`를 돌려줍니다. 그러면, 상위 컴포넌트에
키 이벤트가 전달되지 않습니다.
만일 `false`를 돌려주면, 상위 컴포넌트에 키 이벤트가 전달됩니다.
모든 이벤트에 대해서는 `setEventListener`함수를 통하여
지정된 이벤트 리스너에게 모든 발생한 이벤트를 알려줍니다.
이 이벤트 리스너가 `true`로 돌려주는 경우에는 더 이상
이벤트가 처리되지 않고 `false`로 돌려주는 경우에는
이벤트는 정상적으로 처리 됩니다.
`paintContent`함수를 구현할 때에는
`Graphics`내용이 컴포넌트의 위치와 크기에 맞도록
원점과 클리핑 영역이 변경되어서 되어서 넘어 옵니다.
만일 이 클리핑의 내용을 setClip함수로 변경하거나, `reset`
함수로 재 초기화를 시키면
컴포넌트의 내용이 엉뚱한 곳에 출력되거나 화면에 나중에 나타나는등의
문제가 생길 수 있습니다.
에서 제공하고 있는 정렬형태는
와
,
,
,
,
입니다.
아래의 경우
이 발생합니다.
- `LAYOUT_LEFT`|`LAYOUT_RIGHT`
- ```java
LAYOUT_LEFT|LAYOUT_HCENTER
LAYOTU_RIGHT|LAYOUT_HCENTER
```
- `LAYOUT_TOP`|`LAYOUT_BOTTOM`
- `LAYOUT_TOP`|`LAYOUT_VCENTER`
- `LAYOUT_BOTTOM`|`LAYOUT_VCENTER`
**Since:**
- qtp 1.0
## 필드 요약
- `protected int bg` — 배경색.
- `protected EventListener evtListener`
- `protected Object evtListenerObj`
- `protected int fg` — 전경색 기본값은 각 컴포넌트에 따라 다르게 지정됩니다.
- `static int FOCUS_NOTIFY` — 포커스가 왔음을 알리는 상수. 1로 지정되어 있습니다.
- `protected int h` — 컴포넌트의 높이의 픽셀 크기.
- `protected static int HAS_FOCUS_MASK`
- `protected static int INPUT_MASK`
- `static int KEY_NOTIFY` — 키 관련 이벤트가 생성됨을 알리는 상수. 3로 지정되어 있습니다.
- `static int KEY_PRESSED` — 키가 눌렸을 때 이벤트 타입.
- `static int KEY_RELEASED` — 키가 떼어졌을 때 이벤트 타입.
- `static int KEY_REPEATED` — 키가 반복해서 눌렸을 때 이벤트 타입.
- `static int KEY_TYPED` — 키가 눌렸을때 이벤트 타입.
- `static int LAYOUT_BOTTOM` — Component 의 아래쪽 정렬값.
- `static int LAYOUT_HCENTER` — Component 의 가운데 수평 정렬 값.
- `static int LAYOUT_LEFT` — Component 의 좌측 정렬 값.
- `static int LAYOUT_RIGHT` — Component 의 우측 정렬 값.
- `static int LAYOUT_TOP` — Component 의 위쪽 정렬값.
- `static int LAYOUT_VCENTER` — Component 의 가운데 수직 정렬 값.
- `protected int mask`
- `protected ContainerComponent parent` — 상위 부모 컴포넌트.
- `static int POINT_DRAGGED` — 포인터 기기가 눌린 상태에서 움직였을때 이벤트 타입.
- `static int POINT_PRESSED` — 포인터 기기가 눌렸을 때 이벤트 타입.
- `static int POINT_RELEASED` — 포인터 기기가 떼어졌을 때 이벤트 타입.
- `static int POINTER_NOTIFY` — 포인터 관련 이벤트가 생성됨을 알리는 상수. 4로 지정되어 있습니다.
- `static int POS_MASK` — 위치 이동이 됨을 알리는 상수.
- `protected static int PREFER_SIZE_MASK`
- `protected int prefH`
- `protected int prefW`
- `static int SHOW_NOTIFY` — 보여지거나 가려짐을 알리는 상수. 2로 지정되어 있습니다.
- `static int SIZE_MASK` — 크기 변경이 됨을 알리는 상수.
- `protected static int VALID_MASK`
- `protected int w` — 컴포넌트의 폭의 픽셀 크기.
- `protected int x` — 상위 부모 Component로 부터의 x축 픽셀 위치.
- `protected int y` — 상위 부모 Component로 부터의 y축 픽셀 위치.
## 생성자 요약
- `protected Component ()`
## 메서드 요약
- `protected void calcPreferredSize (int w)` — 컴포넌트의 적절한 크기를 계산합니다.
- `boolean canHandleInput ()` — 컴포넌트가 입력을 받을 수 있는 여부를 돌려줍니다.
- `void configure (int x, int y, int w, int h, int mask)` — 컴포넌트의 위치나 크기를 변경합니다.
- `void focusNotify (boolean b)` — 포커스를 받으면 호출됩니다.
- `int getBackground ()` — 배경색을 돌려 줍니다.
- `Card getCard ()` — 현재 컴포넌트에 연결된 카드를 돌려줍니다.
- `int getForeground ()` — 전경생을 돌려줍니다.
- `int getHeight ()` — 컴포넌트의 높이를 돌려 줍니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `int getWidth ()` — 컴포넌트의 폭을 돌려 줍니다.
- `int getX ()` — x축의 좌표를 돌려줍니다.
- `int getXOnScreen ()` — 화면상에 대응되는 실제 좌표를 구합니다.
- `int getY ()` — y축의 좌표를 돌려줍니다.
- `int getYOnScreen ()` — 화면상에 대응되는 실제 좌표를 구합니다.
- `boolean hasFocus ()` — 컴포넌트가 입력 포커스를 가지고 있는지의 여부를 돌려줍니다.
- `void invalidate ()` — 컴포넌트가 유효한 좌표와 크기를 가지 않음을 알려줍니다.
- `boolean isShown ()` — 현재 컴포넌트가 보이는지 안보이는지 여부를 돌려줍니다.
- `protected boolean isValid ()` — 컴포넌트가 유효한 좌표와 크기를 가지는지 여부를 돌려줍니다.
---
title: "Class ContainerComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ContainerComponent
```
## 설명
**Direct Known Subclasses:**
- `FormComponent`, `ShellComponent`
**extends Component:**
다른 컴포넌트의 상위 부모 컴포넌트가 될수 있는 컴포넌트.
자식 컴포넌트의 위치와 크기를 결정해 주며, 포커스 관리를
해줍니다.
컴포넌트는 `addComponent`함수로 자식 컴포넌트로
등록할 수 있으며, `removeComponent`함수로
삭제할 수 있습니다.
컴포넌트는 상위 부모 컴포넌트가 있으며, 그 맨 상위 부모
컴포넌트가 ShellComponent이며 show함수로 보여질 때 화면에
나타나게 됩니다.
컨테이너 컴포넌트는 `layout`함수를 통해서 하위
자식 컴포넌트들의 크기와 위치를 결정해줍니다.
컨테이너 내에는 인셋(Inset)이 있어 하위 자식 컴포넌트들이
인셋내부에만 나타나고, 인셋 밖에는 출력되지 않도록 되어 있습니다.
특정 컴포넌트가 키 입력을 받기 위해서는 `setFocus`
함수를 호출해 주어야만 합니다.
**See Also:**
- ``ShellComponent``,
``Component``
## 필드 요약
- `protected Component cmpFocus`
- `protected Component [] cmps`
- `protected short insetBottom`
- `protected short insetLeft`
- `protected short insetRight`
- `protected short insetTop`
- `protected int ncomp`
- `protected int offsetX`
- `protected int offsetY`
- `protected boolean useFrame` — 프레임의 사용여부.
## 생성자 요약
- `protected ContainerComponent ()`
## 메서드 요약
- `int addComponent ( Component cmp)` — 자식 컴포넌트를 하나 추가합니다.
- `void addComponent (int index, Component cmp)` — 자식 컴포넌트를 하나 추가합니다.
- `protected void controlInset (boolean flag)` — ContainerComponent 에서 사용할 테두리 두께값을 제어합니다.
- `Component getComponent (int i)` — 특정 stack 순서의 컴포넌트를 가져옵니다.
- `int getIndexOf ( Component cmp)` — 컴포넌트의 stack 순서를 가져옵니다.
- `protected Component getNextTraversalComponent ()` — 포커스 가질 수 있는 다음 컴포넌트를 돌려줍니다.
- `int getNumberOfComponent ()` — 등록된 Component의 수를 수합니다
- `protected Component getPrevTraversalComponent ()` — 포커스 가질 수 있는 이전 컴포넌트를 돌려줍니다.
- `protected boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `protected void paint ( Graphics g)`
- `protected void paintFrame ( Graphics g)` — useFrame 의 인수를 true 으로 호출하는 경우에 화면을 그릴때 호출됩니다.
- `protected boolean processEvent (int type, int subtype, int param1, int param2)` — 이벤트를 처리합니다.
- `void removeAllComponents ()` — 모든 컴포넌트를 삭제합니다.
- `void removeComponent ( Component cmp)` — 지정된 컴포넌트를 삭제합니다.
- `void removeComponent (int index)` — 지정된 순서의 컴포넌트를 삭제합니다. index번째 있는 컴포넌트를 삭제합니다.
- `void repaint ()` — 화면의 내용을 갱신할 필요가 있을때 부릅니다.
- `void repaint (int x, int y, int w, int h)` — 화면의 내용을 갱신할 필요가 있을때 부릅니다.
- `protected boolean scrollTo (int dx, int dy)` — 특정 위치로 화면을 이동합니다.
- `void setComponent (int index, Component cmp)` — 자식 컴포넌트를 하나 대치합니다.
- `void useFrame (boolean useFrame)` — ContainterComponent 에서 테두리를 화면에 출력할 것인지를 지정합니다.
- `void validate ()` — 컴포넌트에 유효한 좌표와 크기를 가지게 합니다.
## 필드 상세
### cmps
```java
protected Component[] cmps
```
### ncomp
```java
protected int ncomp
```
### cmpFocus
```java
protected Component cmpFocus
```
### offsetX
```java
protected int offsetX
```
### offsetY
```java
protected int offsetY
```
### insetTop
```java
protected short insetTop
```
### insetBottom
```java
protected short insetBottom
```
### insetLeft
```java
protected short insetLeft
```
### insetRight
```java
protected short insetRight
```
### useFrame
```java
protected boolean useFrame
```
- 프레임의 사용여부.
### ContainerComponent
```java
protected ContainerComponent()
```
### addComponent
```java
public void addComponent(int index,
Component cmp)
```
**Parameters:**
- `cmp` - 넣을 컴포넌트
**Throws:**
- `NullPointerException` - `cmp`이 `null`인 경우
### addComponent
```java
public int addComponent(Component cmp)
```
**Parameters:**
- `cmp` - 추가할 자식 컴포넌트
**Throws:**
- `NullPointerException` - `cmp`이 `null`인 경우
### setComponent
```java
public void setComponent(int index,
Component cmp)
```
**Parameters:**
- `cmp` - 바뀔 컴포넌트
**Throws:**
## 생성자 상세
### ContainerComponent
```java
protected ContainerComponent()
```
### addComponent
```java
public void addComponent(int index,
Component cmp)
```
**Parameters:**
- `cmp` - 넣을 컴포넌트
**Throws:**
- `NullPointerException` - `cmp`이 `null`인 경우
### addComponent
```java
public int addComponent(Component cmp)
```
**Parameters:**
- `cmp` - 추가할 자식 컴포넌트
**Throws:**
- `NullPointerException` - `cmp`이 `null`인 경우
### setComponent
```java
public void setComponent(int index,
Component cmp)
```
**Parameters:**
- `cmp` - 바뀔 컴포넌트
**Throws:**
## 메서드 상세
### addComponent
```java
public void addComponent(int index,
Component cmp)
```
**Parameters:**
- `cmp` - 넣을 컴포넌트
**Throws:**
- `NullPointerException` - `cmp`이 `null`인 경우
### addComponent
```java
public int addComponent(Component cmp)
```
**Parameters:**
- `cmp` - 추가할 자식 컴포넌트
**Throws:**
- `NullPointerException` - `cmp`이 `null`인 경우
### setComponent
```java
public void setComponent(int index,
Component cmp)
```
**Parameters:**
- `cmp` - 바뀔 컴포넌트
**Throws:**
---
title: "Class DateFieldComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.DateFieldComponent
```
## 설명
**extends Component:**
`DateFieldComponent`는 날짜와 시간을 보여주는 필드를 화면에 표시해주고
이 값을 수정할 수 있습니다.
`DateFieldComponent`를 생성할 때 지정한 모드에 관계없이 시스템에 설정된
기본 ``TimeZone``과 ``Date``를 사용하여 현재 시간과
날짜로 초기화된 데이타를 가지게 됩니다. 이 값은 `getDate,setDate`를 통해서
값을 얻어오거나 수정할 수 있습니다.
`DateFieldComponent`의 날짜와 시간은 지정한 모드에 따라 화면에 출력되고
그 값을 방향키 입력에 의해서 수정할 수 있습니다.
`DateFieldComponent`에서는 시간과 날짜를 지정하거나 수정 할 수 있는
3가지 타입의 모드를 제공합니다.
- ``MODE_TIME``는 시간을 보여주는 필드를 화면에 출력하고 시간을 수정할 수
있습니다.
- ``MODE_DATE``는 날짜을 보여주는 필드를 화면에 출력하고 날짜를
수정할 수 있습니다.
- ``MODE_TIME_DATE``는 날짜와 시간을 보여주는 필드를 화면에
출력하고 각 시간과 날짜를 수정할 수 있습니다.
**See Also:**
- ``Date``,
``Calendar``,
``TimeZone``
## 필드 요약
- `static int MODE_DATE` — 날자 표시모드.
- `static int MODE_TIME` — 시간 표시모드.
- `static int MODE_TIME_DATE` — 날자와 시간 표시모드.
## 생성자 요약
- DateFieldComponent (int mode) 시스템의 기본 TimeZone 과 Date 를 사용하여
현재 시간과 날짜로 초기화된 DateFieldComponent 의 인스턴스를
생성합니다.
## 메서드 요약
- `Date getDate ()` — DateFieldComponent 에서 현재 설정되어 있는 날짜 정보를 가지고 있는 Date 객체를 얻어옵니다.
- `int getMode ()` — DateFieldComponent 에 설정된 모드를 얻어 옵니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `String getStringValue (int mode)` — 인자로 주어진 모드값에 따라 날짜나 시간 값을 스트링 형태로 얻어 옵니다.
- `TimeZone getTimeZone ()` — DateFieldComponent 에 설정되어 있는 TimeZone 을 얻어 옵니다.
- `boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setDate ( Date dt)` — DateFieldComponent 에 Date 를 설정합니다.
- `void setMode (int mode)` — DateFieldComponent 의 모드를 설정합니다.
- `void setTimeZone ( TimeZone tz)` — DateFieldComponent 의 TimeZone 을 설정합니다.
- `protected void showNotify (boolean bShow)` — 화면의 내용이 보이면 호출됩니다.
## 필드 상세
### MODE_TIME
```java
public static final int MODE_TIME
```
- 시간 표시모드.
이 모드를 사용하면 `DateFieldComponent`에서는 시간을 보여주는
필드를 화면에 출력하고 시간을 수정할 수 있습니다.
`MODE_TIME`값으로 '0'이 지정되어 있습니다.
### MODE_DATE
```java
public static final int MODE_DATE
```
- 날자 표시모드.
이 모드를 사용하면 `DateFieldComponent`에서는 날짜를 보여주는 필드를
화면에 출력하고 날짜를 수정할 수 있습니다.
`MODE_DATE`값으로 '1'이 지정되어 있습니다.
### MODE_TIME_DATE
```java
public static final int MODE_TIME_DATE
```
- 날자와 시간 표시모드.
이 모드를 사용하면 `DateFieldComponent`에서는 시간과 날짜을
보여주는 필드를 화면에 출력하고 시간과 날짜를 수정할 수 있습니다.
`MODE_TIME_DATE`값으로 '2'이 지정되어 있습니다.
### DateFieldComponent
```java
public DateFieldComponent(int mode)
```
**Parameters:**
- `mode` - 생성할 `DateFieldComponent`의 모드값
**Throws:**
- `IllegalArgumentException` - 선언된 3가지모드 -
`MODE_TIME,MODE_DATE,MODE_DATE`- 외의 값을 지정한 경우
**See Also:**
- ``MODE_TIME``,
``MODE_DATE``,
``MODE_TIME_DATE``,
``TimeZone``,
``Date``
### getDate
```java
public Date getDate()
```
**See Also:**
- ``setDate(Date dt)``,
``Date``
### getMode
```java
public int getMode()
```
**See Also:**
- ``setMode(int mode)``
### getTimeZone
```java
public TimeZone getTimeZone()
```
**Returns:**
- `DateFieldComponent`에 설정된 `TimeZone`
**See Also:**
- ``setTimeZone(TimeZone tz)``,
``TimeZone``
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Component`**
**Overrides:**
- `showNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `bShow` - 컴포넌트가 나타나는지 안나타나는지 여부
### setDate
```java
public void setDate(Date dt)
```
**Parameters:**
- `dt` - `DateFieldComponent`에 설정할 Date객체
**Throws:**
- `NullPointerException` - Date가 null인경우
**See Also:**
- ``getDate()``,
``Date``
### setMode
```java
public void setMode(int mode)
```
**Parameters:**
- `mode` - `DateFieldComponent`에 설정할 모드
**Throws:**
- `IllegalArgumentException` - 지정된 모드외의 값이 인자로 주어진 경우
**See Also:**
- ``getMode()``,
``MODE_TIME``,
``MODE_DATE``,
``MODE_TIME_DATE``
### setTimeZone
```java
public void setTimeZone(TimeZone tz)
```
**Parameters:**
- `tz` - `DateFieldComponent`에 설정할 `TimeZone`
**Throws:**
- `NullPointerException` - TimeZone이 null인경우
**See Also:**
- ``getTimeZone()``,
``TimeZone``
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
- 而댄щ
## 생성자 상세
### DateFieldComponent
```java
public DateFieldComponent(int mode)
```
**Parameters:**
- `mode` - 생성할 `DateFieldComponent`의 모드값
**Throws:**
- `IllegalArgumentException` - 선언된 3가지모드 -
`MODE_TIME,MODE_DATE,MODE_DATE`- 외의 값을 지정한 경우
**See Also:**
- ``MODE_TIME``,
``MODE_DATE``,
``MODE_TIME_DATE``,
``TimeZone``,
``Date``
### getDate
```java
public Date getDate()
```
**See Also:**
- ``setDate(Date dt)``,
``Date``
### getMode
```java
public int getMode()
```
**See Also:**
- ``setMode(int mode)``
### getTimeZone
```java
public TimeZone getTimeZone()
```
**Returns:**
- `DateFieldComponent`에 설정된 `TimeZone`
**See Also:**
- ``setTimeZone(TimeZone tz)``,
``TimeZone``
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Component`**
**Overrides:**
- `showNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `bShow` - 컴포넌트가 나타나는지 안나타나는지 여부
### setDate
```java
public void setDate(Date dt)
```
**Parameters:**
- `dt` - `DateFieldComponent`에 설정할 Date객체
**Throws:**
- `NullPointerException` - Date가 null인경우
**See Also:**
- ``getDate()``,
``Date``
### setMode
```java
public void setMode(int mode)
```
**Parameters:**
- `mode` - `DateFieldComponent`에 설정할 모드
**Throws:**
- `IllegalArgumentException` - 지정된 모드외의 값이 인자로 주어진 경우
**See Also:**
- ``getMode()``,
``MODE_TIME``,
``MODE_DATE``,
``MODE_TIME_DATE``
### setTimeZone
```java
public void setTimeZone(TimeZone tz)
```
**Parameters:**
- `tz` - `DateFieldComponent`에 설정할 `TimeZone`
**Throws:**
- `NullPointerException` - TimeZone이 null인경우
**See Also:**
- ``getTimeZone()``,
``TimeZone``
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
- 而댄щ
## 메서드 상세
### getDate
```java
public Date getDate()
```
**See Also:**
- ``setDate(Date dt)``,
``Date``
### getMode
```java
public int getMode()
```
**See Also:**
- ``setMode(int mode)``
### getTimeZone
```java
public TimeZone getTimeZone()
```
**Returns:**
- `DateFieldComponent`에 설정된 `TimeZone`
**See Also:**
- ``setTimeZone(TimeZone tz)``,
``TimeZone``
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Component`**
**Overrides:**
- `showNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `bShow` - 컴포넌트가 나타나는지 안나타나는지 여부
### setDate
```java
public void setDate(Date dt)
```
**Parameters:**
- `dt` - `DateFieldComponent`에 설정할 Date객체
**Throws:**
- `NullPointerException` - Date가 null인경우
**See Also:**
- ``getDate()``,
``Date``
### setMode
```java
public void setMode(int mode)
```
**Parameters:**
- `mode` - `DateFieldComponent`에 설정할 모드
**Throws:**
- `IllegalArgumentException` - 지정된 모드외의 값이 인자로 주어진 경우
**See Also:**
- ``getMode()``,
``MODE_TIME``,
``MODE_DATE``,
``MODE_TIME_DATE``
### setTimeZone
```java
public void setTimeZone(TimeZone tz)
```
**Parameters:**
- `tz` - `DateFieldComponent`에 설정할 `TimeZone`
**Throws:**
- `NullPointerException` - TimeZone이 null인경우
**See Also:**
- ``getTimeZone()``,
``TimeZone``
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
- 而댄щ
---
title: "Class Decorator"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Decorator
```
## 설명
**extends Object:**
## 필드 요약
- `static int backgroundColor`
- `static int BKGND_COLOR`
- `static int DARK_SHADOW_COLOR`
- `static int darkShadowColor`
- `static int FOCUS_COLOR`
- `static int focusColor`
- `static int HIGH_LIGHT_COLOR`
- `static int highLightColor`
- `static int LIGHT_COLOR`
- `static int lightColor`
- `static int MENU_FONT`
- `static int NORMAL_COLOR`
- `static int normalColor`
- `static int SELECTED_COLOR`
- `static int selectedColor`
- `static int SHADOW_COLOR`
- `static int shadowColor`
- `static int TEXT_COLOR`
- `static int textColor`
## 생성자 요약
- Decorator ()
## 메서드 요약
- `static int getColor (int index)`
- `static int getDarkShadowColor (int color)`
- `static int getHighLightColor (int color)`
- `static int getLightColor (int color)`
- `static int getShadowColor (int color)`
## 필드 상세
### HIGH_LIGHT_COLOR
```java
public static final int HIGH_LIGHT_COLOR
```
### LIGHT_COLOR
```java
public static final int LIGHT_COLOR
```
### NORMAL_COLOR
```java
public static final int NORMAL_COLOR
```
### SHADOW_COLOR
```java
public static final int SHADOW_COLOR
```
### DARK_SHADOW_COLOR
```java
public static final int DARK_SHADOW_COLOR
```
### TEXT_COLOR
```java
public static final int TEXT_COLOR
```
### BKGND_COLOR
```java
public static final int BKGND_COLOR
```
### FOCUS_COLOR
```java
public static final int FOCUS_COLOR
```
### SELECTED_COLOR
```java
public static final int SELECTED_COLOR
```
### lightColor
```java
public static int lightColor
```
### highLightColor
```java
public static int highLightColor
```
### normalColor
```java
public static int normalColor
```
### shadowColor
```java
public static int shadowColor
```
### darkShadowColor
```java
public static int darkShadowColor
```
### backgroundColor
```java
public static int backgroundColor
```
### focusColor
```java
public static int focusColor
```
### textColor
```java
public static int textColor
```
### selectedColor
```java
public static int selectedColor
```
### MENU_FONT
```java
public static final int MENU_FONT
```
### Decorator
```java
public Decorator()
```
### getColor
```java
public static int getColor(int index)
```
### getDarkShadowColor
```java
public static int getDarkShadowColor(int color)
```
### getShadowColor
```java
public static int getShadowColor(int color)
```
### getLightColor
```java
public static int getLightColor(int color)
```
### getHighLightColor
```java
public static int getHighLightColor(int color)
```## 생성자 상세
### Decorator
```java
public Decorator()
```
### getColor
```java
public static int getColor(int index)
```
### getDarkShadowColor
```java
public static int getDarkShadowColor(int color)
```
### getShadowColor
```java
public static int getShadowColor(int color)
```
### getLightColor
```java
public static int getLightColor(int color)
```
### getHighLightColor
```java
public static int getHighLightColor(int color)
```## 메서드 상세
### getColor
```java
public static int getColor(int index)
```
### getDarkShadowColor
```java
public static int getDarkShadowColor(int color)
```
### getShadowColor
```java
public static int getShadowColor(int color)
```
### getLightColor
```java
public static int getLightColor(int color)
```
### getHighLightColor
```java
public static int getHighLightColor(int color)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class DialogComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ContainerComponent
|
+--org.kwis.msp.lwc.ShellComponent
|
+--org.kwis.msp.lwc.DialogComponent
```
## 설명
**extends ShellComponent:**
`DialogComponent`는 다양한 형태의 다이알로그박스를 지원하기 위해서
만들어진 컴포넌트입니다.
기본적으로 `DialogComponent`는 타이틀영역과 데이타 영역,
버튼영역으로 구성되어있습니다.
타이틀영역을 다이알로그박스의 타이틀이 존재하는 경우 타이틀을 출력해주는 영역이고,
데이타 영역을 사용자에 의해서 주가된 여러 형태의 컴포넌트를 출력해주는 영역이며,
버튼영역은 각 타입에 따라 사용되는 버튼을 출력해주는 영역입니다.
각 영역의 위치는 변경할 수 없으며, 단지 각 영역의 문자 데이타나 컴포넌트만을 변경할
수 있습니다.
의 데이타 영역에는 한개의
만을
추가 할 수 있습니다. 따라서 여러개의
를 가지는 다이알로그를
만들려면
를 활용하여 데이타 영역에 추가합니다.
`DialogComponent`에서는 기본적으로 3가지 타입을 지원하고 있습니다.
확인기능을 제공하는 `TYPE_OK`타입과 확인과 취소기능을 제공하는
`TYPE_OK_CANCEL` 타입,일정 시간동안 화면에 데이타를 출력해주는
기능을 제공하는 `TYPE_NONE`입니다.
`TYPE_NONE`의 경우 기본적으로 화면에 출력되는 시간은
3초이며, 이 시간값을 ``setTimeout(int)``메소드를 통해서 사용자가 지정할 수 있습니다.
타입이 `TYPE_NONE`인경우 `TIMEOUT_INFINITE`값을
`timeout`값으로 지정하면 `TYPE_OK`로 타입이 변경됩니다.
타입값이 잘못 지정된 경우, 즉 `TYPE_NONE,TYPE_OK,TYPE_OK_CANCEL`이외의
값이 지정된 경우, `IllegalArgumentException`발생됩니다.
## 필드 요약
- `protected int actionState` — 현재 어떤 액션(이벤트)이 발생한 것인지를 기억하는 필드.
- `static int CANCEL_BUTTON` — CANCEL 버튼타입.
- `static int DLG_CANCEL` — doModal 시 리턴되는 값으로 CANCEL 버튼이 선택되었음을 나타냄.
- `static int DLG_OK` — doModal 시 리턴되는 값으로 OK 버튼이 선택되었음을 나타냄.
- `static int DLG_TIMEOUT` — doModal 시 리턴되는 값으로 TIMEOUT 되어 종료된것을 나타냄.
- `static int OK_BUTTON` — OK 버튼타입.
- `static int TIMEOUT_INFINITE` — timeout 값 중 무한대의 값을 나타냄.
- `static int TYPE_NONE` — 버튼이 없는 형태의 다이알로그타입.
- `static int TYPE_OK` — OK 버튼만 있는 형태의 다이알로그타입.
- `static int TYPE_OK_CANCEL` — OK ,CANCEL 버튼이 있는 형태의 다이알로그타입.
## 생성자 요약
- DialogComponent ( Component cmp, String title,
int type) 새로운 DialogComponent 의 인스턴스를 생성합니다.
- DialogComponent ( Component cmp, String ttl,
int type,
int x,
int y,
int w,
int h) 새로운 DialogComponent 의 인스턴스를 생성합니다.
- DialogComponent (int type) 데이타 컴포넌트와 타이들이 없고 주어진 타입을 가지는 새로운 DialogComponent 의 인스턴스를 생성합니다.
## 메서드 요약
- `int doModal ()` — DialogComponent 를 화면에 나타나게 합니다.
- `int getActionState ()` — DialogComponent 에서 발생한 마지막 액션을 얻어옵니다.
- `int getTimeout ()` — 현재 설정되어 있는 타임아웃값을 얻어옵니다.
- `void layout ()` — 하위 컴포넌트의 크기와 위치를 결정합니다.
- `protected void paintFrame ( Graphics g)` — useFrame 의 인수를 true 으로 호출하는 경우에 화면을 그릴때 호출됩니다.
- `void setButtonString (int buttonType, String buttonStr)` — 버튼의 문자를 지정합니다.
- `void setTimeout (int timeout)` — DialogComponent 를 화면에 보여줄 타임아웃 시간을 지정합니다.
- `void setType (int type)` — DialogComponent 의 타입을 지정합니다.
- `void show ()` — 컴포넌트를 화면상에 보여줍니다.
---
title: "Interface EventListener"
---
`package org.kwis.msp.lwc`
```text
public boolean eventNotify(int type,
int arg1,
int arg2,
int arg3,
Object obj)
```
## 설명
**Parameters:**
- `obj` - setEventListner에서 설정한 Object## 메서드 요약
- `boolean eventNotify (int type, int arg1, int arg2, int arg3, Object obj)` — 컴포넌트에서 Key, Show, Focus, Pointer이벤트가 발생한경우 이 함수를 호출하여 줍니다.
## 메서드 상세
### eventNotify
```java
public boolean eventNotify(int type,
int arg1,
int arg2,
int arg3,
Object obj)
```
**Parameters:**
- `obj` - setEventListner에서 설정한 Object
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class FormComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ContainerComponent
|
+--org.kwis.msp.lwc.FormComponent
```
## 설명
**Direct Known Subclasses:**
- `ListComponent`
**extends ContainerComponent:**
다양한 컴포넌트를 일렬로 배열하여 화면을 구성하는 컴포넌트.
`FormComponent`는 `ContainerComponent`를 확장하여
자식 컴포넌트로서 다양한 컴포넌트를 담아서 화면을 구성하는
컴포넌트입니다. 또한 각 컴포넌트들의 배치와 스크롤 여부를 관리합니다.
자식 컴포넌트들이 포커스 이동은 상하만 동작하도록 되어 있습니다.
UP/DOWN키를 사용하여 자식 컴포넌트들의 포커스 이동을 할 수 있습니다.
내부의 컴포넌트가 많으면 자동적으로 scrollbar가 생성되도록
되어 있습니다.
Fields inherited from class org.kwis.msp.lwc. ContainerComponent cmpFocus , cmps , insetBottom , insetLeft , insetRight , insetTop , ncomp , offsetX , offsetY , useFrame
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary FormComponent () 폼 컴포넌트를 생성합니다. FormComponent (boolean bVertical) 폼 컴포넌트를 생성합니다.
Method Summary protected void calcPreferredSize (int cw) 컴포넌트의 적절한 크기를 계산합니다. void focusNotify (boolean b) 포커스를 받으면 호출됩니다. int getGab () 컴포넌트 간의 간격을 돌려줍니다. protected Component getNextTraversalComponent () 포커스 가질 수 있는 다음 컴포넌트를 돌려줍니다. boolean getPacked () 자식 컴포넌트의 폭을 맞출것인지 여부를 돌려줍니다. protected Component getPrevTraversalComponent () 포커스 가질 수 있는 이전 컴포넌트를 돌려줍니다. protected boolean keyNotify (int type,
int key) 키 입력을 받으면 호출됩니다. void layout () 하위 컴포넌트의 크기와 위치를 결정합니다. protected void layoutChildHorizontal () protected void layoutChildVertical () void paint ( Graphics g) void removeAllComponents () 모든 컴포넌트를 삭제합니다. protected boolean scrollTo (int dx,
int dy) 특정 위치로 화면을 이동합니다. void setFocus ( Component c) void setGab (int gab) 컴포넌트 간의 간격을 결정합니다. void setPacked (boolean b) 폼의 내부의 컴포넌트의 폭을 폼의 폭으로 맞출 것인지 여부를
지정합니다.
Methods inherited from class org.kwis.msp.lwc. ContainerComponent addComponent , addComponent , controlInset , getComponent , getIndexOf , getNumberOfComponent , paintFrame , processEvent , removeComponent , removeComponent , repaint , repaint , setComponent , useFrame , validate
Methods inherited from class org.kwis.msp.lwc. Component canHandleInput , configure , getBackground , getCard , getForeground , getHeight , getPreferredHeight , getPreferredHeight , getPreferredWidth , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , paintContent , pointerNotify , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , showNotify , toString
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### FormComponent
- 폼 컴포넌트를 생성합니다.
### FormComponent
- 폼 컴포넌트를 생성합니다.
Method Detail
### removeAllComponents
**Overrides:**
- `removeAllComponents` in class `ContainerComponent`
### setPacked
**Parameters:**
- `b` - 폭에 맞추면 true, 그렇지 않으면 false
### getPacked
**Returns:**
- 폭에 맞추는지 여부
### setGab
**Parameters:**
- `gab` - 컴포넌트 간의 간격
### getGab
**Returns:**
- 컴포넌트 간의 간격
### layoutChildHorizontal
### layoutChildVertical
### focusNotify
- **Description copied from class: `Component`**
**Overrides:**
- `focusNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `b` - 포커스를 가질땐 `true`가 넘어오고,
가지지 않을땐 `false`
### keyNotify
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### calcPreferredSize
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`
### layout
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `Component`
### setFocus
### paint
**Overrides:**
- `paint` in class `ContainerComponent`
### getNextTraversalComponent
- **Description copied from class: `ContainerComponent`**
**Overrides:**
- `getNextTraversalComponent` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.ContainerComponent`
**Returns:**
- 포커스를 가질 수 있는 다음 컴포넌트
### getPrevTraversalComponent
- **Description copied from class: `ContainerComponent`**
**Overrides:**
- `getPrevTraversalComponent` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.ContainerComponent`
**Returns:**
- 포커스를 가질 수 있는 이전 컴포넌트
### scrollTo
## 생성자 요약
- FormComponent () 폼 컴포넌트를 생성합니다.
- FormComponent (boolean bVertical) 폼 컴포넌트를 생성합니다.
## 메서드 요약
- `protected void calcPreferredSize (int cw)` — 컴포넌트의 적절한 크기를 계산합니다.
- `void focusNotify (boolean b)` — 포커스를 받으면 호출됩니다.
- `int getGab ()` — 컴포넌트 간의 간격을 돌려줍니다.
- `protected Component getNextTraversalComponent ()` — 포커스 가질 수 있는 다음 컴포넌트를 돌려줍니다.
- `boolean getPacked ()` — 자식 컴포넌트의 폭을 맞출것인지 여부를 돌려줍니다.
- `protected Component getPrevTraversalComponent ()` — 포커스 가질 수 있는 이전 컴포넌트를 돌려줍니다.
- `protected boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void layout ()` — 하위 컴포넌트의 크기와 위치를 결정합니다.
- `protected void layoutChildHorizontal ()`
- `protected void layoutChildVertical ()`
- `void paint ( Graphics g)`
- `void removeAllComponents ()` — 모든 컴포넌트를 삭제합니다.
- `protected boolean scrollTo (int dx, int dy)` — 특정 위치로 화면을 이동합니다.
- `void setFocus ( Component c)`
- `void setGab (int gab)` — 컴포넌트 간의 간격을 결정합니다.
- `void setPacked (boolean b)` — 폼의 내부의 컴포넌트의 폭을 폼의 폭으로 맞출 것인지 여부를 지정합니다.
## 생성자 상세
### FormComponent
```java
public FormComponent()
```
- 폼 컴포넌트를 생성합니다.
### FormComponent
```java
public FormComponent(boolean bVertical)
```
- 폼 컴포넌트를 생성합니다.
### removeAllComponents
```java
public void removeAllComponents()
```
**Overrides:**
- `removeAllComponents` in class `ContainerComponent`
### setPacked
```java
public void setPacked(boolean b)
```
**Parameters:**
- `b` - 폭에 맞추면 true, 그렇지 않으면 false
### getPacked
```java
public boolean getPacked()
```
**Returns:**
- 폭에 맞추는지 여부
### setGab
```java
public void setGab(int gab)
```
**Parameters:**
- `gab` - 컴포넌트 간의 간격
### getGab
```java
public int getGab()
```
**Returns:**
- 컴포넌트 간의 간격
### layoutChildHorizontal
```java
protected void layoutChildHorizontal()
```
### layoutChildVertical
```java
protected void layoutChildVertical()
```
### focusNotify
```java
public void focusNotify(boolean b)
```
- **Description copied from class: `Component`**
**Overrides:**
- `focusNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `b` - 포커스를 가질땐 `true`가 넘어오고,
가지지 않을땐 `false`
### keyNotify
```java
protected boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### calcPreferredSize
```java
protected void calcPreferredSize(int cw)
```
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`
### layout
```java
public void layout()
```
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `Component`
### setFocus
```java
public void setFocus(Component c)
```
### paint
```java
public void paint(Graphics g)
```
**Overrides:**
- `paint` in class `ContainerComponent`
### getNextTraversalComponent
```java
protected Component getNextTraversalComponent()
```
- **Description copied from class: `ContainerComponent`**
**Overrides:**
- `getNextTraversalComponent` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.ContainerComponent`
**Returns:**
- 포커스를 가질 수 있는 다음 컴포넌트
### getPrevTraversalComponent
```java
protected Component getPrevTraversalComponent()
```
- **Description copied from class: `ContainerComponent`**
**Overrides:**
- `getPrevTraversalComponent` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.ContainerComponent`
**Returns:**
- 포커스를 가질 수 있는 이전 컴포넌트
### scrollTo
```java
protected boolean scrollTo(inODE>ContainerComponent
```
## 메서드 상세
### removeAllComponents
```java
public void removeAllComponents()
```
**Overrides:**
- `removeAllComponents` in class `ContainerComponent`
### setPacked
```java
public void setPacked(boolean b)
```
**Parameters:**
- `b` - 폭에 맞추면 true, 그렇지 않으면 false
### getPacked
```java
public boolean getPacked()
```
**Returns:**
- 폭에 맞추는지 여부
### setGab
```java
public void setGab(int gab)
```
**Parameters:**
- `gab` - 컴포넌트 간의 간격
### getGab
```java
public int getGab()
```
**Returns:**
- 컴포넌트 간의 간격
### layoutChildHorizontal
```java
protected void layoutChildHorizontal()
```
### layoutChildVertical
```java
protected void layoutChildVertical()
```
### focusNotify
```java
public void focusNotify(boolean b)
```
- **Description copied from class: `Component`**
**Overrides:**
- `focusNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `b` - 포커스를 가질땐 `true`가 넘어오고,
가지지 않을땐 `false`
### keyNotify
```java
protected boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### calcPreferredSize
```java
protected void calcPreferredSize(int cw)
```
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`
### layout
```java
public void layout()
```
- **Description copied from class: `Component`**
**Overrides:**
- `layout` in class `Component`
### setFocus
```java
public void setFocus(Component c)
```
### paint
```java
public void paint(Graphics g)
```
**Overrides:**
- `paint` in class `ContainerComponent`
### getNextTraversalComponent
```java
protected Component getNextTraversalComponent()
```
- **Description copied from class: `ContainerComponent`**
**Overrides:**
- `getNextTraversalComponent` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.ContainerComponent`
**Returns:**
- 포커스를 가질 수 있는 다음 컴포넌트
### getPrevTraversalComponent
```java
protected Component getPrevTraversalComponent()
```
- **Description copied from class: `ContainerComponent`**
**Overrides:**
- `getPrevTraversalComponent` in class `ContainerComponent`
- Following copied from class: `org.kwis.msp.lwc.ContainerComponent`
**Returns:**
- 포커스를 가질 수 있는 이전 컴포넌트
### scrollTo
```java
protected boolean scrollTo(inODE>ContainerComponent
```
---
title: "Interface GrabKeyListener"
---
`package org.kwis.msp.lwc`
```text
public boolean grabKeyNotify(int type,
int chr,
Object obj)
```
## 설명
**Parameters:**
- `obj` - setEventListner에서 설정한 Object## 메서드 요약
- `boolean grabKeyNotify (int type, int chr, Object obj)` — 컴포넌트에서 Key, Show, Focus, Pointer이벤트가 발생한경우 이 함수를 호출하여 줍니다.
## 메서드 상세
### grabKeyNotify
```java
public boolean grabKeyNotify(int type,
int chr,
Object obj)
```
**Parameters:**
- `obj` - setEventListner에서 설정한 Object
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ImageComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ImageComponent
```
## 설명
**extends Component:**
`ImageComponent`는 이미지데이타를 지정한 정렬형태로 화면에 출력하는
클래스 입니다.
`ImageComponent`는 ``setLayout(int)``를 사용하여 정렬형태를 지정
할 수 있습니다.
`ImageComponent`에서 제공하고 있는 정렬형태는
``Component.LAYOUT_LEFT``와 ``Component.LAYOUT_RIGHT``,
``Component.LAYOUT_HCENTER``,``Component.LAYOUT_TOP``,
``Component.LAYOUT_BOTTOM``,``Component.LAYOUT_HCENTER``입니다.
`정렬 조합 규칙`을 참고하여 각 정렬형태를 조합할
수 있습니다. `ImageComponent`생성시 정렬 형태는
`LAYOUT_LEFT|LAYOUT_TOP`로 초기화 됩니다.
**See Also:**
- ``Image``
## 필드 요약
- `protected Image img` — 이미지
- `protected String imgStr` — 이미지 리소스
## 생성자 요약
- ImageComponent () 새로운 ImageComponent 의 인스턴스를 생성합니다.
- ImageComponent ( Image img) 새로운 ImageComponent 의 인스턴스를 생성합니다.
- ImageComponent ( String str) 새로운 ImageComponent 의 인스턴스를 생성합니다.
## 메서드 요약
- `Image getImage ()` — ImageComponent 에 설정된 이미지를 얻어옵니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void play ()` — ImageComponent 의 이미지 데이타가 Animation Image 인 경우에 이 함수가 사용될 수 있으며 이미지의 움직임을 시작합니다.
- `void setImage ( Image img)` — ImageComponent 에 이미지를 설정합니다.
- `void setImage ( String str)` — ImageComponent 에 주어진 이미지 리소스을 가지고 이미지를 생성하여 설정합니다.
- `void setLayout (int layout)` — 이미지의 정렬형태를 설정합니다.
- `protected void showNotify (boolean bShow)` — 화면의 내용이 보이면 호출됩니다.
- `void stop ()` — ImageComponent 의 이미지 데이타가 Animation Image 인 경우에 이 함수가 사용되며, 이미지의 움직임을 멈춥니다.
## 필드 상세
### imgStr
```java
protected String imgStr
```
- 이미지 리소스
### img
```java
protected Image img
```
- 이미지
### ImageComponent
```java
public ImageComponent()
```
- 새로운 `ImageComponent`의 인스턴스를 생성합니다.
이미지 데이타는 `null`로 초기화 됩니다.
### ImageComponent
```java
public ImageComponent(Image img)
```
**Parameters:**
- `img` - 초기값으로 사용할 이미지 혹은 `null`
### ImageComponent
```java
public ImageComponent(String str)
```
**Parameters:**
- `str` - 초기값으로 사용할 이미지의 리소스 혹은 `null`
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 설정할 이미지
### getImage
```java
public Image getImage()
```
**Returns:**
- 설정된 이미지
### setImage
```java
public void setImage(String str)
```
**Parameters:**
- `str` - 자료의 경로명을 지정하는 문자열
**Throws:**
- `IllegalArgumentException` - 자료의 경로명이 null인경우
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `type` - Layout Type값.
**See Also:**
- ``Component.LAYOUT_LEFT``,
``Component.LAYOUT_RIGHT``,
``Component.LAYOUT_HCENTER``,
``Component.LAYOUT_TOP``,
``Component.LAYOUT_BOTTOM``,
``Component.LAYOUT_VCENTER``
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Component`**
**Overrides:**
- `showNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `bShow` - 컴포넌트가 나타나는지 안나타나는지 여부
### play
```java
public void play()
```
- `ImageComponent`의 이미지 데이타가 `Animation Image`
인 경우에 이 함수가 사용될 수 있으며 이미지의 움직임을 시작합니다.
```java
Animation이 진행되는 동안 ImageObserver에 animation 진행 상황을
ImageObserver의 notify()함수를 호출함으로써 알려줍니다.
Animation 이미지가 아닌 경우에 이 함수는 아무런 작업도 하지
않습니다
```
### stop
```java
public void stop()
```
- `ImageComponent`의 이미지 데이타가 `Animation Image`
인 경우에 이 함수가 사용되며, 이미지의 움직임을 멈춥니다.
`Animation Image`가 아닌 경우에 아무런 작업도 하지 않습니다.
이미지를 더이상 사용하지 않으면 이 함수를 불러서 이미지의 레퍼런스를 없애야 합니다.
그렇지 않으면, 사용하지 않은 이미지 레퍼런스를 가지게 되므로, 메모리를 낭비할 수
있습니다.
## 생성자 상세
### ImageComponent
```java
public ImageComponent()
```
- 새로운 `ImageComponent`의 인스턴스를 생성합니다.
이미지 데이타는 `null`로 초기화 됩니다.
### ImageComponent
```java
public ImageComponent(Image img)
```
**Parameters:**
- `img` - 초기값으로 사용할 이미지 혹은 `null`
### ImageComponent
```java
public ImageComponent(String str)
```
**Parameters:**
- `str` - 초기값으로 사용할 이미지의 리소스 혹은 `null`
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 설정할 이미지
### getImage
```java
public Image getImage()
```
**Returns:**
- 설정된 이미지
### setImage
```java
public void setImage(String str)
```
**Parameters:**
- `str` - 자료의 경로명을 지정하는 문자열
**Throws:**
- `IllegalArgumentException` - 자료의 경로명이 null인경우
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `type` - Layout Type값.
**See Also:**
- ``Component.LAYOUT_LEFT``,
``Component.LAYOUT_RIGHT``,
``Component.LAYOUT_HCENTER``,
``Component.LAYOUT_TOP``,
``Component.LAYOUT_BOTTOM``,
``Component.LAYOUT_VCENTER``
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Component`**
**Overrides:**
- `showNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `bShow` - 컴포넌트가 나타나는지 안나타나는지 여부
### play
```java
public void play()
```
- `ImageComponent`의 이미지 데이타가 `Animation Image`
인 경우에 이 함수가 사용될 수 있으며 이미지의 움직임을 시작합니다.
```java
Animation이 진행되는 동안 ImageObserver에 animation 진행 상황을
ImageObserver의 notify()함수를 호출함으로써 알려줍니다.
Animation 이미지가 아닌 경우에 이 함수는 아무런 작업도 하지
않습니다
```
### stop
```java
public void stop()
```
- `ImageComponent`의 이미지 데이타가 `Animation Image`
인 경우에 이 함수가 사용되며, 이미지의 움직임을 멈춥니다.
`Animation Image`가 아닌 경우에 아무런 작업도 하지 않습니다.
이미지를 더이상 사용하지 않으면 이 함수를 불러서 이미지의 레퍼런스를 없애야 합니다.
그렇지 않으면, 사용하지 않은 이미지 레퍼런스를 가지게 되므로, 메모리를 낭비할 수
있습니다.
## 메서드 상세
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 설정할 이미지
### getImage
```java
public Image getImage()
```
**Returns:**
- 설정된 이미지
### setImage
```java
public void setImage(String str)
```
**Parameters:**
- `str` - 자료의 경로명을 지정하는 문자열
**Throws:**
- `IllegalArgumentException` - 자료의 경로명이 null인경우
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `type` - Layout Type값.
**See Also:**
- ``Component.LAYOUT_LEFT``,
``Component.LAYOUT_RIGHT``,
``Component.LAYOUT_HCENTER``,
``Component.LAYOUT_TOP``,
``Component.LAYOUT_BOTTOM``,
``Component.LAYOUT_VCENTER``
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Component`**
**Overrides:**
- `showNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `bShow` - 컴포넌트가 나타나는지 안나타나는지 여부
### play
```java
public void play()
```
- `ImageComponent`의 이미지 데이타가 `Animation Image`
인 경우에 이 함수가 사용될 수 있으며 이미지의 움직임을 시작합니다.
```java
Animation이 진행되는 동안 ImageObserver에 animation 진행 상황을
ImageObserver의 notify()함수를 호출함으로써 알려줍니다.
Animation 이미지가 아닌 경우에 이 함수는 아무런 작업도 하지
않습니다
```
### stop
```java
public void stop()
```
- `ImageComponent`의 이미지 데이타가 `Animation Image`
인 경우에 이 함수가 사용되며, 이미지의 움직임을 멈춥니다.
`Animation Image`가 아닌 경우에 아무런 작업도 하지 않습니다.
이미지를 더이상 사용하지 않으면 이 함수를 불러서 이미지의 레퍼런스를 없애야 합니다.
그렇지 않으면, 사용하지 않은 이미지 레퍼런스를 가지게 되므로, 메모리를 낭비할 수
있습니다.
---
title: "Class LabelComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.LabelComponent
```
## 설명
**Direct Known Subclasses:**
- `CheckboxComponent`, `ListItemComponent`
**extends Component:**
문자열을 보여주는 컴포넌트 입니다.
사용자에게 보여줄때 문자열과 이미지를 포맷팅해서 출력해 줍니다.
`LabelComponent`는 ``setLayout(int)``를 사용하여 정렬형태를 지정
할 수 있습니다.
`LabelComponent`에서 사용되는 정렬형태는 ``Component``에서 제공하는
`정렬 조합 규칙`을 참조하고 있습니다.
`LabelComponent`생성시 기본 정렬 형태는 `LAYOUT_LEFT`입니다.
문자열이나 이미지는 `null`이 될 수도 있습니다.
## 필드 요약
- `protected int layout` — LabelComoponent 의 정렬형태.
- `protected Font m_ft` — 문자 데이타에서 사용하는 폰트
- `protected Image m_image` — 이미지 데이타
- `protected String m_str` — 문자 데이타
## 생성자 요약
- LabelComponent () 레이블 컴포넌트를 생성합니다.
- LabelComponent ( String str) 주어진 문자열로 레이블 컴포넌트를 생성합니다.
- LabelComponent ( String str, Image img) 주어진 문자열과 이미지 데이타로 레이블 컴포넌트를 생성합니다.
- LabelComponent ( String str, String imgString) 주어진 문자열과 지정한 자원에서 읽어들이는 이미지 데이타로 레이블 컴포넌트를
생성합니다.
## 메서드 요약
- `protected void calcPreferredSize (int cw)` — 컴포넌트의 적절한 크기를 계산합니다.
- `Font getFont ()` — 폰트를 얻어옵니다.
- `Image getImage ()` — 내부 이미지를 가져옵니다.
- `String getLabel ()` — 내부 문자열을 가져옵니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setFont ( Font ft)` — 폰트를 지정합니다.
- `void setImage ( Image img)` — 내부 이미지을 주어진 이미지로 지정합니다.
- `void setLabel ( String str)` — 내부 문자열을 주어진 문자열값으로 지정합니다.
- `void setLayout (int layout)` — 레이블의 정렬 형태를 지정합니다.
## 필드 상세
### layout
```java
protected int layout
```
- `LabelComoponent`의 정렬형태.
기본 정렬형태는 ``Component.LAYOUT_LEFT``입니다.
### m_ft
```java
protected Font m_ft
```
- 문자 데이타에서 사용하는 폰트
### m_str
```java
protected String m_str
```
- 문자 데이타
### m_image
```java
protected Image m_image
```
- 이미지 데이타
### LabelComponent
```java
public LabelComponent()
```
- 레이블 컴포넌트를 생성합니다.
문자열과 이미지는 모두 `null`로 지정되며, 기본 정렬형태는
`LAYOUT_LEFT`입니다.
### LabelComponent
```java
public LabelComponent(String str)
```
**Parameters:**
- `str` - 레이블 컴포넌트가 보여줄 문자열 혹은 `null`
### LabelComponent
```java
public LabelComponent(String str,
Image img)
```
**Parameters:**
- `img` - 이미지 혹은 `null`
### LabelComponent
```java
public LabelComponent(String str,
String imgString)
```
**Parameters:**
- `imgString` - 이미지 자원의 경로명을 나타내는 문자열 혹은 `null`
### setLabel
```java
public void setLabel(String str)
```
**Parameters:**
- `str` - 변경할 문자열 혹은 `null`
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 변경할 이미지 혹은 `null`
### getLabel
```java
public String getLabel()
```
**Returns:**
- 내부 출력 문자열
### getImage
```java
public Image getImage()
```
**Returns:**
- 내부 출력 이미지
### setFont
```java
public void setFont(Font ft)
```
**Parameters:**
- `ft` - 사용자 폰트
### getFont
```java
public Font getFont()
```
**Returns:**
- 설정된 폰트
### calcPreferredSize
```java
protected void calcPreferredSize(int cw)
```
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `type` - 정렬 형태
**Throws:**
- `IllegalArgumentException` - 컴포넌트에 정의된 정렬 형태 외의 값을 지정한
경우 발생
**See Also:**
- ``Component.LAYOUT_LEFT``,
``Component.LAYOUT_RIGHT``,
``Component.LAYOUT_HCENTER``,
``Component.LAYOUT_TOP``,
`Component#LYAOUT_VCENTER`,
``Component.LAYOUT_BOTTOM``## 생성자 상세
### LabelComponent
```java
public LabelComponent()
```
- 레이블 컴포넌트를 생성합니다.
문자열과 이미지는 모두 `null`로 지정되며, 기본 정렬형태는
`LAYOUT_LEFT`입니다.
### LabelComponent
```java
public LabelComponent(String str)
```
**Parameters:**
- `str` - 레이블 컴포넌트가 보여줄 문자열 혹은 `null`
### LabelComponent
```java
public LabelComponent(String str,
Image img)
```
**Parameters:**
- `img` - 이미지 혹은 `null`
### LabelComponent
```java
public LabelComponent(String str,
String imgString)
```
**Parameters:**
- `imgString` - 이미지 자원의 경로명을 나타내는 문자열 혹은 `null`
### setLabel
```java
public void setLabel(String str)
```
**Parameters:**
- `str` - 변경할 문자열 혹은 `null`
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 변경할 이미지 혹은 `null`
### getLabel
```java
public String getLabel()
```
**Returns:**
- 내부 출력 문자열
### getImage
```java
public Image getImage()
```
**Returns:**
- 내부 출력 이미지
### setFont
```java
public void setFont(Font ft)
```
**Parameters:**
- `ft` - 사용자 폰트
### getFont
```java
public Font getFont()
```
**Returns:**
- 설정된 폰트
### calcPreferredSize
```java
protected void calcPreferredSize(int cw)
```
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `type` - 정렬 형태
**Throws:**
- `IllegalArgumentException` - 컴포넌트에 정의된 정렬 형태 외의 값을 지정한
경우 발생
**See Also:**
- ``Component.LAYOUT_LEFT``,
``Component.LAYOUT_RIGHT``,
``Component.LAYOUT_HCENTER``,
``Component.LAYOUT_TOP``,
`Component#LYAOUT_VCENTER`,
``Component.LAYOUT_BOTTOM``## 메서드 상세
### setLabel
```java
public void setLabel(String str)
```
**Parameters:**
- `str` - 변경할 문자열 혹은 `null`
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - 변경할 이미지 혹은 `null`
### getLabel
```java
public String getLabel()
```
**Returns:**
- 내부 출력 문자열
### getImage
```java
public Image getImage()
```
**Returns:**
- 내부 출력 이미지
### setFont
```java
public void setFont(Font ft)
```
**Parameters:**
- `ft` - 사용자 폰트
### getFont
```java
public Font getFont()
```
**Returns:**
- 설정된 폰트
### calcPreferredSize
```java
protected void calcPreferredSize(int cw)
```
- **Description copied from class: `Component`**
**Overrides:**
- `calcPreferredSize` in class `Component`
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `type` - 정렬 형태
**Throws:**
- `IllegalArgumentException` - 컴포넌트에 정의된 정렬 형태 외의 값을 지정한
경우 발생
**See Also:**
- ``Component.LAYOUT_LEFT``,
``Component.LAYOUT_RIGHT``,
``Component.LAYOUT_HCENTER``,
``Component.LAYOUT_TOP``,
`Component#LYAOUT_VCENTER`,
``Component.LAYOUT_BOTTOM``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ListComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ContainerComponent
|
+--org.kwis.msp.lwc.FormComponent
|
+--org.kwis.msp.lwc.ListComponent
```
## 설명
**extends FormComponent:**
`ListComponent`는 ``FormComponent``를 상속하여
구현된 클래스입니다.
이 다른 `ContainerComponent`와는 달리
``ListItemComponent``만을 추가할 수 있고, 그 순서에 따라 각 아이템들이
화면에 출력됩니다.
`ListItemComponent`는 3가지 타입이 있습니다. *
현재 포커스를 받고 있는 아이템이 선택된 상태와 같게 되는 타입인
``SELECT_IMPLICIT``, 여러 아이템을 선택할 수 있는 ``SELECT_MULTIPLE``,
한 아이템만 선택할 수 있는 ``SELECT_EXCLUSIVE``입니다.
이때 `SELECT_MULTIPLE,SELECT_EXCLUSIVE`의 경우에는 포커스를 가지는
아이템과 선택된 아이템이 반드시 일치하지는 않습니다.
추가된 `ListItemComponent`를 `SELECT`키 입력에 의해서
선택하거나 번호에 해당 위치에 대한 숫자키 입력을 받은경우
``ActionListener``를 등록하여 선택 액션에 대한 감지를 할 수 있고, 방향키 입력에
의해 선택된 아이템이 변경된 경우 이것을 알 수 있도록 ``ChangeListener``를
등록 할 수 있는 기능을 제공하고 있습니다.
기본적으로 `ListComponent`를 사용하면 번호 이미지가 출력됩니다.
번호 이미지에 대한 제어는 ``controlNumber(boolean showImage)``에서 담당
하고있으며, `true`값을 지정한 경우 번호이미지가 화면에 출력되고,
`false`값을 지정한 경우 번호이미지가 출력되지 않습니다.
**See Also:**
- ``ListItemComponent``,
``ActionListener``,
``ChangeListener``
## 필드 요약
- `static int SELECT_EXCLUSIVE` — 단 하나의 아이템만 선택할 수 있는 타입.
- `static int SELECT_IMPLICIT` — ListComponent 에 포커스를 가지는 경우에 현재 포커스 된 아이템과 선택된 아이템이 동일한 타입.
- `static int SELECT_MULTIPLE` — 여러개의 아이템을 선택할 수 있는 타입.
## 생성자 요약
- ListComponent (int type) 아이템을 포함하지 않은 사이즈가 '0'인 ListComponent의 인스턴스를 주어진 타입으로
생성합니다.
## 메서드 요약
- `int addComponent ( Component cmp)` — 컴포넌트를 하나 추가합니다.맨 위에 자식 컴포넌트를 추가합니다.
- `void addComponent (int index, Component cmp)` — index 위치에 컴포넌트를 하나 추가합니다.
- `int append ( String str, Image img)` — ListComponent 에 주어진 이미지 데이타와 문자데이타로 `ListItemComponent` 를 생성하여 추가합니다.
- `void controlNumber (boolean showImage)` — 번호키 컨트롤 여부를 지정합니다.
- `Image getImage (int index)` — 주어진 위치에
---
title: "Class ListItemComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.LabelComponent
|
+--org.kwis.msp.lwc.ListItemComponent
```
## 설명
**extends LabelComponent:**
``ListComponent``에 추가되어 사용되는 `ListItemComponent`입니다.
이 컴포넌트는 `LabelComponent`를 상속하여 구현된 클래스로 기본 기능은
`LabelComponent`와 유사합니다. 반면 이 컴포넌트는 `INPUT_MASK`
를 가지고 있으므로 포커스와 입력을 받을 수 있습니다.
**See Also:**
- ``ListComponent``
Fields inherited from class org.kwis.msp.lwc. LabelComponent layout , m_ft , m_image , m_str
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary ListItemComponent ( String str) 주어진 문자열로 ListItemComponent 의 인스턴스를 생성합니다. ListItemComponent ( String str, Image img) ListItemComponent 의 인스턴스를 생성합니다. ListItemComponent ( String str, String imgString) 주어진 문자열과 지정한 자원에서 읽어들이는 이미지 데이타로 ListItemComponent 의 인스턴스를 생성합니다.
Method Summary boolean getState () 현재의 선택 상태를 얻어옵니다. void setState (boolean bState) ListItemComponent 의 선택 상태를 지정합니다.
Methods inherited from class org.kwis.msp.lwc. LabelComponent calcPreferredSize , getFont , getImage , getLabel , paintContent , setFont , setImage , setLabel , setLayout
Methods inherited from class org.kwis.msp.lwc. Component canHandleInput , configure , focusNotify , getBackground , getCard , getForeground , getHeight , getPreferredHeight , getPreferredHeight , getPreferredWidth , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , keyNotify , layout , pointerNotify , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , showNotify , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### ListItemComponent
**Parameters:**
- `str` - `ListItemComponent`가 보여줄 문자열
혹은 `null`
### ListItemComponent
**Parameters:**
- `img` - ListItem의 이미지 데이타 혹은 `null`
### ListItemComponent
**Parameters:**
- `imgString` - 이미지 자원의 경로명을 나타내는 문자열 혹은 `null`
Method Detail
### setState
**Parameters:**
- `bState` - 선택시 `true`, 선택 해제시 `false`
### getState
**Returns:**
- 선택된 상태면 `true`, 선택안된 상태면 `false`## 생성자 요약
- ListItemComponent ( String str) 주어진 문자열로 ListItemComponent 의 인스턴스를 생성합니다.
- ListItemComponent ( String str, Image img) ListItemComponent 의 인스턴스를 생성합니다.
- ListItemComponent ( String str, String imgString) 주어진 문자열과 지정한 자원에서 읽어들이는 이미지 데이타로 ListItemComponent 의 인스턴스를 생성합니다.
## 메서드 요약
- `boolean getState ()` — 현재의 선택 상태를 얻어옵니다.
- `void setState (boolean bState)` — ListItemComponent 의 선택 상태를 지정합니다.
## 생성자 상세
### ListItemComponent
```java
public ListItemComponent(String str)
```
**Parameters:**
- `str` - `ListItemComponent`가 보여줄 문자열
혹은 `null`
### ListItemComponent
```java
public ListItemComponent(String str,
Image img)
```
**Parameters:**
- `img` - ListItem의 이미지 데이타 혹은 `null`
### ListItemComponent
```java
public ListItemComponent(String str,
String imgString)
```
**Parameters:**
- `imgString` - 이미지 자원의 경로명을 나타내는 문자열 혹은 `null`
### setState
```java
public void setState(boolean bState)
```
**Parameters:**
- `bState` - 선택시 `true`, 선택 해제시 `false`
### getState
```java
public boolean getState()
```
**Returns:**
- 선택된 상태면 `true`, 선택안된 상태면 `false`## 메서드 상세
### setState
```java
public void setState(boolean bState)
```
**Parameters:**
- `bState` - 선택시 `true`, 선택 해제시 `false`
### getState
```java
public boolean getState()
```
**Returns:**
- 선택된 상태면 `true`, 선택안된 상태면 `false`
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ProgressComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ProgressComponent
```
## 설명
**extends Component:**
프로그래스 컴퍼넌트는 진행상태등을 나타내기 위해 사용하는 콤포넌트입니다.
Interactive NoneInteractive두가지 모드가 있으며 생성시에 결정됩니다.
Interactive의 경우 사용자의 키 입력을 받아 setStep에서 정의 된 값만큼 증가 혹은 감소하게 됩니다.
NoneInteractive모드에서는 사용자의 입력은 받지 않으며 setValue에 의해 값이 변경 됩니다.
기본적으로 step값은 1로 되어 있으며 setStep함수에 의해 변경 가능합니다.
ProgressComponent의 최소값은 0으로 고정되어 있으며 최대값만 변경 가능합니다.
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary ProgressComponent (boolean bInteractive,
int max) 생성자함수
0을 최소값으로 하는 새로운 프로그래스 콤포넌트를 만든다.
Method Summary int getMaxValue () 설정되어 있는 최대값을 구하는 함수. int getPreferredHeight () 컴포넌트의 적절한 높이를 결정합니다. int getPreferredHeight (int w) 컴포넌트의 적절한 높이를 결정합니다. int getPreferredWidth () 컴포넌트의 적절한 폭을 결정합니다. int getStep () 프로그래스바의 증감 단위를 구합니다 int getValue () 프로그래스의 설정되어 있는 현재 값을 구하는 함수. boolean keyNotify (int type,
int key) 키 입력을 받으면 호출됩니다. void paintContent ( Graphics g) 내부를 칠합니다. void setChangeListener ( ChangeListener listener, Object obj) void setMargin (int top,
int bottom) 프로그래스바의 상하 여백을 설정합니다(픽셀단위) void setMaxValue (int maxValue) Progress의 최대 값을 설정합니다. void setStep (int step) 프로그래스바의 증감 단위를 설정합니다
Interactive인 경우 사용자의 입력에의한 증가량이으로 사용되며 ,
setValue등에 의한 입력시에도 주어진 단위별로 증감이 됩니다.
step값이 변경되는경우 현재값도 step단위로 변경됩니다. int setValue (int value) Progress의 현재값을 설정합니다.
setStep에 의해 step이 설정된 경우 설정한 step 단위로 값이 변경됩니다.
Methods inherited from class org.kwis.msp.lwc. Component calcPreferredSize , canHandleInput , configure , focusNotify , getBackground , getCard , getForeground , getHeight , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , layout , pointerNotify , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , showNotify , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Constructor Detail
### ProgressComponent
**Parameters:**
- `max` - 프로그래스의 최대값을 설정한다.
Method Detail
### setStep
**Parameters:**
- `nStep` - 증가량.
**Throws:**
- `IllegalArgumentException` - step 값이 0이하거나 최대값보다 큰 경우
**See Also:**
- ``getStep()``
### getStep
**Returns:**
- 설정된 증가량.
**See Also:**
- `#setStep()`
### setMargin
**See Also:**
- `#setStep()`
### setMaxValue
**Parameters:**
- `maxValue` - 설정할 최대값
**Throws:**
- `IllegalArgumentException` - maxValue 값이 0이하인 경우
### setValue
**Parameters:**
- `value` - 설정할 값
**Returns:**
- 설정된 값
### getValue
**Returns:**
- 설정되어 있는 현재값
### getMaxValue
**Returns:**
- 설정되어 있는 최대값
### getPreferredHeight
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener## 생성자 요약
- ProgressComponent (boolean bInteractive,
int max) 생성자함수
0을 최소값으로 하는 새로운 프로그래스 콤포넌트를 만든다.
## 메서드 요약
- `int getMaxValue ()` — 설정되어 있는 최대값을 구하는 함수.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `int getStep ()` — 프로그래스바의 증감 단위를 구합니다
- `int getValue ()` — 프로그래스의 설정되어 있는 현재 값을 구하는 함수.
- `boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setChangeListener ( ChangeListener listener, Object obj)`
- `void setMargin (int top, int bottom)` — 프로그래스바의 상하 여백을 설정합니다(픽셀단위)
- `void setMaxValue (int maxValue)` — Progress의 최대 값을 설정합니다.
- `void setStep (int step)` — 프로그래스바의 증감 단위를 설정합니다 Interactive인 경우 사용자의 입력에의한 증가량이으로 사용되며 , setValue등에 의한 입력시에도 주어진 단위별로 증감이 됩니다. step값이 변경되는경우 현재값도 step단위로 변경됩니다.
- `int setValue (int value)` — Progress의 현재값을 설정합니다. setStep에 의해 step이 설정된 경우 설정한 step 단위로 값이 변경됩니다.
## 생성자 상세
### ProgressComponent
```java
public ProgressComponent(boolean bInteractive,
int max)
```
**Parameters:**
- `max` - 프로그래스의 최대값을 설정한다.
### setStep
```java
public void setStep(int step)
```
**Parameters:**
- `nStep` - 증가량.
**Throws:**
- `IllegalArgumentException` - step 값이 0이하거나 최대값보다 큰 경우
**See Also:**
- ``getStep()``
### getStep
```java
public int getStep()
```
**Returns:**
- 설정된 증가량.
**See Also:**
- `#setStep()`
### setMargin
```java
public void setMargin(int top,
int bottom)
```
**See Also:**
- `#setStep()`
### setMaxValue
```java
public void setMaxValue(int maxValue)
```
**Parameters:**
- `maxValue` - 설정할 최대값
**Throws:**
- `IllegalArgumentException` - maxValue 값이 0이하인 경우
### setValue
```java
public int setValue(int value)
```
**Parameters:**
- `value` - 설정할 값
**Returns:**
- 설정된 값
### getValue
```java
public int getValue()
```
**Returns:**
- 설정되어 있는 현재값
### getMaxValue
```java
public int getMaxValue()
```
**Returns:**
- 설정되어 있는 최대값
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
```java
public boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```## 메서드 상세
### setStep
```java
public void setStep(int step)
```
**Parameters:**
- `nStep` - 증가량.
**Throws:**
- `IllegalArgumentException` - step 값이 0이하거나 최대값보다 큰 경우
**See Also:**
- ``getStep()``
### getStep
```java
public int getStep()
```
**Returns:**
- 설정된 증가량.
**See Also:**
- `#setStep()`
### setMargin
```java
public void setMargin(int top,
int bottom)
```
**See Also:**
- `#setStep()`
### setMaxValue
```java
public void setMaxValue(int maxValue)
```
**Parameters:**
- `maxValue` - 설정할 최대값
**Throws:**
- `IllegalArgumentException` - maxValue 값이 0이하인 경우
### setValue
```java
public int setValue(int value)
```
**Parameters:**
- `value` - 설정할 값
**Returns:**
- 설정된 값
### getValue
```java
public int getValue()
```
**Returns:**
- 설정되어 있는 현재값
### getMaxValue
```java
public int getMaxValue()
```
**Returns:**
- 설정되어 있는 최대값
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
### keyNotify
```java
public boolean keyNotify(int type,
int key)
```
- **Description copied from class: `Component`**
**Overrides:**
- `keyNotify` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `chr` - 눌린 키의 문자; '0'-'9'와 '*', '#'은 기본이며
이외의 문자도 넘어 올 수 있습니다.
**Returns:**
- 만일 컴포넌트가 인수로 넘오는 키를 이 컴포넌트가 처리했다면,
`true`를 넘겨 줍니다. 그렇지 않았다면 `false`를
돌려줍니다.
### setChangeListener
```java
public void setChangeListener(ChangeListener listener,
Object obj)
```
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ProxyCard"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Card
|
+--org.kwis.msp.lwc.ProxyCard
```
## 설명
**extends Card:**
Fields inherited from class org.kwis.msp.lcdui. Card bTrans , h , w , x , y
Constructor Summary ProxyCard ( ContainerComponent cmp) ProxyCard ( ContainerComponent cmp,
boolean bTrans) ProxyCard ( ContainerComponent cmp,
int x,
int y,
int w,
int h) ProxyCard ( ContainerComponent cmp,
int x,
int y,
int w,
int h,
boolean bTrans)
Method Summary protected boolean keyNotify (int type,
int chr) 사용자 키 입력이 생성되면 불립니다. protected void paint ( Graphics g) Card의 내용을 그려줍니다. protected boolean pointerNotify (int type,
int x,
int y) 사용자 포인팅 디바이스의 입력이 생성되면 불립니다. protected void showNotify (boolean bShow) 이 카드가 보이기 바로 직전이나, 카드가 화면에서 삭제되는
경우에 불립니다.
Methods inherited from class org.kwis.msp.lcdui. Card getDisplay , getHeight , getWidth , getX , getY , isShown , move , repaint , repaint , resize , serviceRepaints
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
Constructor Detail
### ProxyCard
### ProxyCard
### ProxyCard
### ProxyCard
Method Detail
### paint
- **Description copied from class: `Card`**
**Overrides:**
- `paint` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `g` - 칠해질 graphics
### keyNotify
- **Description copied from class: `Card`**
**Overrides:**
- `keyNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `key` - keyCode값; 자세한 키코드는 ``EventQueue``를 참조
**Returns:**
- 하위 카드에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### pointerNotify
- **Description copied from class: `Card`**
**Overrides:**
- `pointerNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `key` - 키 코드 값
**Returns:**
- 하위 `Card`에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### showNotify
- **Description copied from class: `Card`**
**Overrides:**
- `showNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `bShow` - 보이는지 안보이는지 여부## 생성자 요약
- ProxyCard ( ContainerComponent cmp)
- ProxyCard ( ContainerComponent cmp,
boolean bTrans)
- ProxyCard ( ContainerComponent cmp,
int x,
int y,
int w,
int h)
- ProxyCard ( ContainerComponent cmp,
int x,
int y,
int w,
int h,
boolean bTrans)
## 메서드 요약
- `protected boolean keyNotify (int type, int chr)` — 사용자 키 입력이 생성되면 불립니다.
- `protected void paint ( Graphics g)` — Card의 내용을 그려줍니다.
- `protected boolean pointerNotify (int type, int x, int y)` — 사용자 포인팅 디바이스의 입력이 생성되면 불립니다.
- `protected void showNotify (boolean bShow)` — 이 카드가 보이기 바로 직전이나, 카드가 화면에서 삭제되는 경우에 불립니다.
## 생성자 상세
### ProxyCard
```java
public ProxyCard(ContainerComponent cmp)
```
### ProxyCard
```java
public ProxyCard(ContainerComponent cmp,
boolean bTrans)
```
### ProxyCard
```java
public ProxyCard(ContainerComponent cmp,
int x,
int y,
int w,
int h)
```
### ProxyCard
```java
public ProxyCard(ContainerComponent cmp,
int x,
int y,
int w,
int h,
boolean bTrans)
```
### paint
```java
protected void paint(Graphics g)
```
- **Description copied from class: `Card`**
**Overrides:**
- `paint` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `g` - 칠해질 graphics
### keyNotify
```java
protected boolean keyNotify(int type,
int chr)
```
- **Description copied from class: `Card`**
**Overrides:**
- `keyNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `key` - keyCode값; 자세한 키코드는 ``EventQueue``를 참조
**Returns:**
- 하위 카드에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### pointerNotify
```java
protected boolean pointerNotify(int type,
int x,
int y)
```
- **Description copied from class: `Card`**
**Overrides:**
- `pointerNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `key` - 키 코드 값
**Returns:**
- 하위 `Card`에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Card`**
**Overrides:**
- `showNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `bShow` - 보이는지 안보이는지 여부## 메서드 상세
### paint
```java
protected void paint(Graphics g)
```
- **Description copied from class: `Card`**
**Overrides:**
- `paint` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `g` - 칠해질 graphics
### keyNotify
```java
protected boolean keyNotify(int type,
int chr)
```
- **Description copied from class: `Card`**
**Overrides:**
- `keyNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `key` - keyCode값; 자세한 키코드는 ``EventQueue``를 참조
**Returns:**
- 하위 카드에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### pointerNotify
```java
protected boolean pointerNotify(int type,
int x,
int y)
```
- **Description copied from class: `Card`**
**Overrides:**
- `pointerNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `key` - 키 코드 값
**Returns:**
- 하위 `Card`에 이벤트 전달하려면 `true`,
그렇지 않으면 `false`
### showNotify
```java
protected void showNotify(boolean bShow)
```
- **Description copied from class: `Card`**
**Overrides:**
- `showNotify` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `bShow` - 보이는지 안보이는지 여부
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class ScrollbarComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ScrollbarComponent
```
## 설명
**extends Component:**
`ScrollBarComponent`는 최대,최소값을 가지고
그 영역 내에서 값을 유동적으로 변경할 수 있는 컴포넌트입니다.
`ScrollBarComponent`에서는 좌우스크롤 `HORIZONTAL`과
상하스크롤 `VERTICAL`의 두가지 스크롤 방향값을 제공합니다.
이 값은 ``setDirection(int direction)``을 통해서 지정할 수 있으며,
`HORIZONTAL`과 `VERTICAL` 이외의 값이 지정된 경우
`IllegalArgumentException`이 발생합니다.
스크롤 바의 값은 사용자의 키입력에 따라 값이 변경될 수도 있으며 ,``setCurrentValue(int)``
등의 메소드를 사용하여 스크롤 바의 위치 값을 변경할 수도 있습니다.
예를 들어 그림과 같은 크기값을 갖는 `ScrollbarComponent`를
생성하려면 ````java
ScrollbarComponent(int direction, int currentValue,
int viewAmount, int minimum, int maximum, int chAmount)
```` 생성자를 사용하고,
아래와 같이 지정합니다.
값을 지정할 때 주의할 점은 그림에서 보듯이 현재 위치값을 지정할 수 있는 최대값은
스크롤바의 최대값이 아니고, 스크롤바의 최대값에서 영역값을 뺀값이 현재 위치값의 최대값
으로 지정될 수 있습니다. 스크롤바의 각 크기값은 아래의 표를 참고하시기 바랍니다.
**스크롤 크기값**
설명 기본값 영역 방향값(direction) 스크롤 방향. VERTICAL 와 HORIZONTAL 값을 지정할 수 있고 이외의 값이 지정된 경우 IllegalArgumentException 발생 VERTICAL VERTICAL HORIZONTAL 현재값(currentValue) 현재 ScrollbarComponent 의 위치값. 주의 할 점은 현재값이 실질적으로 지정될 수 있는 영역은 최대값이 아니고, 최대값과 영역값의 차이값은 최대값으로 가질 수 있습니다. 0 최소값(minimum)<=현재값(currentValue)<=(최대값(maximum)-영역값(viewAmount)) 영역값(viewAmount) ScrollbarComponent 에서 전체 영역중 현재 사용되는 영역의 크기값. 1 0 < 영역값(viewAmount) <= (최대값(maximum) - 최소값(minimum)) 최소값(minimum) ScrollbarComponent 의 최소값 0 최소(minimum)값<최대값(maximum) 최대값(maximum) ScrollbarComponent 의 최대값 10 최소(minimum)값<최대값(maximum) 증감값(chAmount) ScrollbarComponent 에서 방향키 입력이나과 같은 이동 액션이 발생하면 스크롤바가 움직이는 크기값. 1 0 < 증감값(chAmount) <= 영역값(viewAmount)
**Since:**
- qtp 1.0
## 필드 요약
- `static int HORIZONTAL` — 좌우 스크롤 방향값.
- `static int VERTICAL` — 상하 스크롤 방향값.
## 생성자 요약
- ScrollbarComponent () 스크롤 바의 인스턴스를 생성합니다.
- ScrollbarComponent (int direction) 지정한 스크롤 바의 방향값으로 스크롤 바의 인스턴스를 생성합니다.
- ScrollbarComponent (int direction,
int currentValue,
int viewAmount,
int minimum,
int maximum,
int chAmount) 주어진 스크롤 바의 각 크기값과 스크롤 방향값을 ScrollbarComponent 의 인스턴스를 생성합니다.
## 메서드 요약
- `void focusNotify (boolean b)` — 포커스를 받으면 호출됩니다.
- `int getChangeAmount ()` — 스크롤시 증감되는 증감값의 크기를 얻어옵니다.
- `int getCurrentValue ()` — 스크롤바의 현재 위치값( currentValue )을 리턴합니다.
- `int getDirection ()` — 현재 지정된 ScrollbarComponent 의 스크롤 방향값을 리턴합니다.
- `int getForegroundColor ()` — 스크롤바의 전경색을 돌려줍니다.
- `int getMaximum ()` — 스크롤바의 최대값을 리턴합니다.
- `int getMinimum ()` — 스크롤바의 최소값을 리턴합니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `int getViewAmount ()` — 스크롤바의 영역크기값을 얻어옵니다.
- `boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setChangeAmount (int newChAmount)` — 스크롤시 증감되는 값의 크기를 셋팅합니다.
- `void setCurrentValue (int newValue)` — 스크롤바의 현재 위치값( currentValue )을 지정합니다.
- `void setDirection (int direction)` — 스크롤바의 스크롤 방향값을 지정합니다.
- `void setForegroundColor (int fg)` — 스크롤바의 전경색을 지정합니다.
- `void setMaximum (int newMaximum)` — 스크롤바의 최대값을 지정합니다.
- `void setMinimum (int newMinimum)` — 스크롤바의 최소값을 지정합니다.
- `void setViewAmount (int newAmount)` — 스크롤바의 영역크기값을 지정합니다.
## 필드 상세
### HORIZONTAL
```java
public static final int HORIZONTAL
```
- 좌우 스크롤 방향값. '1'값이 지정되어 있습니다.
### VERTICAL
```java
public static final int VERTICAL
```
- 상하 스크롤 방향값. '2'값이 지정되어 있습니다.
### ScrollbarComponent
```java
public ScrollbarComponent()
```
**See Also:**
- ``ScrollbarComponent(int direction)``,
````java
ScrollbarComponent(int direction, int currentValue,
int viewAmount, int minimum, int maximum, int chAmount)
````
### ScrollbarComponent
```java
public ScrollbarComponent(int direction)
```
**Parameters:**
- `direction` - 스크롤 바의 방향값
**Throws:**
- `IllegalArgumentException` - 스크롤 바의 방향값이
`HORIZONTAL`나 `VERTICAL` 이외의 값으로 잘못 지정된
경우 발생.
**See Also:**
- ``ScrollbarComponent()``,
````java
ScrollbarComponent(int direction, int currentValue,
int viewAmount, int minimum, int maximum, int chAmount)
````
### ScrollbarComponent
```java
public ScrollbarComponent(int direction,
int currentValue,
int viewAmount,
int minimum,
int maximum,
int chAmount)
```
**Parameters:**
- `maximum` - 스크롤 바의 maximum값.
**Throws:**
- `IllegalArgumentException` - 각 크기값에서 오류가 발생한 경우
**See Also:**
- ``ScrollbarComponent()``,
``ScrollbarComponent(int direction)``
### getDirection
```java
public int getDirection()
```
**Returns:**
- 스크롤의 방향값.
**See Also:**
- ``setDirection(int direction)``
### setDirection
```java
public void setDirection(int direction)
```
- 스크롤바의 스크롤 방향값을 지정합니다.
지정할 수 있는 스크롤 방향값은 ``HORIZONTAL``과`ScrollbarComponent()`,
``ScrollbarComponent(int direction)``
### getDirection
```java
public int getDirection()
```
## 생성자 상세
### ScrollbarComponent
```java
public ScrollbarComponent()
```
**See Also:**
- ``ScrollbarComponent(int direction)``,
````java
ScrollbarComponent(int direction, int currentValue,
int viewAmount, int minimum, int maximum, int chAmount)
````
### ScrollbarComponent
```java
public ScrollbarComponent(int direction)
```
**Parameters:**
- `direction` - 스크롤 바의 방향값
**Throws:**
- `IllegalArgumentException` - 스크롤 바의 방향값이
`HORIZONTAL`나 `VERTICAL` 이외의 값으로 잘못 지정된
경우 발생.
**See Also:**
- ``ScrollbarComponent()``,
````java
ScrollbarComponent(int direction, int currentValue,
int viewAmount, int minimum, int maximum, int chAmount)
````
### ScrollbarComponent
```java
public ScrollbarComponent(int direction,
int currentValue,
int viewAmount,
int minimum,
int maximum,
int chAmount)
```
**Parameters:**
- `maximum` - 스크롤 바의 maximum값.
**Throws:**
- `IllegalArgumentException` - 각 크기값에서 오류가 발생한 경우
**See Also:**
- ``ScrollbarComponent()``,
``ScrollbarComponent(int direction)``
### getDirection
```java
public int getDirection()
```
**Returns:**
- 스크롤의 방향값.
**See Also:**
- ``setDirection(int direction)``
### setDirection
```java
public void setDirection(int direction)
```
- 스크롤바의 스크롤 방향값을 지정합니다.
지정할 수 있는 스크롤 방향값은 ``HORIZONTAL``과`ScrollbarComponent()`,
``ScrollbarComponent(int direction)``
### getDirection
```java
public int getDirection()
```
## 메서드 상세
### getDirection
```java
public int getDirection()
```
**Returns:**
- 스크롤의 방향값.
**See Also:**
- ``setDirection(int direction)``
### setDirection
```java
public void setDirection(int direction)
```
- 스크롤바의 스크롤 방향값을 지정합니다.
지정할 수 있는 스크롤 방향값은 ``HORIZONTAL``과`ScrollbarComponent()`,
``ScrollbarComponent(int direction)``
### getDirection
```java
public int getDirection()
```
---
title: "Class ShellComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.ContainerComponent
|
+--org.kwis.msp.lwc.ShellComponent
```
## 설명
**Direct Known Subclasses:**
- `AnnunciatorComponent`, `DialogComponent`
**extends ContainerComponent:**
Card와의 연결을 해주며, 제목과 명령 입력 컴포넌트와 작업 컴포넌
트를 가집니다.
UI컴포넌트를 화면에 보여주기 위해서 맨 상단에는 이 컴포넌트를 사용해야
합니다. `ShellComponent`는 `AddComponent`를
통해서 하나의 작업 컴포넌트 만을 가질 수 있습니다.
이 컴포넌트는 lcdui의 ``Card``에 연결하여
카드로 부터 들어오는 이벤트를 해당 컴포넌트에게 전달해 주는 역활을
합니다.
또한 화면에 타이틀과 프레임을 보여줍니다.
## 필드 요약
- `protected Card cd`
- `protected Component cmpCommand`
- `protected Component cmpTitle`
- `protected Component cmpWork`
- `protected static int RESIZE_MASK`
## 생성자 요약
- ShellComponent () 쉘 컴포넌트를 생성합니다.
- ShellComponent (boolean inflate) 쉘 컴포넌트를 생성합니다.
- ShellComponent (boolean inflate,
boolean bTrans)
- ShellComponent (int x,
int y,
int w,
int h) 쉘 컴포넌트를 생성합니다.
- ShellComponent (int x,
int y,
int w,
int h,
boolean bTrans)
## 메서드 요약
- `int addComponent ( Component cmp)` — 자식 컴포넌트를 하나 추가합니다.
- `void addComponent (int index, Component cmp)` — 자식 컴포넌트를 하나 추가합니다.
- `void configure (int x, int y, int w, int h, int mask)` — 컴포넌트의 위치나 크기를 변경합니다.
- `protected void controlInset (boolean flag)` — ContainerComponent 에서 사용할 테두리 두께값을 제어합니다.
- `Card getCard ()` — 현재 컴포넌트에 연결된 카드를 돌려줍니다.
- `Component getCommand ()` — 지정된 커맨드 컴포넌트를 돌려줍니다.
- `protected Component getNextTraversalComponent ()` — 포커스 가질 수 있는 다음 컴포넌트를 돌려줍니다.
- `protected Component getPrevTraversalComponent ()` — 포커스 가질 수 있는 이전 컴포넌트를 돌려줍니다.
- `Component getTitle ()` — 지정된 타이틀을 돌려줍니다.
- `Component getWorkComponent ()` — 지정된 Component 돌려줍니다.
- `int getX ()` — x축의 좌표를 돌려줍니다.
- `int getY ()` — y축의 좌표를 돌려줍니다.
- `void grabKey (int key)` — 특정 키코드를 그랩(Grab)하여 GrabKeyListener에게 보냅니다.
- `void hide ()` — 컴포넌트를 감춥니다.
- `boolean isShown ()` — 현재 컴포넌트가 보이는지 안보이는지 여부를 돌려줍니다.
- `protected boolean keyNotify (int type, int chr)` — 키 입력을 받으면 호출됩니다.
- `void layout ()` — 하위 컴포넌트의 크기와 위치를 결정합니다.
- `protected boolean processEvent (int type, int subtype, int param1, int param2)` — 이벤트를 처리합니다.
- `void removeAllComponents ()` — 모든 컴포넌트를 삭제합니다.
- `void removeComponent ( Component cmp)` — 지정된 컴포넌트를 삭제합니다.
- `void repaint (int x, int y, int w, int h)` — 화면의 내용을 갱신할 필요가 있을때 부릅니다.
- `void serviceRepaints ()` — 갱신된 내용을 즉시 화면에 출력해줍니다. repaint에 의한 paint를 나중에 부르는 것이 아니라, 직접 paint함수를 불러서 화면에 출력합니다.
- `void setCommand ( Component cmp, boolean bGrab)` — 커맨드를 지정합니다.
- `void setGrabKeyListener ( GrabKeyListener listener, Object obj)` — 그랩 키 리스너를 등록합니다.
- `void setTitle ( Component cmp)` — 타이틀을 지정합니다.
- `void setTitle ( String str)` — 타이틀 문자열을 지정합니다.
- `void setWorkComponent ( Component cmp)` — Component를 설정 합니다
- `void show ()` — 컴포넌트를 화면상에 보여줍니다.
- `void showNotify (boolean b)` — 화면의 내용이 보이면 호출됩니다.
- `void ungrabKey (int key)` — 특정키에 대한 그랩(Grab)을 해제 합니다.
## 필드 상세
### cd
```java
protected Card cd
```
### cmpTitle
```java
protected
```
---
title: "Class TextBoxComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.TextComponent
|
+--org.kwis.msp.lwc.TextBoxComponent
```
## 설명
**extends TextComponent:**
`TextBoxComponentTextComponent`를 상속한 클래스로
정해진 넓이에 맞도록 문자를 편집 할 수 있습니다.
이 컴포넌트의 넓이는 이 컴포넌트를 추가한 `ContainerComponent`의 넓이와
같고 , 높이는 현재 화면에 출력된 문자 데이타에 맞도록 자동으로 변경됩니다.
`전체 화면을 사용하여 문자 편집`을
할 수 있으며, 특정 문자열만을 입력하도록 입력제한을 할 수 있습니다.
`TextComoponent`에서 정의된
`입력 제한자`에 대한 내용을 참고하세요.
기본적으로 최대 입력 가능한 문자열에 대한 제한은 하지 않으며,
``setMaxLength(int maxLen)``를 통해서 최대 입력가능한 문자수를 제한 할 수
있습니다.
**See Also:**
- ``TextComponent``,
``TextFieldComponent``
Inner classes inherited from class org.kwis.msp.lwc. TextComponent TextComponent.ModeViewer
Field Summary protected boolean isWide 전체 화면을 사용한 문자 입력 상태.
Fields inherited from class org.kwis.msp.lwc. TextComponent charCount , constChecker , constraint , CONSTRAINT_ANY , CONSTRAINT_EMAILADDRESS , CONSTRAINT_NUMBER , CONSTRAINT_PASSWORD , CONSTRAINT_PHONENUMBER , CONSTRAINT_URL , display , f , imHandler , iMode , m_cPos , m_td , maxLength , modeViewer
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary TextBoxComponent ( String data,
int constraints) 주어진 문자 데이타와 입력 제한자로 TextComponent 의 인스턴스를
생성합니다. TextBoxComponent ( String data,
int constraints,
int h) 주어진 문자 데이타와 입력 제한자,컴포넌트의 높이값으로 TextComponent 의 인스턴스를 생성합니다.
Method Summary void configure (int x,
int y,
int w,
int h,
int mask) 컴포넌트의 위치나 크기를 변경합니다. void delete (int index,
int len) 현재 화면에 보여지고 있는 문자데이타의 index 위치에서 부터 len 길이만큼 데이타를 삭제합니다. void focusNotify (boolean b) 포커스를 받게 되면 불려집니다. int getPreferredHeight () 컴포넌트의 적절한 높이를 결정합니다. int getPreferredHeight (int w) 컴포넌트의 적절한 높이를 결정합니다. int getPreferredWidth () 컴포넌트의 적절한 폭을 결정합니다. void insert (char[] data,
int offset,
int len,
int index) 현재 화면에 출력된 문자 데이타에서 인자로 주어진 문자 데이타를 index 위치에 추가합니다. boolean keyNotify (int type,
int key) 키 입력을 받으면 호출됩니다. void paintContent ( Graphics g) 내부를 칠합니다. void setFont ( Font f) 폰트를 지정합니다. void setMaxLength (int maxLen) 입력가능한 최대문자수를 지정합니다. void setString ( String data) 문자 데이타를 지정합니다.
Methods inherited from class org.kwis.msp.lwc. TextComponent getConstraint , getFont , getMaxLength , getString , showNotify
Methods inherited from class org.kwis.msp.lwc. Component calcPreferredSize , canHandleInput , getBackground , getCard , getForeground , getHeight , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , layout , pointerNotify , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Field Detail
### isWide
- 전체 화면을 사용한 문자 입력 상태. `true`면 전체 화면을 사용한
문자 입력상태입니다. 기본값은 `false`
Constructor Detail
### TextBoxComponent
- 주어진 문자 데이타와 입력 제한자로 `TextComponent`의 인스턴스를
생성합니다. 문자 데이타는 `null`값을 가질 수 있습니다.
지정한 입력 제한자가 ``TextComponent.CONSTRAINT_NUMBER``,
``TextComponent.CONSTRAINT_PASSWORD``,
## 필드 요약
- `protected boolean isWide` — 전체 화면을 사용한 문자 입력 상태.
## 생성자 요약
- TextBoxComponent ( String data,
int constraints) 주어진 문자 데이타와 입력 제한자로 TextComponent 의 인스턴스를
생성합니다.
- TextBoxComponent ( String data,
int constraints,
int h) 주어진 문자 데이타와 입력 제한자,컴포넌트의 높이값으로 TextComponent 의 인스턴스를 생성합니다.
## 메서드 요약
- `void configure (int x, int y, int w, int h, int mask)` — 컴포넌트의 위치나 크기를 변경합니다.
- `void delete (int index, int len)` — 현재 화면에 보여지고 있는 문자데이타의 index 위치에서 부터 len 길이만큼 데이타를 삭제합니다.
- `void focusNotify (boolean b)` — 포커스를 받게 되면 불려집니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `void insert (char[] data, int offset, int len, int index)` — 현재 화면에 출력된 문자 데이타에서 인자로 주어진 문자 데이타를 index 위치에 추가합니다.
- `boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setFont ( Font f)` — 폰트를 지정합니다.
- `void setMaxLength (int maxLen)` — 입력가능한 최대문자수를 지정합니다.
- `void setString ( String data)` — 문자 데이타를 지정합니다.
## 필드 상세
### isWide
```java
protected boolean isWide
```
- 전체 화면을 사용한 문자 입력 상태. `true`면 전체 화면을 사용한
문자 입력상태입니다. 기본값은 `false`
### TextBoxComponent
```java
public TextBoxComponent(String data,
int constraints)
```
- 주어진 문자 데이타와 입력 제한자로 `TextComponent`의 인스턴스를
생성합니다. 문자 데이타는 `null`값을 가질 수 있습니다.
지정한 입력 제한자가 ``TextComponent.CONSTRAINT_NUMBER``,
``TextComponent.CONSTRAINT_PASSWORD``,
## 생성자 상세
### TextBoxComponent
```java
public TextBoxComponent(String data,
int constraints)
```
- 주어진 문자 데이타와 입력 제한자로 `TextComponent`의 인스턴스를
생성합니다. 문자 데이타는 `null`값을 가질 수 있습니다.
지정한 입력 제한자가 ``TextComponent.CONSTRAINT_NUMBER``,
``TextComponent.CONSTRAINT_PASSWORD``,
---
title: "Class TextComponent.ModeViewer"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lcdui.Card
|
+--org.kwis.msp.lwc.TextComponent.ModeViewer
```
## 설명
**Enclosing class:**
- `TextComponent`
**extends Card:**
현재의 입력모드만을 보여주는 카드입니다.
Fields inherited from class org.kwis.msp.lcdui. Card bTrans , h , w , x , y
Constructor Summary TextComponent.ModeViewer ( Display d)
Method Summary void notifyChangeMode () 현재의입력 모드가 변경되면 이 카드를 사용중이 TextComponent에서
현재 입력 모드가 변경되었다는 것을 알려주기위해 호출되는
메소드입니다. protected void paint ( Graphics g) Card의 내용을 그려줍니다.
Methods inherited from class org.kwis.msp.lcdui. Card getDisplay , getHeight , getWidth , getX , getY , isShown , keyNotify , move , pointerNotify , repaint , repaint , resize , serviceRepaints , showNotify
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
Constructor Detail
### TextComponent.ModeViewer
Method Detail
### notifyChangeMode
- 현재의입력 모드가 변경되면 이 카드를 사용중이 TextComponent에서
현재 입력 모드가 변경되었다는 것을 알려주기위해 호출되는
메소드입니다.
이 메소드가 호출되면 이 카드를 다시 화면에 그려주는
페이트 메소드를 호출합니다.
### paint
- **Description copied from class: `Card`**
**Overrides:**
- `paint` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `g` - 칠해질 graphics## 생성자 요약
- TextComponent.ModeViewer ( Display d)
## 메서드 요약
- `void notifyChangeMode ()` — 현재의입력 모드가 변경되면 이 카드를 사용중이 TextComponent에서 현재 입력 모드가 변경되었다는 것을 알려주기위해 호출되는 메소드입니다.
- `protected void paint ( Graphics g)` — Card의 내용을 그려줍니다.
## 생성자 상세
### TextComponent.ModeViewer
```java
public TextComponent.ModeViewer(Display d)
```
### notifyChangeMode
```java
public void notifyChangeMode()
```
- 현재의입력 모드가 변경되면 이 카드를 사용중이 TextComponent에서
현재 입력 모드가 변경되었다는 것을 알려주기위해 호출되는
메소드입니다.
이 메소드가 호출되면 이 카드를 다시 화면에 그려주는
페이트 메소드를 호출합니다.
### paint
```java
protected void paint(Graphics g)
```
- **Description copied from class: `Card`**
**Overrides:**
- `paint` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `g` - 칠해질 graphics## 메서드 상세
### notifyChangeMode
```java
public void notifyChangeMode()
```
- 현재의입력 모드가 변경되면 이 카드를 사용중이 TextComponent에서
현재 입력 모드가 변경되었다는 것을 알려주기위해 호출되는
메소드입니다.
이 메소드가 호출되면 이 카드를 다시 화면에 그려주는
페이트 메소드를 호출합니다.
### paint
```java
protected void paint(Graphics g)
```
- **Description copied from class: `Card`**
**Overrides:**
- `paint` in class `Card`
- Following copied from class: `org.kwis.msp.lcdui.Card`
**Parameters:**
- `g` - 칠해질 graphics
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class TextComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.TextComponent
```
## 설명
**Direct Known Subclasses:**
- `TextBoxComponent`, `TextFieldComponent`
**extends Component:**
텍스트 출력 및 입력 수정 삭제를 위한 추상 클래스입니다.
이 클래스를 상속받아 구현된 클래스는 ``TextBoxComponent``와
``TextFieldComponent``입니다.
와
에서
키 입력이 있을 경우 전체 화면으로
문자 편집이 가능한 에디터가 생성됩니다. 이 에디터에서 편집을 마친경우
키를 입력을 하여 이전 화면으로 돌아갈
수 있으며, 이전 화면의 문자 데이타는 전체 화면에서 편집하던 문자 데이타로 변경됩니다.
에서는 3가지 종류의 입력 제한자를 제공하고 있습니다.
- *CONSTRAINT_NUMBER*는 '-',' '와 숫자입력만을 허용하는 입력제한자입니다.
- *CONSTRAINT_PASSWORD*는 암호입력을 위한 입력 형태로 내부적으로
사용되는 문자열은 숫자만을 허용합니다. 이 경우 화면에 출력되는 형태는 '*'입니다.
- *CONSTRAINT_ANY*는 모든 문자열을 입력할 수 있는 입력 제한자 입니다. *
위의 입력 제한자외의 값을 지정할 수 없으며, 다른 값을 지정한 경우
이 발생합니다.
기본적으로 최대 입력 가능한 문자열에 대한 제한은 하지 않으며,
``setMaxLength(int maxLen)``를 통해서 최대 입력가능한 문자수를 제한 할 수
있습니다.
문자 입력 처리를 위한 ``InputMethodListener``와
``ActionListener``를 구현을 내부 클래스를 포함하고 있으며, 각 내부 클래스에서는
현재 입력 모드에 따라 입력 받은 문자를 관리하고 입력 화면을 전체 화면 사이즈로 전환하거나
원래 화면, 즉 `TextFieldComponent`,`TextBoxComponent`로
복원하는 일을 담당하고 있습니다.
**Since:**
- qtp 1.0
**See Also:**
- ``TextFieldComponent``,
``TextBoxComponent``
## 필드 요약
- `protected int charCount` — 문자의 수
- `protected org.kwis.msp.lwc.ConstraintChecker constChecker` — 문자 데이타가 지정한 입력 제한자에 맞는 데이타인지를 검사
- `protected int constraint` — 입력 형태지정
- `static int CONSTRAINT_ANY` — 사용자가 입력 가능한 문자에 제한이 없는 경우에 사용되는 입력제한자.
- `static int CONSTRAINT_EMAILADDRESS` — 사용자가 입력 가능한 문자를 이메일 주소로 로 제한할 경우에 사용하는 입력제한자.
- `static int CONSTRAINT_NUMBER` — 사용자가 입력 가능한 문자를 ' '와 '-',숫자로만 제한할 경우에 사용하는 입력제한자.
- `static int CONSTRAINT_PASSWORD` — 사용자가 입력 가능한 문자를 패스워드로 제한할 경우에 사용하는 입력제한자.
- `static int CONSTRAINT_PHONENUMBER` — 사용자가 입력 가능한 문자를 전화번호로 제한할 경우에 사용하는 입력제한자.
- `static int CONSTRAINT_URL` — 사용자가 입력 가능한 문자를 URL로 제한할 경우에 사용하는 입력제한자.
- `protected Display display` — 카드 사용을 위한 Display객체
- `protected Font f` — TextComponent 에서 사용하는 폰트.
- `protected InputMethodHandler imHandler` — 키 입력에 다른 문자 데이타 처리를 위해 사용되는 입력 메소드핸들러.
- `protected int iMode` — 현재 사용중인 문자열 입력모드
- `protected int m_cPos` — 현재 문자 데이타의 위치
- `protected char[] m_td` — 문자 데이타
- `protected int maxLength` — 입력 가능한 최대 문자 길이 -1값인경우 최대 문자 길이 제한 없음.
- `TextComponent.ModeViewer modeViewer` — 현재의 입력 모드 상황을 보여주는 카드
## 메서드 요약
- `void delete (int index, int len)` — 현재 화면에 보여지고 있는 문자데이타의 index 위치에서 부터 len 길이만큼 데이타를 삭제합니다.
- `void focusNotify (boolean b)` — 포커스를 받게 되면 불려집니다.
- `int getConstraint ()` — 현재 지정된 문자 데이타 입력 제한자를 리턴합니다.
- `Font getFont ()` — 폰트를 얻어옵니다.
- `int getMaxLength ()` — 현재 설정된 최대 입력가능한 문자수를 리턴합니다.
- `String getString ()` — 현재의 문자 데이타를 리턴합니다.
- `void insert (char[] data, int offset, int len, int index)` — 현재 화면에 출력된 문자 데이타에서 인자로 주어진 문자 데이타를 index 위치에 추가합니다.
- `boolean keyNotify (int type, int keyC)` — 키 입력을 받으면 호출됩니다.
- `void setFont ( Font f)` — 폰트를 지정합니다.
- `void setMaxLength (int maxLen)` — 입력가능한 최대문자수를 지정합니다.
- `void setString ( String data)` — 문자 데이타를 지정합니다.
- `protected void showNotify (boolean bShow)` — 화면의 내용이 보이면 호출됩니다.
## 필드 상세
### CONSTRAINT_ANY
```java
public static final int CONSTRAINT_ANY
```
- 사용자가 입력 가능한 문자에 제한이 없는 경우에 사용되는 입력제한자.
이 값은 사용자가 특별히 사용문자에 대한 제한을 두지 않은 경우로 특정 입력 제한자를
지정하지 않으면 기본적 사용됩니다.
CONSTRAINT_ANY에 할당된 값은 '0'.
### CONSTRAINT_NUMBER
```java
public static final int CONSTRAINT_NUMBER
```
- 사용자가 입력 가능한 문자를 ' '와 '-',숫자로만 제한할 경우에 사용하는 입력제한자.
CONSTRAINT_NUMBER에 할당된 값은 '1'.
### CONSTRAINT_PASSWORD
```java
public static final int CONSTRAINT_PASSWORD
```
- 사용자가 입력 가능한 문자를 패스워드로 제한할 경우에 사용하는 입력제한자.
이 경우 내부적으로 사용되는 문자열은 숫자이며, 화면에 출력되는 형태는 '*'입니다
CONSTRAINT_PASSWORD에 할당된 값은 '2'.
### CONSTRAINT_EMAILADDRESS
```java
public static final int CONSTRAINT_EMAILADDRESS
```
- 사용자가 입력 가능한 문자를 이메일 주소로 로 제한할 경우에 사용하는 입력제한자.
이 경우 내부적으로 사용되는 문자열은 영문대,소문자와 숫자,심볼입니다.
CONSTRAINT_EMAILADDRESS 할당된 값은 '3'.
### CONSTRAINT_URL
```java
public static final int CONSTRAINT_URL
```
- 사용자가 입력 가능한 문자를 URL로 제한할 경우에 사용하는 입력제한자.
이 경우 내부적으로 사용되는 문자열은 영문대,소문자와 숫자,심볼입니다.
CONSTRAINT_URL 할당된 값은 '4'.
### CONSTRAINT_PHONENUMBER
```java
public static final int CONSTRAINT_PHONENUMBER
```
- 사용자가 입력 가능한 문자를 전화번호로 제한할 경우에 사용하는 입력제한자.
이 경우 내부적으로 사용되는 문자열은 숫자입니다
CONSTRAINT_PHONENUMBER 할당된 값은 '5'.
### imHandler
```java
protected InputMethodHandler imHandler
```
- 키 입력에 다른 문자 데이타 처리를 위해 사용되는 입력 메소드핸들러.
### m_cPos
```java
protected int m_cPos
```
- 현재 문자 데이타의 위치
### charCount
```java
protected int charCount
```
- 문자의 수
### constraint
```java
protected int constraint
```
- 입력 형태지정
### m_td
```java
protected char[] m_td
```
- 문자 데이타
### iMode
```java
protected int iMode
```
- 현재 사용중인 문자열 입력모드
### display
```java
protected Display display
```
- 카드 사용을 위한 Display객체
### modeViewer
```java
public TextComponent.ModeViewer modeViewer
```
- 현재의 입력 모드 상황을 보여주는 카드
### maxLength
```java
protected int maxLength
```
- 입력 가능한 최대 문자 길이
-1값인경우 최대 문자 길이 제한 없음.
### constChecker
```java
protected org.kwis.msp.lwc.ConstraintChecker constChecker
```
- 문자 데이타가 지정한 입력 제한자에 맞는 데이타인지를 검사
### f
```java
protected Font f
```
TextCompHR> constraint protected int constraint
---
title: "Class TextFieldComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.TextComponent
|
+--org.kwis.msp.lwc.TextFieldComponent
```
## 설명
**extends TextComponent:**
`TextFieldComponentTextComponent`를 상속한 클래스로
한 라인에서 문자 편집을 합니다.
이 컴포넌트의 넓이는 입력된 문자 데이타에 맞도록 자동으로 변경됩니다.
`전체 화면을 사용하여 문자 편집`을
할 수 있으며, 특정 문자열만을 입력하도록 입력제한을 할 수 있습니다.
`TextComoponent`에서 정의된
`입력 제한자`에 대한 내용을 참고하세요.
기본적으로 최대 입력 가능한 문자열에 대한 제한은 하지 않으며,
``TextComponent.setMaxLength(int maxLen)``를 통해서 최대 입력가능한 문자수를 제한 할 수
있습니다.
**See Also:**
- ``TextComponent``,
``TextBoxComponent``
Inner classes inherited from class org.kwis.msp.lwc. TextComponent TextComponent.ModeViewer
Field Summary protected ShellComponent tShell 전체화면 전환시 사용
Fields inherited from class org.kwis.msp.lwc. TextComponent charCount , constChecker , constraint , CONSTRAINT_ANY , CONSTRAINT_EMAILADDRESS , CONSTRAINT_NUMBER , CONSTRAINT_PASSWORD , CONSTRAINT_PHONENUMBER , CONSTRAINT_URL , display , f , imHandler , iMode , m_cPos , m_td , maxLength , modeViewer
Fields inherited from class org.kwis.msp.lwc. Component bg , evtListener , evtListenerObj , fg , FOCUS_NOTIFY , h , HAS_FOCUS_MASK , INPUT_MASK , KEY_NOTIFY , KEY_PRESSED , KEY_RELEASED , KEY_REPEATED , KEY_TYPED , LAYOUT_BOTTOM , LAYOUT_HCENTER , LAYOUT_LEFT , LAYOUT_RIGHT , LAYOUT_TOP , LAYOUT_VCENTER , mask , parent , POINT_DRAGGED , POINT_PRESSED , POINT_RELEASED , POINTER_NOTIFY , POS_MASK , PREFER_SIZE_MASK , prefH , prefW , SHOW_NOTIFY , SIZE_MASK , VALID_MASK , w , x , y
Constructor Summary TextFieldComponent ( String data,
int constraint) 주어진 문자 데이타와 입력 제한자로 TextㄹFieldComponent 의
인스턴스를 생성합니다.
Method Summary void configure (int x,
int y,
int w,
int h,
int mask) 컴포넌트의 위치나 크기를 변경합니다. void delete (int index,
int len) 현재 화면에 보여지고 있는 문자데이타의 index 위치에서 부터 len 길이만큼 데이타를 삭제합니다. void focusNotify (boolean b) 포커스를 받게 되면 불려집니다. int getPreferredHeight () 컴포넌트의 적절한 높이를 결정합니다. int getPreferredHeight (int wr) 컴포넌트의 적절한 높이를 결정합니다. int getPreferredWidth () 컴포넌트의 적절한 폭을 결정합니다. void insert (char[] data,
int offset,
int len,
int index) 현재 화면에 출력된 문자 데이타에서 인자로 주어진 문자 데이타를 index 위치에 추가합니다. boolean keyNotify (int type,
int key) 키 입력을 받으면 호출됩니다. void paintContent ( Graphics g) 내부를 칠합니다. void setString ( String data) 문자 데이타를 지정합니다.
Methods inherited from class org.kwis.msp.lwc. TextComponent getConstraint , getFont , getMaxLength , getString , setFont , setMaxLength , showNotify
Methods inherited from class org.kwis.msp.lwc. Component calcPreferredSize , canHandleInput , getBackground , getCard , getForeground , getHeight , getWidth , getX , getXOnScreen , getY , getYOnScreen , hasFocus , invalidate , isShown , isValid , layout , pointerNotify , processEvent , repaint , repaint , serviceRepaints , setBackground , setEventListener , setFocus , setForeground , toString , validate
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , wait , wait , wait
Field Detail
### tShell
- 전체화면 전환시 사용
Constructor Detail
### TextFieldComponent
**Parameters:**
- `constraints` - 문자 입력 형태
Method Detail
### setString
## 필드 요약
- `protected ShellComponent tShell` — 전체화면 전환시 사용
## 생성자 요약
- TextFieldComponent ( String data,
int constraint) 주어진 문자 데이타와 입력 제한자로 TextㄹFieldComponent 의
인스턴스를 생성합니다.
## 메서드 요약
- `void configure (int x, int y, int w, int h, int mask)` — 컴포넌트의 위치나 크기를 변경합니다.
- `void delete (int index, int len)` — 현재 화면에 보여지고 있는 문자데이타의 index 위치에서 부터 len 길이만큼 데이타를 삭제합니다.
- `void focusNotify (boolean b)` — 포커스를 받게 되면 불려집니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int wr)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `void insert (char[] data, int offset, int len, int index)` — 현재 화면에 출력된 문자 데이타에서 인자로 주어진 문자 데이타를 index 위치에 추가합니다.
- `boolean keyNotify (int type, int key)` — 키 입력을 받으면 호출됩니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setString ( String data)` — 문자 데이타를 지정합니다.
## 필드 상세
### tShell
```java
protected ShellComponent tShell
```
- 전체화면 전환시 사용
### TextFieldComponent
```java
public TextFieldComponent(String data,
int constraint)
```
**Parameters:**
- `constraints` - 문자 입력 형태
### setString
```java
public void setString(String data)
```
## 생성자 상세
### TextFieldComponent
```java
public TextFieldComponent(String data,
int constraint)
```
**Parameters:**
- `constraints` - 문자 입력 형태
### setString
```java
public void setString(String data)
```
## 메서드 상세
### setString
```java
public void setString(String data)
```
---
title: "Class TickerComponent"
---
`package org.kwis.msp.lwc`
```text
java.lang.Object
|
+--org.kwis.msp.lwc.Component
|
+--org.kwis.msp.lwc.TickerComponent
```
## 설명
**extends Component:**
`TickerComponent`는 문자열과 이미지로 구성되면 우측에서 좌측으로 움직이는
컴포넌트입니다.
좌측으로 이동하여 문자열의 끝이 좌측으로 사라지면 다시 문자열의 처음부터 우측에서
보여지게 되어 동일한 방향으로 이동을 계속합니다.
`TickerComponent`의 넓이 값은 `TickerComponent`를 추가한
`ContainerComponent`의 넓이 값과 같으며, 높이는 이미지가 문자의 한 줄
높이보다 작은 경우 한줄 높이 값을 가지며, 이미지의 높이가 더 큰 경우 이미지 높이 값을
가지게 됩니다.
움직이는 속도는 ``setDelay(int)``메소드를 사용하여 변경할 수 있습니다.
이 때 지정해주는 시간 값은 milleseconds 단위입니다. 기본으로 설정된 값은
``DEFAULT_DELAY``입니다. 움직임 속도 값은 '-'값은 지정될 수 없으며,
'-'값이 지정된 경우 `IllegalArgumentException`이 발생됩니다.
`TickerComponent`에서는 움직임을 제어할 수 있는 기능을 제공하고
있습니다. 움직임 상태는 ``setTickerState(boolean)``메소드를 사용하여 제어할 수 있습니다.
`true`값이 지정되면 움직이고, `false`값이 지정되면 움직임을
멈추게 됩니다. 기본적으로 움직임 상태에 지정된 값은 `true`입니다.
`TickerComponent`는 서로 다른 `ContainerComponent`에
공유되어 사용될 수 없습니다.
공유되어 사용되어질 경우 `IllegalArgumentException`이 발생됩니다.
## 필드 요약
- `int DEFAULT_DELAY` — TickerComponent 의 기본 움직임 속도값. 500 milliseconds
## 생성자 요약
- TickerComponent ( String str, Image img) TickerComponent 의 인스턴스를 생성합니다.
## 메서드 요약
- `Image getImage ()` — TickerComponent 의 이미지 데이타를 전달합니다.
- `int getPreferredHeight ()` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredHeight (int w)` — 컴포넌트의 적절한 높이를 결정합니다.
- `int getPreferredWidth ()` — 컴포넌트의 적절한 폭을 결정합니다.
- `String getString ()` — TickerComponent 의 문자 데이타를 얻어옵니다.
- `void paintContent ( Graphics g)` — 내부를 칠합니다.
- `void setDelay (int delay)` — TickerComponent 의 문자 흐름 속도를 설정합니다.
- `void setImage ( Image img)` — TickerComponent 의 이미지 데이타를 지정합니다.
- `void setString ( String str)` — 화면에 출력될 TickerComponent 의 문자 데이타를 지정합니다.
- `boolean setTickerState (boolean st)` — TickerComponent 의 움직임/정지 상태를 설정합니다.
## 필드 상세
### DEFAULT_DELAY
```java
public int DEFAULT_DELAY
```
- `TickerComponent`의 기본 움직임 속도값.
500` milliseconds`
### TickerComponent
```java
public TickerComponent(String str,
Image img)
```
**Parameters:**
- `img` - `TickerComponent`의 이미지 데이타 혹은 null
**Throws:**
- `NullPointerException` - 문자 데이타가 null인경우
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `TickerComponent`의 문자 데이타
**Throws:**
- `NullPointerException` - 문자데이타 str이 null인경우
**See Also:**
- ``getString()``,
``setImage(Image img)``
### getString
```java
public String getString()
```
**Returns:**
- string TickerComponent의 문자 데이타
**See Also:**
- ``setString(String str)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `TickerComponent`의 이미지 데이타.
**See Also:**
- ``getImage()``,
``setString(String str)``
### getImage
```java
public Image getImage()
```
**Returns:**
- img `TickerComponent`의 이미지 데이타.
**See Also:**
- ``setImage(Image img)``
### setDelay
```java
public void setDelay(int delay)
```
**Parameters:**
- `delay` - 문자 속도 값.milliseconds 단위
**Throws:**
- `IllegalArgumentException` - delay값이 '-'값인경우
### setTickerState
```java
public boolean setTickerState(boolean st)
```
**Parameters:**
- `st` - `true` : 문자,이미지 움직임
`false`: 움직임 정지.
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``## 생성자 상세
### TickerComponent
```java
public TickerComponent(String str,
Image img)
```
**Parameters:**
- `img` - `TickerComponent`의 이미지 데이타 혹은 null
**Throws:**
- `NullPointerException` - 문자 데이타가 null인경우
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `TickerComponent`의 문자 데이타
**Throws:**
- `NullPointerException` - 문자데이타 str이 null인경우
**See Also:**
- ``getString()``,
``setImage(Image img)``
### getString
```java
public String getString()
```
**Returns:**
- string TickerComponent의 문자 데이타
**See Also:**
- ``setString(String str)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `TickerComponent`의 이미지 데이타.
**See Also:**
- ``getImage()``,
``setString(String str)``
### getImage
```java
public Image getImage()
```
**Returns:**
- img `TickerComponent`의 이미지 데이타.
**See Also:**
- ``setImage(Image img)``
### setDelay
```java
public void setDelay(int delay)
```
**Parameters:**
- `delay` - 문자 속도 값.milliseconds 단위
**Throws:**
- `IllegalArgumentException` - delay값이 '-'값인경우
### setTickerState
```java
public boolean setTickerState(boolean st)
```
**Parameters:**
- `st` - `true` : 문자,이미지 움직임
`false`: 움직임 정지.
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``## 메서드 상세
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `TickerComponent`의 문자 데이타
**Throws:**
- `NullPointerException` - 문자데이타 str이 null인경우
**See Also:**
- ``getString()``,
``setImage(Image img)``
### getString
```java
public String getString()
```
**Returns:**
- string TickerComponent의 문자 데이타
**See Also:**
- ``setString(String str)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `TickerComponent`의 이미지 데이타.
**See Also:**
- ``getImage()``,
``setString(String str)``
### getImage
```java
public Image getImage()
```
**Returns:**
- img `TickerComponent`의 이미지 데이타.
**See Also:**
- ``setImage(Image img)``
### setDelay
```java
public void setDelay(int delay)
```
**Parameters:**
- `delay` - 문자 속도 값.milliseconds 단위
**Throws:**
- `IllegalArgumentException` - delay값이 '-'값인경우
### setTickerState
```java
public boolean setTickerState(boolean st)
```
**Parameters:**
- `st` - `true` : 문자,이미지 움직임
`false`: 움직임 정지.
### getPreferredHeight
```java
public int getPreferredHeight(int w)
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `w` - 가변폭.
**Returns:**
- 컴포넌트의 높이.
### getPreferredHeight
```java
public int getPreferredHeight()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredHeight` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 높이
### getPreferredWidth
```java
public int getPreferredWidth()
```
- **Description copied from class: `Component`**
**Overrides:**
- `getPreferredWidth` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Returns:**
- 컴포넌트의 폭.
### paintContent
```java
public void paintContent(Graphics g)
```
- **Description copied from class: `Component`**
**Overrides:**
- `paintContent` in class `Component`
- Following copied from class: `org.kwis.msp.lwc.Component`
**Parameters:**
- `g` - 칠할 Graphics.
**See Also:**
- ``Graphics``
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package org.kwis.msp.lwc"
---
## Interface Summary
- [ActionListener](ActionListener.md) — 어떤 액션이 발생하면 불리는 인터페이스입니다.
- [ChangeListener](ChangeListener.md) — Selection이 변경되면 불리는 인터페이스.
- [CommandListener](CommandListener.md) — 커맨드의 선택/변경을 알려주는 인터페이스입니다.
- [EventListener](EventListener.md) — Component의 이벤트 발생을 알려주는 인터페이스입니다.
- [GrabKeyListener](GrabKeyListener.md) — Key Grab이 설정된경우 그랩된 키 이벤트 발생을 알려주는 인터페이스입니다.
## Class Summary
- [AnnunciatorComponent](AnnunciatorComponent.md) — Annunciator를 나타내기 위한 컴포넌트.
- [ButtonComponent](ButtonComponent.md) — 버튼 컴포넌트.
- [CheckboxComponent](CheckboxComponent.md) — CheckboxComponent 는 개별 선택가능한 체크버튼과 라디오버튼을 만들기 위한 클래스 입니다.
- [CheckboxGroup](CheckboxGroup.md) — CheckboxGroup 은 여러개의 CheckboxComponent 들을 역어 구릅된 라디오버튼 처럼 움직이게 합니다.
- [ComboComponent](ComboComponent.md) — ComboComponent 는 팝업메뉴 기능을 제공하는 클래스입니다.
- [Command](Command.md) — 사용자가 내릴수 있는 명령을 가르키는 클래스입니다.
- [CommandBarComponent](CommandBarComponent.md) — Command 컴포넌트.
- [Component](Component.md) — 가장 기본이 되는 화면에 보여지는 클래스입니다.
- [ContainerComponent](ContainerComponent.md) — 다른 컴포넌트의 상위 부모 컴포넌트가 될수 있는 컴포넌트.
- [DateFieldComponent](DateFieldComponent.md) — DateFieldComponent 는 날짜와 시간을 보여주는 필드를 화면에 표시해주고 이 값을 수정할 수 있습니다.
- [Decorator](Decorator.md) —
- [DialogComponent](DialogComponent.md) — DialogComponent 는 다양한 형태의 다이알로그박스를 지원하기 위해서 만들어진 컴포넌트입니다.
- [FormComponent](FormComponent.md) — 다양한 컴포넌트를 일렬로 배열하여 화면을 구성하는 컴포넌트.
- [ImageComponent](ImageComponent.md) — ImageComponent 는 이미지데이타를 지정한 정렬형태로 화면에 출력하는 클래스 입니다.
- [LabelComponent](LabelComponent.md) — 문자열을 보여주는 컴포넌트 입니다.
- [ListComponent](ListComponent.md) — ListComponent 는 FormComponent 를 상속하여 구현된 클래스입니다.
- [ListItemComponent](ListItemComponent.md) — ListComponent 에 추가되어 사용되는 ListItemComponent 입니다.
- [ProgressComponent](ProgressComponent.md) — 프로그래스 컴퍼넌트는 진행상태등을 나타내기 위해 사용하는 콤포넌트입니다.
- [ProxyCard](ProxyCard.md) —
- [ScrollbarComponent](ScrollbarComponent.md) — ScrollBarComponent 는 최대,최소값을 가지고 그 영역 내에서 값을 유동적으로 변경할 수 있는 컴포넌트입니다.
- [ShellComponent](ShellComponent.md) — Card와의 연결을 해주며, 제목과 명령 입력 컴포넌트와 작업 컴포넌 트를 가집니다.
- [TextBoxComponent](TextBoxComponent.md) — TextBoxComponentTextComponent 를 상속한 클래스로 정해진 넓이에 맞도록 문자를 편집 할 수 있습니다.
- [TextComponent](TextComponent.md) — 텍스트 출력 및 입력 수정 삭제를 위한 추상 클래스입니다.
- [TextFieldComponent](TextFieldComponent.md) — TextFieldComponentTextComponent 를 상속한 클래스로 한 라인에서 문자 편집을 합니다.
- [TickerComponent](TickerComponent.md) — TickerComponent 는 문자열과 이미지로 구성되면 우측에서 좌측으로 움직이는 컴포넌트입니다.
## 기타
- [TextComponent.ModeViewer](TextComponent.ModeViewer.md)
---
title: "Class Clip"
---
`package org.kwis.msp.media`
```text
java.lang.Object
|
+--org.kwis.msp.media.Clip
```
## 설명
**extends Object:**
이 클래스는 Player에 의해 재생되는 클립을 구현한다.
## 필드 요약
- `protected byte[] buf`
- `protected int bufLength`
- `protected int[] duration`
- `protected int eventParm`
- `protected int front`
- `protected int[] hiFreq`
- `protected boolean isNotifyWM`
- `protected int left`
- `protected int[] lowFreq`
- `protected int magicID`
- `protected int playerID`
- `protected int prgID`
- `protected int rear`
- `protected int[] tone`
- `protected int waterMarkLength`
## 생성자 요약
- Clip ( String type) 특정 타입의 클립을 생성한다.
- Clip ( String type,
byte[] buf) 이미 데이타가 저장되어 있는 매개변수를 받아들여 클립을 생성한다.
- Clip ( String type,
int bufSize) 특정 타입의 CLIP을 생성한다.
- Clip ( String type, String resourceName)
## 메서드 요약
- `protected void atomicGetUpdate (int getSize)`
- `protected void atomicPutUpdate (int putSize)`
- `int availableDataSize ()` — 클립에서 이용가능한 데이타 크기(클립 내부버퍼 크기가 아님)
- `void clearData ()` — 클립내의 이용가능한 데이타를 모두 버린다.
- `protected static int control (int playerID, int cmd, Object buf1, Object buf2)` — HAL단의 MH_mdaControl()에 연결되는 함수이다.
- `int getData (byte[] buf, int off, int len)` — 클립에서 buf로 미디어 데이타를 복사한다.
- `protected int getPlayerID ( String type)`
- `String getType ()` — 클립의 Type을 구한다.
- `int getVolume ()` — 클립 재생기의 볼륨을 읽어온다.
- `protected int mediaFreeze ()`
- `protected int mediaReadData ()`
- `protected int mediaWriteData ()`
- `protected boolean playStart (boolean repeat)` — Player.play(Clip clip, boolean repeat)메쏘드안에서 실제 재생함수를 부르기전 repeat값을 매개변수로 불러준다.
- `boolean playUpdate (int event, int parm)` — 클립 재생시 상태변화를 알린다.
- `int putData (byte[] buf, int off, int len)` — 클립에 미디어 데이타를 복사한다.
- `protected boolean recordStart ()` — Player.record(Clip clip)메쏘드안에서 실제 record함수를 부르기전 불러준다.
- `boolean setBuffer (byte[] buf, int dataSize)` — 클립의 내부버퍼을 설정한다.
- `void setListener ( PlayListener listener)` — 클립 재생시 상태변화를 알려줄 listener를 등록한다.
- `boolean setPosition (int ms)` — 재생을 시작할 위치를 설정한다.
- `boolean setVolume (int level)` — 클립 재생기의 볼륨을 설정한다.
## 필드 상세
### prgID
```java
protected int prgID
```
### playerID
```java
protected int playerID
```
### buf
```java
protected byte[] buf
```
### tone
```java
protected int[] tone
```
### hiFreq
```java
protected int[] hiFreq
```
### lowFreq
```java
protected int[] lowFreq
```
### duration
```java
protected int[] duration
```
### bufLength
```java
protected int bufLength
```
### left
```java
protected int left
```
### front
```java
protected int front
```
### rear
```java
protected int rear
```
### waterMarkLength
```java
protected int waterMarkLength
```
### isNotifyWM
```java
protected boolean isNotifyWM
```
### magicID
```java
protected int magicID
```
### eventParm
```java
protected int eventParm
```
### Clip
```java
public Clip(String type,
int bufSize)
```
**Parameters:**
- `bufSize` - 클립내부에 생성될 버퍼의 크기(바이트 단위)
### Clip
```java
public Clip(String type)
```
**Parameters:**
- `type` - 리소스 타입
### Clip
```java
public Clip(String type,
byte[] buf)
```
**Parameters:**
- `buf` - 데이타가 들어 있는 버퍼
### Clip
```java
public Clip(String type,
String resourceName)
```
### getPlayerID
```java
protected int getPlayerID(String type)
```
### atomicPutUpdate
```java
protected void atomicPutUpdate(int putSize)
```
### mediaWriteData
```java
protected int mediaWriteData()
```
### atomicGetUpdate
```java
protected void atomicGetUpdate(int getSize)
```
### mediaReadData
```java
protected int mediaReadData()
```
### mediaFreeze
```java
protected int mediaFreeze()
```
### control
```java
protected static int control(int playerID,
int cmd,
Object buf1,
Object buf2)
```
- HAL단의 MH_mdaControl()에 연결되는 함수이다.
함수의 의미는 이통사나 제조사에 따른다.
### setBuffer
```java
public boolean setBuffer(byte[] buf,
int dataSize)
```
**Parameters:**
- `dataSize` - 버퍼안에 들어있는 데이타 크기
**Returns:**
- true : 버퍼 설정 성공
false : 이미 버퍼가 설정되어 있음
### putData
```java
public int putData(byte[] buf,
int off,
int len)
```
**Parameters:**
- `len` - 복사할 크기
**Returns:**
- 복사된 크기
### getData
```java
public int getData(byte[] buf,
int off,
int len)
```
**Parameters:**
- `len` - 복사될 크기
**Returns:**
- 복사된 크기
### availableDataSize
```java
public int availableDataSize()
```
**Returns:**
- 이용가능한 데이타 크기
### clearData
```java
public void clearData()
```
- 클립내의 이용가능한 데이타를 모두 버린다.
### getType
```java
public String getType()
```
**Returns:**
- Type 문자열
### setPosition
```java
public boolean setPosition(int ms)
```
**Parameters:**
- `ms` - 클립 재생을 시작할 시작 시점(milli second)
**Returns:**
- ture : 성공
false : 설정 실패
### getVolume
```java
public final int getVolume()
```
**Returns:**
- 성공 : 볼륨 값(0-100사이의 볼륨값)
### setVolume
```java
public final boolean setVolume(int level)
```
**Parameters:**
- `level` - 볼륨값
### setListener
```java
public void setListener(PlayListener listener)
```
**Parameters:**
- `listener` - 새로운 listener, 만일 null 이면 기존 것을 제거함
### playStart
```java
protected boolean playStart(boolean repeat)
```
**Parameters:**
- `repeat` - Player.play()에 전달된 repeat값
### recordStart
```java
protected boolean recordStart()
```
**Returns:**
- true : Player.record()함수 수행이 정상적으로 수행됨
false : Player.record()함수가 더이상 수행되지 않고 false로 반환됨
### playUpdate
```java
public boolean playUpdate(int event,
int parm)
```
**Parameters:**
- `parm` - 각 event에 추가 전달값이 있을 경우 사용## 생성자 상세
### Clip
```java
public Clip(String type,
int bufSize)
```
**Parameters:**
- `bufSize` - 클립내부에 생성될 버퍼의 크기(바이트 단위)
### Clip
```java
public Clip(String type)
```
**Parameters:**
- `type` - 리소스 타입
### Clip
```java
public Clip(String type,
byte[] buf)
```
**Parameters:**
- `buf` - 데이타가 들어 있는 버퍼
### Clip
```java
public Clip(String type,
String resourceName)
```
### getPlayerID
```java
protected int getPlayerID(String type)
```
### atomicPutUpdate
```java
protected void atomicPutUpdate(int putSize)
```
### mediaWriteData
```java
protected int mediaWriteData()
```
### atomicGetUpdate
```java
protected void atomicGetUpdate(int getSize)
```
### mediaReadData
```java
protected int mediaReadData()
```
### mediaFreeze
```java
protected int mediaFreeze()
```
### control
```java
protected static int control(int playerID,
int cmd,
Object buf1,
Object buf2)
```
- HAL단의 MH_mdaControl()에 연결되는 함수이다.
함수의 의미는 이통사나 제조사에 따른다.
### setBuffer
```java
public boolean setBuffer(byte[] buf,
int dataSize)
```
**Parameters:**
- `dataSize` - 버퍼안에 들어있는 데이타 크기
**Returns:**
- true : 버퍼 설정 성공
false : 이미 버퍼가 설정되어 있음
### putData
```java
public int putData(byte[] buf,
int off,
int len)
```
**Parameters:**
- `len` - 복사할 크기
**Returns:**
- 복사된 크기
### getData
```java
public int getData(byte[] buf,
int off,
int len)
```
**Parameters:**
- `len` - 복사될 크기
**Returns:**
- 복사된 크기
### availableDataSize
```java
public int availableDataSize()
```
**Returns:**
- 이용가능한 데이타 크기
### clearData
```java
public void clearData()
```
- 클립내의 이용가능한 데이타를 모두 버린다.
### getType
```java
public String getType()
```
**Returns:**
- Type 문자열
### setPosition
```java
public boolean setPosition(int ms)
```
**Parameters:**
- `ms` - 클립 재생을 시작할 시작 시점(milli second)
**Returns:**
- ture : 성공
false : 설정 실패
### getVolume
```java
public final int getVolume()
```
**Returns:**
- 성공 : 볼륨 값(0-100사이의 볼륨값)
### setVolume
```java
public final boolean setVolume(int level)
```
**Parameters:**
- `level` - 볼륨값
### setListener
```java
public void setListener(PlayListener listener)
```
**Parameters:**
- `listener` - 새로운 listener, 만일 null 이면 기존 것을 제거함
### playStart
```java
protected boolean playStart(boolean repeat)
```
**Parameters:**
- `repeat` - Player.play()에 전달된 repeat값
### recordStart
```java
protected boolean recordStart()
```
**Returns:**
- true : Player.record()함수 수행이 정상적으로 수행됨
false : Player.record()함수가 더이상 수행되지 않고 false로 반환됨
### playUpdate
```java
public boolean playUpdate(int event,
int parm)
```
**Parameters:**
- `parm` - 각 event에 추가 전달값이 있을 경우 사용## 메서드 상세
### getPlayerID
```java
protected int getPlayerID(String type)
```
### atomicPutUpdate
```java
protected void atomicPutUpdate(int putSize)
```
### mediaWriteData
```java
protected int mediaWriteData()
```
### atomicGetUpdate
```java
protected void atomicGetUpdate(int getSize)
```
### mediaReadData
```java
protected int mediaReadData()
```
### mediaFreeze
```java
protected int mediaFreeze()
```
### control
```java
protected static int control(int playerID,
int cmd,
Object buf1,
Object buf2)
```
- HAL단의 MH_mdaControl()에 연결되는 함수이다.
함수의 의미는 이통사나 제조사에 따른다.
### setBuffer
```java
public boolean setBuffer(byte[] buf,
int dataSize)
```
**Parameters:**
- `dataSize` - 버퍼안에 들어있는 데이타 크기
**Returns:**
- true : 버퍼 설정 성공
false : 이미 버퍼가 설정되어 있음
### putData
```java
public int putData(byte[] buf,
int off,
int len)
```
**Parameters:**
- `len` - 복사할 크기
**Returns:**
- 복사된 크기
### getData
```java
public int getData(byte[] buf,
int off,
int len)
```
**Parameters:**
- `len` - 복사될 크기
**Returns:**
- 복사된 크기
### availableDataSize
```java
public int availableDataSize()
```
**Returns:**
- 이용가능한 데이타 크기
### clearData
```java
public void clearData()
```
- 클립내의 이용가능한 데이타를 모두 버린다.
### getType
```java
public String getType()
```
**Returns:**
- Type 문자열
### setPosition
```java
public boolean setPosition(int ms)
```
**Parameters:**
- `ms` - 클립 재생을 시작할 시작 시점(milli second)
**Returns:**
- ture : 성공
false : 설정 실패
### getVolume
```java
public final int getVolume()
```
**Returns:**
- 성공 : 볼륨 값(0-100사이의 볼륨값)
### setVolume
```java
public final boolean setVolume(int level)
```
**Parameters:**
- `level` - 볼륨값
### setListener
```java
public void setListener(PlayListener listener)
```
**Parameters:**
- `listener` - 새로운 listener, 만일 null 이면 기존 것을 제거함
### playStart
```java
protected boolean playStart(boolean repeat)
```
**Parameters:**
- `repeat` - Player.play()에 전달된 repeat값
### recordStart
```java
protected boolean recordStart()
```
**Returns:**
- true : Player.record()함수 수행이 정상적으로 수행됨
false : Player.record()함수가 더이상 수행되지 않고 false로 반환됨
### playUpdate
```java
public boolean playUpdate(int event,
int parm)
```
**Parameters:**
- `parm` - 각 event에 추가 전달값이 있을 경우 사용
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class MediaUnsupportedException"
---
`package org.kwis.msp.media`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--org.kwis.msp.media.MediaUnsupportedException
```
## 설명
**extends RuntimeException:**
지원되지 않는 기능을 사용할려고 했을때 발생하는 exception 클래스.
## 생성자 요약
- MediaUnsupportedException () MediaUnsupportedException객체를 생성한다.
- MediaUnsupportedException ( String s) MediaUnsupportedException객체를 생성한다.
## 생성자 상세
### MediaUnsupportedException
```java
public MediaUnsupportedException()
```
- MediaUnsupportedException객체를 생성한다.
### MediaUnsupportedException
```java
public MediaUnsupportedException(String s)
```
**Parameters:**
- `s` - MediaUnsupportedException 세부 메세지.
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Interface PlayListener"
---
`package org.kwis.msp.media`
```text
public static final int ERROR
```
## 설명
- 에러가 발생
값은 -1 입니다.
### END_OF_DATA
- 재생데이타의 마지막에 도달함
값은 1 입니다.
### START
- 재생을 시작
값은 2 입니다.
### STOP
- 재생/녹음이 멈춤
값은 3입니다.
### PAUSE
- 재생/녹음이 일시 정지
값은 4입니다.
### RESUME
- 일시 정지된 데이타의 재생 재개
값은 5 입니다.
### RECORD
- 녹음 시작
값은 6 입니다.
### FULL_OF_DATA
- 녹음 버퍼가 완전히 채워져서 더이상 녹음할 수 없음
값은 7 입니다.
Method Detail
### playUpdate
**Parameters:**
- `parm` - 각 event에 추가 전달값이 있을 경우 사용## 필드 요약
- `static int END_OF_DATA` — 재생데이타의 마지막에 도달함 값은 1 입니다.
- `static int ERROR` — 에러가 발생 값은 -1 입니다.
- `static int FULL_OF_DATA` — 녹음 버퍼가 완전히 채워져서 더이상 녹음할 수 없음 값은 7 입니다.
- `static int PAUSE` — 재생/녹음이 일시 정지 값은 4입니다.
- `static int RECORD` — 녹음 시작 값은 6 입니다.
- `static int RESUME` — 일시 정지된 데이타의 재생 재개 값은 5 입니다.
- `static int START` — 재생을 시작 값은 2 입니다.
- `static int STOP` — 재생/녹음이 멈춤 값은 3입니다.
## 메서드 요약
- `void playUpdate ( Clip clip, int event, int parm)` — 클립재생시 상태가 변할 때 불리는 메쏘드이다.
## 필드 상세
### ERROR
```java
public static final int ERROR
```
- 에러가 발생
값은 -1 입니다.
### END_OF_DATA
```java
public static final int END_OF_DATA
```
- 재생데이타의 마지막에 도달함
값은 1 입니다.
### START
```java
public static final int START
```
- 재생을 시작
값은 2 입니다.
### STOP
```java
public static final int STOP
```
- 재생/녹음이 멈춤
값은 3입니다.
### PAUSE
```java
public static final int PAUSE
```
- 재생/녹음이 일시 정지
값은 4입니다.
### RESUME
```java
public static final int RESUME
```
- 일시 정지된 데이타의 재생 재개
값은 5 입니다.
### RECORD
```java
public static final int RECORD
```
- 녹음 시작
값은 6 입니다.
### FULL_OF_DATA
```java
public static final int FULL_OF_DATA
```
- 녹음 버퍼가 완전히 채워져서 더이상 녹음할 수 없음
값은 7 입니다.
### playUpdate
```java
public void playUpdate(Clip clip,
int event,
int parm)
```
**Parameters:**
- `parm` - 각 event에 추가 전달값이 있을 경우 사용## 메서드 상세
### playUpdate
```java
public void playUpdate(Clip clip,
int event,
int parm)
```
**Parameters:**
- `parm` - 각 event에 추가 전달값이 있을 경우 사용
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Player"
---
`package org.kwis.msp.media`
```text
java.lang.Object
|
+--org.kwis.msp.media.Player
```
## 설명
**extends Object:**
이 클래스는 매디어를 재생하기 위한 static 메쏘드를 포함하는 클래스입니다.
## 메서드 요약
- `static boolean pause ( Clip clip)` — 매체 처리(재생/녹음)를 일시적으로 멈춘다.
- `static boolean play ( Clip clip, boolean repeat)` — 클립의 데이타를 재생한다.
- `static boolean record ( Clip clip)` — 녹음을 시작한다.
- `static boolean resume ( Clip clip)` — 일시 정지한 매체처리(재생/녹음)를 재개한다.
- `static boolean stop ( Clip clip)` — 매체처리(재생/녹음)를 종료한다.
## 메서드 상세
### pause
```java
public static boolean pause(Clip clip)
```
**Parameters:**
- `clip` - 일시 중지시킬 클립
**Returns:**
- ture : 성공
false : 이미 멈추어 있거나, 정지되어 있음
### resume
```java
public static boolean resume(Clip clip)
```
**Parameters:**
- `clip` - 재개시킬 클립
**Returns:**
- ture : 성공
false : 이미 매체처리중
### stop
```java
public static boolean stop(Clip clip)
```
**Parameters:**
- `clip` - 종료시킬 클립
**Returns:**
- ture : 성공
false : 전달된 clip이 재생/녹화중이 아니거나, 비 정상적으로 정지 되었음
### play
```java
public static boolean play(Clip clip,
boolean repeat)
```
**Parameters:**
- `repeat` - false이면 1회재생, true는 반복 재생
**Returns:**
- ture : 성공
false : 재생실패
### record
```java
public static boolean record(Clip clip)
```
**Parameters:**
- `clip` - 녹음데이타를 저장할 클립
**Returns:**
- ture : 성공
false : 이미 녹음중
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Vibrator"
---
`package org.kwis.msp.media`
```text
java.lang.Object
|
+--org.kwis.msp.media.Vibrator
```
## 설명
**extends Object:**
핸드셋의 진동기를 제어하는 클래스입니다.
## 메서드 요약
- `static void on (int level, int duration)` — 이 메쏘드가 리턴된 후에는 진동기가 정해진 시간동안 진동해야 한다.
## 메서드 상세
### on
```java
public static void on(int level,
int duration)
```
**Parameters:**
- `duration` - 진동할 시간(milliseconds), 0이면 무한 진동
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "Class Volume"
---
`package org.kwis.msp.media`
```text
java.lang.Object
|
+--org.kwis.msp.media.Volume
```
## 설명
**extends Object:**
소리의 볼륨을 조절하는 메쏘드를 모은 클래스입니다.
## 메서드 요약
- `static int get ()` — 볼륨의 값을 리턴한다.
- `static void set (int level)` — 볼륨을 설정한다.
## 메서드 상세
### get
```java
public static int get()
```
**Returns:**
- 볼륨값
### set
```java
public static void set(int level)
```
**Parameters:**
- `level` - 볼륨값
***AromaSoft Corp. Proprietary and Confidential***
*(C)opyright 2003 AromaSoft Corp. All right reserved.
Contact : [contact@aromasoft.com](mailto:contact@aromasoft.com)*
---
title: "package org.kwis.msp.media"
---
## Interface Summary
- [PlayListener](PlayListener.md) — 이 인터페이스는 메디아 재생기의 상태변화를 알고자 하는 응용프로그램에서 쓰입니다.
## Class Summary
- [Clip](Clip.md) — 이 클래스는 Player에 의해 재생되는 클립을 구현한다.
- [Player](Player.md) — 이 클래스는 매디어를 재생하기 위한 static 메쏘드를 포함하는 클래스입니다.
- [Vibrator](Vibrator.md) — 핸드셋의 진동기를 제어하는 클래스입니다.
- [Volume](Volume.md) — 소리의 볼륨을 조절하는 메쏘드를 모은 클래스입니다.
## Exception Summary
- [MediaUnsupportedException](MediaUnsupportedException.md) — 지원되지 않는 기능을 사용할려고 했을때 발생하는 exception 클래스.
---
title: "MIDP 2.0 규격"
---
**Mobile Information Device Profile (MIDP) v2.0** — Sun Microsystems / Motorola 의
JSR-118 규격 한국어 번역본입니다. WIPI 1.2.1 의 Java Extended API 는 본 규격을
기준으로 합니다 ([platform.md 3.9.2 참조](../overview/platform.md)).
| 항목 | 내용 |
|---|---|
| [개요](overview.md) | MIDP 2.0 사양 머리말 + 머리말 + 호환성 |
| [OTA 규격](ota-spec.md) | Over-The-Air 배포/설치/실행 표준 |
| [보안 정책 — GSM/UMTS](security-gsm.md) | 권장 보안 정책 (GSM/UMTS 단말) |
| [보안 정책 — RP](security-rp.md) | 권장 보안 정책 (Recommended Practice) |
| [라이선스](license.md) | 규격 사용 라이선스 |
| [Java API](java-api/index.md) | MIDP Java API — `javax.microedition.{lcdui, media, midlet, pki, rms, io}` 등 (10 패키지, 66 클래스) |
원본: `vendor/midpng-javadoc-final/`
---
title: "Java API Reference"
---
JavaDoc HTML 을 Markdown 으로 재구성한 레퍼런스입니다.
## 패키지 목록
- [`java.lang`](java/lang/index.md) (1 classes)
- [`java.util`](java/util/index.md) (2 classes)
- [`javax.microedition.io`](javax/microedition/io/index.md) (10 classes)
- [`javax.microedition.lcdui`](javax/microedition/lcdui/index.md) (27 classes)
- [`javax.microedition.lcdui.game`](javax/microedition/lcdui/game/index.md) (5 classes)
- [`javax.microedition.media`](javax/microedition/media/index.md) (6 classes)
- [`javax.microedition.media.control`](javax/microedition/media/control/index.md) (2 classes)
- [`javax.microedition.midlet`](javax/microedition/midlet/index.md) (2 classes)
- [`javax.microedition.pki`](javax/microedition/pki/index.md) (2 classes)
- [`javax.microedition.rms`](javax/microedition/rms/index.md) (10 classes)
---
title: "Class IllegalStateException"
---
`package java.lang`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IllegalStateException
```
## 설명
**extends RuntimeException:**
메소드가 부적절하거나
잘못된 시간에 호출되었음을 나타냅니다.
즉, Java 환경이나 Java 응용 프로그램이
요청된 작업에 적합한 상태가 아닙니다.
**Since:**
- MIDP 1.0
## 생성자 요약
- IllegalStateException () 세부 정보 메시지 없이 IllegalStateException을 구성합니다.
- IllegalStateException ( String s) 지정한 세부 정보 메시지를 사용하여
IllegalStateException을 구성합니다.
## 생성자 상세
### IllegalStateException
```java
public IllegalStateException()
```
- 세부 정보 메시지 없이 IllegalStateException을 구성합니다.
### IllegalStateException
```java
public IllegalStateException(String s)
```
- 지정한 세부 정보 메시지를 사용하여
IllegalStateException을 구성합니다.
세부 정보 메시지는 특정 예외를 설명하는 문자열입니다.
**Parameters:**
- `s` - 세부 정보 메시지가 포함되는 문자열
---
title: "package java.lang"
---
**See:**
**Description**
## Interface Summary
- [Runnable](../../../../cldc/java-api/java/lang/Runnable.md) — Runnable 인터페이스는 스레드가 해당 인스턴스를 실행하는 모든 클래스에서 구현해야 합니다.
## Class Summary
- [Boolean](../../../../cldc/java-api/java/lang/Boolean.md) — Boolean 클래스는 프리미티브 유형의 boolean 값을 객체에 포함합니다.
- [Byte](../../../../cldc/java-api/java/lang/Byte.md) — Byte 클래스는 바이트 값의 표준 래퍼입니다.
- [Character](../../../../cldc/java-api/java/lang/Character.md) — Character 클래스는 프리미티브 유형의 char 값을 객체에 포함합니다.
- [Class](../../../../cldc/java-api/java/lang/Class.md) — Class 클래스의 인스턴스는 실행 중인 Java 응용 프로그램의 클래스와 인터페이스를 나타냅니다.
- [Double](../../../../cldc/java-api/java/lang/Double.md) — Double 클래스는 프리미티브 유형의 double 값을 객체에 포함합니다.
- [Float](../../../../cldc/java-api/java/lang/Float.md) — Float 클래스는 프리미티브 유형의 float 값을 객체에 포함합니다.
- [Integer](../../../../cldc/java-api/java/lang/Integer.md) — Integer 클래스는 프리미티브 유형의 int 값을 객체에 포함합니다.
- [Long](../../../../cldc/java-api/java/lang/Long.md) — Long 클래스는 프리미티브 유형의 long 값을 객체에 포함합니다.
- [Math](../../../../cldc/java-api/java/lang/Math.md) — Math 클래스에는 기본 수식 작업을 수행하기 위한 메소드가 포함되어 있습니다.
- [Object](../../../../cldc/java-api/java/lang/Object.md) — Object 클래스는 클래스 계층 구조의 루트입니다.
- [Runtime](../../../../cldc/java-api/java/lang/Runtime.md) — 모든 Java 응용 프로그램에는 응용 프로그램이 실행되는 환경과 상호 작용할 수 있도록 해주는 Runtime 클래스의 단일 인스턴스가 있습니다.
- [Short](../../../../cldc/java-api/java/lang/Short.md) — Short 클래스는 short 값의 표준 래퍼입니다.
- [String](../../../../cldc/java-api/java/lang/String.md) — String 클래스는 문자열을 나타냅니다.
- [StringBuffer](../../../../cldc/java-api/java/lang/StringBuffer.md) — 문자열 버퍼는 가변 문자 시퀀스를 구현합니다.
- [System](../../../../cldc/java-api/java/lang/System.md) — System 클래스에는 여러 개의 유용한 클래스 필드와 메소드가 포함되어 있습니다.
- [Thread](../../../../cldc/java-api/java/lang/Thread.md) — Thread 는 프로그램의 실행 스레드입니다.
- [Throwable](../../../../cldc/java-api/java/lang/Throwable.md) — Throwable 클래스는 Java 언어에서 모든 오류와 예외의 수퍼 클래스입니다.
## Exception Summary
- [ArithmeticException](../../../../cldc/java-api/java/lang/ArithmeticException.md) — 예외적인 연산 조건에서 발생합니다.
- [ArrayIndexOutOfBoundsException](../../../../cldc/java-api/java/lang/ArrayIndexOutOfBoundsException.md) — 유효하지 않은 색인으로 배열을 액세스했음을 나타냅니다.
- [ArrayStoreException](../../../../cldc/java-api/java/lang/ArrayStoreException.md) — 잘못된 유형의 객체를 객체 배열에 저장하려고 시도했음을 나타냅니다.
- [ClassCastException](../../../../cldc/java-api/java/lang/ClassCastException.md) — 코드가 객체를 인스턴스가 아닌 서브 클래스로 캐스트하려고 시도했음을 나타냅니다.
- [ClassNotFoundException](../../../../cldc/java-api/java/lang/ClassNotFoundException.md) — 응용 프로그램이 Class 클래스의 forName 메소드를 사용하여 문자열 이름을 통해 클래스를 로드하려고 시도하지만 지정된 이름을 가진 클래스 정의를 찾을 수 없을 때 발생합니다.
- [Exception](../../../../cldc/java-api/java/lang/Exception.md) — Exception 클래스와 해당 서브 클래스는 합리적 응용 프로그램이라면 파악해야 하는 동작을 나타내는 Throwable 의 한 형태입니다.
- [IllegalAccessException](../../../../cldc/java-api/java/lang/IllegalAccessException.md) — 응용 프로그램이 클래스를 로드하려고 시도하지만 클래스가 공용이 아니고 다른 패키지에 있기 때문에 현재 실행 중인 메소드가 지정된 클래스의 정의에 액세스할 수 없을 때 발생합니다.
- [IllegalArgumentException](../../../../cldc/java-api/java/lang/IllegalArgumentException.md) — 메소드에 유효하지 않거나 잘못된 인자가 전달되었음을 나타냅니다.
- [IllegalMonitorStateException](../../../../cldc/java-api/java/lang/IllegalMonitorStateException.md) — 스레드가 객체의 모니터에서 대기하거나, 지정된 모니터를 소유하지 않고 객체의 모니터에서 대기 중인 다른 스레드에게 알리려고 시도했음을 나타냅니다.
- [IllegalThreadStateException](../../../../cldc/java-api/java/lang/IllegalThreadStateException.md) — 스레드가 요청된 작업에 적합한 상태가 아님을 나타냅니다.
- [IndexOutOfBoundsException](../../../../cldc/java-api/java/lang/IndexOutOfBoundsException.md) — 배열, 문자열 또는 벡터 등에 대한 색인이 범위를 벗어났음을 나타냅니다.
- [InstantiationException](../../../../cldc/java-api/java/lang/InstantiationException.md) — 응용 프로그램이 Class 클래스의 newInstance 메소드를 사용하여 클래스의 인스턴스를 만들려고 시도하지만 지정된 클래스 객체가 인터페이스이거나 추상 클래스여서 인스턴스화할 수 없을 때 발생합니다.
- [InterruptedException](../../../../cldc/java-api/java/lang/InterruptedException.md) — 스레드가 대기 또는 휴면 상태이거나 오랫동안 중지되어 다른 스레드가 이를 중단한 경우에 발생합니다.
- [NegativeArraySizeException](../../../../cldc/java-api/java/lang/NegativeArraySizeException.md) — 응용 프로그램이 음수 크기를 사용하여 배열을 만들려고 시도하면 발생합니다.
- [NullPointerException](../../../../cldc/java-api/java/lang/NullPointerException.md) — 객체가 요구되는 경우에 응용 프로그램이 null 을 사용하려고 시도하면 발생합니다.
- [NumberFormatException](../../../../cldc/java-api/java/lang/NumberFormatException.md) — 응용 프로그램이 문자열을 숫자 유형 중 하나로 변환하려고 시도했지만 해당 문자열의 형식이 잘못되었음을 나타냅니다.
- [RuntimeException](../../../../cldc/java-api/java/lang/RuntimeException.md) — RuntimeException 은 Java 가상 머신의 정상 작동 중에 발생할 수 있는 예외 수퍼 클래스입니다.
- [SecurityException](../../../../cldc/java-api/java/lang/SecurityException.md) — 보안 위반을 나타내기 위해 시스템에서 발생합니다.
- [StringIndexOutOfBoundsException](../../../../cldc/java-api/java/lang/StringIndexOutOfBoundsException.md) — 색인이 음수이거나 문자열 크기보다 크거나 같다는 것을 나타내기 위해 String 클래스의 charAt 메소드와 다른 String 메소드에서 발생합니다.
## Error Summary
- [Error](../../../../cldc/java-api/java/lang/Error.md) — Error 는 합리적 응용 프로그램이라면 파악하려고 시도해서는 안 되는 심각한 문제를 나타내는 Throwable 의 서브 클래스입니다.
- [NoClassDefFoundError](../../../../cldc/java-api/java/lang/NoClassDefFoundError.md) — Java 가상 머신이 클래스 정의를 정상적인 메소드 호출의 일부나 new 표현식을 사용한 새 인스턴스 작성 과정의 일부로 로드하려고 시도하지만 클래스 정의를 찾을 수 없는 경우에 발생합니다.
- [OutOfMemoryError](../../../../cldc/java-api/java/lang/OutOfMemoryError.md) — Java 가상 머신이 메모리 부족으로 객체를 할당할 수 없으며 가비지 컬렉터에서 추가 메모리를 제공할 수 없는 경우에 발생합니다.
- [VirtualMachineError](../../../../cldc/java-api/java/lang/VirtualMachineError.md) — Java 가상 머신에 장애가 발생했거나 계속 작동하는 데 필요한 자원이 떨어졌음을 나타냅니다.
## 기타
- [IllegalStateException](IllegalStateException.md)
---
title: "Class Timer"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.Timer
```
## 설명
**extends Object:**
스레드가 백그라운드 스레드에서 나중에 실행할 작업을 예약할 수 있는 기능입니다.
작업은 한 번 실행되거나 정기적인 간격으로
반복 실행되도록 예약할 수 있습니다.
각 `Timer` 객체에는 모든 타이머 작업을 순차적으로
실행하는 데 사용되는 단일 백그라운드 스레드가 있습니다.
타이머 작업은 신속하게 완료해야 합니다.
타이머 작업을 완료하는 데 시간이 너무 오래 걸리면 이 타이머의
작업 실행 스레드가 "호그"됩니다.
이 경우 이후 작업의 실행도 지연되므로 위반 작업이 최종적으로 완료되면
모든 작업이 "쌓여서" 연속적으로 빠르게 실행될 수도 있습니다.
`Timer` 객체에 대한 마지막 라이브 참조가 사라지고
아직 해결되지 않은 모든 작업의 실행이 완료되면 타이머의
작업 실행 스레드가 정상적으로 종료되고 가비지 컬렉션이 적용됩니다.
하지만 이렇게 되기까지 오랜 시간이 걸릴 수 있습니다.
기본적으로 작업 실행 스레드는 *데몬 스레드*로 실행되지 않으므로
응용 프로그램이 종료되지 않도록 방지할 수 있습니다.
타이머의 작업 실행 스레드를 신속하게 종료하려면 호출자는
타이머의 `cancel` 메소드를 호출해야 합니다.
타이머의 작업 실행 스레드가
예상치 않게 종료된 경우 이후에
타이머에서 작업을 예약하려고 시도하면
타이머의 `cancel` 메소드를
호출한 것처럼 `IllegalStateException`이 발생합니다.
이 클래스는 스레드 안정성이 높으므로 다수의 스레드가
외부 동기화 없이도 단일 `Timer` 객체를 공유할 수 있습니다.
또한 이 클래스는 실시간 보증을 제공하지 *않으므로*
`Object.wait(long)` 메소드를 사용하여 작업을 예약합니다.
타이머는 구현 및 장치별로 다르게 결정됩니다.
타이머는 단일 가상 머신 내에서만 작동하며 가상 머신을 종료하면 취소됩니다.
가상 머신을 시작할 때 타이머가 없으면
응용 프로그램 요청에 의해서만 만들어집니다.
**Since:**
- MIDP 1.0
**See Also:**
- ``TimerTask``,
``Object.wait(long)``
## 생성자 요약
- Timer () 새로운 타이머를 만듭니다.
## 메서드 요약
- `void cancel ()` — 이 타이머를 종료하고 현재 예약된 모든 작업을 삭제합니다.
- `void schedule ( TimerTask task, Date time)` — 지정된 시간에 지정된 작업이 실행되도록 예약합니다.
- `void schedule ( TimerTask task, Date firstTime, long period)` — 지정된 시간부터 지정된 작업이 고정 지연 실행 을 반복하도록 예약합니다.
- `void schedule ( TimerTask task, long delay)` — 지정된 지연 후에 지정된 작업이 실행되도록 예약합니다.
- `void schedule ( TimerTask task, long delay, long period)` — 지정된 지연 후부터 지정된 작업이 고정 지연 실행 을 반복하도록 예약합니다.
- `void scheduleAtFixedRate ( TimerTask task, Date firstTime, long period)` — 지정된 시간부터 지정된 작업이 고정 속도 실행 을 반복하도록 예약합니다.
- `void scheduleAtFixedRate ( TimerTask task, long delay, long period)` — 지정한 지연 후부터 지정한 작업이 고정 속도 실행 을 반복하도록 예약합니다.
## 생성자 상세
### Timer
```java
public Timer()
```
- 새로운 타이머를 만듭니다.
연결된 스레드는 데몬 스레드로 실행되지 *않으므로* 응용 프로그램이 종료되지 않도록 방지할 수 있습니다.
**See Also:**
- ``Thread``,
``cancel()``
### schedule
```java
public void schedule(TimerTask task,
long delay)
```
**Parameters:**
- `delay` - 작업이 실행되기 전의 지연(밀리초)
타이머는 구현 및 장치별로 다르게 결정되기 때문에
실제 지연은 요청된 시간과
다를 수도 있습니다.
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소된 경우
### schedule
```java
public void schedule(TimerTask task,
Date time)
```
**Parameters:**
- `time` - 작업이 실행되는 시간
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### schedule
```java
public void schedule(TimerTask task,
long delay,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### schedule
```java
public void schedule(TimerTask task,
Date firstTime,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
long delay,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
Date firstTime,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### cancel
```java
public void cancel()
```
이 타이머를 종료하고 현재 예약된 모든 작업을 삭제합니다.
현재 실행 중인 작업은 중단하지 않습니다.
타이머가 종료되면 해당 실행 스레드도 함께 종료되어
더 이상 작업을 예약할 수 없습니다. 이 타이머에서 호출한 타이머 작업의 run 메소드 내에서
이 메소드를 호출하면 현재 실행 중인 작업이
이 타이머에서 실행되는
마지막 작업이 됩니다. 이 메소드는 반복해서 호출할 수 있지만
두 번째 및 이후 호출 시에는 어떤 변화도 없습니다.
## 메서드 상세
### schedule
```java
public void schedule(TimerTask task,
long delay)
```
**Parameters:**
- `delay` - 작업이 실행되기 전의 지연(밀리초)
타이머는 구현 및 장치별로 다르게 결정되기 때문에
실제 지연은 요청된 시간과
다를 수도 있습니다.
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소된 경우
### schedule
```java
public void schedule(TimerTask task,
Date time)
```
**Parameters:**
- `time` - 작업이 실행되는 시간
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### schedule
```java
public void schedule(TimerTask task,
long delay,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### schedule
```java
public void schedule(TimerTask task,
Date firstTime,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
long delay,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### scheduleAtFixedRate
```java
public void scheduleAtFixedRate(TimerTask task,
Date firstTime,
long period)
```
**Parameters:**
- `period` - 연속 작업 실행 사이의 시간(밀리초)
**Throws:**
- `IllegalStateException` - 작업이 이미 예약 또는 취소되었거나
타이머가 취소되었거나 타이머 스레드가 종료된 경우
### cancel
```java
public void cancel()
```
이 타이머를 종료하고 현재 예약된 모든 작업을 삭제합니다.
현재 실행 중인 작업은 중단하지 않습니다.
타이머가 종료되면 해당 실행 스레드도 함께 종료되어
더 이상 작업을 예약할 수 없습니다. 이 타이머에서 호출한 타이머 작업의 run 메소드 내에서
이 메소드를 호출하면 현재 실행 중인 작업이
이 타이머에서 실행되는
마지막 작업이 됩니다. 이 메소드는 반복해서 호출할 수 있지만
두 번째 및 이후 호출 시에는 어떤 변화도 없습니다.
---
title: "Class TimerTask"
---
`package java.util`
```text
java.lang.Object
|
+--java.util.TimerTask
```
## 설명
**All Implemented Interfaces:**
- `Runnable`
**implements Runnable:**
`Timer`에서 한 번 실행되거나 반복 실행되도록
예약할 수 있는 작업
**Since:**
- MIDP 1.0
**See Also:**
- ``Timer``
## 생성자 요약
- `protected TimerTask ()` — 새로운 타이머 작업을 만듭니다.
## 메서드 요약
- `boolean cancel ()` — 이 타이머 작업을 취소합니다.
- `abstract void run ()` — 이 타이머 작업으로 수행되는 작업
- `long scheduledExecutionTime ()` — 이 작업의 최근 실제 실행의 예약된 실행 시간을 반환합니다.
## 생성자 상세
### TimerTask
```java
protected TimerTask()
```
- 새로운 타이머 작업을 만듭니다.
### run
```java
public abstract void run()
```
**Specified by:**
- `run` in interface `Runnable`
**See Also:**
- ``Thread.run()``
### cancel
```java
public boolean cancel()
```
**Returns:**
- 이 작업이 한 번 실행되도록 예약되었지만 실행되지 않았거나
반복 실행되도록 예약된 경우 true.
작업이 한 번 실행되도록 예약되었으며
이미 실행되었거나 작업이 아직 예약되지 않았거나
이미 취소된 경우에는 false를 반환합니다.
즉, 이 메소드는 하나 이상의 예약된 실행을 수행할 수 없는 경우
`true`를 반환합니다.
### scheduledExecutionTime
```java
public long scheduledExecutionTime()
```
**Returns:**
- 이 작업의 최근 실행이
예약된 시간(Date.getTime()에서 반환된 형식).
작업이 아직 첫 번째 실행을 시작하지 않은 경우에는
반환 값이 정의되지 않습니다.
**See Also:**
- ``Date.getTime()``
## 메서드 상세
### run
```java
public abstract void run()
```
**Specified by:**
- `run` in interface `Runnable`
**See Also:**
- ``Thread.run()``
### cancel
```java
public boolean cancel()
```
**Returns:**
- 이 작업이 한 번 실행되도록 예약되었지만 실행되지 않았거나
반복 실행되도록 예약된 경우 true.
작업이 한 번 실행되도록 예약되었으며
이미 실행되었거나 작업이 아직 예약되지 않았거나
이미 취소된 경우에는 false를 반환합니다.
즉, 이 메소드는 하나 이상의 예약된 실행을 수행할 수 없는 경우
`true`를 반환합니다.
### scheduledExecutionTime
```java
public long scheduledExecutionTime()
```
**Returns:**
- 이 작업의 최근 실행이
예약된 시간(Date.getTime()에서 반환된 형식).
작업이 아직 첫 번째 실행을 시작하지 않은 경우에는
반환 값이 정의되지 않습니다.
**See Also:**
- ``Date.getTime()``
---
title: "package java.util"
---
**See:**
**Description**
## Interface Summary
- [Enumeration](../../../../cldc/java-api/java/util/Enumeration.md) — Enumeration 인터페이스를 구현하는 객체는 한 번에 하나씩 일련의 요소를 생성합니다.
## Class Summary
- [Calendar](../../../../cldc/java-api/java/util/Calendar.md) — Calendar 는 YEAR , MONTH , DAY 등의 정수 필드 집합을 사용하여 날짜를 가져오고 설정하는 추상 클래스입니다.
- [Date](../../../../cldc/java-api/java/util/Date.md) — Date 클래스는 특정 시간을 밀리초까지 나타냅니다.
- [Hashtable](../../../../cldc/java-api/java/util/Hashtable.md) — 이 클래스는 키를 값에 매핑하는 해시 테이블을 구현합니다.
- [Random](../../../../cldc/java-api/java/util/Random.md) — 이 클래스의 인스턴스는 의사 난수 스트림을 생성하는 데 사용됩니다.
- [Stack](../../../../cldc/java-api/java/util/Stack.md) — Stack 클래스는 LIFO (Last-In-First-Out) 객체 스택을 나타냅니다.
- [Timer](Timer.md) — 스레드가 백그라운드 스레드에서 나중에 실행할 작업을 예약할 수 있는 기능입니다.
- [TimerTask](TimerTask.md) — Timer 에서 한 번 실행되거나 반복 실행되도록 예약할 수 있는 작업
- [TimeZone](../../../../cldc/java-api/java/util/TimeZone.md) — TimeZone 은 표준 시간대 오프셋을 나타내며 일광 절약 시간도 고려합니다.
- [Vector](../../../../cldc/java-api/java/util/Vector.md) — Vector 클래스는 확장 가능한 객체 배열을 구현합니다.
## Exception Summary
- [EmptyStackException](../../../../cldc/java-api/java/util/EmptyStackException.md) — 스택이 비어 있음을 나타내기 위해 Stack 클래스의 메소드에서 발생합니다.
- [NoSuchElementException](../../../../cldc/java-api/java/util/NoSuchElementException.md) — 열거에 더 이상 요소가 없음을 나타내기 위해 Enumeration 의 nextElement 메소드에서 발생합니다.
---
title: "Interface CommConnection"
---
`package javax.microedition.io`
```text
CommConnection cc = (CommConnection)
Connector.open("comm:com0;baudrate=19200");
int baudrate = cc.getBaudRate();
InputStream is = cc.openInputStream();
OutputStream os = cc.openOutputStream();
int ch = 0;
while(ch != 'Z') {
os.write(ch);
ch = is.read();
ch++;
}
is.close();
os.close();
cc.close();
```
## 설명
아래 예에서는 `CommConnection`을 사용하여
이용 가능한 통신 포트를 검색하는 방법을 보여 줍니다.
논리적 포트 이름은 영숫자 문자의 조합을 사용하여
플랫폼 이름 지정 규약과 일치하도록 정의할 수 있습니다.
하지만 제안된 규약에 따라 이 클래스의
각 구현에서 일관성 있게 포트 이름을 지정하는 것이 좋습니다.
가상 머신 구현 시 다음 규약을 따라야 합니다.
포트 이름에는 포트 기능을 나타내는 텍스트 약어가 포함되며
그 뒤에는 포트의 일련 번호가 옵니다.
다음과 같은 장치 이름 유형을 사용해야 합니다.
- COM#, 여기서 COM은 RS-232 포트에 사용되고
#은 포트에 할당된 번호입니다.
- IR#, 여기서 IR은 IrDA IRCOMM 포트에 사용되고
#은 포트에 할당된 번호입니다.
이 이름 지정 체계에서는 API 사용자가 원하는
포트 유형을 결정할 수 있습니다.
예를 들어, 응용 프로그램이 데이터 조각을 "빔"하려는 경우에는
연결을 열 "IR#" 포트를 찾을 수 있습니다.
또는 사용 가능한 모든 포트를 시도해 볼 수도 있습니다.
**Since:**
- MIDP 2.0
## 메서드 요약
- `int getBaudRate ()` — 직렬 포트 연결의 보 속도를 가져옵니다.
- `int setBaudRate (int baudrate)` — 직렬 포트 연결의 보 속도를 설정합니다.
## 메서드 상세
### getBaudRate
```java
public int getBaudRate()
```
**Returns:**
- 연결의 보 속도
**See Also:**
- ``setBaudRate(int)``
### setBaudRate
```java
public int setBaudRate(int baudrate)
```
**Parameters:**
- `baudrate` - 연결의 보 속도
**Returns:**
- 연결의 이전 보 속도
**See Also:**
- ``getBaudRate()``
---
title: "Class Connector"
---
`package javax.microedition.io`
```text
java.lang.Object
|
+--javax.microedition.io.Connector
```
## 설명
**extends Object:**
새로운 연결 객체를 만들기 위한 팩토리 클래스
시스템 등록 정보에서 읽은 플랫폼 이름에서 형성된 이름을 가진
프로토콜 구현 클래스와 응용 프로그램 프로그래머가
제공한 매개 변수 문자열에서
추출한 요청된 연결의 프로토콜 이름을
조회하여 동적으로 연결을 만듭니다.
대상을 설명하는 매개 변수 문자열은 RFC 2396에 설명된
URL 형식을 따라야 합니다.
일반적인 형식은 다음과 같습니다.
`{scheme}:[{target}][{parms}]`
여기서 `{scheme}`은 *http*와 같은
프로토콜 이름입니다.
`{target}`은 일반적으로
일종의 네트워크 주소입니다.
모든 `{parms}`는 ";x=y" 형식의 일련의 등식으로
형성됩니다(예: ";type=a").
선택 사항인 두 번째 매개 변수를 open 함수에 지정할 수도 있습니다.
이것은 호출 코드의 의도를 프로토콜 핸들러에 표시하는 모드 플래그입니다.
여기서 옵션은 연결이 읽기(READ), 쓰기(WRITE) 또는
둘 다(READ_WRITE)가 될 것인지를 지정합니다.
이러한 플래그 설정의 유효성은 프로토콜에 따라 결정됩니다.
예를 들어, 프린터 연결은 읽기 액세스를 허용하지 않으며
IllegalArgumentException을 발생시킵니다.
모드 매개 변수를 지정하지 않으면
기본적으로 READ_WRITE가 사용됩니다.
선택 사항인 세 번째 매개 변수는 호출 모드가 시간 초과 예외를
처리할 수 있는지를 나타내는 부울 플래그입니다.
이 플래그를 설정하면 프로토콜 구현에서 시간 초과 상황을 감지할 때
InterruptedIOException을 발생시킬 수도 있습니다.
이 플래그는 프로토콜 핸들러에게 제공되는 힌트일 뿐이며
실제로 이러한 예외가 발생한다는 것을 보장하지는 않습니다.
이 매개 변수를 설정하지 않으면 시간 초과 예외가
발생하지 않습니다.
단순히 특정 입력 또는 출력 스트림에 액세스하기 위해
연결을 여는 경우가 많기 때문에 이러한 용도로 4개의 편리한 함수가 제공됩니다.
데이터그램 주소 지정에 대한 자세한 내용은
``DatagramConnection``을
참조하십시오.
**Since:**
- CLDC 1.0
## 필드 요약
- `static int READ` — 액세스 모드 READ.
- `static int READ_WRITE` — 액세스 모드 READ_WRITE.
- `static int WRITE` — 액세스 모드 WRITE.
## 메서드 요약
- `static Connection open ( String name)` — 연결을 만들어 엽니다.
- `static Connection open ( String name, int mode)` — 연결을 만들어 엽니다.
- `static Connection open ( String name, int mode, boolean timeouts)` — 연결을 만들어 엽니다.
- `static DataInputStream openDataInputStream ( String name)` — 연결 입력 스트림을 만들어 엽니다.
- `static DataOutputStream openDataOutputStream ( String name)` — 연결 출력 스트림을 만들어 엽니다.
- `static InputStream openInputStream ( String name)` — 연결 입력 스트림을 만들어 엽니다.
- `static OutputStream openOutputStream ( String name)` — 연결 출력 스트림을 만들어 엽니다.
## 필드 상세
### READ
```java
public static final int READ
```
**See Also:**
- `Constant Field Values`
### WRITE
```java
public static final int WRITE
```
**See Also:**
- `Constant Field Values`
### READ_WRITE
```java
public static final int READ_WRITE
```
**See Also:**
- `Constant Field Values`
### open
```java
public static Connection open(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 요청한 프로토콜 핸들러가
허용되지 않는 경우
### open
```java
public static Connection open(String name,
int mode)
throws IOException
```
**Parameters:**
- `mode` - 액세스 모드
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 요청한 프로토콜 핸들러가
허용되지 않는 경우
### open
```java
public static Connection open(String name,
int mode,
boolean timeouts)
throws IOException
```
**Parameters:**
- `timeouts` - 호출자가 시간 초과 예외를 원한다는 것을
나타내는 플래그
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 요청한 프로토콜 핸들러가
허용되지 않는 경우
### openDataInputStream
```java
public static DataInputStream openDataInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataInputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
### openDataOutputStream
```java
public static DataOutputStream openDataOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataOutputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
### openInputStream
```java
public static InputStream openInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- InputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
### openOutputStream
```java
public static OutputStream openOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- OutputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
## 메서드 상세
### open
```java
public static Connection open(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 요청한 프로토콜 핸들러가
허용되지 않는 경우
### open
```java
public static Connection open(String name,
int mode)
throws IOException
```
**Parameters:**
- `mode` - 액세스 모드
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 요청한 프로토콜 핸들러가
허용되지 않는 경우
### open
```java
public static Connection open(String name,
int mode,
boolean timeouts)
throws IOException
```
**Parameters:**
- `timeouts` - 호출자가 시간 초과 예외를 원한다는 것을
나타내는 플래그
**Returns:**
- 새로운 연결 객체
**Throws:**
- `SecurityException` - 요청한 프로토콜 핸들러가
허용되지 않는 경우
### openDataInputStream
```java
public static DataInputStream openDataInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataInputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
### openDataOutputStream
```java
public static DataOutputStream openDataOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- DataOutputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
### openInputStream
```java
public static InputStream openInputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- InputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
### openOutputStream
```java
public static OutputStream openOutputStream(String name)
throws IOException
```
**Parameters:**
- `name` - 연결할 URL
**Returns:**
- OutputStream
**Throws:**
- `SecurityException` - 요청한 스트림에 대한 액세스가
허용되지 않는 경우
---
title: "Interface HttpConnection"
---
`package javax.microedition.io`
```text
void getViaStreamConnection(String url) throws IOException {
StreamConnection c = null;
InputStream s = null;
try {
c = (StreamConnection)Connector.open(url);
s = c.openInputStream();
int ch;
while ((ch = s.read()) != -1) {
...
}
} finally {
if (s != null)
s.close();
if (c != null)
c.close();
}
}
```
## 설명
**ContentConnection 사용 예**
`ContentConnection`을 사용하여 단순히 URL을 읽기만 하며
HTTP 고유의 동작은 필요 없거나 사용되지 않습니다.
`Connector.open`을 사용하여 URL을 열고
`ContentConnection`이 반환됩니다.
`ContentConnection`은 길이를 제공할 수도 있습니다.
길이를 사용할 수 있으면 길이를 사용하여 대량으로 데이터를 읽습니다.
`ContentConnection`에서
`InputStream`이 열립니다.
EOF(-1)까지 모든 문자를 읽는 데 사용됩니다.
예외가 발생하면 연결과 스트림이 닫힙니다.
**HttpConnection 사용 예**
`HttpConnection`을 사용하여 HTTP 헤더와 데이터를 읽습니다.
`Connector.open`을 사용하여 URL을 열고
`HttpConnection`이 반환됩니다.
HTTP 헤더를 읽고 처리합니다.
길이를 사용할 수 있으면 길이를 사용하여 대량으로 데이터를 읽습니다.
`HttpConnection`에서
`InputStream`이 열립니다.
EOF(-1)까지 모든 문자를 읽는 데 사용됩니다.
예외가 발생하면 연결과 스트림이 닫힙니다.
**POST 및 HttpConnection 사용 예**
일부 헤더와 내용이 포함된 요청을 서버에 게시하고
헤더와 내용을 처리합니다.
`Connector.open`을 사용하여 URL을 열고
`HttpConnection`이 반환됩니다.
요청 메소드는 POST와 요청 헤더 집합으로 설정됩니다.
단순한 명령을 작성하고 플러시합니다.
HTTP 헤더를 읽고 처리합니다.
길이를 사용할 수 있으면 길이를 사용하여 대량으로 데이터를 읽습니다.
`HttpConnection`에서
`InputStream`이 열립니다.
EOF(-1)까지 모든 문자를 읽는 데 사용됩니다.
예외가 발생하면 연결과 스트림이 닫힙니다.
**커넥터에 대한 단순한 스트림 메소드**
주의: `Connector` 클래스는
지정된 URL에 대한
입력 또는 출력 스트림을 직접 검색하기 위한
다음과 같은 편리한 메소드를 정의합니다.
- ` InputStream openInputStream(String url) `
- ` DataInputStream openDataInputStream(String url) `
- ` OutputStream openOutputStream(String url) `
- ` DataOutputStream openDataOutputStream(String url) `
이러한 메소드를 사용할 경우 특정 제한이 수반됩니다.
실제 연결에 대한 참조가 아닌
연결의 입력 또는 출력 스트림에 대한
참조만 가져올 수 있습니다.
연결에 대한 참조를 가져올 수 없으므로 연결을 직접 조작하거나
쿼리할 수 없으며 다음 메소드를 호출할 수 없게 됩니다.
- ` getRequestMethod() `
- ` setRequestMethod() `
- ` getRequestProperty() `
- ` setRequestProperty() `
- ` getLength() `
- ` getType() `
- ` getEncoding() `
- ` getHeaderField() `
- ` getResponseCode() `
- ` getResponseMessage() `
- ` getHeaderFieldInt`
- ` getHeaderFieldDate`
- ` getExpiration`
- ` getDate`
- ` getLastModified`
- ` getHeaderField`
- ` getHeaderFieldKey`
**Since:**
- MIDP 1.0
## 필드 요약
- `static String GET` — HTTP Get 메소드
- `static String HEAD` — HTTP Head 메소드
- `static int HTTP_ACCEPTED` — 202: 요청 처리가 승인되었지만 처리가 완료되지 않았습니다.
- `static int HTTP_BAD_GATEWAY` — 502: 게이트웨이나 프록시로 작동하는 서버가 요청 이행 중에 액세스한 업스트림 서버로부터 유효하지 않은 응답을 받았습니다.
- `static int HTTP_BAD_METHOD` — 405: Request-Line에 지정된 메소드를 Request-URI로 식별된 자원에 사용할 수 없습니다.
- `static int HTTP_BAD_REQUEST` — 400: 잘못된 형식의 구문 때문에 서버에서 요청을 이해할 수 없습니다.
- `static int HTTP_CLIENT_TIMEOUT` — 408: 클라이언트가 서버 대기 시간 내에 요청하지 못했습니다.
- `static int HTTP_CONFLICT` — 409: 요청이 자원의 현재 상태와 충돌하므로 요청을 완료할 수 없습니다.
- `static int HTTP_CREATED` — 201: 요청이 이행되었으며 그 결과 새로운 자원이 만들어졌습니다.
- `static int HTTP_ENTITY_TOO_LARGE` — 413: 서버에서 처리할 수 있는 것보다 요청 엔티티가 더 크므로 서버가 요청 처리를 거부합니다.
- `static int HTTP_EXPECT_FAILED` — 417: 서버가 Expect 요청 헤더 필드에 지정된 기대를 충족시킬 수 없거나, 서버가 프록시인 경우 다음 경유 서버에서 요청을 충족시킬 수 없다는 확실한 증거가 있습니다.
- `static int HTTP_FORBIDDEN` — 403: 서버가 요청을 이해했지만 이행하기를 거부합니다.
- `static int HTTP_GATEWAY_TIMEOUT` — 504: 게이트웨이나 프록시로 작동하는 서버가 요청 완료 중에 액세스한 URI 또는 다른 보조 서버에 의해 지정된 업스트림 서버로부터 적절한 응답을 받지 못했습니다.
- `static int HTTP_GONE` — 410: 요청된 자원은 서버에서 더 이상 사용할 수 없으며 전달 주소를 알 수 없습니다.
- `static int HTTP_INTERNAL_ERROR` — 500: 서버에서 예상치 못한 조건을 발견하여 요청을 이행하지 못했습니다.
- `static int HTTP_LENGTH_REQUIRED` — 411: 서버에서 Content- Length가 정의되지 않은 요청을 거부합니다.
- `static int HTTP_MOVED_PERM` — 301: 요청된 자원에 새로운 영구 URL이 할당되었으며 이 자원에 대한 이후 참조는 반환된 URI 중 하나를 사용하는 것이 좋습니다.
- `static int HTTP_MOVED_TEMP` — 302: 요청된 자원이 일시적으로 다른 URI에 있습니다.
- `static int HTTP_MULT_CHOICE` — 300: 요청된 자원이 각각 특정 위치를 가진 표현 집합 중 하나에 일치하며, 사용자가 원하는 표현을 선택하고 요청을 해당 위치로 리디렉션할 수 있도록 에이전트 구동 협상 정보가 제공됩니다.
- `static int HTTP_NO_CONTENT` — 204: 서버에서 요청을 이행했지만 entity-body를 반환할 필요가 없으며 업데이트된 meta-information을 반환할 수도 있습니다.
- `static int HTTP_NOT_ACCEPTABLE` — 406: 요청에 의해 식별된 자원이 요청 시 전송된 승인 헤더에 따라 승인할 수 없는 내용이 포함된 응답 엔티티만 생성할 수 있습니다.
- `static int HTTP_NOT_AUTHORITATIVE` — 203: entity-header에 반환된 meta-information은 원본 서버에서 사용할 수 있는 정의 집합이 아닙니다.
- `static int HTTP_NOT_FOUND` — 404: 서버에서 Request-URI에 일치하는 항목을 찾지 못했습니다.
- `static int HTTP_NOT_IMPLEMENTED` — 501: 서버에서 요청 이행에 필요한 기능을 지원하지 않습니다.
- `static int HTTP_NOT_MODIFIED` — 304: 클라이언트가 조건부 GET 요청을 수행했으며 액세스가 허용되었지만 문서를 수정하지 않은 경우 서버는 이 상태 코드로 응답하는 것이 좋습니다.
- `static int HTTP_OK` — 200: 요청이 성공했습니다.
- `static int HTTP_PARTIAL` — 206: 서버에서 자원에 대한 부분 GET 요청을 이행했습니다.
- `static int HTTP_PAYMENT_REQUIRED` — 402: 이 코드는 이후 사용을 위해 예약됩니다.
- `static int HTTP_PRECON_FAILED` — 412: 하나 이상의 요청 헤더 필드에 지정된 사전 조건을 서버에서 테스트한 결과 false로 평가되었습니다.
- `static int HTTP_PROXY_AUTH` — 407: 이 코드는 401 (Unauthorized)와 유사하지만 클라이언트가 먼저 프록시를 사용하여 자신을 인증해야 함을 나타냅니다.
- `static int HTTP_REQ_TOO_LONG` — 414: Request-URI가 서버에서 해석할 수 있는 것보다 길어서 서버가 요청 처리를 거부합니다.
- `static int HTTP_RESET` — 205: 서버에서 요청을 이행했으며 사용자 에이전트는 요청을 보내게 한 문서 보기를 재설정하는 것이 좋습니다.
- `static int HTTP_SEE_OTHER` — 303: 요청에 대한 응답은 다른 URI에서 찾을 수 있으며 해당 자원에 대한 GET 메소드를 사용하여 검색하는 것이 좋습니다.
- `static int HTTP_TEMP_REDIRECT` — 307: 요청된 자원이 일시적으로 다른 URI에 있습니다.
- `static int HTTP_UNAUTHORIZED` — 401: 요청에 사용자 인증이 필요합니다.
- `static int HTTP_UNAVAILABLE` — 503: 일시적 오버로드 또는 유지 보수로 인해 현재 서버에서 요청을 처리할 수 없습니다.
- `static int HTTP_UNSUPPORTED_RANGE` — 416: 요청에 Range 요청 헤더 필드가 포함되어 있지만 이 필드의 범위 지정자 값 중에 선택한 자원의 현재 범위와 겹치는 값이 없으며 요청에 If-Range 요청 헤더 필드가 포함되어 있지 않으면 서버에서 이 상태 코드로 응답하는 것이 좋습니다.
- `static int HTTP_UNSUPPORTED_TYPE` — 415: 요청 엔티티가 요청된 메소드의 요청 자원에서 지원하지 않는 형식이므로 서버에서 요청 처리를 거부합니다.
- `static int HTTP_USE_PROXY` — 305: 요청된 자원은 Location 필드에 지정된 프록시를 통해 액세스해야 합니다.
- `static int HTTP_VERSION` — 505: 서버에서 요청 메시지에 사용된 HTTP 프로토콜 버전을 지원하지 않거나 지원을 거부합니다.
- `static String POST` — HTTP Post 메소드
## 메서드 요약
- `long getDate ()` — date 헤더 필드 값을 반환합니다.
- `long getExpiration ()` — expires 헤더 필드 값을 반환합니다.
- `String getFile ()` — HttpConnection 의 URL에서 파일 부분을 반환합니다.
- `String getHeaderField (int n)` — 색인으로 헤더 필드 값을 가져옵니다.
- `String getHeaderField ( String name)` — 명명된 헤더 필드 값을 반환합니다.
- `long getHeaderFieldDate ( String name, long def)` — 날짜로 구문 분석된 명명된 필드 값을 반환합니다.
- `int getHeaderFieldInt ( String name, int def)` — 숫자로 구문 분석된 명명된 필드 값을 반환합니다.
- `String getHeaderFieldKey (int n)` — 색인으로 헤더 필드 키를 가져옵니다.
- `String getHost ()` — HttpConnection 의 URL에 지정된 호스트 정보(예: 호스트 이름 또는 IPv4 주소)를 반환합니다.
- `long getLastModified ()` — last-modified 헤더 필드 값을 반환합니다.
- `int getPort ()` — 이 HttpConnection 에 대한 URL의 네트워크 포트 번호를 반환합니다.
- `String getProtocol ()` — HttpConnection 의 URL에 지정된 프로토콜 이름(예: http 또는 https)을 반환합니다.
- `String getQuery ()` — HttpConnection 의 URL에서 쿼리 부분을 반환합니다.
- `String getRef ()` — HttpConnection 의 URL에서 참조 부분을 반환합니다.
- `String getRequestMethod ()` — 현재 요청 메소드(예: HEAD, GET, POST)를 가져옵니다.
- `String getRequestProperty ( String key)` — 이 연결의 명명된 일반 요청 등록 정보 값을 반환합니다.
- `int getResponseCode ()` — HTTP 응답 상태 코드를 반환하며, 응답을 다음과 같이 구문 분석합니다.
- `String getResponseMessage ()` — 응답 코드와 함께 서버에서 반환된 HTTP 응답 메시지를 가져옵니다.
- `String getURL ()` — 이 연결에 대한 URL의 문자열 표현을 반환합니다.
- `void setRequestMethod ( String method)` — URL 요청 메소드를 다음 중 하나로 설정합니다.
- `void setRequestProperty ( String key, String value)` — 일반 요청 등록 정보를 설정합니다.
## 필드 상세
### HEAD
```java
public static final String HEAD
```
**See Also:**
- `Constant Field Values`
### GET
```java
public static final String GET
```
**See Also:**
- `Constant Field Values`
### POST
```java
public static final String POST
```
**See Also:**
- `Constant Field Values`
### HTTP_OK
```java
public static final int HTTP_OK
```
**See Also:**
- `Constant Field Values`
### HTTP_CREATED
```java
public static final int HTTP_CREATED
```
**See Also:**
- `Constant Field Values`
### HTTP_ACCEPTED
```java
public static final int HTTP_ACCEPTED
```
**See Also:**
- `Constant Field Values`
### HTTP_NOT_AUTHORITATIVE
```java
public static final int HTTP_NOT_AUTHORITATIVE
```
**See Also:**
- `Constant Field Values`
### HTTP_NO_CONTENT
```java
public static final int HTTP_NO_CONTENT
```
**See Also:**
- `Constant Field Values`
### HTTP_RESET
```java
public static final int HTTP_RESET
```
**See Also:**
- `Constant Field Values`
### HTTP_PARTIAL
```java
public static final int HTTP_PARTIAL
```
**See Also:**
- `Constant Field Values`
### HTTP_MULT_CHOICE
```java
public static final int HTTP_MULT_CHOICE
```
**See Also:**
- `Constant Field Values`
### HTTP_MOVED_PERM
```java
public static final int HTTP_MOVED_PERM
```
**See Also:**
- `Constant Field Values`
### HTTP_MOVED_TEMP
```java
public static final int HTTP_MOVED_TEMP
```
**See Also:**
- `Constant Field Values`
### HTTP_SEE_OTHER
```java
public static final int HTTP_SEE_OTHER
```
**See Also:**
- `Constant Field Values`
### HTTP_NOT_MODIFIED
```java
public static final int HTTP_NOT_MODIFIED
```
**See Also:**
- `Constant Field Values`
### HTTP_USE_PROXY
```java
public static final int HTTP_USE_PROXY
```
**See Also:**
- `Constant Field Values`
### HTTP_TEMP_REDIRECT
```java
public static final int HTTP_TEMP_REDIRECT
```
**See Also:**
- `Constant Field Values`
### HTTP_BAD_REQUEST
```java
public static final int HTTP_BAD_REQUEST
```
**See Also:**
- `Constant Field Values`
### HTTP_UNAUTHORIZED
```java
public static final int HTTP_UNAUTHORIZED
```
**See Also:**
- `Constant Field Values`
### HTTP_PAYMENT_REQUIRED
```java
public static final int HTTP_PAYMENT_REQUIRED
```
**See Also:**
- `Constant Field Values`
### HTTP_FORBIDDEN
```java
public static final int HTTP_FORBIDDEN
```
**See Also:**
- `Constant Field Values`
### HTTP_NOT_FOUND
```java
public static final int HTTP_NOT_FOUND
```
**See Also:**
- `Constant Field Values`
### HTTP_BAD_METHOD
```java
public static final int HTTP_BAD_METHOD
```
**See Also:**
- `Constant Field Values`
### HTTP_NOT_ACCEPTABLE
```java
public static final int HTTP_NOT_ACCEPTABLE
```
**See Also:**
- `Constant Field Values`
### HTTP_PROXY_AUTH
```java
public static final int HTTP_PROXY_AUTH
```
**See Also:**
- `Constant Field Values`
### HTTP_CLIENT_TIMEOUT
```java
public static final int HTTP_CLIENT_TIMEOUT
```
**See Also:**
- `Constant Field Values`
### HTTP_CONFLICT
```java
public static final int HTTP_CONFLICT
```
**See Also:**
- `Constant Field Values`
### HTTP_GONE
```java
public static final int HTTP_GONE
```
**See Also:**
- `Constant Field Values`
### HTTP_LENGTH_REQUIRED
```java
public static final int HTTP_LENGTH_REQUIRED
```
**See Also:**
- `Constant Field Values`
### HTTP_PRECON_FAILED
```java
public static final int HTTP_PRECON_FAILED
```
**See Also:**
- `Constant Field Values`
### HTTP_ENTITY_TOO_LARGE
```java
public static final int HTTP_ENTITY_TOO_LARGE
```
**See Also:**
- `Constant Field Values`
### HTTP_REQ_TOO_LONG
```java
public static final int HTTP_REQ_TOO_LONG
```
**See Also:**
- `Constant Field Values`
### HTTP_UNSUPPORTED_TYPE
```java
public static final int HTTP_UNSUPPORTED_TYPE
```
**See Also:**
- `Constant Field Values`
### HTTP_UNSUPPORTED_RANGE
```java
public static final int HTTP_UNSUPPORTED_RANGE
```
**See Also:**
- `Constant Field Values`
### HTTP_EXPECT_FAILED
```java
public static final int HTTP_EXPECT_FAILED
```
**See Also:**
- `Constant Field Values`
### HTTP_INTERNAL_ERROR
```java
public static final int HTTP_INTERNAL_ERROR
```
**See Also:**
- `Constant Field Values`
### HTTP_NOT_IMPLEMENTED
```java
public static final int HTTP_NOT_IMPLEMENTED
```
**See Also:**
- `Constant Field Values`
### HTTP_BAD_GATEWAY
```java
public static final int HTTP_BAD_GATEWAY
```
**See Also:**
- `Constant Field Values`
### HTTP_UNAVAILABLE
```java
public static final int HTTP_UNAVAILABLE
```
**See Also:**
- `Constant Field Values`
### HTTP_GATEWAY_TIMEOUT
```java
public static final int HTTP_GATEWAY_TIMEOUT
```
**See Also:**
- `Constant Field Values`
### HTTP_VERSION
```java
public static final int HTTP_VERSION
```
**See Also:**
- `Constant Field Values`
### getURL
```java
public String getURL()
```
**Returns:**
- 이 연결에 대한 URL의 문자열 표현
### getProtocol
```java
public String getProtocol()
```
**Returns:**
- `HttpConnection`의 URL에 지정된 프로토콜
### getHost
```java
public String getHost()
```
**Returns:**
- `HttpConnection`의
URL에 지정된 호스트 정보
### getFile
```java
public String getFile()
```
**Returns:**
- `HttpConnection`의 URL에서 파일 부분.
파일이 없으면 `null`이 반환됩니다.
### getRef
```java
public String getRef()
```
**Returns:**
- `HttpConnection`의 URL에서 참조 부분.
값이 없으면 `null`이 반환됩니다.
### getQuery
```java
public String getQuery()
```
**Returns:**
- `HttpConnection`의
URL에서 쿼리 부분. 값이 없으면
`null`이 반환됩니다.
### getPort
```java
public int getPort()
```
**Returns:**
- 이 `HttpConnection`에 대한
URL의 네트워크 포트 번호.
`Connector.open`에 전달된 문자열에 포트 번호가 없으면
기본 HTTP 포트 번호(80)가 반환됩니다.
### getRequestMethod
```java
public String getRequestMethod()
```
**Returns:**
- HTTP 요청 메소드
**See Also:**
- ``setRequestMethod(java.lang.String)``
### setRequestMethod
```java
public void setRequestMethod(String method)
throws IOException
```
**Parameters:**
- `method` - HTTP 메소드
**Throws:**
- `IOException` - 메소드를 재설정할 수 없거나
요청된 메소드가 HTTP에 유효하지 않은 경우
**See Also:**
- ``getRequestMethod()``
### getRequestProperty
```java
public String getRequestProperty(String key)
```
**Parameters:**
- `key` - 요청 등록 정보를 알려주는 키워드(예:
"accept")
**Returns:**
- 이 연결의 명명된 일반 요청 등록 정보 값.
지정된 이름을 가진 키가 없으면
`null`이 반환됩니다.
**See Also:**
- ``setRequestProperty(java.lang.String, java.lang.String)``
### setRequestProperty
```java
public void setRequestProperty(String key,
String value)
throws IOException
```
**Parameters:**
- `value` - 연결된 값
**Throws:**
- `IOException` - 연결 상태가
연결됨인 경우
**See Also:**
- ``getRequestProperty(java.lang.String)``
### getResponseCode
```java
public int getResponseCode()
throws IOException
```
**Returns:**
- HTTP Status-Code 또는 상태 코드를 확인할 수 없는 경우 -1
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getResponseMessage
```java
public String getResponseMessage()
throws IOException
```
**Returns:**
- HTTP 응답 메시지 또는 `null`
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getExpiration
```java
public long getExpiration()
throws IOException
```
**Returns:**
- 이 URL이 참조하는 자원의 만료 날짜 또는
만료 날짜를 알 수 없는 경우 0.
값은 1970년 1월 1일 GMT 이후의 밀리초 수입니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getDate
```java
public long getDate()
throws IOException
```
**Returns:**
- URL이 참조하는 자원의 전송 날짜 또는
전송 날짜를 알 수 없는 경우 `0`.
반환된 값은 1970년 1월 1일 GMT 이후의 밀리초 수입니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getLastModified
```java
public long getLastModified()
throws IOException
```
**Returns:**
- 이 `HttpConnection`이 참조하는 자원이
마지막으로 수정된 날짜 또는
날짜를 알 수 없는 경우 0
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderField
```java
public String getHeaderField(String name)
throws IOException
```
**Parameters:**
- `name` - 헤더 필드의 이름
**Returns:**
- 명명된 헤더 필드 값 또는 해당 필드가 헤더에 없는 경우
`null`
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderFieldInt
```java
public int getHeaderFieldInt(String name,
int def)
throws IOException
```
**Parameters:**
- `def` - 기본값
**Returns:**
- 정수로 구문 분석된 명명된 필드 값.
필드가 없거나 필드 형식이 잘못된 경우
`def` 값이 반환됩니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderFieldDate
```java
public long getHeaderFieldDate(String name,
long def)
throws IOException
```
**Parameters:**
- `def` - 기본값
**Returns:**
- 날짜로 구문 분석된 필드 값. 필드가 없거나
필드 형식이 잘못된 경우
`def` 인자 값이 반환됩니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderField
```java
public String getHeaderField(int n)
throws IOException
```
**Parameters:**
- `n` - 헤더 필드의 색인
**Returns:**
- n번째 헤더 필드 값 또는 배열 색인이 범위에서 벗어난 경우
`null`.
필드에 값이 없으면 빈 문자열이 반환됩니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderFieldKey
```java
public String getHeaderFieldKey(int n)
throws IOException
```
**Parameters:**
- `n` - 헤더 필드의 색인
**Returns:**
- n번째 헤더 필드 키 또는 배열 색인이 범위에서 벗어난 경우
`null`
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
## 메서드 상세
### getURL
```java
public String getURL()
```
**Returns:**
- 이 연결에 대한 URL의 문자열 표현
### getProtocol
```java
public String getProtocol()
```
**Returns:**
- `HttpConnection`의 URL에 지정된 프로토콜
### getHost
```java
public String getHost()
```
**Returns:**
- `HttpConnection`의
URL에 지정된 호스트 정보
### getFile
```java
public String getFile()
```
**Returns:**
- `HttpConnection`의 URL에서 파일 부분.
파일이 없으면 `null`이 반환됩니다.
### getRef
```java
public String getRef()
```
**Returns:**
- `HttpConnection`의 URL에서 참조 부분.
값이 없으면 `null`이 반환됩니다.
### getQuery
```java
public String getQuery()
```
**Returns:**
- `HttpConnection`의
URL에서 쿼리 부분. 값이 없으면
`null`이 반환됩니다.
### getPort
```java
public int getPort()
```
**Returns:**
- 이 `HttpConnection`에 대한
URL의 네트워크 포트 번호.
`Connector.open`에 전달된 문자열에 포트 번호가 없으면
기본 HTTP 포트 번호(80)가 반환됩니다.
### getRequestMethod
```java
public String getRequestMethod()
```
**Returns:**
- HTTP 요청 메소드
**See Also:**
- ``setRequestMethod(java.lang.String)``
### setRequestMethod
```java
public void setRequestMethod(String method)
throws IOException
```
**Parameters:**
- `method` - HTTP 메소드
**Throws:**
- `IOException` - 메소드를 재설정할 수 없거나
요청된 메소드가 HTTP에 유효하지 않은 경우
**See Also:**
- ``getRequestMethod()``
### getRequestProperty
```java
public String getRequestProperty(String key)
```
**Parameters:**
- `key` - 요청 등록 정보를 알려주는 키워드(예:
"accept")
**Returns:**
- 이 연결의 명명된 일반 요청 등록 정보 값.
지정된 이름을 가진 키가 없으면
`null`이 반환됩니다.
**See Also:**
- ``setRequestProperty(java.lang.String, java.lang.String)``
### setRequestProperty
```java
public void setRequestProperty(String key,
String value)
throws IOException
```
**Parameters:**
- `value` - 연결된 값
**Throws:**
- `IOException` - 연결 상태가
연결됨인 경우
**See Also:**
- ``getRequestProperty(java.lang.String)``
### getResponseCode
```java
public int getResponseCode()
throws IOException
```
**Returns:**
- HTTP Status-Code 또는 상태 코드를 확인할 수 없는 경우 -1
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getResponseMessage
```java
public String getResponseMessage()
throws IOException
```
**Returns:**
- HTTP 응답 메시지 또는 `null`
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getExpiration
```java
public long getExpiration()
throws IOException
```
**Returns:**
- 이 URL이 참조하는 자원의 만료 날짜 또는
만료 날짜를 알 수 없는 경우 0.
값은 1970년 1월 1일 GMT 이후의 밀리초 수입니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getDate
```java
public long getDate()
throws IOException
```
**Returns:**
- URL이 참조하는 자원의 전송 날짜 또는
전송 날짜를 알 수 없는 경우 `0`.
반환된 값은 1970년 1월 1일 GMT 이후의 밀리초 수입니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getLastModified
```java
public long getLastModified()
throws IOException
```
**Returns:**
- 이 `HttpConnection`이 참조하는 자원이
마지막으로 수정된 날짜 또는
날짜를 알 수 없는 경우 0
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderField
```java
public String getHeaderField(String name)
throws IOException
```
**Parameters:**
- `name` - 헤더 필드의 이름
**Returns:**
- 명명된 헤더 필드 값 또는 해당 필드가 헤더에 없는 경우
`null`
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderFieldInt
```java
public int getHeaderFieldInt(String name,
int def)
throws IOException
```
**Parameters:**
- `def` - 기본값
**Returns:**
- 정수로 구문 분석된 명명된 필드 값.
필드가 없거나 필드 형식이 잘못된 경우
`def` 값이 반환됩니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderFieldDate
```java
public long getHeaderFieldDate(String name,
long def)
throws IOException
```
**Parameters:**
- `def` - 기본값
**Returns:**
- 날짜로 구문 분석된 필드 값. 필드가 없거나
필드 형식이 잘못된 경우
`def` 인자 값이 반환됩니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderField
```java
public String getHeaderField(int n)
throws IOException
```
**Parameters:**
- `n` - 헤더 필드의 색인
**Returns:**
- n번째 헤더 필드 값 또는 배열 색인이 범위에서 벗어난 경우
`null`.
필드에 값이 없으면 빈 문자열이 반환됩니다.
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
### getHeaderFieldKey
```java
public String getHeaderFieldKey(int n)
throws IOException
```
**Parameters:**
- `n` - 헤더 필드의 색인
**Returns:**
- n번째 헤더 필드 키 또는 배열 색인이 범위에서 벗어난 경우
`null`
**Throws:**
- `IOException` - 서버에 연결하는 동안 오류가 발생한 경우
---
title: "Interface HttpsConnection"
---
`package javax.microedition.io`
```text
void getViaHttpsConnection(String url)
throws CertificateException, IOException {
HttpsConnection c = null;
InputStream is = null;
try {
c = (HttpsConnection)Connector.open(url);
// Getting the InputStream ensures that the connection
// is opened (if it was not already handled by
// Connector.open()) and the SSL handshake is exchanged,
// and the HTTP response headers are read.
// These are stored until requested.
is = c.openDataInputStream();
if c.getResponseCode() == HttpConnection.HTTP_OK) {
// Get the length and process the data
int len = (int)c.getLength();
if (len > 0) {
byte[] data = new byte[len];
int actual = is.readFully(data);
...
} else {
int ch;
while ((ch = is.read()) != -1) {
...
}
}
} else {
...
}
} finally {
if (is != null)
is.close();
if (c != null)
c.close();
}
}
```
## 필드 요약
## 메서드 요약
- `int getPort ()` — 이 HttpsConnection 에 대한 URL의 네트워크 포트 번호를 반환합니다.
- `SecurityInfo getSecurityInfo ()` — 성공적으로 열린 연결과 관련된 보안 정보를 반환합니다.
## 메서드 상세
### getSecurityInfo
```java
public SecurityInfo getSecurityInfo()
throws IOException
```
**Returns:**
- 열린 연결과 관련된 보안 정보
**Throws:**
- `IOException` - 임의 연결 오류가 발생한 경우
### getPort
```java
public int getPort()
```
**Specified by:**
- `getPort` in interface `HttpConnection`
**Returns:**
- 이 `HttpsConnection`에 대한
URL의 네트워크 포트 번호.
`Connector.open`에 전달된 문자열에 포트 번호가 없으면
기본 HTTPS 포트 번호(443)가 반환됩니다.
---
title: "Class PushRegistry"
---
`package javax.microedition.io`
```text
java.lang.Object
|
+--javax.microedition.io.PushRegistry
```
## 설명
**extends Object:**
`PushRegistry`는 인바운드
연결 목록을 유지 관리합니다.
응용 프로그램은 응용 프로그램 설명자 파일의 항목을 사용하거나
`registerConnection` 메소드를 호출하여 동적으로
인바운드 연결을 등록할 수 있습니다.
응용 프로그램은 실행되는 동안 인바운드 연결과 관련된
모든 I/O 작업을 책임집니다.
응용 프로그램을 실행하고 있지 않으면
응용 프로그램 관리 소프트웨어(AMS)가 인바운드 알림 요청을 수신합니다.
등록된 `MIDlet`에 대한 알림이 도착하면
AMS는 `MIDlet.startApp` 메소드의 정상적 호출을 통해
`MIDlet`을
시작합니다.
### 선언된 연결 설치 처리
인바운드 일반 연결에서의 충돌을 피하려면
`MIDlet` Suite에 필요한 정적 연결 정보가
응용 프로그램 설명자 파일에 있어야 합니다.
응용 프로그램 설명자에 있는 모든 정적 푸시 선언을 설치 중에
이행할 수 없는 경우 사용자에게 충돌이 있으며 MIDlet Suite를 설치해서는
안 된다고 알려야 합니다.
(충돌 발생 시 보고되는 오류에 대해서는
*Over The Air User Initiated Provisioning 사양*을
참조하십시오.)
선언을 이행할 수 없는 경우에는
푸시 속성의 구문 오류,
장치에서 이미 예약된 연결 종점에 대한 선언(예: 포트 번호), 장치에서
푸시에 지원되지 않는 프로토콜에 대한 선언, 동일한
응용 프로그램 설명자의
`MIDlet-` 속성에
나열되지 않은 `MIDlet`
클래스를 참조하는 선언 등이 있습니다.
`MIDlet` Suite는
푸시 등록을 이행할 수 없는 경우에도
정상적으로 작동할 수 있을 경우 `PushRegistry`의
동적 등록 메소드를 사용하여 푸시 연결을 등록해야 합니다.
충돌 없이 설치하면 요청된 각 연결은 Suite의
`MIDlets` 전용으로 예약됩니다.
Suite를 설치하는 동안 다른
응용 프로그램이 예약된 연결 중
하나를 열려고 시도하면
`IOException`이 발생하며 실패합니다.
Suite에 이미 열려 있는 연결이 없을 경우
`MIDlet`에서 Suite에 예약된 연결에 대해
`Connector.open()`을
호출하면 항상 성공합니다.
두 개의 `MIDlet` Suite가 정적 푸시 연결을
공유하면 함께 설치할 수 없으며 둘 다 정상적으로 작동합니다.
일반적으로 최종 사용자가 다른 Suite를 성공적으로 설치할 수 있으려면
먼저 기존 Suite를 제거해야 합니다.
### 푸시 등록 속성
각각의 푸시 등록 항목에는 다음 정보가 포함됩니다.
```java
MIDlet-Push-: ,
,
```
여기서 각 구성 요소가 의미하는 바는 다음과 같습니다.
- `MIDlet-Push-` = 푸시 등록 속성 이름.
`MIDlet` Suite 하나에서
여러 푸시 등록을 제공할 수 있습니다.
의 숫자 값은 1부터 시작하며 추가 항목에 연속되는 서수를
사용해야 합니다.
첫 번째 누락된 항목이 발견되면 목록이
종료되고 모든 추가 항목은 무시됩니다.
- `ConnectionURL` = `Connector.open()`에
사용된 연결 문자열
- `MIDletClassName` = 연결을 책임지는
`MIDlet`. 명명된 `MIDlet`을
설명자 파일이나 `MIDlet-` 레코드가 있는
jar 파일 상세 목록에서 등록해야 합니다.
(이 정보는 푸시 연결이 감지되거나 사용자가
응용 프로그램에 대한 권한을 부여/취소할 때
응용 프로그램에 대한 메시지를
사용자에게 표시하는 데 필요합니다.)
명명된 `MIDlet`이 Suite에 두 번 이상 나타나면
처음 일치하는 항목이 사용됩니다.
- `AllowedSender` = 요청된
`MIDlet`을 시작할 수 있는 보낸 사람을 제한하는 지정된 필터.
`AllowedSender` 필드의 구문과 의미는
프로토콜에 사용된 주소 지정 형식에 따라 달라집니다.
하지만 이 필드의 모든 구문은 와일드카드 문자 "*"와 "?" 사용을 지원해야 합니다.
와일드카드의 의미는 다음과 같습니다.
"*"는 빈 문자열을 포함하여 모든 문자열과 일치합니다.
"?" 는 모든 단일 문자와 일치합니다.
이 필드 값이 와일드카드 문자 "*"로만 이루어져 있으면
모든 소스로부터의 연결이 승인됩니다.
`datagram` 및 `socket` URL
(플랫폼에서 지원되는 경우)을 사용한 푸시 속성의 경우,
이 필드에는 IPv4와 IPv6에 대해 해당 URL에 사용되는 것과
동일한 형식의 숫자 IP 주소가 포함됩니다.
IP 주소에 와일드카드를 사용할 수도 있습니다.
예를 들어, "129.70.40.*"는 서브넷 확인을 허용합니다.
포트 번호는 `datagram` 및
`socket` 연결 필터에
포함되지 않습니다.
MIDP 2.0 사양에서는 `datagram` 및
`socket` 인바운드 연결 구문을 정의합니다.
다른 사양에서 추가 연결 유형에 대한
푸시 의미를 정의할 경우
필터 필드의 예상 구문과 연결
URL 문자열의 예상 형식도 정의해야 합니다.
다음은 포트 79에 스트림 소켓을, 포트 50000에 데이터그램 연결을
예약하는 샘플 설명자 파일입니다.
(포트 번호는 IANA에서 유지 관리되며
잘 알려진 사용자 등록 및
동적 포트 번호를 다룹니다.)
[[IANA Port Number Registry](http://www.iana.org/numbers.html#P) 참조]
### 버퍼된 메시지
메시지 버퍼링에 대한 요구 사항은
푸시에 사용된 프로토콜에 따라 다르며
각 프로토콜에 대해 별도로 정의됩니다.
버퍼링과 관련하여 모든 프로토콜에
적용되는 일반 요구 사항은 없습니다.
구현 시 메시지를 버퍼할 경우 `MIDlet`을 시작하고
푸시에 등록된 관련 `Connection`이 열릴 때
`MIDlet`에 이 메시지를 제공해야 합니다.
데이터그램 연결이 푸시에 지원되면 구현 시
데이터그램 푸시에 등록된 `MIDlet`이
수신 데이터그램에 대한 응답으로 시작될 때
최소한 `MIDlet`을 시작하게 한 데이터그램은 구현 시 버퍼되어,
`MIDlet`이 시작 후 `UDPDatagramConnection`을
열 때 `MIDlet`이
사용할 수 있도록 해야 합니다.
소켓 연결이 푸시에 지원되면
구현 시 소켓 푸시에 등록된
`MIDlet`가 수신 소켓 연결에 대한
응답으로 시작될 때
연결이 시간 초과되지 않았을 경우 `MIDlet`이 시작 후
`ServerSocketConnection`을 열어
이 연결을 승인할 수 있도록 해야 합니다.
### 연결 및 푸시 등록 지원
모든 일반 연결이 푸시 응용 프로그램 전송으로
사용하기에 적합한 것은 아닙니다.
어떤 프로토콜이 인바운드 연결 유형으로 장치에서 지원된다고 해서
반드시 유효한 푸시 기법으로 사용 가능하게 할 필요는 없습니다.
예를 들어, 어떤 플랫폼은 `MIDlet`에서
서버 소켓 연결을 지원하지만 인바운드 소켓 연결에 대한 푸시 시작 기능을
지원하지 않을 수도 있습니다.
플랫폼이 이 선택 기능을 지원하지 않으면
`registerConnection` 및
`registerAlarm` 메소드에서
`ConnectionNotFoundException`이 발생합니다.
### AMS 연결 전달
등록된 푸시 연결에 대한 책임은 인바운드 연결에 대한
I/O 작업을 처리하는
`MIDlet`과 AMS가 공유합니다.
데이터 손실을 방지하기 위해 한 응용 프로그램이
`Connector.open()` 호출 시부터
`Connection.close()` 호출 시까지
연결에 대한 모든 I/O 작업을 책임집니다.
AMS는 인바운드 연결 알림을 수신합니다.
새로운 인바운드 데이터를 찾는
원시 콜백 또는 폴링 기법을 통해
이 작업을 처리할 수도 있습니다.
AMS는 `PushRegistry 보안`을
시행하고 MIDlet Suite를 호출하기 전에 알림(있는 경우)을
사용자에게 제공할 책임이 있습니다.
AMS는 푸시 `MIDlet` 메소드를 호출하기 전에
실행 중인 모든 응용 프로그램을
종료해야 합니다(필요한 경우).
AMS가 푸시 응용 프로그램을 시작한 후
`MIDlet`은 연결을 열어야 하며
이후의 모든 I/O 작업을 책임집니다.
차단 I/O 작업을 수행해야 하는 응용 프로그램은
대화식 사용자 작업을 허용하는
별도의 스레드를 사용하는 것이 좋습니다.
응용 프로그램을 시작하고
연결이 열리면 AMS는 해당 연결에 대한
푸시 알림을 수신할 필요가 없습니다.
응용 프로그램이 모든 인바운드
데이터 읽기를 책임집니다.
응용 프로그램은 모든 인바운드 데이터에 대해 작업을 마친 후
해당 연결에 대해 `close()`를 호출할 수도 있습니다.
연결이 닫히면 AMS와 응용 프로그램
모두 푸시 알림을 수신하지 않습니다.
응용 프로그램이 모든 데이터가
수신되기 전에 연결을 닫으면
인바운드 데이터가 손실될 수 있습니다.
응용 프로그램이 삭제되면 AMS가 인바운드
연결을 감시할 책임을 다시 맡습니다.
푸시 응용 프로그램은 푸시 기법을 통해
비동기 데이터를 처리할 때
예상 가능한 방식으로 작동하는 것이 좋습니다.
응용 프로그램은 데이터가 처리되었음을 사용자에게 알리는 것이 좋습니다.
(사용자에게 보이는 인터페이스를 사용하지 않는 응용 프로그램을 작성할 수는
있지만 이렇게 할 경우 최종 사용자가 백그라운드 기능만 수행하는
응용 프로그램을 시작하게 되므로
혼란을 줄 수 있습니다.)
### 실행 중인 MIDlet에서 등록된 동적 연결
IANA에 등록된 잘 알려진 포트를
정의할 필요가 없는 경우도 있습니다.
간단한 응용 프로그램은 `MIDlet`과 서버 응용 프로그램 사이에
개인 프로토콜을 사용하여 데이터를 교환할 수도 있습니다.
이러한 유형의 응용 프로그램을 수용하기 위해
동적으로 연결을 할당하고, 응용 프로그램이 설치된 경우 알려진 정보처럼
해당 정보를 등록하는 기법이 제공됩니다.
이 정보는 네트워크 상의 에이전트로 전송되어
등록된 `MIDlet`과의 통신 기법으로
사용될 수 있습니다.
예를 들어, ``UDPDatagramConnection``이 열리고
포트 번호가 지정되어 있지 않으면
응용 프로그램은 현재 사용 가능한 포트에서
동적 포트를 할당하도록 요청합니다.
`MIDlet`은
`PushRegistry.registerConnection()`을 호출하여
`MIDlet`이 삭제된 후에도
자신이 인바운드 통신 대상이라는 것을
AMS에 알립니다
("삭제됨" 상태 정의는 `MIDlet` 라이프사이클 참조)
전화기에서 응용 프로그램을
삭제하면 동적 통신 연결이
자동으로 등록 취소됩니다.
### AMS 런타임 처리 - 구현 시 주의 사항
잘 알려진 주소에서 인바운드 통신을 예상하는
각 `MIDlet`은 설치 중에
상세 목록이나 응용 프로그램 설명자
파일의 푸시 등록 속성 정보를
AMS에서 기록하게 합니다.
설치가 완료되면 `MIDlet`이 푸시 알림 이벤트와
같은 인바운드 통신을 수신할 수도 있습니다.
설치 완료에 대한 OTA 권장 방법은
*설치 알림 메시지*가 성공적으로
전송되었을 때 응용 프로그램이
공식적으로 설치된 것으로 간주합니다.
AMS를 시작하면 등록된 연결 목록을 검사하고
인바운드 통신 수신을 시작합니다.
알림이 도착하면 AMS는 등록된 `MIDlet`을 시작합니다.
그러면 `MIDlet`이
`Connector.open()` 메소드를
사용하여 연결을 열고 특정 연결 유형에
필요한 I/O 작업을 수행합니다.
예를 들어, 서버 소켓의 경우 응용 프로그램은
`acceptAndOpen()`을 사용하여 소켓을 연결하고
데이터그램 연결의 경우에는 `receive()`를 사용하여
전달된 메시지를 읽습니다.
메시지 지향적 전송의 경우 AMS가 인바운드 메시지를 읽어
`MIDlet`이 데이터 읽기를 요청하면 전달하기 위해
저장할 수 있습니다.
스트림 지향적 전송에서는
연결 요청의 서버측이 시간 초과되기 전에
연결이 승인되지 않으면 손실될 수도 있습니다.
등록된 푸시 연결 알림에 대한 응답으로
`MIDlet`을 시작할 때
현재 실행 중인 응용 프로그램이 어떻게 될지는 플랫폼에 따라 다릅니다.
`MIDlet` 라이프사이클은 중단된
`MIDlet`이 `pauseApp()` 또는
`destroyApp()` 호출을 통해 확인할 수 있는 예상 동작을 정의합니다.
**사용 시나리오 1:**
Suite에는 잘 알려진 통신 포트가 있는
`MIDlet`이 포함되어 있습니다.
`startApp` 처리 중에
수신 데이터를 처리하는
스레드가 시작됩니다. 차단 I/O 작업과 정상적
사용자 상호 작용 이벤트 사이의 충돌을 피하기 위해 별도의
스레드를 사용하는 것이 권장됩니다.
스레드는 `MIDlet`이 삭제될 때까지
계속 메시지를 수신합니다.
이 샘플에서 설명자 파일에는
정적 푸시 연결 등록이 포함되어 있습니다.
또한 인바운드 푸시 메시지에
데이터그램 연결을 사용할 수 있는
권한이 이 `MIDlet`에
필요하다고 표시합니다.
(`MIDlet` 사용 권한에 대한 자세한 내용은
패키지 개요의 `푸시 함수 보안`을
참조하십시오.)
**주:** 이 샘플은 데이터그램이 급증할 때 적합합니다.
연결에 대해 루프되면서
수신된 메시지를 처리하도록
작성됩니다.
**사용 시나리오 2:**
Suite에는 처음 시작될 때
동적으로 포트를 할당하는
`MIDlet`이 포함되어 있습니다.
이 샘플에서 설명자 파일에는
인바운드 푸시 메시지에 대해 데이터그램 연결을 사용할 수 있는
권한이 응용 프로그램에
필요함을 나타내는 항목이 포함되어 있습니다.
처음 구성자를 실행하면 구성자에서 동적 연결이 할당됩니다.
이 세션 중에 열린 연결이 사용되며
인바운드 연결 알림에 대한 응답으로
이후 세션에서 다시 열릴 수 있습니다.
**Since:**
- MIDP 2.0
## 메서드 요약
- `static String getFilter ( String connection)` — 요청된 연결에 등록된 필터를 검색합니다.
- `static String getMIDlet ( String connection)` — 요청된 연결에 등록된 MIDlet 을 검색합니다.
- `static String [] listConnections (boolean available)` — 현재 MIDlet Suite에 대해 등록된 연결 목록을 반환합니다.
- `static long registerAlarm ( String midlet, long time)` — 지정된 응용 프로그램을 시작할 시간을 등록합니다.
- `static void registerConnection ( String connection, String midlet, String filter)` — 응용 프로그램 관리 소프트웨어를 사용하여 동적 연결을 등록합니다.
- `static boolean unregisterConnection ( String connection)` — 동적 연결 등록을 제거합니다.
## 메서드 상세
### registerConnection
```java
public static void registerConnection(String connection,
String midlet,
String filter)
throws ClassNotFoundException,
IOException
```
**Parameters:**
- `filter` - 보낸 사람이 `MIDlet`이
시작되게 할 수 있음을 나타내는 연결 URL 문자열
**Throws:**
- `SecurityException` - `MIDlet`에
연결을 등록할 수 있는 권한이 없는 경우
**See Also:**
- ``unregisterConnection(java.lang.String)``
### unregisterConnection
```java
public static boolean unregisterConnection(String connection)
```
**Parameters:**
- `connection` - 일반 연결 *프로토콜*,
*호스트* 및 *포트 번호*
**Returns:**
- 등록 취소에 성공하면 `true`,
연결이 등록되지 않았거나 연결 인자가 `null`인 경우
`false`
**Throws:**
- `SecurityException` - 다른 `MIDlet`
Suite에서
연결을 등록한 경우
**See Also:**
- ``registerConnection(java.lang.String, java.lang.String, java.lang.String)``
### listConnections
```java
public static String[] listConnections(boolean available)
```
**Parameters:**
- `available` - `true`이면 입력을
사용할 수 있는 연결 목록만 반환되고, 그렇지 않으면 현재
`MIDlet` Suite에 대해 등록된
전체 연결 목록을 반환합니다.
**Returns:**
- 등록된 연결 문자열 배열. 여기서 각 연결은 일반 연결
*프로토콜*, *호스트* 및
*포트 번호* ID로 표현됩니다.
### getMIDlet
```java
public static String getMIDlet(String connection)
```
**Parameters:**
- `connection` - 일반 연결 *프로토콜*,
*호스트* 및 *포트 번호*(옵션 매개 변수는
세미콜론(;)으로 구분하여
포함할 수 있습니다.)
**Returns:**
- 새 외부 데이터를 사용할 수 있을 때 시작되는
`MIDlet`의 클래스 이름 또는
현재 `MIDlet` Suite에서 연결을
등록하지 않았거나 연결 인자가 `null`인 경우
`null`
**See Also:**
- ``registerConnection(java.lang.String, java.lang.String, java.lang.String)``
### getFilter
```java
public static String getFilter(String connection)
```
**Parameters:**
- `connection` - 일반 연결 *프로토콜*,
*호스트* 및 *포트 번호*(옵션 매개 변수는
세미콜론(;)으로 구분하여
포함할 수 있습니다.)
**Returns:**
- 보낸 사람이 `MIDlet`이 시작되게 할 수 있음을 나타내는
필터 문자열 또는 현재 `MIDlet` Suite에서
연결을 등록하지 않았거나
연결 인자가 `null`인 경우
`null`
**See Also:**
- ``registerConnection(java.lang.String, java.lang.String, java.lang.String)``
### registerAlarm
```java
public static long registerAlarm(String midlet,
long time)
throws ClassNotFoundException,
ConnectionNotFoundException
```
**Parameters:**
- `time` - `MIDlet`이 `Date.getTime()`에서
반환된 형식으로 실행되는 시간
**Returns:**
- 이 `MIDlet`의 최근 실행이 예약된
시간(`Date.getTime()`에서
반환된 형식)
**Throws:**
- `SecurityException` - `MIDlet`에 경보를
등록할 수 있는 권한이 없는 경우
**See Also:**
- ``Date.getTime()``,
``Timer``,
``TimerTask``
---
title: "Interface SecureConnection"
---
`package javax.microedition.io`
```text
SecureConnection sc = (SecureConnection)
Connector.open("ssl://host.com:79");
SecurityInfo info = sc.getSecurityInfo();
boolean isTLS = (info.getProtocolName().equals("TLS"));
sc.setSocketOption(SocketConnection.LINGER, 5);
InputStream is = sc.openInputStream();
OutputStream os = sc.openOutputStream();
os.write("\r\n".getBytes());
int ch = 0;
while(ch != -1) {
ch = is.read();
}
is.close();
os.close();
sc.close();
```
## 설명
**Since:**
- MIDP 2.0
## 필드 요약
## 메서드 요약
- `SecurityInfo getSecurityInfo ()` — 열린 연결과 관련된 보안 정보를 반환합니다.
## 메서드 상세
### getSecurityInfo
```java
public SecurityInfo getSecurityInfo()
throws IOException
```
**Returns:**
- 열린 연결과 관련된 보안 정보
**Throws:**
- `IOException` - 임의 연결 오류가 발생한 경우
---
title: "Interface SecurityInfo"
---
`package javax.microedition.io`
```text
public Certificate getServerCertificate()
```
## 설명
**Returns:**
- 서버와의 보안 연결을 설정하는 데 사용되는
`Certificate`
### getProtocolVersion
**Returns:**
- 프로토콜의 버전이 포함된 String. 반환 값은
`null`이 될 수 없습니다.
### getProtocolName
**Returns:**
- 보안 프로토콜 식별자가 포함된 `String`.
TLS(RFC 2246) 또는 WAP TLS 프로필 및 터널링(WAP-219-TLS)이
연결에 사용되면 "TLS", SSL V3(The SSL Protocol Version 3.0)이
연결에 사용되면 "SSL",
WTLS(WAP 199)가 연결에 사용되면
"WTLS"가 반환됩니다.
### getCipherSuite
**Returns:**
- 사용 중인 암호 제품군 이름이 포함된
`String`
## 메서드 요약
- `String getCipherSuite ()` — 연결에 사용 중인 암호 제품군의 이름을 반환합니다.
- `String getProtocolName ()` — 보안 프로토콜 이름을 반환합니다.
- `String getProtocolVersion ()` — 프로토콜 버전을 반환합니다.
- `Certificate getServerCertificate ()` — 서버와의 보안 연결을 설정하는 데 사용되는 Certificate 를 반환합니다.
## 메서드 상세
### getServerCertificate
```java
public Certificate getServerCertificate()
```
**Returns:**
- 서버와의 보안 연결을 설정하는 데 사용되는
`Certificate`
### getProtocolVersion
```java
public String getProtocolVersion()
```
**Returns:**
- 프로토콜의 버전이 포함된 String. 반환 값은
`null`이 될 수 없습니다.
### getProtocolName
```java
public String getProtocolName()
```
**Returns:**
- 보안 프로토콜 식별자가 포함된 `String`.
TLS(RFC 2246) 또는 WAP TLS 프로필 및 터널링(WAP-219-TLS)이
연결에 사용되면 "TLS", SSL V3(The SSL Protocol Version 3.0)이
연결에 사용되면 "SSL",
WTLS(WAP 199)가 연결에 사용되면
"WTLS"가 반환됩니다.
### getCipherSuite
```java
public String getCipherSuite()
```
**Returns:**
- 사용 중인 암호 제품군 이름이 포함된
`String`
---
title: "Interface ServerSocketConnection"
---
`package javax.microedition.io`
```text
// Create the server listening socket for port 1234
ServerSocketConnection scn = (ServerSocketConnection)
Connector.open("socket://:1234");
// Wait for a connection.
SocketConnection sc = (SocketConnection) scn.acceptAndOpen();
// Set application specific hints on the socket.
sc.setSocketOption(DELAY, 0);
sc.setSocketOption(LINGER, 0);
sc.setSocketOption(KEEPALIVE, 0);
sc.setSocketOption(RCVBUF, 128);
sc.setSocketOption(SNDBUF, 128);
// Get the input stream of the connection.
DataInputStream is = sc.openDataInputStream();
// Get the output stream of the connection.
DataOutputStream os = sc.openDataOutputStream();
// Read the input data.
String result = is.readUTF();
// Echo the data back to the sender.
os.writeUTF(result);
// Close everything.
is.close();
os.close();
sc.close();
scn.close();
..
```
## 설명
**Since:**
- MIDP 2.0
## 메서드 요약
- `String getLocalAddress ()` — 소켓이 바운드되는 로컬 주소를 가져옵니다.
- `int getLocalPort ()` — 이 소켓이 바운드되는 로컬 포트를 반환합니다.
## 메서드 상세
### getLocalAddress
```java
public String getLocalAddress()
throws IOException
```
**Returns:**
- 소켓이 바운드되는 로컬 주소
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``SocketConnection``
### getLocalPort
```java
public int getLocalPort()
throws IOException
```
**Returns:**
- 이 소켓이 연결되는 로컬 포트 번호
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``SocketConnection``
---
title: "Interface SocketConnection"
---
`package javax.microedition.io`
```text
SocketConnection sc = (SocketConnection)
Connector.open("socket://host.com:79");
sc.setSocketOption(SocketConnection.LINGER, 5);
InputStream is = sc.openInputStream();
OutputStream os = sc.openOutputStream();
os.write("\r\n".getBytes());
int ch = 0;
while(ch != -1) {
ch = is.read();
}
is.close();
os.close();
sc.close();
```
## 설명
**Since:**
- MIDP 2.0
## 필드 요약
- `static byte DELAY` — 작은 버퍼 쓰기 지연 을 위한 소켓 옵션(0).
- `static byte KEEPALIVE` — 연결 유지 기능을 위한 소켓 옵션(2).
- `static byte LINGER` — 보류 중인 데이터 출력과의 연결을 닫기 전에 대기할 초 단위 지연 시간 을 위한 소켓 옵션(1).
- `static byte RCVBUF` — 수신 버퍼 의 크기를 위한 소켓 옵션(3).
- `static byte SNDBUF` — 전송 버퍼 의 크기를 위한 소켓 옵션(4).
## 메서드 요약
- `String getAddress ()` — 소켓이 바운드되는 원격 주소를 가져옵니다.
- `String getLocalAddress ()` — 소켓이 바운드되는 로컬 주소를 가져옵니다.
- `int getLocalPort ()` — 이 소켓이 바운드되는 로컬 포트를 반환합니다.
- `int getPort ()` — 이 소켓이 바운드되는 원격 포트를 반환합니다.
- `int getSocketOption (byte option)` — 연결에 대한 소켓 옵션을 가져옵니다.
- `void setSocketOption (byte option, int value)` — 연결에 대한 소켓 옵션을 설정합니다.
## 필드 상세
### DELAY
```java
public static final byte DELAY
```
**See Also:**
- `Constant Field Values`
### LINGER
```java
public static final byte LINGER
```
**See Also:**
- `Constant Field Values`
### KEEPALIVE
```java
public static final byte KEEPALIVE
```
**See Also:**
- `Constant Field Values`
### RCVBUF
```java
public static final byte RCVBUF
```
**See Also:**
- `Constant Field Values`
### SNDBUF
```java
public static final byte SNDBUF
```
**See Also:**
- `Constant Field Values`
### setSocketOption
```java
public void setSocketOption(byte option,
int value)
throws IllegalArgumentException,
IOException
```
**Parameters:**
- `value` - 지정된 옵션의 숫자 값
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``getSocketOption(byte)``
### getSocketOption
```java
public int getSocketOption(byte option)
throws IllegalArgumentException,
IOException
```
**Parameters:**
- `option` - 소켓 옵션 식별자(KEEPALIVE, LINGER,
SNDBUF, RCVBUF 또는 DELAY)
**Returns:**
- 지정된 옵션의 숫자 값 또는 값을
사용할 수 없는 경우 -1
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``setSocketOption(byte, int)``
### getLocalAddress
```java
public String getLocalAddress()
throws IOException
```
**Returns:**
- 소켓이 바운드되는 로컬 주소
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
### getLocalPort
```java
public int getLocalPort()
throws IOException
```
**Returns:**
- 이 소켓이 연결되는 로컬 포트 번호
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
### getAddress
```java
public String getAddress()
throws IOException
```
**Returns:**
- 소켓이 바운드되는 원격 주소
**Throws:**
- `IOException` - 연결이 닫힌 경우
### getPort
```java
public int getPort()
throws IOException
```
**Returns:**
- 이 소켓이 연결되는 원격 포트 번호
**Throws:**
- `IOException` - 연결이 닫힌 경우
## 메서드 상세
### setSocketOption
```java
public void setSocketOption(byte option,
int value)
throws IllegalArgumentException,
IOException
```
**Parameters:**
- `value` - 지정된 옵션의 숫자 값
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``getSocketOption(byte)``
### getSocketOption
```java
public int getSocketOption(byte option)
throws IllegalArgumentException,
IOException
```
**Parameters:**
- `option` - 소켓 옵션 식별자(KEEPALIVE, LINGER,
SNDBUF, RCVBUF 또는 DELAY)
**Returns:**
- 지정된 옵션의 숫자 값 또는 값을
사용할 수 없는 경우 -1
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``setSocketOption(byte, int)``
### getLocalAddress
```java
public String getLocalAddress()
throws IOException
```
**Returns:**
- 소켓이 바운드되는 로컬 주소
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
### getLocalPort
```java
public int getLocalPort()
throws IOException
```
**Returns:**
- 이 소켓이 연결되는 로컬 포트 번호
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
### getAddress
```java
public String getAddress()
throws IOException
```
**Returns:**
- 소켓이 바운드되는 원격 주소
**Throws:**
- `IOException` - 연결이 닫힌 경우
### getPort
```java
public int getPort()
throws IOException
```
**Returns:**
- 이 소켓이 연결되는 원격 포트 번호
**Throws:**
- `IOException` - 연결이 닫힌 경우
---
title: "Interface UDPDatagramConnection"
---
`package javax.microedition.io`
```text
public String getLocalAddress()
throws IOException
```
## 설명
**Returns:**
- 데이터그램 연결이 바운드되는 로컬 주소
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
### getLocalPort
**Returns:**
- 데이터그램 연결이
연결되는 로컬 포트 번호
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
## 메서드 요약
- `String getLocalAddress ()` — 데이터그램 연결이 바운드되는 로컬 주소를 가져옵니다.
- `int getLocalPort ()` — 데이터그램 연결이 바운드되는 로컬 포트를 반환합니다.
## 메서드 상세
### getLocalAddress
```java
public String getLocalAddress()
throws IOException
```
**Returns:**
- 데이터그램 연결이 바운드되는 로컬 주소
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
### getLocalPort
```java
public int getLocalPort()
throws IOException
```
**Returns:**
- 데이터그램 연결이
연결되는 로컬 포트 번호
**Throws:**
- `IOException` - 연결이 닫힌 경우
**See Also:**
- ``ServerSocketConnection``
---
title: "package javax.microedition.io"
---
**See:**
**Description**
## Interface Summary
- [CommConnection](CommConnection.md) — 이 인터페이스는 논리적 직렬 포트 연결을 정의합니다.
- [Connection](../../../../../cldc/java-api/javax/microedition/io/Connection.md) — 일반 연결의 가장 기본적인 유형으로, close 메소드만 정의됩니다.
- [ContentConnection](../../../../../cldc/java-api/javax/microedition/io/ContentConnection.md) — 이 인터페이스는 내용이 전달되는 스트림 연결을 정의합니다.
- [Datagram](../../../../../cldc/java-api/javax/microedition/io/Datagram.md) — 이것은 일반 데이터그램 인터페이스로, 데이터그램 연결에서 보내거나 수신되는 데이터의 소유자 역할을 하는 객체를 나타냅니다.
- [DatagramConnection](../../../../../cldc/java-api/javax/microedition/io/DatagramConnection.md) — 이 인터페이스는 데이터그램 연결에 반드시 필요한 기능을 정의합니다.
- [HttpConnection](HttpConnection.md) — 이 인터페이스는 HTTP 연결에 필요한 메소드와 상수를 정의합니다.
- [HttpsConnection](HttpsConnection.md) — 이 인터페이스는 보안 네트워크 연결을 설정하는 데 필요한 메소드와 상수를 정의합니다.
- [InputConnection](../../../../../cldc/java-api/javax/microedition/io/InputConnection.md) — 이 인터페이스는 입력 스트림 연결에 반드시 필요한 기능을 정의합니다.
- [OutputConnection](../../../../../cldc/java-api/javax/microedition/io/OutputConnection.md) — 이 인터페이스는 출력 스트림 연결에 반드시 필요한 기능을 정의합니다.
- [SecureConnection](SecureConnection.md) — 이 인터페이스는 보안 소켓 스트림 연결을 정의합니다.
- [SecurityInfo](SecurityInfo.md) — 이 인터페이스는 보안 네트워크 연결에 대한 정보를 액세스하는 메소드를 정의합니다.
- [ServerSocketConnection](ServerSocketConnection.md) — 이 인터페이스는 서버 소켓 스트림 연결을 정의합니다.
- [SocketConnection](SocketConnection.md) — 이 인터페이스는 소켓 스트림 연결을 정의합니다.
- [StreamConnection](../../../../../cldc/java-api/javax/microedition/io/StreamConnection.md) — 이 인터페이스는 스트림 연결에 반드시 필요한 기능을 정의합니다.
- [StreamConnectionNotifier](../../../../../cldc/java-api/javax/microedition/io/StreamConnectionNotifier.md) — 이 인터페이스는 연결 알림기에 반드시 필요한 기능을 정의합니다.
- [UDPDatagramConnection](UDPDatagramConnection.md) — 이 인터페이스는 로컬 종점 주소를 알고 있는 데이터그램 연결을 정의합니다.
## Class Summary
- [Connector](Connector.md) — 새로운 연결 객체를 만들기 위한 팩토리 클래스 시스템 등록 정보에서 읽은 플랫폼 이름에서 형성된 이름을 가진 프로토콜 구현 클래스와 응용 프로그램 프로그래머가 제공한 매개 변수 문자열에서 추출한 요청된 연결의 프로토콜 이름을 조회하여 동적으로 연결을 만듭니다.
- [PushRegistry](PushRegistry.md) — PushRegistry 는 인바운드 연결 목록을 유지 관리합니다.
## Exception Summary
- [ConnectionNotFoundException](../../../../../cldc/java-api/javax/microedition/io/ConnectionNotFoundException.md) — 이 클래스는 연결 대상을 찾을 수 없음을 나타내는 데 사용됩니다.
---
title: "Class Alert"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
|
+--javax.microedition.lcdui.Screen
|
+--javax.microedition.lcdui.Alert
```
## 설명
**extends Screen:**
경고는 다음 `Displayable`로 이동하기 전에
사용자에게 데이터를 표시하고
특정 시간 동안 대기하는 화면입니다.
경고에는 텍스트 문자열과 이미지가
포함될 수 있습니다.
`Alert`의 용도는 사용자에게 오류 및
기타 예외 조건에 대해 알리는 것입니다.
응용 프로그램에서는 ` setTimeout(Alert.FOREVER)`을
사용하여 경고 시간을 무한대로 설정할 수 있습니다.
이 경우 `Alert`는 *모달*로 간주되며 구현 시
사용자가 경고를 "닫을 수" 있는 기능을 제공하므로
경고를 닫으면 시간 초과가 즉시 만료되었을 때와 마찬가지로 다음
`Displayable`이
표시됩니다.
응용 프로그램에서 경고의 시간을
다양하게 지정*하고*
스크롤해야 할 정도로 많은 내용을 제공한 경우에는
자동으로 모달 경고가 됩니다.
경고는 자신의 특성을 표시하기 위해 연관된
`AlertType`을 가질 수도 있습니다.
구현 시에는 이러한 유형을 사용하여 사용자에게 `Alert`를
표시할 때 적절한 사운드를 재생할 수도 있습니다.
``AlertType.playSound()``를 참조하십시오.
경고에는 선택적 `Image`가 포함될 수도 있습니다.
`Image`는 변경 가능하거나
변경 불가능할 수 있습니다.
`Image`가 변경 가능한 경우에는
`Alert`가 이 `Image`로 구성되고
`setImage`가 `Image`와 함께 호출될 때
이미지 내용의 스냅샷을 생성하는 것과 같은 기능을 합니다.
`Alert`의 내용이 표시될 때마다
이 스냅샷이 사용됩니다.
그 후 응용 프로그램이 해당
`Image`를 가져오더라도
`setImage`에 대한 다음 호출이 있을 때까지 스냅샷은
수정되지 않습니다. `Alert`가
현재 디스플레이에 표시되어 있으면
스냅샷을 업데이트할 수 *없습니다*.
이는 응용 프로그램에서 `Displayables`가 표시된 다음
디스플레이에서 사라져야 할 정확한 시점을
제어할 수 없기 때문입니다.
### 작업 표시기
경고에는 작업 표시기나 진행 표시기로 사용되는
선택적 ``Gauge`` 객체가 포함될 수도 있습니다.
기본적으로 `Alert`에는
작업 표시기가 없지만
``setIndicator(javax.microedition.lcdui.Gauge)`` 메소드를 사용하여 작업 표시기를 설정할 수 있습니다.
작업 표시기로 사용되는 `Gauge` 객체는
다음 제한 사항을 모두 준수해야 합니다.
- 비대화형이어야 합니다.
- 다른 컨테이너(`Alert` 또는 `Form`)가
소유하지 않아야 합니다.
- `Commands`가 없어야 합니다.
- `ItemCommandListener`가 없어야 합니다.
- 레이블이 없어야 합니다(즉,
레이블이 `null`이어야 함).
- 기본 너비와 높이는 모두 잠금 해제되어 있어야 합니다.
- 레이아웃 값은 `LAYOUT_DEFAULT`이어야 합니다.
이러한 제한 사항 중 하나라도 위반하는
`Gauge` 객체를 응용 프로그램에서 사용하려고 시도하면
오류가 발생합니다.
또한 `Gauge` 객체가 `Alert` 내에서
표시기로 사용되고 있는 경우
응용 프로그램은 이러한 `Gauge` 상태의 어느 조각도
수정할 수 없습니다.
### 명령 및 수신기
다른 `Displayable` 클래스와 같이
`Alert`도 응용 프로그램에 의해 설정된
`CommandListener`로 전달될 수 있는
`Commands`를 사용할 수 있습니다.
`Alert` 클래스는 `Commands` 및 수신기에 대해
몇 가지 특수 동작을 추가합니다.
`Alert`가 만들어지는 경우
그 내부에는 암시적인 특수 `Command` ``DISMISS_COMMAND``가
있습니다. 응용 프로그램이 다른 `Commands`를
`Alert`에 추가하면 `DISMISS_COMMAND`는
암시적으로 제거됩니다.
응용 프로그램이 다른 `Commands`를 모두 제거하면
`DISMISS_COMMAND`는 암시적으로 복원됩니다.
`DISMISS_COMMAND`를 추가하거나 제거하려는
시도는 명시적으로 무시됩니다.
따라서 `Alert`에는
항상 최소 한 개의 `Command`가 있습니다.
`Alert`에 두 개 이상의
`Commands`가 있는 경우에는
자동으로 모달 `Alert`로 변경되며
시간 초과 값은 항상 ``FOREVER``입니다.
`Command`가 호출될 때까지 `Alert`는
디스플레이에 남아 있습니다. 경고에 한 개의 Command(DISMISS_COMMAND 또는
응용 프로그램에서 제공한 명령)가 있는 경우
위에 설명된 대로 `Alert`에는 시간이 지정된
동작이 있을 수 있습니다. 시간 초과가 발생하면 그 결과는
사용자가 `Command`를
명시적으로 호출한 것과 동일합니다.
`Alert`는 만들어질 때
해당 경고와 연관된 *기본 수신기*라는
`CommandListener`를 암시적으로 가집니다.
``setCommandListener(javax.microedition.lcdui.CommandListener)`` 메소드를 사용하여
이 수신기를 응용 프로그램에서 제공한 수신기로 바꿀 수 있습니다.
응용 프로그램이 `null`을 `setCommandListener`
메소드에 전달하여 수신기를 제거한 경우 기본 수신기가 암시적으로 복원됩니다.
``Display.setCurrent(Alert, Displayable)``
메소드와 ``Display.setCurrent(Displayable)``
메소드가 `Alert`와
함께 호출되는 경우에는
`Alert`가 닫힌 후에
다른 `Displayable`로
자동으로 이동하는 특수 동작을 정의합니다.
`Alert`가 닫힐 때나 명령이 호출될 때
기본 수신기가 있는 경우에만
이러한 특수 동작이 발생합니다.
사용자가 `Command`를 호출하고
기본 수신기가 있는 경우
기본 수신기는 `Command`를 무시하고
자동 진행 동작을 구현합니다.
응용 프로그램에 자체 `CommandListener`가
설정되어 있는 경우 자동 진행 동작을 사용할 수 없습니다.
listener 코드에서 다른
`Displayable`로 이동해야 합니다.
응용 프로그램에서 수신기를 제공하면
일반적으로 수신기의 `commandAction` 메소드에
명령을 전달하여 `Commands`가 호출됩니다.
전달된 `Command`는
`Alert`에 있는
`Commands`인 `DISMISS_COMMAND` 또는
응용 프로그램 제공 `Commands` 중 하나가 됩니다.
응용 프로그램은 `null`을 `setCommandListener`
메소드에 전달하여 기본 수신기를 복원할 수 있습니다.
**주:** 응용 프로그램은
`Alert`에서
``Displayable.setTicker``를
사용하여 ``Ticker``를 설정할 수 있지만 구현 제한으로 인해 표시되지 않을 수 있습니다.
**Since:**
- MIDP 1.0
**See Also:**
- ``AlertType``
## 필드 요약
- `static Command DISMISS_COMMAND` — Alert 가 닫혔음을 나타내기 위해 Command 가 수신기에 전달됩니다.
- `static int FOREVER` — FOREVER 는 사용자가 닫을 때까지 Alert 가 계속 표시된다는 것을 나타냅니다.
## 생성자 요약
- Alert ( String title) 주어진 제목으로 비어 있는
새 Alert 객체를 구성합니다.
- Alert ( String title, String alertText, Image alertImage, AlertType alertType) 지정된 제목, 내용 문자열 및 이미지, 경고 유형과 함께
새 Alert 객체를 구성합니다.
## 메서드 요약
- `void addCommand ( Command cmd)` — `Displayable.addCommand(javax.microedition.lcdui.Command)` 와 유사하지만 응용 프로그램이 먼저 Alert 에 명령을 추가하면 `DISMISS_COMMAND` 가 암시적으로 제거됩니다.
- `int getDefaultTimeout ()` — Alert 를 표시하기 위한 기본 시간을 가져옵니다.
- `Image getImage ()` — Alert 에 사용된 Image 를 가져옵니다.
- `Gauge getIndicator ()` — 이 Alert 에 대한 작업 표시기를 가져옵니다.
- `String getString ()` — Alert 에 사용된 텍스트 문자열을 가져옵니다.
- `int getTimeout ()` — Alert 가 표시될 시간을 가져옵니다.
- `AlertType getType ()` — Alert 의 유형을 가져옵니다.
- `void removeCommand ( Command cmd)` — `Displayable.removeCommand(javax.microedition.lcdui.Command)` 와 유사하지만 응용 프로그램이 Alert 에서 마지막 명령을 제거하면 `DISMISS_COMMAND` 가 암시적으로 추가됩니다.
- `void setCommandListener ( CommandListener l)` — `Displayable.setCommandListener(javax.microedition.lcdui.CommandListener)` 와 같지만 다음과 같은 의미가 추가됩니다.
- `void setImage ( Image img)` — Alert 에 사용된 Image 를 설정합니다.
- `void setIndicator ( Gauge indicator)` — 이 Alert 에 작업 표시기를 설정합니다.
- `void setString ( String str)` — Alert 에 사용된 텍스트 문자열을 설정합니다.
- `void setTimeout (int time)` — Alert 를 표시해야 할 시간을 설정합니다.
- `void setType ( AlertType type)` — Alert 의 유형을 설정합니다.
## 필드 상세
### FOREVER
```java
public static final int FOREVER
```
**See Also:**
- `Constant Field Values`
### DISMISS_COMMAND
```java
public static final Command DISMISS_COMMAND
```
**Since:**
- MIDP 2.0
### Alert
```java
public Alert(String title)
```
- 주어진 제목으로 비어 있는
새 `Alert` 객체를 구성합니다.
`null`이 전달되면 `Alert`에는 제목이 없습니다.
이 구성체를 호출하는 것은
다음을 호출하는 것과 같습니다.
`Alert(title, null, null, null)`
**Parameters:**
- `title` - 제목 문자열 또는 `null`
**See Also:**
- ``Alert(String, String, Image, AlertType)``
### Alert
```java
public Alert(String title,
String alertText,
Image alertImage,
AlertType alertType)
```
- 지정된 제목, 내용 문자열 및 이미지, 경고 유형과 함께
새 `Alert` 객체를 구성합니다.
내용의 레이아웃은 구현에 따라 달라집니다.
이러한 새 경고의 시간 초과 값은
`getDefaultTimeout()`에서
반환하는 것과 같은 값입니다.
제공되는 `Image`는 변경 가능한 경우도 있고
변경 불가능한 경우도 있습니다. 특정 `AlertTypes`의 처리 및
동작은 ``AlertType``에 설명되어 있습니다.
`null`을 `alertType` 매개 변수 값으로
사용할 수 있으며 `Alert`가 특정 경고
유형을 갖지 않음을 나타냅니다.
`DISMISS_COMMAND`는
새 `Alert`에 있는
유일한 `Command`입니다.
새 `Alert`와 연관된 `CommandListener`는
*default listener*로 해당 동작은
명령 및 수신기 절에 보다
자세히 설명되어 있습니다.
**Parameters:**
- `alertType` - `Alert` 유형,
또는 `Alert`에 특정 유형이 없는 경우
`null`
### getDefaultTimeout
```java
public int getDefaultTimeout()
```
**Returns:**
- 기본 시간 초과(밀리초) 또는 `FOREVER`
### getTimeout
```java
public int getTimeout()
```
**Returns:**
- 기본 시간 초과(밀리초) 또는 `FOREVER`
**See Also:**
- ``setTimeout(int)``
### setTimeout
```java
public void setTimeout(int time)
```
**Parameters:**
- `time` - 기본 시간 초과(밀리초) 또는 `FOREVER`
**Throws:**
- `IllegalArgumentException` - 시간이 양수도 아니고
`FOREVER`도 아닌 경우
**See Also:**
- ``getTimeout()``
### getType
```java
public AlertType getType()
```
**Returns:**
- `AlertType`의
인스턴스에 대한 참조,
또는 `Alert`에
특정 유형이 없는 경우 `null`
**See Also:**
- ``setType(javax.microedition.lcdui.AlertType)``
### setType
```java
public void setType(AlertType type)
```
**Parameters:**
- `type` - `AlertType`, 또는
`Alert`에 특정 유형이 없는 경우
`null`
**See Also:**
- ``getType()``
### getString
```java
public String getString()
```
**Returns:**
- `Alert`의 텍스트 문자열,
또는 텍스트가 없는 경우 `null`
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `Alert`의 텍스트 문자열,
또는 텍스트가 없는 경우 `null`
**See Also:**
- ``getString()``
### getImage
```java
public Image getImage()
```
**Returns:**
- `Alert`의 이미지, 또는
이미지가 없는 경우 `null`
**See Also:**
- ``setImage(javax.microedition.lcdui.Image)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `Alert`의 이미지,
또는 이미지가 없는 경우 `null`
**See Also:**
- ``getImage()``
### setIndicator
```java
public void setIndicator(Gauge indicator)
```
**Parameters:**
- `indicator` - 이 `Alert`에 대한 작업 표시기,
또는 작업 표시기가 없는 경우
`null`
**Throws:**
- `IllegalArgumentException` - `indicator`가
`Alert`의 사용에 대한 제한을 충족시키지 못하는 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getIndicator()``
### getIndicator
```java
public Gauge getIndicator()
```
**Returns:**
- 이 `Alert`의 작업 표시기에 대한 참조,
또는 참조가 없는 경우
`null`
**Since:**
- MIDP 2.0
**See Also:**
- ``setIndicator(javax.microedition.lcdui.Gauge)``
### addCommand
```java
public void addCommand(Command cmd)
```
**Overrides:**
- `addCommand` in class `Displayable`
**Parameters:**
- `cmd` - 추가되는 명령
**Throws:**
- `NullPointerException` - cmd가 `null`인 경우
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Overrides:**
- `removeCommand` in class `Displayable`
**Parameters:**
- `cmd` - 제거되는 명령
### setCommandListener
```java
public void setCommandListener(CommandListener l)
```
**Overrides:**
- `setCommandListener` in class `Displayable`
**Parameters:**
- `l` - 새 수신기 또는 `null`
## 생성자 상세
### Alert
```java
public Alert(String title)
```
- 주어진 제목으로 비어 있는
새 `Alert` 객체를 구성합니다.
`null`이 전달되면 `Alert`에는 제목이 없습니다.
이 구성체를 호출하는 것은
다음을 호출하는 것과 같습니다.
`Alert(title, null, null, null)`
**Parameters:**
- `title` - 제목 문자열 또는 `null`
**See Also:**
- ``Alert(String, String, Image, AlertType)``
### Alert
```java
public Alert(String title,
String alertText,
Image alertImage,
AlertType alertType)
```
- 지정된 제목, 내용 문자열 및 이미지, 경고 유형과 함께
새 `Alert` 객체를 구성합니다.
내용의 레이아웃은 구현에 따라 달라집니다.
이러한 새 경고의 시간 초과 값은
`getDefaultTimeout()`에서
반환하는 것과 같은 값입니다.
제공되는 `Image`는 변경 가능한 경우도 있고
변경 불가능한 경우도 있습니다. 특정 `AlertTypes`의 처리 및
동작은 ``AlertType``에 설명되어 있습니다.
`null`을 `alertType` 매개 변수 값으로
사용할 수 있으며 `Alert`가 특정 경고
유형을 갖지 않음을 나타냅니다.
`DISMISS_COMMAND`는
새 `Alert`에 있는
유일한 `Command`입니다.
새 `Alert`와 연관된 `CommandListener`는
*default listener*로 해당 동작은
명령 및 수신기 절에 보다
자세히 설명되어 있습니다.
**Parameters:**
- `alertType` - `Alert` 유형,
또는 `Alert`에 특정 유형이 없는 경우
`null`
### getDefaultTimeout
```java
public int getDefaultTimeout()
```
**Returns:**
- 기본 시간 초과(밀리초) 또는 `FOREVER`
### getTimeout
```java
public int getTimeout()
```
**Returns:**
- 기본 시간 초과(밀리초) 또는 `FOREVER`
**See Also:**
- ``setTimeout(int)``
### setTimeout
```java
public void setTimeout(int time)
```
**Parameters:**
- `time` - 기본 시간 초과(밀리초) 또는 `FOREVER`
**Throws:**
- `IllegalArgumentException` - 시간이 양수도 아니고
`FOREVER`도 아닌 경우
**See Also:**
- ``getTimeout()``
### getType
```java
public AlertType getType()
```
**Returns:**
- `AlertType`의
인스턴스에 대한 참조,
또는 `Alert`에
특정 유형이 없는 경우 `null`
**See Also:**
- ``setType(javax.microedition.lcdui.AlertType)``
### setType
```java
public void setType(AlertType type)
```
**Parameters:**
- `type` - `AlertType`, 또는
`Alert`에 특정 유형이 없는 경우
`null`
**See Also:**
- ``getType()``
### getString
```java
public String getString()
```
**Returns:**
- `Alert`의 텍스트 문자열,
또는 텍스트가 없는 경우 `null`
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `Alert`의 텍스트 문자열,
또는 텍스트가 없는 경우 `null`
**See Also:**
- ``getString()``
### getImage
```java
public Image getImage()
```
**Returns:**
- `Alert`의 이미지, 또는
이미지가 없는 경우 `null`
**See Also:**
- ``setImage(javax.microedition.lcdui.Image)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `Alert`의 이미지,
또는 이미지가 없는 경우 `null`
**See Also:**
- ``getImage()``
### setIndicator
```java
public void setIndicator(Gauge indicator)
```
**Parameters:**
- `indicator` - 이 `Alert`에 대한 작업 표시기,
또는 작업 표시기가 없는 경우
`null`
**Throws:**
- `IllegalArgumentException` - `indicator`가
`Alert`의 사용에 대한 제한을 충족시키지 못하는 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getIndicator()``
### getIndicator
```java
public Gauge getIndicator()
```
**Returns:**
- 이 `Alert`의 작업 표시기에 대한 참조,
또는 참조가 없는 경우
`null`
**Since:**
- MIDP 2.0
**See Also:**
- ``setIndicator(javax.microedition.lcdui.Gauge)``
### addCommand
```java
public void addCommand(Command cmd)
```
**Overrides:**
- `addCommand` in class `Displayable`
**Parameters:**
- `cmd` - 추가되는 명령
**Throws:**
- `NullPointerException` - cmd가 `null`인 경우
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Overrides:**
- `removeCommand` in class `Displayable`
**Parameters:**
- `cmd` - 제거되는 명령
### setCommandListener
```java
public void setCommandListener(CommandListener l)
```
**Overrides:**
- `setCommandListener` in class `Displayable`
**Parameters:**
- `l` - 새 수신기 또는 `null`
## 메서드 상세
### getDefaultTimeout
```java
public int getDefaultTimeout()
```
**Returns:**
- 기본 시간 초과(밀리초) 또는 `FOREVER`
### getTimeout
```java
public int getTimeout()
```
**Returns:**
- 기본 시간 초과(밀리초) 또는 `FOREVER`
**See Also:**
- ``setTimeout(int)``
### setTimeout
```java
public void setTimeout(int time)
```
**Parameters:**
- `time` - 기본 시간 초과(밀리초) 또는 `FOREVER`
**Throws:**
- `IllegalArgumentException` - 시간이 양수도 아니고
`FOREVER`도 아닌 경우
**See Also:**
- ``getTimeout()``
### getType
```java
public AlertType getType()
```
**Returns:**
- `AlertType`의
인스턴스에 대한 참조,
또는 `Alert`에
특정 유형이 없는 경우 `null`
**See Also:**
- ``setType(javax.microedition.lcdui.AlertType)``
### setType
```java
public void setType(AlertType type)
```
**Parameters:**
- `type` - `AlertType`, 또는
`Alert`에 특정 유형이 없는 경우
`null`
**See Also:**
- ``getType()``
### getString
```java
public String getString()
```
**Returns:**
- `Alert`의 텍스트 문자열,
또는 텍스트가 없는 경우 `null`
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `Alert`의 텍스트 문자열,
또는 텍스트가 없는 경우 `null`
**See Also:**
- ``getString()``
### getImage
```java
public Image getImage()
```
**Returns:**
- `Alert`의 이미지, 또는
이미지가 없는 경우 `null`
**See Also:**
- ``setImage(javax.microedition.lcdui.Image)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `Alert`의 이미지,
또는 이미지가 없는 경우 `null`
**See Also:**
- ``getImage()``
### setIndicator
```java
public void setIndicator(Gauge indicator)
```
**Parameters:**
- `indicator` - 이 `Alert`에 대한 작업 표시기,
또는 작업 표시기가 없는 경우
`null`
**Throws:**
- `IllegalArgumentException` - `indicator`가
`Alert`의 사용에 대한 제한을 충족시키지 못하는 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getIndicator()``
### getIndicator
```java
public Gauge getIndicator()
```
**Returns:**
- 이 `Alert`의 작업 표시기에 대한 참조,
또는 참조가 없는 경우
`null`
**Since:**
- MIDP 2.0
**See Also:**
- ``setIndicator(javax.microedition.lcdui.Gauge)``
### addCommand
```java
public void addCommand(Command cmd)
```
**Overrides:**
- `addCommand` in class `Displayable`
**Parameters:**
- `cmd` - 추가되는 명령
**Throws:**
- `NullPointerException` - cmd가 `null`인 경우
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Overrides:**
- `removeCommand` in class `Displayable`
**Parameters:**
- `cmd` - 제거되는 명령
### setCommandListener
```java
public void setCommandListener(CommandListener l)
```
**Overrides:**
- `setCommandListener` in class `Displayable`
**Parameters:**
- `l` - 새 수신기 또는 `null`
---
title: "Class AlertType"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.AlertType
```
## 설명
**extends Object:**
`AlertType`은 경고의 특징을 표시합니다.
`Alert`는 사용자에게 다양한 정보를 제공하기 위해
응용 프로그램에서 사용합니다.
`AlertType`은
현재 `Displayable`을
변경하지 않고 사용자에게 직접 신호를 보내는 데 사용할 수 있습니다.
`playSound` 메소드는
사용자에게 경고하기 위해
자연스러운 사운드를 생성하는 데 사용할 수 있습니다.
예를 들어, `Canvas`를 사용하는 게임은
`playSound`를 사용하여
성공이나 진행을 표시할 수 있습니다.
미리 정의된 유형은 `INFO`, `WARNING`,
`ERROR`, `ALARM` 및 `CONFIRMATION`입니다.
**Since:**
- MIDP 1.0
**See Also:**
- ``Alert``
## 필드 요약
- `static AlertType ALARM` — ALARM AlertType 은 사용자가 이전에 알려달라고 요청한 이벤트에 대해 사용자에게 경고하기 위한 힌트입니다.
- `static AlertType CONFIRMATION` — CONFIRMATION AlertType 은 사용자 작업을 확인하기 위한 힌트입니다.
- `static AlertType ERROR` — ERROR AlertType 은 사용자에게 오류 가능성 있는 작업을 경고하기 위한 힌트입니다.
- `static AlertType INFO` — INFO AlertType 은 일반적으로 사용자에게 위협적이지 않은 정보를 제공합니다.
- `static AlertType WARNING` — WARNING AlertType 은 잠재적으로 위험한 작업을 수행하는 사용자에게 경고하기 위한 힌트입니다.
## 생성자 요약
- `protected AlertType ()` — 서브 클래스의 구성자를 보호합니다.
## 메서드 요약
- `boolean playSound ( Display display)` — 이 AlertType 의 사운드를 재생하여 사용자에게 경고합니다.
## 필드 상세
### INFO
```java
public static final AlertType INFO
```
- `INFO` `AlertType`은
일반적으로 사용자에게 위협적이지 않은 정보를 제공합니다.
예를 들어, 단순한 시작 화면은
`INFO` `AlertType`일 수 있습니다.
### WARNING
```java
public static final AlertType WARNING
```
- `WARNING` `AlertType`은
잠재적으로 위험한 작업을 수행하는 사용자에게 경고하기 위한 힌트입니다.
예를 들어, 경고 메시지에는
"경고: 이 작업으로 데이터가 지워질 수 있습니다."라는
메시지가 포함될 수 있습니다.
### ERROR
```java
public static final AlertType ERROR
```
- `ERROR` `AlertType`은
사용자에게 오류 가능성 있는 작업을 경고하기 위한 힌트입니다.
예를 들어, 오류 경고는 "응용 프로그램을 설치할 공간이
충분하지 않습니다."라는 메시지를 표시합니다.
### ALARM
```java
public static final AlertType ALARM
```
- `ALARM` `AlertType`은
사용자가 이전에 알려달라고 요청한 이벤트에 대해
사용자에게 경고하기 위한 힌트입니다.
예를 들어, "임원 회의가 5분 후에 열립니다."라는
메시지가 있습니다.
### CONFIRMATION
```java
public static final AlertType CONFIRMATION
```
- `CONFIRMATION` `AlertType`은
사용자 작업을 확인하기 위한 힌트입니다.
예를 들어, 저장 작업이 완료되었음을 알리기 위해 "저장되었습니다."라는
메시지가 표시될 수 있습니다.
### AlertType
```java
protected AlertType()
```
- 서브 클래스의 구성자를 보호합니다.
### playSound
```java
public boolean playSound(Display display)
```
**Parameters:**
- `display` - `AlertType`
사운드 재생할 대상
**Returns:**
- 사용자에게 경고한 경우 `true`,
경고하지 않은 경우 `false`
**Throws:**
- `NullPointerException` - `display`가 `null`인 경우
## 생성자 상세
### AlertType
```java
protected AlertType()
```
- 서브 클래스의 구성자를 보호합니다.
### playSound
```java
public boolean playSound(Display display)
```
**Parameters:**
- `display` - `AlertType`
사운드 재생할 대상
**Returns:**
- 사용자에게 경고한 경우 `true`,
경고하지 않은 경우 `false`
**Throws:**
- `NullPointerException` - `display`가 `null`인 경우
## 메서드 상세
### playSound
```java
public boolean playSound(Display display)
```
**Parameters:**
- `display` - `AlertType`
사운드 재생할 대상
**Returns:**
- 사용자에게 경고한 경우 `true`,
경고하지 않은 경우 `false`
**Throws:**
- `NullPointerException` - `display`가 `null`인 경우
---
title: "Class Canvas"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
|
+--javax.microedition.lcdui.Canvas
```
## 설명
**Direct Known Subclasses:**
- `GameCanvas`
**extends Displayable:**
`Canvas` 클래스는
낮은 수준의 이벤트를 처리하고
디스플레이로 이동하기 위한 그래픽을
호출해야 하는 응용 프로그램을
작성하기 위한 기본 클래스입니다.
대체로 게임 응용 프로그램에서
`Canvas` 클래스를 많이 사용합니다.
응용 프로그램 개발 면에서 보자면 `Canvas` 클래스는
표준 `Screen` 클래스와 바꾸어 사용할 수 있으므로
응용 프로그램은 필요한 경우 높은 수준 화면과
`Canvas`를 혼합하여 일치시킬 수 있습니다.
예를 들어, List 화면은 레이싱 게임 추적을 선택하는 데 사용되며
`Canvas` 서브 클래스는 실제 게임을 구현합니다.
`Canvas`는 개발자에게 게임 동작,
키 이벤트 및 포인터 이벤트(장치에서 지원하는 경우)를
처리하는 메소드를 제공합니다. 또한 장치의 기능 및
게임 작업에 대한 키 매핑을
식별하기 위한 메소드가 제공됩니다.
키 이벤트는 *키 코드*에 관하여 보고되며,
키 코드는 장치의 실제 키에 직접 바운드되므로
키 코드를 사용하면 이식 가능성이 줄어듭니다.
이식 가능 응용 프로그램은 키 코드 대신 게임
작업을 사용해야 합니다.
`Displayable`의 다른 서브 클래스와
마찬가지로 `Canvas` 클래스를 사용하면
응용 프로그램은 명령의 수신기를 등록할 수 있습니다.
하지만 다른 `Displayables`와는
달리 `Canvas` 클래스에서는 응용 프로그램이
해당 클래스를 분류하여 사용해야 합니다.
`paint()` 메소드는 `abstract`로 선언되므로
응용 프로그램은 해당 서브 클래스 내에
*반드시* 구현을 제공해야 합니다.
다른 이벤트 보고 메소드는 `abstract`로 선언되지 않으므로
기본 구현은 비어 있습니다(즉, 아무 작업도 하지 않음).
따라서 응용 프로그램은 관심 있는 이벤트를 보고하는
메소드만 무시할 수 있습니다.
이 클래스는 응용 프로그램이 수신기를 정의하고 `Screen` 클래스의
인스턴스를 사용하여 이를 등록할 수 있도록 허용하는
``Screen`` 클래스와는 대조적입니다.
전달되어야 하는 각 이벤트 종류별로 하나씩 여러 개의 새 수신기 인터페이스를
만들어야 하기 때문에 이 스타일은 `Canvas` 클래스에
사용되지 않습니다. 보다 적은 수신기 인터페이스를 갖도록 하는 것이
대안이 될 수는 있지만, 이 경우 수신기는 관심이 없는
이벤트를 필터링해야 합니다.
### 키 이벤트
응용 프로그램은 *키 코드*의 공간 내에서
개별 키의 이름이 지정된 키입력 이벤트를 받습니다.
MIDP 응용 프로그램에 이벤트를 보고하는 각 키에는 키 코드가 할당됩니다.
두 키가 서로에 대해 정확히 동일한 기능을 하지 않는 이상
키 코드 값은 각 하드웨어 키에 고유합니다.
MIDP에는
``KEY_NUM0``,
``KEY_NUM1``,
``KEY_NUM2``,
``KEY_NUM3``,
``KEY_NUM4``,
``KEY_NUM5``,
``KEY_NUM6``,
``KEY_NUM7``,
``KEY_NUM8``,
``KEY_NUM9``,
``KEY_STAR`` 및
``KEY_POUND``와 같은 키 코드가 정의되어 있습니다.
이러한 키 코드는 ITU-T 표준 전화 키패드의 키에 해당합니다.
다른 키가 키보드에 있을 수 있으며 일반적으로 위의 목록과 구별되는
키 코드를 가집니다. 이식 가능성을 보장하려면 응용 프로그램에서
해당 표준 키 코드만 사용해야 합니다.
표준 키 코드 값은 키를 나타내는
문자의 유니코드 인코딩과 같습니다.
장치에 유니코드 문자와 정확하게 일치하는 다른 키가 포함되어 있는 경우
이러한 키 코드 값은 해당 문자의 유니코드 인코딩과 같아야 합니다.
일치하는 유니코드 문자가 없는 키의 경우 구현 시 음수 값을 사용해야 합니다.
0은 잘못된 키 코드로 정의됩니다.
다음 코드를 사용하여 응용 프로그램에서 키 코드를 유니코드로
변환할 수 있습니다.
if (keyCode > 0) {
char ch = (char)keyCode;
// ...
}
이 기술은 제한된 특정 경우에만 유용합니다.
특히 대문자와 소문자, 키보드 shift 키 상태,
두 개 이상의 키입력을 요구하는 문자를 처리하지 않기 때문에
전체 텍스트 입력에 충분하지 않습니다. 텍스트 입력을 위해서
응용 프로그램은 항상 ``TextBox`` 또는
``TextField`` 객체를 사용해야 합니다.
때로 이 키에 대한 메시지를 표시하기 위해
키의 *이름*을 찾는 것이 유용한 경우도 있습니다.
이 경우 응용 프로그램은 ``getKeyName()`` 메소드를 사용하여 키 이름을 찾을 수 있습니다.
### 게임 작업
화살표 키 이벤트와 게임 관련 이벤트가 필요한
이식 가능 응용 프로그램은 키 코드와 키 이름보다는 *게임 작업*을
사용해야 합니다. MIDP에는
``UP``,
``DOWN``,
``LEFT``,
``RIGHT``,
``FIRE``,
``GAME_A``,
``GAME_B``,
``GAME_C`` 및
``GAME_D``와 같은 게임 작업이 정의됩니다.
각 키 코드는 기껏해야 하나의 게임 작업에 매핑될 수 있습니다.
하지만 게임 작업은 두 개 이상의 키 코드와 연관됩니다.
응용 프로그램은 ``getGameAction(int keyCode)``
메소드를 사용하여 키 코드를 게임 작업으로 변환할 수 있으며
``getKeyCode(int gameAction)`` 메소드를 사용하여
게임 작업을 키 코드로 변환할 수 있습니다.
특정 게임 작업과 연관된 키 코드는 여러 개 있을 수 있지만
`getKeyCode`는 이러한 키 코드 중 하나만 반환합니다.
`g`가 유효한 게임 작업이고 `k`가 게임 작업과
연관된 키에 대해 유효한 키 코드인 경우 다음 표현식을 고려합니다.
g == getGameAction(getKeyCode(g)) // (1)
k == getKeyCode(getGameAction(k)) // (2)
표현식 (1)은 *항상* true입니다.
하지만 표현식 (2)는 true일 수도 있지만 *반드시 true인 것은 아닙니다*.
구현 시에는 응용 프로그램 실행 도중 게임 작업 및 키 코드의 매핑을
변경할 수 없습니다.
게임 작업을 사용하려는 이식 가능 응용 프로그램은
``getGameAction()`` 메소드를 호출한 다음
결과를 테스트하여 각 키 이벤트를 게임 작업으로 변환해야 합니다.
예를 들어, 일부 장치에서 게임 작업 `UP`,
`DOWN`, `LEFT` 및 `RIGHT`는
네 방향의 이동 화살표 키에 매핑됩니다.
이 경우 `getKeyCode(UP)`는 위쪽 화살표 키에 대해
장치 종속 코드를 반환합니다.
다른 장치의 경우 가능한 매핑은 번호 키 `2`,
`4`, `6` 및 `8`에 있습니다.
이 경우 `getKeyCode(UP)`는
`KEY_NUM2`를 반환합니다.
두 경우 모두 사용자가 장치에서 "실제로 왼쪽에 있는" 키를
누르면 `getGameAction()` 메소드는 `LEFT`
게임 작업을 반환합니다.
### 명령
또한 현재 캔버스를 사용 중인 경우
사용자는 ``commands``를 실행할 수 있습니다.
`Commands`는 장치별
고유 방식으로 키와 메뉴에 매핑됩니다.
일부 장치의 경우 명령에 사용된 키는 키 코드 이벤트를 캔버스에 전달할 키와
중복됩니다. 이 경우 장치는 이러한 키가 명령이나
키 코드 이벤트를 응용 프로그램에 전달할 것인지 여부를 결정하는 모드를
사용자가 선택하도록 허용하는 응용 프로그램에 투명한 수단을 제공합니다.
`Canvas`가 표준 모드에 있는 경우(아래 참조),
캔버스에 사용 가능한 일련의 키 코드 이벤트는
현재의 명령 개수나 명령 수신기의 존재에 따라 변경되지 않습니다.
`Canvas`가 전체 화면 모드에 있으며 명령 수신기가 없는 경우
장치는 명령 전달을 위해 예약될 수도 있는 키에 대한
키 코드 이벤트 전달을 선택합니다.
게임 개발자는 명령에 대한 액세스가
장치별로 크게 달라지며 게임 도중 사용자에게 명령 실행을 요구하면
실행 가능한 게임의 용이성에
큰 영향을 미칠 수 있음을 알아야 합니다.
### 이벤트 전달
`Canvas` 객체는 구현 시 호출되는
여러 메소드를 정의합니다.
이러한 메소드는 대개 응용 프로그램에 이벤트를 전달하는 것이 목적이므로
이를 *이벤트 전달* 메소드라고 합니다.
일련의 메소드는 다음과 같습니다.
- `showNotify()`
- `hideNotify()`
- `keyPressed()`
- `keyRepeated()`
- `keyReleased()`
- `pointerPressed()`
- `pointerDragged()`
- `pointerReleased()`
- `paint()`
이러한 메소드는 연속적으로 모두 호출됩니다.
즉, 구현 시 이벤트 전달 메소드 중 *하나*에 대한
이전 호출이 반환되어야 이벤트 전달 메소드를 호출할 수 있습니다.
`serviceRepaints()` 메소드는 `paint()`가
호출되어 반환될 때까지 차단되므로 이 규칙에 대한 예외가 됩니다.
이러한 예외는 이벤트 전달 메소드 중 하나에 있는
해당 응용 프로그램에서 `serviceRepaints()`를 호출하는 경우에도 발생합니다.
``Display.callSerially()`` 메소드는
이벤트 스트림을 사용하여 일부 응용 프로그램 정의 작업을 일련화하는 데
사용할 수 있습니다. 자세한 내용은 패키지 요약의
`이벤트 처리` 및
`동시 처리` 절을
참조하십시오.
키 관련, 포인터 관련 및 `paint()` 메소드는
`Canvas`가 출력 장치에
실제로 표시되는 동안만 호출됩니다.
그러므로 이러한 메소드는 `showNotify()`에 대한 호출 이후
및 `hideNotify()`에 대한 호출 이전에
이 `Canvas` 객체에서만 호출됩니다.
`hideNotify()`가 호출된 다음에는
`showNotify()`에 대한 후속 호출이 반환될 때까지
키, 포인터 및 `paint` 메소드 중
어느 것도 호출되지 않습니다.
`callSerially()`에서 발생하는
`run()` 메소드에 대한 호출은
`showNotify()`
및 `hideNotify()`에 대한 호출과 상관없이 발생합니다.
``showNotify()`` 메소드는
`Canvas`가 실제로
디스플레이에 표시되기 전에 호출되며
``hideNotify()``
메소드는 `Canvas`가
디스플레이에서 제거된 다음 호출됩니다.
`Canvas`의 표시 상태(또는
다른 `Displayable`
객체)는 ``Displayable.isShown()`` 메소드를
사용하여 쿼리할 수 있습니다.
`Canvas`의 표시 상태는
포그라운드와 백그라운드 상태 사이에서
`MIDlet`을 이동하는
응용 프로그램 관리 소프트웨어에 의해 또는 시스템 화면을 사용하여
`Canvas`를 흐리게 만드는
시스템에 의해 변경됩니다.
따라서 `showNotify()` 및
`hideNotify()`에 대한
호출은 `MIDlet`의 제어를 받지 않으므로
상당히 자주 발생할 수 있습니다.
응용 프로그램 개발자가 경량을
최소로 유지하려면 비용이 많이 드는
설치 및 분해 작업은 `showNotify()`와
`hideNotify()` 메소드 밖에서
수행하는 것이 좋습니다.
`Canvas`는 표준 모드나
전체 화면 모드에 있을 수 있습니다.
표준 모드에서 디스플레이의 공간은 명령 레이블, 제목 및 티커가
차지할 수 있습니다.
`Canvas`를 전체 화면 모드로 설정하면
응용 프로그램은 `Canvas`가
디스플레이 공간을 가능한 한 많이 차지하도록 요청합니다.
전체 화면 모드에서는 제목 및 티커가
`Canvas`에 있더라도
표시되지 않으며 `Commands`는
몇 가지 대체 수단(팝업 메뉴를 통하는 등)을 사용하여 표시됩니다.
표시된 `Canvas`가
전체 화면 모드에 있더라도
구현 시에는 상태 표시기 등에 디스플레이의 일부분을 할애합니다.
전체 화면 모드에서 제목은 표시되지 않더라도
해당 텍스트는 `Commands`의 팝업 메뉴 제목 등
다른 용도로 계속 사용될 수 있습니다.
`Canvas` 객체는 기본적으로 표준 모드에 있습니다.
표준 대 전체 화면 모드 설정은 ``setFullScreenMode(boolean)`` 메소드
사용을 통해 제어됩니다.
``setFullScreenMode(boolean)``를 호출하면
``sizeChanged()``가 호출될 수 있습니다.
이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
응용 프로그램은 사용 가능한 그리기 영역 크기에서
변경 내용을 처리하기 위해 이 메소드를 무시할 수 있습니다.
**주:** 개요의 "사양 요구 사항" 절에서
언급한 대로 구현 시 사용자에게
네트워크 사용에 대한 표시를
제공해야 합니다. 표시기가 화면에 제공되는 경우에는
`Canvas`가 전체 화면 모드에 있어도
네트워크 활동이 발생하면 표시되어야 합니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int DOWN` — DOWN 게임 작업의 상수.
- `static int FIRE` — FIRE 게임 작업의 상수.
- `static int GAME_A` — 일반 용도 " A " 게임 작업의 상수.
- `static int GAME_B` — 일반 용도 " B " 게임 작업의 상수.
- `static int GAME_C` — 일반 용도 " C " 게임 작업의 상수.
- `static int GAME_D` — 일반 용도 " D " 게임 작업의 상수.
- `static int KEY_NUM0` — ITU-T 키 0 의 키 코드.
- `static int KEY_NUM1` — ITU-T 키 1 의 키 코드.
- `static int KEY_NUM2` — ITU-T 키 2 의 키 코드.
- `static int KEY_NUM3` — ITU-T 키 3 의 키 코드.
- `static int KEY_NUM4` — ITU-T 키 4 의 키 코드.
- `static int KEY_NUM5` — ITU-T 키 5 의 키 코드.
- `static int KEY_NUM6` — ITU-T 키 6 의 키 코드.
- `static int KEY_NUM7` — ITU-T 키 7 의 키 코드.
- `static int KEY_NUM8` — ITU-T 키 8 의 키 코드.
- `static int KEY_NUM9` — ITU-T 키 9 의 키 코드.
- `static int KEY_POUND` — ITU-T 키 "파운드"( # )의 키 코드.
- `static int KEY_STAR` — ITU-T 키 "스타"( * )의 키 코드.
- `static int LEFT` — LEFT 게임 작업의 상수.
- `static int RIGHT` — RIGHT 게임 작업의 상수.
- `static int UP` — UP 게임 작업의 상수.
## 생성자 요약
- `protected Canvas ()` — 새 Canvas 객체를 구성합니다.
## 메서드 요약
- `int getGameAction (int keyCode)` — 장치의 지정된 키 코드와 연관된 게임 작업을 가져옵니다.
- `int getHeight ()` — Canvas 의 디스플레이 가능 영역의 높이를 픽셀 단위로 가져옵니다.
- `int getKeyCode (int gameAction)` — 장치에 지정된 게임 작업에 해당하는 키 코드를 가져옵니다.
- `String getKeyName (int keyCode)` — 키에 대한 정보가 들어 있는 키 문자열을 가져옵니다.
- `int getWidth ()` — Canvas 의 디스플레이 가능 영역의 너비를 픽셀 단위로 가져옵니다.
- `boolean hasPointerEvents ()` — 플랫폼이 포인터 누르기 및 놓기 이벤트를 지원하는지 검사합니다.
- `boolean hasPointerMotionEvents ()` — 플랫폼이 포인터 모션 이벤트(포인터 끌기)를 지원하는지 검사합니다.
- `boolean hasRepeatEvents ()` — 키를 누른 채로 있을 때 플랫폼에서 반복 이벤트를 생성할 수 있는지 검사합니다.
- `protected void hideNotify ()` — 구현 시 Canvas 가 디스플레이에서 제거된 다음 바로 hideNotify() 를 호출합니다.
- `boolean isDoubleBuffered ()` — 구현 시 Canvas 가 이중 버퍼되었는지 검사합니다.
- `protected void keyPressed (int keyCode)` — 키를 누르면 호출됩니다.
- `protected void keyReleased (int keyCode)` — 키를 놓으면 호출됩니다.
- `protected void keyRepeated (int keyCode)` — 키가 반복되면(누른 채로 있으면) 호출됩니다.
- `protected abstract void paint ( Graphics g)` — Canvas 를 렌더링합니다.
- `protected void pointerDragged (int x, int y)` — 포인터를 끌면 호출됩니다.
- `protected void pointerPressed (int x, int y)` — 포인터를 누르면 호출됩니다.
- `protected void pointerReleased (int x, int y)` — 포인터를 놓으면 호출됩니다.
- `void repaint ()` — 전체 Canvas 에 대해 다시 그리기를 요청합니다.
- `void repaint (int x, int y, int width, int height)` — Canvas 의 지정한 영역에 대해 다시 그리기를 요청합니다.
- `void serviceRepaints ()` — 보류 중인 다시 그리기 요청이 즉시 처리되도록 합니다.
- `void setFullScreenMode (boolean mode)` — Canvas 를 전체 화면 모드에 둘지 표준 모드에 둘지 여부를 제어합니다.
- `protected void showNotify ()` — 구현 시 Canvas 가 디스플레이에 표시되기 전에 바로 showNotify() 를 호출합니다.
- `protected void sizeChanged (int w, int h)` — Canvas 의 그리기 가능 영역이 변경되면 호출됩니다.
## 필드 상세
### UP
```java
public static final int UP
```
**See Also:**
- `Constant Field Values`
### DOWN
```java
public static final int DOWN
```
**See Also:**
- `Constant Field Values`
### LEFT
```java
public static final int LEFT
```
**See Also:**
- `Constant Field Values`
### RIGHT
```java
public static final int RIGHT
```
**See Also:**
- `Constant Field Values`
### FIRE
```java
public static final int FIRE
```
**See Also:**
- `Constant Field Values`
### GAME_A
```java
public static final int GAME_A
```
**See Also:**
- `Constant Field Values`
### GAME_B
```java
public static final int GAME_B
```
**See Also:**
- `Constant Field Values`
### GAME_C
```java
public static final int GAME_C
```
**See Also:**
- `Constant Field Values`
### GAME_D
```java
public static final int GAME_D
```
**See Also:**
- `Constant Field Values`
### KEY_NUM0
```java
public static final int KEY_NUM0
```
**See Also:**
- `Constant Field Values`
### KEY_NUM1
```java
public static final int KEY_NUM1
```
**See Also:**
- `Constant Field Values`
### KEY_NUM2
```java
public static final int KEY_NUM2
```
**See Also:**
- `Constant Field Values`
### KEY_NUM3
```java
public static final int KEY_NUM3
```
**See Also:**
- `Constant Field Values`
### KEY_NUM4
```java
public static final int KEY_NUM4
```
**See Also:**
- `Constant Field Values`
### KEY_NUM5
```java
public static final int KEY_NUM5
```
**See Also:**
- `Constant Field Values`
### KEY_NUM6
```java
public static final int KEY_NUM6
```
**See Also:**
- `Constant Field Values`
### KEY_NUM7
```java
public static final int KEY_NUM7
```
**See Also:**
- `Constant Field Values`
### KEY_NUM8
```java
public static final int KEY_NUM8
```
**See Also:**
- `Constant Field Values`
### KEY_NUM9
```java
public static final int KEY_NUM9
```
**See Also:**
- `Constant Field Values`
### KEY_STAR
```java
public static final int KEY_STAR
```
**See Also:**
- `Constant Field Values`
### KEY_POUND
```java
public static final int KEY_POUND
```
**See Also:**
- `Constant Field Values`
### Canvas
```java
protected Canvas()
```
- 새 `Canvas` 객체를 구성합니다.
### getWidth
```java
public int getWidth()
```
**Overrides:**
- `getWidth` in class `Displayable`
**Returns:**
- 디스플레이 가능 영역의 너비
### getHeight
```java
public int getHeight()
```
**Overrides:**
- `getHeight` in class `Displayable`
**Returns:**
- 디스플레이 가능 영역의 높이
### isDoubleBuffered
```java
public boolean isDoubleBuffered()
```
**Returns:**
- 이중 버퍼된 경우 `true`,
그렇지 않으면 `false`입니다.
### hasPointerEvents
```java
public boolean hasPointerEvents()
```
**Returns:**
- 장치에서 포인터 이벤트를 지원하는 경우 `true`입니다.
### hasPointerMotionEvents
```java
public boolean hasPointerMotionEvents()
```
**Returns:**
- 장치에서 포인터 모션 이벤트를 지원하는 경우 `true`입니다.
### hasRepeatEvents
```java
public boolean hasRepeatEvents()
```
**Returns:**
- 장치에서 반복 이벤트를 지원하는 경우 `true`입니다.
### getKeyCode
```java
public int getKeyCode(int gameAction)
```
**Parameters:**
- `gameAction` - 게임 작업
**Returns:**
- 이 게임 작업에 해당하는 키 코드
**Throws:**
- `IllegalArgumentException` - `gameAction`이
유효한 게임 작업이 아닌 경우
### getKeyName
```java
public String getKeyName(int keyCode)
```
**Parameters:**
- `keyCode` - 요청된 키 코드
**Returns:**
- 키의 문자열 이름
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### getGameAction
```java
public int getGameAction(int keyCode)
```
**Parameters:**
- `keyCode` - 키 코드
**Returns:**
- 이 키에 해당하는 게임 작업, 또는 해당 게임 작업이 없는 경우
`0`
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### setFullScreenMode
```java
public void setFullScreenMode(boolean mode)
```
**Parameters:**
- `mode` - `Canvas`가 전체 화면 모드에 있으면
`true`, 그렇지 않은 경우 `false`
**Since:**
- MIDP 2.0
### keyPressed
```java
protected void keyPressed(int keyCode)
```
**Parameters:**
- `keyCode` - 누른 키에 대한 키 코드
### keyRepeated
```java
protected void keyRepeated(int keyCode)
```
**Parameters:**
- `keyCode` - 반복된 키에 대한 키 코드
**See Also:**
- ``hasRepeatEvents()``
### keyReleased
```java
protected void keyReleased(int keyCode)
```
**Parameters:**
- `keyCode` - 해제된 키에 대한 키 코드
### pointerPressed
```java
protected void pointerPressed(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 누른 수직
위치(`Canvas`에 상대적)
### pointerReleased
```java
protected void pointerReleased(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 놓은 수직
위치(`Canvas`에 상대적)
### pointerDragged
```java
protected void pointerDragged(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 끈 수직
위치(`Canvas`에 상대적)
### repaint
```java
public final void repaint(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 다시 그릴 직사각형의 높이
**See Also:**
- ``Display.callSerially(Runnable)``,
``serviceRepaints()``
### repaint
```java
public final void repaint()
```
전체 Canvas 에 대해 다시 그리기를 요청합니다.
결과는 다음과 같습니다. repaint(0, 0, getWidth(), getHeight());
### serviceRepaints
```java
public final void serviceRepaints()
```
**See Also:**
- ``Display.callSerially(Runnable)``
### showNotify
```java
protected void showNotify()
```
구현 시 Canvas 가
디스플레이에 표시되기 전에 바로 showNotify() 를 호출합니다.
Canvas 서브 클래스는 애니메이션 설정,
타이머 시작 등이 표시되기 전에
작업을 수행하기 위해 이 메소드를 무시할 수 있습니다. Canvas 클래스에 있는 이 메소드의
기본 구현은 비어 있습니다.
### hideNotify
```java
protected void hideNotify()
```
구현 시 Canvas 가
디스플레이에서 제거된 다음
바로 hideNotify() 를 호출합니다. Canvas 서브 클래스는 애니메이션 일시 중지,
타이머 해지 등의 작업을 수행하기 위해
이 메소드를 무시할 수 있습니다. Canvas 클래스에서
이 메소드의 기본 구현은 비어 있습니다.
### paint
```java
protected abstract void paint(Graphics g)
```
**Parameters:**
- `g` - `Canvas` 렌더링에 사용된 `Graphics`
객체
### sizeChanged
```java
protected void sizeChanged(int w,
int h)
```
**Overrides:**
- `sizeChanged` in class `Displayable`
**Parameters:**
- `h` - `Canvas` 그리기 가능
영역의 새 높이(픽셀 단위)
**Since:**
- MIDP 2.0
## 생성자 상세
### Canvas
```java
protected Canvas()
```
- 새 `Canvas` 객체를 구성합니다.
### getWidth
```java
public int getWidth()
```
**Overrides:**
- `getWidth` in class `Displayable`
**Returns:**
- 디스플레이 가능 영역의 너비
### getHeight
```java
public int getHeight()
```
**Overrides:**
- `getHeight` in class `Displayable`
**Returns:**
- 디스플레이 가능 영역의 높이
### isDoubleBuffered
```java
public boolean isDoubleBuffered()
```
**Returns:**
- 이중 버퍼된 경우 `true`,
그렇지 않으면 `false`입니다.
### hasPointerEvents
```java
public boolean hasPointerEvents()
```
**Returns:**
- 장치에서 포인터 이벤트를 지원하는 경우 `true`입니다.
### hasPointerMotionEvents
```java
public boolean hasPointerMotionEvents()
```
**Returns:**
- 장치에서 포인터 모션 이벤트를 지원하는 경우 `true`입니다.
### hasRepeatEvents
```java
public boolean hasRepeatEvents()
```
**Returns:**
- 장치에서 반복 이벤트를 지원하는 경우 `true`입니다.
### getKeyCode
```java
public int getKeyCode(int gameAction)
```
**Parameters:**
- `gameAction` - 게임 작업
**Returns:**
- 이 게임 작업에 해당하는 키 코드
**Throws:**
- `IllegalArgumentException` - `gameAction`이
유효한 게임 작업이 아닌 경우
### getKeyName
```java
public String getKeyName(int keyCode)
```
**Parameters:**
- `keyCode` - 요청된 키 코드
**Returns:**
- 키의 문자열 이름
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### getGameAction
```java
public int getGameAction(int keyCode)
```
**Parameters:**
- `keyCode` - 키 코드
**Returns:**
- 이 키에 해당하는 게임 작업, 또는 해당 게임 작업이 없는 경우
`0`
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### setFullScreenMode
```java
public void setFullScreenMode(boolean mode)
```
**Parameters:**
- `mode` - `Canvas`가 전체 화면 모드에 있으면
`true`, 그렇지 않은 경우 `false`
**Since:**
- MIDP 2.0
### keyPressed
```java
protected void keyPressed(int keyCode)
```
**Parameters:**
- `keyCode` - 누른 키에 대한 키 코드
### keyRepeated
```java
protected void keyRepeated(int keyCode)
```
**Parameters:**
- `keyCode` - 반복된 키에 대한 키 코드
**See Also:**
- ``hasRepeatEvents()``
### keyReleased
```java
protected void keyReleased(int keyCode)
```
**Parameters:**
- `keyCode` - 해제된 키에 대한 키 코드
### pointerPressed
```java
protected void pointerPressed(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 누른 수직
위치(`Canvas`에 상대적)
### pointerReleased
```java
protected void pointerReleased(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 놓은 수직
위치(`Canvas`에 상대적)
### pointerDragged
```java
protected void pointerDragged(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 끈 수직
위치(`Canvas`에 상대적)
### repaint
```java
public final void repaint(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 다시 그릴 직사각형의 높이
**See Also:**
- ``Display.callSerially(Runnable)``,
``serviceRepaints()``
### repaint
```java
public final void repaint()
```
전체 Canvas 에 대해 다시 그리기를 요청합니다.
결과는 다음과 같습니다. repaint(0, 0, getWidth(), getHeight());
### serviceRepaints
```java
public final void serviceRepaints()
```
**See Also:**
- ``Display.callSerially(Runnable)``
### showNotify
```java
protected void showNotify()
```
구현 시 Canvas 가
디스플레이에 표시되기 전에 바로 showNotify() 를 호출합니다.
Canvas 서브 클래스는 애니메이션 설정,
타이머 시작 등이 표시되기 전에
작업을 수행하기 위해 이 메소드를 무시할 수 있습니다. Canvas 클래스에 있는 이 메소드의
기본 구현은 비어 있습니다.
### hideNotify
```java
protected void hideNotify()
```
구현 시 Canvas 가
디스플레이에서 제거된 다음
바로 hideNotify() 를 호출합니다. Canvas 서브 클래스는 애니메이션 일시 중지,
타이머 해지 등의 작업을 수행하기 위해
이 메소드를 무시할 수 있습니다. Canvas 클래스에서
이 메소드의 기본 구현은 비어 있습니다.
### paint
```java
protected abstract void paint(Graphics g)
```
**Parameters:**
- `g` - `Canvas` 렌더링에 사용된 `Graphics`
객체
### sizeChanged
```java
protected void sizeChanged(int w,
int h)
```
**Overrides:**
- `sizeChanged` in class `Displayable`
**Parameters:**
- `h` - `Canvas` 그리기 가능
영역의 새 높이(픽셀 단위)
**Since:**
- MIDP 2.0
## 메서드 상세
### getWidth
```java
public int getWidth()
```
**Overrides:**
- `getWidth` in class `Displayable`
**Returns:**
- 디스플레이 가능 영역의 너비
### getHeight
```java
public int getHeight()
```
**Overrides:**
- `getHeight` in class `Displayable`
**Returns:**
- 디스플레이 가능 영역의 높이
### isDoubleBuffered
```java
public boolean isDoubleBuffered()
```
**Returns:**
- 이중 버퍼된 경우 `true`,
그렇지 않으면 `false`입니다.
### hasPointerEvents
```java
public boolean hasPointerEvents()
```
**Returns:**
- 장치에서 포인터 이벤트를 지원하는 경우 `true`입니다.
### hasPointerMotionEvents
```java
public boolean hasPointerMotionEvents()
```
**Returns:**
- 장치에서 포인터 모션 이벤트를 지원하는 경우 `true`입니다.
### hasRepeatEvents
```java
public boolean hasRepeatEvents()
```
**Returns:**
- 장치에서 반복 이벤트를 지원하는 경우 `true`입니다.
### getKeyCode
```java
public int getKeyCode(int gameAction)
```
**Parameters:**
- `gameAction` - 게임 작업
**Returns:**
- 이 게임 작업에 해당하는 키 코드
**Throws:**
- `IllegalArgumentException` - `gameAction`이
유효한 게임 작업이 아닌 경우
### getKeyName
```java
public String getKeyName(int keyCode)
```
**Parameters:**
- `keyCode` - 요청된 키 코드
**Returns:**
- 키의 문자열 이름
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### getGameAction
```java
public int getGameAction(int keyCode)
```
**Parameters:**
- `keyCode` - 키 코드
**Returns:**
- 이 키에 해당하는 게임 작업, 또는 해당 게임 작업이 없는 경우
`0`
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### setFullScreenMode
```java
public void setFullScreenMode(boolean mode)
```
**Parameters:**
- `mode` - `Canvas`가 전체 화면 모드에 있으면
`true`, 그렇지 않은 경우 `false`
**Since:**
- MIDP 2.0
### keyPressed
```java
protected void keyPressed(int keyCode)
```
**Parameters:**
- `keyCode` - 누른 키에 대한 키 코드
### keyRepeated
```java
protected void keyRepeated(int keyCode)
```
**Parameters:**
- `keyCode` - 반복된 키에 대한 키 코드
**See Also:**
- ``hasRepeatEvents()``
### keyReleased
```java
protected void keyReleased(int keyCode)
```
**Parameters:**
- `keyCode` - 해제된 키에 대한 키 코드
### pointerPressed
```java
protected void pointerPressed(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 누른 수직
위치(`Canvas`에 상대적)
### pointerReleased
```java
protected void pointerReleased(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 놓은 수직
위치(`Canvas`에 상대적)
### pointerDragged
```java
protected void pointerDragged(int x,
int y)
```
**Parameters:**
- `y` - 포인터를 끈 수직
위치(`Canvas`에 상대적)
### repaint
```java
public final void repaint(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 다시 그릴 직사각형의 높이
**See Also:**
- ``Display.callSerially(Runnable)``,
``serviceRepaints()``
### repaint
```java
public final void repaint()
```
전체 Canvas 에 대해 다시 그리기를 요청합니다.
결과는 다음과 같습니다. repaint(0, 0, getWidth(), getHeight());
### serviceRepaints
```java
public final void serviceRepaints()
```
**See Also:**
- ``Display.callSerially(Runnable)``
### showNotify
```java
protected void showNotify()
```
구현 시 Canvas 가
디스플레이에 표시되기 전에 바로 showNotify() 를 호출합니다.
Canvas 서브 클래스는 애니메이션 설정,
타이머 시작 등이 표시되기 전에
작업을 수행하기 위해 이 메소드를 무시할 수 있습니다. Canvas 클래스에 있는 이 메소드의
기본 구현은 비어 있습니다.
### hideNotify
```java
protected void hideNotify()
```
구현 시 Canvas 가
디스플레이에서 제거된 다음
바로 hideNotify() 를 호출합니다. Canvas 서브 클래스는 애니메이션 일시 중지,
타이머 해지 등의 작업을 수행하기 위해
이 메소드를 무시할 수 있습니다. Canvas 클래스에서
이 메소드의 기본 구현은 비어 있습니다.
### paint
```java
protected abstract void paint(Graphics g)
```
**Parameters:**
- `g` - `Canvas` 렌더링에 사용된 `Graphics`
객체
### sizeChanged
```java
protected void sizeChanged(int w,
int h)
```
**Overrides:**
- `sizeChanged` in class `Displayable`
**Parameters:**
- `h` - `Canvas` 그리기 가능
영역의 새 높이(픽셀 단위)
**Since:**
- MIDP 2.0
---
title: "Interface Choice"
---
`package javax.microedition.lcdui`
```text
ch.set(k, ch.getString(k), ch.getImage(k));
```
## 필드 요약
- `static int EXCLUSIVE` — EXCLUSIVE 는 한 번에 정확히 한 요소만 선택하는 선택 방법입니다.
- `static int IMPLICIT` — IMPLICIT 는 `Command` 가 시작될 때 현재 포커스된 요소를 선택하는 선택 방법입니다.
- `static int MULTIPLE` — MULTIPLE 은 한 번에 여러 요소를 선택할 수 있는 선택 방법입니다.
- `static int POPUP` — POPUP 은 한 번에 정확히 한 요소만 선택하는 선택 방법입니다.
- `static int TEXT_WRAP_DEFAULT` — 응용 프로그램에 텍스트 요소 내용의 줄바꿈이나 자르기에 관한 기본 설정이 없으며 구현 시 기본 동작을 사용해야 함을 나타내는 상수입니다.
- `static int TEXT_WRAP_OFF` — 텍스트 요소 내용이 한 줄로 제한되어야 함을 알리는 상수입니다.
- `static int TEXT_WRAP_ON` — 사용 가능한 내용 공간에 맞추기 위해 필요한 경우 텍스트 요소 내용이 여러 줄에 줄바꿈되어야 함을 알리는 상수입니다.
## 메서드 요약
- `int append ( String stringPart, Image imagePart)` — 요소를 Choice 에 추가합니다.
- `void delete (int elementNum)` — elementNum 에서 참조하는 요소를 삭제합니다.
- `void deleteAll ()` — Choice 에서 요소를 남기지 않고 모든 요소를 삭제합니다.
- `int getFitPolicy ()` — Choice 요소 내용을 사용 가능한 화면 크기에 맞추기 위한 응용 프로그램의 권장 정책을 가져옵니다.
- `Font getFont (int elementNum)` — 이 Choice 의 지정된 요소를 렌더링하기 위한 응용 프로그램의 기본 글꼴을 가져옵니다.
- `Image getImage (int elementNum)` — elementNum 에서 참조하는 요소의 Image 부분을 가져옵니다.
- `int getSelectedFlags (boolean[] selectedArray_return)` — Choice 의 상태를 쿼리하여 부울 배열 selectedArray_return 에 있는 모든 요소의 상태를 반환합니다.
- `int getSelectedIndex ()` — 선택된 Choice 요소의 색인 번호를 반환합니다.
- `String getString (int elementNum)` — elementNum 에서 참조하는 요소의 String 부분을 가져옵니다.
- `void insert (int elementNum, String stringPart, Image imagePart)` — Choice 에서 지정한 요소 바로 앞에 요소를 삽입합니다.
- `boolean isSelected (int elementNum)` — 이 요소의 선택 여부를 나타내는 부울 값을 가져옵니다.
- `void set (int elementNum, String stringPart, Image imagePart)` — 요소의 이전 내용을 바꿔 elementNum 에서 참조하는 요소의 String 및 Image 부분을 설정합니다.
- `void setFitPolicy (int fitPolicy)` — Choice 요소 내용을 사용 가능한 화면 크기에 맞추기 위한 응용 프로그램의 기본 정책을 설정합니다.
- `void setFont (int elementNum, Font font)` — 이 Choice 의 지정된 요소를 렌더링하기 위한 응용 프로그램의 기본 글꼴을 설정합니다.
- `void setSelectedFlags (boolean[] selectedArray)` — Choice 의 모든 요소를 선택된 상태로 설정하려고 합니다.
- `void setSelectedIndex (int elementNum, boolean selected)` — MULTIPLE 의 경우 단순히 개별 요소의 선택된 상태를 설정합니다.
- `int size ()` — 현재 있는 요소의 수를 가져옵니다.
## 필드 상세
### EXCLUSIVE
```java
public static final int EXCLUSIVE
```
**See Also:**
- `Constant Field Values`
### MULTIPLE
```java
public static final int MULTIPLE
```
**See Also:**
- `Constant Field Values`
### IMPLICIT
```java
public static final int IMPLICIT
```
**See Also:**
- `Constant Field Values`
### POPUP
```java
public static final int POPUP
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### TEXT_WRAP_DEFAULT
```java
public static final int TEXT_WRAP_DEFAULT
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``,
``setFitPolicy(int)``,
`Constant Field Values`
### TEXT_WRAP_ON
```java
public static final int TEXT_WRAP_ON
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``,
``setFitPolicy(int)``,
`Constant Field Values`
### TEXT_WRAP_OFF
```java
public static final int TEXT_WRAP_OFF
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``,
``setFitPolicy(int)``,
`Constant Field Values`
### size
```java
public int size()
```
**Returns:**
- `Choice`에 있는 요소의 수
### getString
```java
public String getString(int elementNum)
```
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 문자열 부분
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getImage(int)``
### getImage
```java
public Image getImage(int elementNum)
```
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 이미지 부분,
또는 이미지가 없는 경우 `null`
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getString(int)``
### append
```java
public int append(String stringPart,
Image imagePart)
```
**Parameters:**
- `imagePart` - 추가되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우
`null`
**Returns:**
- 요소의 할당된 색인
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### insert
```java
public void insert(int elementNum,
String stringPart,
Image imagePart)
```
**Parameters:**
- `imagePart` - 삽입되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### delete
```java
public void delete(int elementNum)
```
**Parameters:**
- `elementNum` - 삭제되는 요소 색인
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Since:**
- MIDP 2.0
### set
```java
public void set(int elementNum,
String stringPart,
Image imagePart)
```
**Parameters:**
- `imagePart` - 요소의 이미지 부분 또는
이미지 부분이 없는 경우
`null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### isSelected
```java
public boolean isSelected(int elementNum)
```
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 선택 상태
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Returns:**
- 선택한 요소의 색인 또는 색인이 없는 경우 `-1`
**See Also:**
- ``setSelectedIndex(int, boolean)``
### getSelectedFlags
```java
public int getSelectedFlags(boolean[] selectedArray_return)
```
**Parameters:**
- `selectedArray_return` - 결과를 포함할 배열
**Returns:**
- `Choice`에 선택된 요소의 수
**Throws:**
- `NullPointerException` - `selectedArray_return`이
`null`인 경우
**See Also:**
- ``setSelectedFlags(boolean[])``
### setSelectedIndex
```java
public void setSelectedIndex(int elementNum,
boolean selected)
```
**Parameters:**
- `selected` - 요소의 상태이며 `true`는 선택했음을,
`false`는 선택하지 않았음을 의미합니다.
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getSelectedIndex()``
### setSelectedFlags
```java
public void setSelectedFlags(boolean[] selectedArray)
```
**Parameters:**
- `selectedArray` - 메소드가
선택 상태를 수집하는 배열
**Throws:**
- `NullPointerException` - `selectedArray`가
`null`인 경우
**See Also:**
- ``getSelectedFlags(boolean[])``
### setFitPolicy
```java
public void setFitPolicy(int fitPolicy)
```
**Parameters:**
- `fitPolicy` - 선택 사항 요소의 기본 내용 맞춤 정책
**Throws:**
- `IllegalArgumentException` - `fitPolicy`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``
### getFitPolicy
```java
public int getFitPolicy()
```
**Returns:**
- ``TEXT_WRAP_DEFAULT``,
``TEXT_WRAP_ON`` 또는 ``TEXT_WRAP_OFF`` 중의 하나
**Since:**
- MIDP 2.0
**See Also:**
- ``setFitPolicy(int)``
### setFont
```java
public void setFont(int elementNum,
Font font)
```
**Parameters:**
- `font` - 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int)``
### getFont
```java
public Font getFont(int elementNum)
```
**Parameters:**
- `elementNum` - 0부터 시작하는 요소의 색인
**Returns:**
- 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(int, javax.microedition.lcdui.Font)``
## 메서드 상세
### size
```java
public int size()
```
**Returns:**
- `Choice`에 있는 요소의 수
### getString
```java
public String getString(int elementNum)
```
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 문자열 부분
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getImage(int)``
### getImage
```java
public Image getImage(int elementNum)
```
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 이미지 부분,
또는 이미지가 없는 경우 `null`
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getString(int)``
### append
```java
public int append(String stringPart,
Image imagePart)
```
**Parameters:**
- `imagePart` - 추가되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우
`null`
**Returns:**
- 요소의 할당된 색인
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### insert
```java
public void insert(int elementNum,
String stringPart,
Image imagePart)
```
**Parameters:**
- `imagePart` - 삽입되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### delete
```java
public void delete(int elementNum)
```
**Parameters:**
- `elementNum` - 삭제되는 요소 색인
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Since:**
- MIDP 2.0
### set
```java
public void set(int elementNum,
String stringPart,
Image imagePart)
```
**Parameters:**
- `imagePart` - 요소의 이미지 부분 또는
이미지 부분이 없는 경우
`null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### isSelected
```java
public boolean isSelected(int elementNum)
```
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 선택 상태
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Returns:**
- 선택한 요소의 색인 또는 색인이 없는 경우 `-1`
**See Also:**
- ``setSelectedIndex(int, boolean)``
### getSelectedFlags
```java
public int getSelectedFlags(boolean[] selectedArray_return)
```
**Parameters:**
- `selectedArray_return` - 결과를 포함할 배열
**Returns:**
- `Choice`에 선택된 요소의 수
**Throws:**
- `NullPointerException` - `selectedArray_return`이
`null`인 경우
**See Also:**
- ``setSelectedFlags(boolean[])``
### setSelectedIndex
```java
public void setSelectedIndex(int elementNum,
boolean selected)
```
**Parameters:**
- `selected` - 요소의 상태이며 `true`는 선택했음을,
`false`는 선택하지 않았음을 의미합니다.
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getSelectedIndex()``
### setSelectedFlags
```java
public void setSelectedFlags(boolean[] selectedArray)
```
**Parameters:**
- `selectedArray` - 메소드가
선택 상태를 수집하는 배열
**Throws:**
- `NullPointerException` - `selectedArray`가
`null`인 경우
**See Also:**
- ``getSelectedFlags(boolean[])``
### setFitPolicy
```java
public void setFitPolicy(int fitPolicy)
```
**Parameters:**
- `fitPolicy` - 선택 사항 요소의 기본 내용 맞춤 정책
**Throws:**
- `IllegalArgumentException` - `fitPolicy`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``
### getFitPolicy
```java
public int getFitPolicy()
```
**Returns:**
- ``TEXT_WRAP_DEFAULT``,
``TEXT_WRAP_ON`` 또는 ``TEXT_WRAP_OFF`` 중의 하나
**Since:**
- MIDP 2.0
**See Also:**
- ``setFitPolicy(int)``
### setFont
```java
public void setFont(int elementNum,
Font font)
```
**Parameters:**
- `font` - 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int)``
### getFont
```java
public Font getFont(int elementNum)
```
**Parameters:**
- `elementNum` - 0부터 시작하는 요소의 색인
**Returns:**
- 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(int, javax.microedition.lcdui.Font)``
---
title: "Class ChoiceGroup"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.ChoiceGroup
```
## 설명
**All Implemented Interfaces:**
- `Choice`
**implements Choice:**
`ChoiceGroup`은 ``Form`` 내에
놓을 선택 가능한 요소 그룹입니다.
이 그룹은 단일 선택을 만들 필요가 있거나
다중 선택이 가능한 모드에서 만들어질 수 있습니다.
구현 시에는 이러한 모드의 그래픽 표현을 제공해야 하며
여러 모드에 대한 여러 그래픽을 시각적으로 제공해야 합니다.
예를 들어, 단일 선택 모드에 대해서는 "라디오 버튼"을,
다중 선택 모드에 대해서는 "확인란"을
사용할 수 있습니다.
**주:** 대부분의 필수 메소드는
``Choice`` 인터페이스에 지정되어 있습니다.
**Since:**
- MIDP 1.0
## 필드 요약
## 생성자 요약
- ChoiceGroup ( String label,
int choiceType) 새로운 빈 ChoiceGroup 을 만들고 제목과 유형을 지정합니다.
- ChoiceGroup ( String label,
int choiceType, String [] stringElements, Image [] imageElements) 새 ChoiceGroup 을 만들어 제목, ChoiceGroup 의 유형 및
초기 내용으로 사용될 Strings 와 Images 의
배열을 지정합니다.
## 메서드 요약
- `int append ( String stringPart, Image imagePart)` — 요소를 ChoiceGroup 에 추가합니다.
- `void delete (int elementNum)` — elementNum 에서 참조하는 요소를 삭제합니다.
- `void deleteAll ()` — 이 ChoiceGroup 에서 요소를 모두 삭제합니다.
- `int getFitPolicy ()` — Choice 요소 내용을 사용 가능한 화면 크기에 맞추기 위한 응용 프로그램의 권장 정책을 가져옵니다.
- `Font getFont (int elementNum)` — 이 Choice 의 지정된 요소를 렌더링하기 위한 응용 프로그램의 기본 글꼴을 가져옵니다.
- `Image getImage (int elementNum)` — elementNum 에서 참조하는 요소의 Image 부분을 가져옵니다.
- `int getSelectedFlags (boolean[] selectedArray_return)` — ChoiceGroup 의 상태를 쿼리하여 부울 배열 selectedArray_return 에 있는 모든 요소의 상태를 반환합니다.
- `int getSelectedIndex ()` — 선택된 ChoiceGroup 에서 요소의 색인 번호를 반환합니다.
- `String getString (int elementNum)` — elementNum 에서 참조하는 요소의 String 부분을 가져옵니다.
- `void insert (int elementNum, String stringPart, Image imagePart)` — ChoiceGroup 에 지정된 요소 바로 앞에 요소를 삽입합니다.
- `boolean isSelected (int elementNum)` — 이 요소의 선택 여부를 나타내는 부울 값을 가져옵니다.
- `void set (int elementNum, String stringPart, Image imagePart)` — 요소의 이전 내용을 바꿔 elementNum 에서 참조하는 요소의 String 및 Image 부분을 설정합니다.
- `void setFitPolicy (int fitPolicy)` — Choice 요소 내용을 사용 가능한 화면 크기에 맞추기 위한 응용 프로그램의 기본 정책을 설정합니다.
- `void setFont (int elementNum, Font font)` — 이 Choice 의 지정된 요소를 렌더링하기 위한 응용 프로그램의 기본 글꼴을 설정합니다.
- `void setSelectedFlags (boolean[] selectedArray)` — ChoiceGroup 의 모든 요소를 선택된 상태로 설정하려고 합니다.
- `void setSelectedIndex (int elementNum, boolean selected)` — MULTIPLE 유형의 ChoiceGroup 객체의 경우 단순히 개별 요소의 선택된 상태를 설정합니다.
- `int size ()` — ChoiceGroup 에 있는 요소의 수를 반환합니다.
## 생성자 상세
### ChoiceGroup
```java
public ChoiceGroup(String label,
int choiceType)
```
- 새로운 빈 `ChoiceGroup`을 만들고 제목과 유형을 지정합니다.
유형은 `EXCLUSIVE`, `MULTIPLE`,
`POPUP` 중 하나여야 합니다.
`IMPLICIT` 선택 유형은
`ChoiceGroup` 내에서는
허용되지 않습니다.
**Parameters:**
- `choiceType` - `EXCLUSIVE`, `MULTIPLE`
또는 `POPUP`
**Throws:**
- `IllegalArgumentException` - `choiceType`이
`EXCLUSIVE`, `MULTIPLE`, `POPUP` 중 하나가 아닌 경우
**See Also:**
- ``Choice.EXCLUSIVE``,
``Choice.MULTIPLE``,
``Choice.IMPLICIT``,
``Choice.POPUP``
### ChoiceGroup
```java
public ChoiceGroup(String label,
int choiceType,
String[] stringElements,
Image[] imageElements)
```
- 새 `ChoiceGroup`을 만들어 제목,
`ChoiceGroup`의 유형 및
초기 내용으로 사용될
`Strings`와 `Images`의
배열을 지정합니다.
유형은 `EXCLUSIVE`, `MULTIPLE`,
`POPUP` 중 하나여야 합니다.
`IMPLICIT` 유형은 `ChoiceGroup`에는
허용되지 않습니다.
`stringElements` 배열은
null이 아니어야 하며 모든 배열 요소도 null이 아니어야 합니다.
`stringElements` 배열의
길이는 `ChoiceGroup`에
있는 요소 수를 결정합니다.
`imageElements` 배열은
`ChoiceGroup`
요소에 이미지가 없음을 나타내기 위해
`null`일 수 있습니다.
`imageElements` 배열이 null이 아닌 경우
`stringElements` 배열과
길이가 같아야 합니다.
`imageElements` 배열의 개별 요소는
해당 `ChoiceGroup` 요소의
이미지가 없음을 나타내기 위해
`null`일 수 있습니다. `imageElements`
배열의 null이 아닌 요소는 변경 가능하거나
변경 불가능한 이미지를
참조할 수 있습니다.
**Parameters:**
- `imageElements` - `ChoiceGroup` 요소의 이미지 부분을
지정하는 이미지 집합
**Throws:**
- `IllegalArgumentException` - `choiceType`이
`EXCLUSIVE`, `MULTIPLE`, `POPUP` 중 하나가 아닌 경우
**See Also:**
- ``Choice.EXCLUSIVE``,
``Choice.MULTIPLE``,
``Choice.IMPLICIT``,
``Choice.POPUP``
### size
```java
public int size()
```
**Specified by:**
- `size` in interface `Choice`
**Returns:**
- `ChoiceGroup`에 있는 요소의 수
### getString
```java
public String getString(int elementNum)
```
**Specified by:**
- `getString` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 문자열 부분
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getImage(int)``
### getImage
```java
public Image getImage(int elementNum)
```
**Specified by:**
- `getImage` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소의 수
**Returns:**
- 요소의 이미지 부분, 또는 이미지가 없는 경우 null
**Throws:**
- `IndexOutOfBoundsException` - elementNum이 유효하지 않은 경우
**See Also:**
- ``getString(int)``
### append
```java
public int append(String stringPart,
Image imagePart)
```
**Specified by:**
- `append` in interface `Choice`
**Parameters:**
- `imagePart` - 추가되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Returns:**
- 요소의 할당된 색인
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### insert
```java
public void insert(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `insert` in interface `Choice`
**Parameters:**
- `imagePart` - 삽입되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### delete
```java
public void delete(int elementNum)
```
**Specified by:**
- `delete` in interface `Choice`
**Parameters:**
- `elementNum` - 삭제되는 요소 색인
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Specified by:**
- `deleteAll` in interface `Choice`
### set
```java
public void set(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `set` in interface `Choice`
**Parameters:**
- `imagePart` - 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### isSelected
```java
public boolean isSelected(int elementNum)
```
**Specified by:**
- `isSelected` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 선택 상태
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Specified by:**
- `getSelectedIndex` in interface `Choice`
**Returns:**
- 선택한 요소의 색인 또는 색인이 없는 경우 `-1`
**See Also:**
- ``setSelectedIndex(int, boolean)``
### getSelectedFlags
```java
public int getSelectedFlags(boolean[] selectedArray_return)
```
**Specified by:**
- `getSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray_return` - 결과를 포함할 배열
**Returns:**
- `ChoiceGroup`에 선택된 요소의 수
**Throws:**
- `NullPointerException` - `selectedArray_return`이
null인 경우
**See Also:**
- ``setSelectedFlags(boolean[])``
### setSelectedIndex
```java
public void setSelectedIndex(int elementNum,
boolean selected)
```
**Specified by:**
- `setSelectedIndex` in interface `Choice`
**Parameters:**
- `selected` - 요소의 새 상태, `true=selected`,
`false=not` selected
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getSelectedIndex()``
### setSelectedFlags
```java
public void setSelectedFlags(boolean[] selectedArray)
```
**Specified by:**
- `setSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray` - 메소드가 선택 상태를
수집하는 배열
**Throws:**
- `NullPointerException` - `selectedArray`가
`null`인 경우
**See Also:**
- ``getSelectedFlags(boolean[])``
### setFitPolicy
```java
public void setFitPolicy(int fitPolicy)
```
**Specified by:**
- `setFitPolicy` in interface `Choice`
**Parameters:**
- `fitPolicy` - 선택 사항 요소의 기본 내용 맞춤 정책
**Throws:**
- `IllegalArgumentException` - `fitPolicy`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``
### getFitPolicy
```java
public int getFitPolicy()
```
**Specified by:**
- `getFitPolicy` in interface `Choice`
**Returns:**
- ``Choice.TEXT_WRAP_DEFAULT``, ``Choice.TEXT_WRAP_ON``
또는 ``Choice.TEXT_WRAP_OFF`` 중의 하나
**Since:**
- MIDP 2.0
**See Also:**
- ``setFitPolicy(int)``
### setFont
```java
public void setFont(int elementNum,
Font font)
```
**Specified by:**
- `setFont` in interface `Choice`
**Parameters:**
- `font` - 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int)``
### getFont
```java
public Font getFont(int elementNum)
```
**Specified by:**
- `getFont` in interface `Choice`
**Parameters:**
- `elementNum` - 0부터 시작하는 요소의 색인
**Returns:**
- 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(int elementNum, Font font)``
## 메서드 상세
### size
```java
public int size()
```
**Specified by:**
- `size` in interface `Choice`
**Returns:**
- `ChoiceGroup`에 있는 요소의 수
### getString
```java
public String getString(int elementNum)
```
**Specified by:**
- `getString` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 문자열 부분
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getImage(int)``
### getImage
```java
public Image getImage(int elementNum)
```
**Specified by:**
- `getImage` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소의 수
**Returns:**
- 요소의 이미지 부분, 또는 이미지가 없는 경우 null
**Throws:**
- `IndexOutOfBoundsException` - elementNum이 유효하지 않은 경우
**See Also:**
- ``getString(int)``
### append
```java
public int append(String stringPart,
Image imagePart)
```
**Specified by:**
- `append` in interface `Choice`
**Parameters:**
- `imagePart` - 추가되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Returns:**
- 요소의 할당된 색인
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### insert
```java
public void insert(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `insert` in interface `Choice`
**Parameters:**
- `imagePart` - 삽입되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### delete
```java
public void delete(int elementNum)
```
**Specified by:**
- `delete` in interface `Choice`
**Parameters:**
- `elementNum` - 삭제되는 요소 색인
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Specified by:**
- `deleteAll` in interface `Choice`
### set
```java
public void set(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `set` in interface `Choice`
**Parameters:**
- `imagePart` - 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### isSelected
```java
public boolean isSelected(int elementNum)
```
**Specified by:**
- `isSelected` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 선택 상태
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Specified by:**
- `getSelectedIndex` in interface `Choice`
**Returns:**
- 선택한 요소의 색인 또는 색인이 없는 경우 `-1`
**See Also:**
- ``setSelectedIndex(int, boolean)``
### getSelectedFlags
```java
public int getSelectedFlags(boolean[] selectedArray_return)
```
**Specified by:**
- `getSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray_return` - 결과를 포함할 배열
**Returns:**
- `ChoiceGroup`에 선택된 요소의 수
**Throws:**
- `NullPointerException` - `selectedArray_return`이
null인 경우
**See Also:**
- ``setSelectedFlags(boolean[])``
### setSelectedIndex
```java
public void setSelectedIndex(int elementNum,
boolean selected)
```
**Specified by:**
- `setSelectedIndex` in interface `Choice`
**Parameters:**
- `selected` - 요소의 새 상태, `true=selected`,
`false=not` selected
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getSelectedIndex()``
### setSelectedFlags
```java
public void setSelectedFlags(boolean[] selectedArray)
```
**Specified by:**
- `setSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray` - 메소드가 선택 상태를
수집하는 배열
**Throws:**
- `NullPointerException` - `selectedArray`가
`null`인 경우
**See Also:**
- ``getSelectedFlags(boolean[])``
### setFitPolicy
```java
public void setFitPolicy(int fitPolicy)
```
**Specified by:**
- `setFitPolicy` in interface `Choice`
**Parameters:**
- `fitPolicy` - 선택 사항 요소의 기본 내용 맞춤 정책
**Throws:**
- `IllegalArgumentException` - `fitPolicy`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``
### getFitPolicy
```java
public int getFitPolicy()
```
**Specified by:**
- `getFitPolicy` in interface `Choice`
**Returns:**
- ``Choice.TEXT_WRAP_DEFAULT``, ``Choice.TEXT_WRAP_ON``
또는 ``Choice.TEXT_WRAP_OFF`` 중의 하나
**Since:**
- MIDP 2.0
**See Also:**
- ``setFitPolicy(int)``
### setFont
```java
public void setFont(int elementNum,
Font font)
```
**Specified by:**
- `setFont` in interface `Choice`
**Parameters:**
- `font` - 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int)``
### getFont
```java
public Font getFont(int elementNum)
```
**Specified by:**
- `getFont` in interface `Choice`
**Parameters:**
- `elementNum` - 0부터 시작하는 요소의 색인
**Returns:**
- 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(int elementNum, Font font)``
---
title: "Class Command"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Command
```
## 설명
**extends Object:**
`Command` 클래스는
작업의 의미 정보를 캡슐화하는 구조입니다.
명령을 활성화하는 동작은
이 객체에서 캡슐화되지 않습니다.
이는 명령에는 명령이 활성화될 때 발생하는
실제 작업이 아닌 "명령"에 대한
정보만 포함된다는 의미입니다.
이 작업은 `Displayable`과 연관된
``CommandListener``에 정의됩니다.
`Command` 객체는
사용자 인터페이스에 *표시되며*
이들이 표시되는 방식은
명령 안에 포함된 의미
정보에 따라 달라질 수 있습니다.
`Command`는 단일 작업을 활성화하는
의미를 갖는 사용자 인터페이스 구조에 구현될 수 있습니다.
이는 소프트 버튼, 메뉴의 항목 또는 몇 가지 다른 직접 사용자 인터페이스
구조일 수 있습니다.
예를 들어, 음성 인터페이스는
이러한 명령을 음성 태그로 제시할 것입니다.
구체적인 사용자 인터페이스 구조에 대한 매핑은
전체 명령 수에 따라서도 달라질 수 있습니다.
예를 들어, 장치에서 사용 가능한
물리적 버튼에 매핑하는 것보다
더 추상적인 명령을 응용 프로그램에서 요구하는 경우 장치는
메뉴 같은 대체 사용자 인터페이스를 사용할 수 있습니다.
그 예로 물리적 버튼에 매핑할 수 없는
추상 명령은 메뉴에 놓이며 레이블 "메뉴"는 프로그래밍
가능한 버튼 중 하나에 매핑됩니다.
하나의 명령에는 *짧은 레이블*,
선택적 *긴 레이블*, *유형*,
*우선 순위*의 네 가지 정보가 포함됩니다.
레이블 중 하나는 명령을
시각적으로 표현하는 데 사용되며
유형과 우선 순위는 명령의 의미를 나타냅니다.
### 레이블
각 명령에는 한두 개의 레이블 문자열이 포함됩니다.
레이블 문자열은 이 명령을 표현하기 위해 응용 프로그램이 사용자에게
표시하도록 요청하는 내용입니다.
예를 들어, 이러한 문자열 중 하나는 장치의 소프트 버튼 옆이나
메뉴의 한 요소로 표시됩니다. `SCREEN` 이외의 명령 유형의 경우
제공된 레이블은 이 장치의 이 명령에 더 적합한 시스템별 레이블에 의해
무시될 수 있습니다. 그렇지 않은 경우 레이블 문자열의 내용은
구현 시 해석되지 않습니다.
모든 명령에는 짧은 레이블이 있습니다. 긴 레이블은 선택 사항입니다.
긴 레이블이 명령에 없는 경우 항상 짧은 레이블이 사용됩니다.
짧은 레이블 문자열은 화면 면적을 최소로 차지하도록
가능한 한 짧아야 합니다. 긴 레이블은
더 길고 설명이 보다 자세하지만
몇 단어를 초과하면 안 됩니다.
예를 들어, 명령의 짧은 레이블은 "Play"이고
긴 레이블은 "Play Sound Clip"일 수 있습니다.
구현 시 컨텍스트와 사용 가능한 공간을 기반으로
사용자 인터페이스에 제시할 레이블 중 하나를 선택합니다.
예를 들어, 명령이 소프트 버튼에 표시되면 구현 시 짧은 레이블을 사용하며,
명령이 메뉴에 표시되고 해당 메뉴에 긴 레이블을 표시할 공간이 있는 경우에만
긴 레이블을 사용합니다.
구현 시 일부 명령의 짧은 레이블과 다른 명령의 긴 레이블을
사용할 수 있으며 짧은 레이블과 긴 레이블의 사용을 마음대로
전환할 수 있습니다. 응용 프로그램은 특정 시간에
사용될 레이블을 결정할 수 없습니다.
### 유형
응용 프로그램은 해당 명령 유형을 사용하여
이 명령의 의도를 지정합니다.
예를 들어, 응용 프로그램에서 명령의 유형을
`BACK`으로 지정하고 특정 소프트 버튼에
"뒤로" 작업을 둘 수 있는 표준이 장치에 있으면
구현 시 의미 정보를 가이드로 사용하여
장치의 스타일을 따를 수 있습니다.
정의된 유형은
``BACK``,
``CANCEL``,
``EXIT``,
``HELP``,
``ITEM``,
``OK``,
``SCREEN``
및
``STOP``입니다.
### 우선 순위
응용 프로그램은 우선 순위 값을 사용하여
같은 화면의 다른 명령과 관련하여 이 명령의 중요성을 설명합니다.
우선 순위 값은 정수이며 낮은 숫자는 더 큰 중요성을 나타냅니다.
실제 값은 응용 프로그램에서 선택합니다.
우선 순위 값 1은 가장 중요한 명령을 나타내며
우선 순위 값 2, 3, 4 등은
덜 중요한 명령을 나타냅니다.
일반적으로 구현 시 먼저 명령 유형에 따라 명령 위치를 선택한 다음
우선 순위에 따라 유사한 명령을 놓습니다.
이는 가장 높은 우선 순위를 갖는 명령은
사용자가 직접 트리거할 수 있도록
놓이며 낮은 순위를 갖는 명령은 메뉴에 놓인다는 것을 의미합니다.
같은 화면에 같은 우선 순위와 유형을 가진
명령이 있는 것은 오류가 아닙니다.
이 경우 구현 시 명령의 표시 순서를 선택합니다.
예를 들어, 응용 프로그램에 다음 명령이 있는 경우
new Command("Buy", Command.ITEM, 1);
new Command("Info", Command.ITEM, 1);
new Command("Back", Command.BACK, 1);
두 개의 소프트 버튼이 있는 구현은
`BACK` 명령을
오른쪽 소프트 버튼에 매핑한 다음
다른 명령을 포함할 수 있도록
왼쪽 소프트 버튼에 "옵션"
메뉴를 만듭니다.
사용자가 왼쪽 소프트 버튼을 누르면
나머지 두 개의 `Command`가 있는 메뉴가 다음과 같이 표시됩니다.
응용 프로그램에 세 개의 소프트 버튼이 있는 경우
다음과 같이 모든 명령을 소프트 버튼에 매핑할 수 있습니다.
응용 프로그램은 항상 사용자에게 다양한 화면을 통해
진행할 수 있는 수단을 제공해야 합니다.
응용 프로그램에서 아무런 명령이 없는 화면을 설정할 수도 있습니다.
이는 API에서 가능하지만 일반적으로 유용하지는 않습니다.
이러한 경우 사용자는 다른 화면으로 이동할 방법이 없습니다.
이러한 프로그램은 단순히 오류로 간주될 것입니다. 일반적인 장치는 사용자가 응용
프로그램 관리자에게 오류가 있는 응용 프로그램을 종료할 것을 지시할 수 있는 수단을 제공해야 합니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int BACK` — 논리적으로 이전 화면으로 사용자를 되돌리는 이동 명령.
- `static int CANCEL` — 현재 화면에서 구현하는 대화 상자에 대한 표준 부정 대답인 명령.
- `static int EXIT` — 응용 프로그램을 종료하기 위해 사용되는 명령.
- `static int HELP` — 이 명령은 온라인 도움말에 대한 요청을 지정합니다.
- `static int ITEM` — 응용 프로그램은 이 명령 유형을 사용하여 해당 명령이 Screen 의 항목이나 Choice 의 요소에 고유하다는 것을 구현에 알려줄 수 있습니다.
- `static int OK` — 현재 화면에 의해 구현되는 대화 상자에 대한 표준 긍정 대답인 명령.
- `static int SCREEN` — 현재 화면과 관련된 응용 프로그램 정의 명령을 지정합니다.
- `static int STOP` — 현재 실행 중인 일부 프로세스, 작업 등을 중지하는 명령입니다.
## 생성자 요약
- Command ( String label,
int commandType,
int priority) 지정된 짧은 레이블 , 유형 및 우선 순위 를 사용하여 새 명령 객체를 만듭니다.
- Command ( String shortLabel, String longLabel,
int commandType,
int priority) 지정된 레이블 , 유형 및 우선 순위 를 사용하여 새 명령 객체를 만듭니다.
## 메서드 요약
- `int getCommandType ()` — 명령의 유형을 가져옵니다.
- `String getLabel ()` — 명령의 짧은 레이블을 가져옵니다.
- `String getLongLabel ()` — 명령의 긴 레이블을 가져옵니다.
- `int getPriority ()` — 명령의 우선 순위를 가져옵니다.
## 필드 상세
### SCREEN
```java
public static final int SCREEN
```
**See Also:**
- `Constant Field Values`
### BACK
```java
public static final int BACK
```
**See Also:**
- ``CANCEL``,
``STOP``,
`Constant Field Values`
### CANCEL
```java
public static final int CANCEL
```
**See Also:**
- ``BACK``,
``STOP``,
`Constant Field Values`
### OK
```java
public static final int OK
```
**See Also:**
- ``CANCEL``,
`Constant Field Values`
### HELP
```java
public static final int HELP
```
**See Also:**
- `Constant Field Values`
### STOP
```java
public static final int STOP
```
**See Also:**
- ``BACK``,
``CANCEL``,
`Constant Field Values`
### EXIT
```java
public static final int EXIT
```
**See Also:**
- `Constant Field Values`
### ITEM
```java
public static final int ITEM
```
**See Also:**
- `Constant Field Values`
### Command
```java
public Command(String label,
int commandType,
int priority)
```
- 지정된 짧은
레이블,
유형 및
우선 순위를 사용하여 새 명령 객체를 만듭니다.
새로 만든 명령에는 긴 레이블이 없습니다. 이 구성자는 `Command(label, null, commandType, priority)`와
동일합니다.
**Parameters:**
- `priority` - 명령의 우선 순위 값
**Throws:**
- `IllegalArgumentException` - `commandType`이
유효하지 않은 유형인 경우
**See Also:**
- ``Command(String, String, int, int)``
### Command
```java
public Command(String shortLabel,
String longLabel,
int commandType,
int priority)
```
- 지정된
레이블,
유형 및
우선 순위를 사용하여 새 명령 객체를 만듭니다.
짧은 레이블은 필수이며 `null`이면 안 됩니다.
긴 레이블은 선택 사항이며
명령에 긴 레이블이 없는 경우
`null`일 수 있습니다.
**Parameters:**
- `priority` - 명령의 우선 순위 값
**Throws:**
- `IllegalArgumentException` - `commandType`이
유효하지 않은 유형인 경우
**Since:**
- MIDP 2.0
### getLabel
```java
public String getLabel()
```
**Returns:**
- `Command`의 짧은 레이블
### getLongLabel
```java
public String getLongLabel()
```
**Returns:**
- `Command`의 긴 레이블,
또는 `Command`에 긴 레이블이 없는 경우
`null`
**Since:**
- MIDP 2.0
### getCommandType
```java
public int getCommandType()
```
**Returns:**
- `Command`의 유형
### getPriority
```java
public int getPriority()
```
**Returns:**
- `Command`의 우선 순위
## 생성자 상세
### Command
```java
public Command(String label,
int commandType,
int priority)
```
- 지정된 짧은
레이블,
유형 및
우선 순위를 사용하여 새 명령 객체를 만듭니다.
새로 만든 명령에는 긴 레이블이 없습니다. 이 구성자는 `Command(label, null, commandType, priority)`와
동일합니다.
**Parameters:**
- `priority` - 명령의 우선 순위 값
**Throws:**
- `IllegalArgumentException` - `commandType`이
유효하지 않은 유형인 경우
**See Also:**
- ``Command(String, String, int, int)``
### Command
```java
public Command(String shortLabel,
String longLabel,
int commandType,
int priority)
```
- 지정된
레이블,
유형 및
우선 순위를 사용하여 새 명령 객체를 만듭니다.
짧은 레이블은 필수이며 `null`이면 안 됩니다.
긴 레이블은 선택 사항이며
명령에 긴 레이블이 없는 경우
`null`일 수 있습니다.
**Parameters:**
- `priority` - 명령의 우선 순위 값
**Throws:**
- `IllegalArgumentException` - `commandType`이
유효하지 않은 유형인 경우
**Since:**
- MIDP 2.0
### getLabel
```java
public String getLabel()
```
**Returns:**
- `Command`의 짧은 레이블
### getLongLabel
```java
public String getLongLabel()
```
**Returns:**
- `Command`의 긴 레이블,
또는 `Command`에 긴 레이블이 없는 경우
`null`
**Since:**
- MIDP 2.0
### getCommandType
```java
public int getCommandType()
```
**Returns:**
- `Command`의 유형
### getPriority
```java
public int getPriority()
```
**Returns:**
- `Command`의 우선 순위
## 메서드 상세
### getLabel
```java
public String getLabel()
```
**Returns:**
- `Command`의 짧은 레이블
### getLongLabel
```java
public String getLongLabel()
```
**Returns:**
- `Command`의 긴 레이블,
또는 `Command`에 긴 레이블이 없는 경우
`null`
**Since:**
- MIDP 2.0
### getCommandType
```java
public int getCommandType()
```
**Returns:**
- `Command`의 유형
### getPriority
```java
public int getPriority()
```
**Returns:**
- `Command`의 우선 순위
---
title: "Interface CommandListener"
---
`package javax.microedition.lcdui`
```text
public void commandAction(Command c,
Displayable d)
```
## 설명
**Parameters:**
- `d` - 이 이벤트가 발생한
`Displayable`
## 메서드 요약
- `void commandAction ( Command c, Displayable d)` — 명령 이벤트가 Displayable d 에 발생했음을 나타냅니다.
## 메서드 상세
### commandAction
```java
public void commandAction(Command c,
Displayable d)
```
**Parameters:**
- `d` - 이 이벤트가 발생한
`Displayable`
---
title: "Class CustomItem"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.CustomItem
```
## 설명
**extends Item:**
CustomItem은 새로운 시각적 요소 및 대화식 요소를
`Forms`에 도입하기 위해 클래스 세분화를 통해
사용자 정의할 수 있습니다. 서브 클래스는 크기 조정과 렌더링 및 색, 글꼴,
그래픽 선택을 비롯한 시각적 모양을 담당합니다.
서브 클래스는 키, 포인터 작업 및 순회 작업으로 생성된 이벤트에 응답하여
사용자 상호 작용 모드를 담당합니다.
마지막으로 서브 클래스는 `CustomItem` 값이 변경된
수신기의 알림을 트리거하기 위해 ``Item.notifyStateChanged()`` 호출을
담당합니다.
다른 `Item`과
마찬가지로 `CustomItem`에는
*최소* 및 *기본* 크기의 개념이 있습니다.
이는 내용, 레이블, 경계 등의
공간을 포함하는 `Item`의
전체 영역과 관련됩니다. `Item`의 영역 및 크기에 대한
자세한 내용은 `항목 크기`를 참조하십시오.
또한 `CustomItem` 서브 클래스에는
`CustomItem`의 컨텐트 영역 크기인 *내용*
크기의 개념이 있습니다. 컨텐트 영역은
`CustomItem`이
차지하는 전체 영역 내의 직사각형 영역입니다.
컨텐트 영역은 `CustomItem` 서브 클래스가
입력 이벤트를 그리고 수신하는 영역입니다.
여기에는 레이블과 경계에 사용되는 공간은 포함되어 있지 않습니다.
구현 시 컨텐트 영역을 벗어난 `Item`의 영역 내에서
입력 이벤트를 레이아웃하고 그리며 처리합니다.
구현과 `CustomItem`
서브 클래스 간에
전달된 모든 좌표는
`(0,0)`에 있는 이 영역의
왼쪽 위 모서리와 함께 항목의
컨텐트 영역에 상대적입니다.
``getMinContentHeight``,
``getMinContentWidth``,
``getPrefContentHeight``,
``getPrefContentWidth`` 및
``sizeChanged``
메소드를 사용하여 구현과
`CustomItem` 서브 클래스
사이에 전달된 크기 정보는 모두 컨텐트 영역의 크기를 참조합니다.
구현 시 항목 크기 메소드
``Item.getMinimumHeight``,
``Item.getMinimumWidth``,
``Item.getPreferredHeight`` 및
``Item.getPreferredWidth``에서 보고하는 대로 `Item`의 전체 영역 크기와 컨텐트 영역 크기 간의 차이를 계산하고 유지합니다.
구현 시 `CustomItem`에서 반환하는
크기 정보가 사용자 인터페이스 정책에 의해 부과된 제한을
초과하는 경우 무시합니다. 이 경우 구현 시에는
``sizeChanged``와
``paint`` 메소드를 통해 `CustomItem`에 부여된
실제 크기를 항상 보고해야 합니다.
예를 들어, 구현 시 `Item`이 화면보다 더 커지지 않도록 하는
경우에 이러한 상황이 발생할 수 있습니다.
`CustomItem` 서브 클래스 코드가
`CustomItem`을
화면보다 크게 만드는 `getMinContentWidth`에서 값을
반환하는 경우 구현 시 `getMinContentWidth`에서
반환된 최소 너비보다 더 좁은 너비를 할당할 수 있습니다.
구현 시 다른 `CustomItem` 메소드와
관련된 순서로 `CustomItem`의 내용 크기 메소드
``getMinContentHeight``,
``getMinContentWidth``,
``getPrefContentHeight`` 및
``getPrefContentWidth``를
호출할 수 있습니다.
이러한 모든 메소드에 대해 `CustomItem`
서브 클래스 코드는 현재 `CustomItem`의 내용과
일치하는 값을 반환해야 합니다.
내용이 변경되면 `CustomItem` 서브 클래스 코드가
단순히 내용 크기 메소드에서 다양한 값을 반환하기 시작하기에
충분하지 않습니다.
대신 내용이 변경될 때마다 서브 클래스 코드는
``invalidate`` 메소드를 호출해야 합니다.
이는 구현에 레이아웃 계산을 수행해야 할 수 있음을 알려 구현 시 `CustomItem`의 새 내용을 기반으로 새 값을 얻기 위한 내용 크기 메소드를 호출합니다.
`CustomItem` 클래스는 많은 항목에서
적당한 편집을 허용하지만 가능한 상호 작용을 모두 허용하지는 않습니다.
융통성에 대한 요구는 쉽게 마스터할 수 있는
단순한 API를 만드는 것에 대한
요구 사항과 상호 운용성을 저해하지 않으면서도
플랫폼별로 모양 및
색감의 변화를 허용할 필요성과 함께 균형을 이루고 있습니다.
일반적인 개념은 여러 상호 작용 "모드"가 있어
`Form` 구현 시 지원하는 내용을 전달할 수 있도록
하는 것입니다. 그런 다음 `CustomItem`에서
하나 이상의 상호 작용 모드를 지원하도록 선택할 수 있습니다.
`CustomItem`에서
모든 상호 작용 모드를 조합하여 구현할 때
필요한 요구 사항은 없습니다.
일반적으로 `CustomItem`은
특정 상호 작용 모드에 의존하는 고도의 대화식 접근 이외에도
모든 플랫폼에서 작동하는 접근 방법(예: 아래에 설명된 별도의
화면 편집 기술)을 구현합니다. 런타임 시 `CustomItem`
코드는 이 상호 작용 모드를 지원할 것인지 여부를 결정하기 위해
시스템에 쿼리할 수 있습니다.
지원하는 경우 `CustomItem`은 이
상호 작용 모드를 사용할 수 있으며 지원하지 않는 경우
모든 플랫폼에서 작동하는 방법으로 폴백합니다.
`CustomItem`은 항상 항목 명령을 사용하여
별도의 편집 화면을 호출할 수 있으며, 구분되는 상태 수가 적은
구성 요소는 상태를 변경한 다음
`notifyStateChanged` 알림을
발생시켜 간단히 응답할 수 있습니다.
별도의 편집 화면을 사용하기 위한 기술로는
다른 `Displayable` 객체(예: List)에 값을 로드한
다음 여기에서 ``Display.setCurrent(Displayable)``를 호출하는 것이
있습니다. 사용자가 이 값의 편집이
완료되었음을 알리기 위해
명령(예: "OK")을 실행하면
수신기는 해당 `Displayable`
객체에서 값을 검색한 다음
이 항목을 반환하기 위해
``Display.setCurrentItem(Item)``을
호출합니다.
구현 시 키패드 이벤트를
`CustomItem`에
전달하는 기능을 선택적으로 지원할 수 있습니다.
구현 시에는 `getInteractionModes`에서 반환하는 값의
`KEY_PRESS`,
`KEY_RELEASE` 및
`KEY_REPEAT` 비트를 설정하여 지원 수준을 나타냅니다.
이러한 비트에 해당하는 이벤트는
`keyPressed()`,
`keyReleased()` 및
`keyRepeated()` 메소드
각각에 대한 호출을 통해 전달됩니다.
구현 시 `KEY_RELEASE` 이벤트를 지원하면
`KEY_PRESS` 이벤트도 지원해야 합니다.
구현 시 `KEY_REPEAT` 이벤트를 지원하면
`KEY_PRESS` 및
`KEY_RELEASE`
이벤트도 지원해야 합니다.
지원되는 경우 `KEY_RELEASE` 이벤트는
보통 해당 `KEY_PRESS` 이벤트가 수신된 다음에 발생하며
`KEY_REPEAT` 이벤트는 보통
`KEY_PRESS`와 `KEY_RELEASE`
이벤트 사이에서 발생합니다. 하지만 `CustomItem`이
표시될 때 키를 누르면 해당 `KEY_PRESS`가 없어도
`CustomItem`은 `KEY_RELEASE`나
`KEY_REPEAT` 이벤트를 수신할 수 있습니다.
이벤트가 발생한 키를 나타내기 위해 키 이벤트 메소드가
`keyCode`에 전달됩니다.
구현 시 키 코드 `Canvas.KEY_NUM0` 에서
`Canvas.KEY_NUM9`, `Canvas.KEY_STAR`
및 `Canvas.KEY_POUND`를 사용하여 사용자가
이벤트를 생성할 수 있는 방법을 제공해야 합니다.
또한 구현 시 장치별 키를 포함하여
다른 키에 대한 키 이벤트도
전달할 수 있습니다. `CustomItem`에 사용할 수 있는
키 집합은 명령이 추가되었는지
여부에 따라 달라질 수 있습니다.
응용 프로그램은 `getGameAction` 메소드를
사용하여 키 코드를 게임 작업에 매핑할 수 있습니다.
구현 시 `CustomItem`에서
키 이벤트를 지원하는 경우
모든 게임 작업을 `CustomItem`에서 사용할 수 있도록
충분한 키 코드 집합과 게임 작업에 대한 매핑을
제공해야 합니다.
`CustomItem`에서 사용할 수 있는
키 집합과 키 이벤트는 `Canvas`에서
사용할 수 있는 것에 따라
달라질 수 있습니다.
특히, 순회를 지원하는 시스템에서 시스템은
순회용 방향 키를 사용하고
이러한 키를 `CustomItem`에
전달하지 않도록 선택할 수 있습니다.
`CustomItem`의 키 코드와 게임 작업 사이의
매핑은 `Canvas`의 매핑과 다를 수 있습니다.
키 코드와 게임 작업에 대한 자세한 내용은 `Canvas`
클래스에서 `키 이벤트` 및
`게임 작업`을
참조하십시오.
구현 시 선택적으로 `CustomItem`에 포인터
이벤트(예: 스타일러스 탭) 전달을 지원할 수 있습니다.
구현 시 `getInteractionModes`가 반환하는 값에서
`POINTER_PRESS`,
`POINTER_RELEASE`
및 `POINTER_DRAG` 비트를 설정하여 지원 수준을 나타냅니다.
이러한 비트에 해당하는 이벤트는
`pointerPressed()`,
`pointerReleased()`,
`pointerDragged()` 메소드
각각에 대한 호출을 통해 전달됩니다.
구현 시 `POINTER_RELEASE` 이벤트를 지원하면
`POINTER_PRESS` 이벤트도 지원해야 합니다.
구현 시 `POINTER_DRAG` 이벤트를 지원하면
`POINTER_PRESS` 및
`POINTER_RELEASE` 이벤트도 지원해야 합니다.
지원되는 경우 `POINTER_RELEASE` 이벤트는
보통 해당 `POINTER_PRESS` 이벤트를 수신한 다음
발생하며 `POINTER_DRAG` 이벤트는
보통 `POINTER_PRESS`와 `POINTER_RELEASE` 이벤트
사이에서 발생합니다.
하지만 `CustomItem`이 표시될 때 포인터를 누르면 해당
`POINTER_PRESS`가 없어도
`CustomItem`은 `POINTER_RELEASE`나
`POINTER_DRAG`
이벤트를 수신할 수 있습니다.
포인터 이벤트의 `(x,y)` 위치는
각 포인터 이벤트에 의해 보고됩니다.
이 위치는 `CustomItem`의 좌표 시스템으로 표현되며
여기서 `(0,0)`은 `CustomItem`의
왼쪽 위 모서리입니다. 특정 상황에서 포인터 이벤트는
해당 항목의 범위를 벗어나서
발생할 수 있습니다.
구현 시 `CustomItem`에 대한
*내부* 순회를 지원합니다.
즉, 구현 시 일시적으로 해당 항목에 순회를 위임합니다.
`CustomItem`
내부에 순회 위치가 하나만 있더라도
사용자가 항목을 순회할 때 특수화된 강조 표시, 애니메이션 등을
수행할 수 있도록 항목에 내부 순회 프로토콜을
지원하려 할 수 있습니다.
구현 시 `getInteractionModes()`가
반환하는 값에서 `TRAVERSE_HORIZONTAL`
또는 `TRAVERSE_VERTICAL` 비트 중 하나나
두 가지 모두를 설정하여 `CustomItem`에 대한
내부 순회 지원을 표시합니다. 이러한 비트 중
어느 하나도 설정되어 있지 않은 경우에는 구현 시
`CustomItem`이 내부적으로 순회하는 것을
허용하지 않거나 구현 시 순회를 전혀 지원하지 않습니다.
구현 시 순회를 지원하지만
`CustomItem`에 대한
내부 순회를 거부하는 경우
`CustomItem`의 컨텐트 영역을
벗어나는 고유 강조 표시 기능을 제공합니다.
`CustomItem`은 내부 순회를 전혀 지원하지 않아도 됩니다.
`traverse` 메소드에 대한 초기 호출에
`false`를 반환하여 이를 수행할 수
있습니다(`CustomItem`에서
이 메소드를 무시하지 않는
경우의 기본 동작). 이 경우
시스템은 사용자가 항목을 순회하여 통과할 수 있도록 조정해야 합니다.
특히 내부 순회의 발생 여부에 상관없이 해당 항목이 화면 높이를
초과하는 경우 시스템은 적절한 스크롤이
발생할 수 있도록 조정해야 합니다.
구현 시 순회 이벤트를 `CustomItem`에
전달하는 기능을 지원하지 않더라도 키패드나 포인터 이벤트를
`CustomItem`에 전달하는 기능을 지원할 수 있습니다.
구현 시 키패드나 포인터 이벤트를
`CustomItem`에 전달하는 기능을 지원하는 경우
이러한 `CustomItem`이
초기 `traverse()`
호출에 대해 `false`를 반환하여 내부 순회를 거부했더라도
모든 `CustomItem`에 대해 전달할 수 있는
방법을 제공해야 합니다. 이는 특정 항목이 내부 순회를
지원하지 않더라도 구현 시 해당 항목에 대한
초점 개념을 지원해야 한다는 것을
의미합니다.
항목이 내부 순회를 수행하는 데
필요한 동작 및 책임에 대한 전체 사양은
``traverse`` 메소드 설명서를
참조하십시오.
각 항목의 시각적 모양은 레이블(구현 시 처리)
및 내용(서브 클래스에서 처리)으로
구성됩니다.
레이블은 해당 항목이 아닌 구현 담당입니다.
`CustomItem`의 내용에 대해 할당된
화면 영역은 구현 시
`CustomItem` 레이블을
표시하기 위해 사용하는 영역과는 별도입니다.
구현 시 컨텐트 영역에 대하여 레이블 및 레이아웃의
렌더링을 제어합니다.
`CustomItem`은
`paint`
메소드가 호출될 때마다 내용 그리기를 담당합니다.
포그라운드, 백그라운드, 강조 표시된 포그라운드,
강조 표시된 백그라운드, 경계선 및 강조 표시된 경계선 색은
``Display.getColor(int)``에서
검색해야 합니다.
그러면 `CustomItem`이 장치에서 제공한
다른 항목의 색 구성표와 일치합니다. `CustomItem`은
고유의 강조 표시 상태와
강조 표시되지 않은 상태를 추적합니다.
사용된 글꼴은 ``Font.getFont(int)``에서 검색해야 합니다.
그러면 일관된 시각적 모양을 위해 장치의 다른 항목에서
사용한 글꼴과 일치시킬 수 있습니다.
**Since:**
- MIDP 2.0
## 필드 요약
- `protected static int KEY_PRESS` — 키 누르기 이벤트 지원을 나타내는 상호 작용 모드 비트.
- `protected static int KEY_RELEASE` — 키 놓기 이벤트 지원을 나타내는 상호 작용 모드 비트.
- `protected static int KEY_REPEAT` — 키 반복 이벤트 지원을 나타내는 상호 작용 모드 비트.
- `protected static int NONE` — 순회가 이 항목 내에 들어갔거나 위치가 변경되었음을 알리고 이 순회 이벤트와 관련된 특정 방향이 없음을 알리는 순회 방향에 대한 값.
- `protected static int POINTER_DRAG` — 포인트 끌기 이벤트 지원을 나타내는 상호 작용 모드 비트.
- `protected static int POINTER_PRESS` — 포인트 누르기 이벤트 지원을 나타내는 상호 작용 모드 비트.
- `protected static int POINTER_RELEASE` — 포인트 놓기 이벤트 지원을 나타내는 상호 작용 모드 비트.
- `protected static int TRAVERSE_HORIZONTAL` — CustomItem 에 대한 수평 내부 순회 지원을 나타내는 상호 작용 모드 비트.
- `protected static int TRAVERSE_VERTICAL` — CustomItem 에 대한 수직 내부 순회 지원을 나타내는 상호 작용 모드 비트.
## 생성자 요약
- `protected CustomItem ( String label)` — CustomItem 서브 클래스가 해당 레이블을 지정할 수 있게 하는 수퍼 클래스 구성자
## 메서드 요약
- `int getGameAction (int keyCode)` — 장치의 지정된 키 코드와 관련된 게임 작업을 가져옵니다.
- `protected int getInteractionModes ()` — 사용 가능한 상호 작용 모드를 가져옵니다.
- `protected abstract int getMinContentHeight ()` — 컨텐트 영역의 최소 높이를 픽셀 단위로 반환하기 위해 서브 클래스에 의해 구현됩니다.
- `protected abstract int getMinContentWidth ()` — 컨텐트 영역의 최소 너비를 픽셀 단위로 반환하기 위해 서브 클래스에 의해 구현됩니다.
- `protected abstract int getPrefContentHeight (int width)` — 컨텐트 영역의 기본 높이를 반환하기 위해 서브 클래스에 의해 구현됩니다.
- `protected abstract int getPrefContentWidth (int height)` — 컨텐트 영역의 기본 너비를 픽셀 단위로 반환하기 위해 서브 클래스에 의해 구현됩니다.
- `protected void hideNotify ()` — 이전에는 부분이라도 표시되었지만 현재는 전혀 표시되지 않는 항목을 알리기 위해 시스템에서 호출합니다.
- `protected void invalidate ()` — CustomItem 의 크기와 순회 위치를 업데이트해야 한다는 것을 알립니다.
- `protected void keyPressed (int keyCode)` — 키를 누를 때 시스템에서 호출합니다.
- `protected void keyReleased (int keyCode)` — 키를 놓을 때 시스템에서 호출합니다.
- `protected void keyRepeated (int keyCode)` — 키가 반복되면 시스템에서 호출합니다.
- `protected abstract void paint ( Graphics g, int w, int h)` — 컨테이너 내에서 항목을 렌더링하기 위해 서브 클래스에 의해 구현됩니다.
- `protected void pointerDragged (int x, int y)` — 항목 내에서 포인터 끌기 작업(예: 누르고 놓기 전의 펜 모션)이 발생하면 시스템에서 호출합니다.
- `protected void pointerPressed (int x, int y)` — 항목 내에서 포인터 내리기 작업(예: 펜 탭)이 발생하면 시스템에서 호출합니다.
- `protected void pointerReleased (int x, int y)` — 항목 내에서 포인터 내리기 작업이 발생한 다음 포인터 올리기 작업(예: 펜 리프트)이 발생하면 시스템에서 호출합니다.
- `protected void repaint ()` — 항목 다시 그리기를 요청하기 위해 서브 클래스 코드에 의해 호출됩니다.
- `protected void repaint (int x, int y, int w, int h)` — 항목의 지정된 직사각형 영역을 다시 그리도록 요청하기 위해 서브 클래스 코드에 의해 호출됩니다.
- `protected void showNotify ()` — 이전에는 완전히 표시되지 않았지만 현재 부분적으로 표시되는 항목을 알리기 위해 시스템에서 호출합니다.
- `protected void sizeChanged (int w, int h)` — 크기 변경 이벤트를 처리하기 위해 서브 클래스에 의해 구현됩니다.
- `protected boolean traverse (int dir, int viewportWidth, int viewportHeight, int[] visRect_inout)` — 순회가 항목 내에 들어갔거나 해당 항목 내에서 순회가 발생한 경우 시스템에 의해 호출됩니다.
- `protected void traverseOut ()` — 순회가 항목을 벗어나 발생하면 시스템에서 호출합니다.
## 필드 상세
### TRAVERSE_HORIZONTAL
```java
protected static final int TRAVERSE_HORIZONTAL
```
**See Also:**
- ``getInteractionModes()``,
``traverse(int, int, int, int[])``,
`Constant Field Values`
### TRAVERSE_VERTICAL
```java
protected static final int TRAVERSE_VERTICAL
```
**See Also:**
- ``getInteractionModes()``,
``traverse(int, int, int, int[])``,
`Constant Field Values`
### KEY_PRESS
```java
protected static final int KEY_PRESS
```
**See Also:**
- ``getInteractionModes()``,
``keyPressed(int)``,
`Constant Field Values`
### KEY_RELEASE
```java
protected static final int KEY_RELEASE
```
**See Also:**
- ``getInteractionModes()``,
``keyReleased(int)``,
`Constant Field Values`
### KEY_REPEAT
```java
protected static final int KEY_REPEAT
```
**See Also:**
- ``getInteractionModes()``,
``keyRepeated(int)``,
`Constant Field Values`
### POINTER_PRESS
```java
protected static final int POINTER_PRESS
```
**See Also:**
- ``getInteractionModes()``,
``pointerPressed(int, int)``,
`Constant Field Values`
### POINTER_RELEASE
```java
protected static final int POINTER_RELEASE
```
**See Also:**
- ``getInteractionModes()``,
``pointerReleased(int, int)``,
`Constant Field Values`
### POINTER_DRAG
```java
protected static final int POINTER_DRAG
```
**See Also:**
- ``getInteractionModes()``,
``pointerDragged(int, int)``,
`Constant Field Values`
### NONE
```java
protected static final int NONE
```
**See Also:**
- ``traverse(int, int, int, int[])``,
`Constant Field Values`
### CustomItem
```java
protected CustomItem(String label)
```
- `CustomItem` 서브 클래스가
해당 레이블을 지정할 수 있게 하는 수퍼 클래스 구성자
**Parameters:**
- `label` - `CustomItem`의 레이블
### getInteractionModes
```java
protected final int getInteractionModes()
```
**Returns:**
- 사용 가능한 상호 작용 모드의 비트 마스크
### getMinContentWidth
```java
protected abstract int getMinContentWidth()
```
**Returns:**
- 최소 내용 너비(픽셀 단위)
### getMinContentHeight
```java
protected abstract int getMinContentHeight()
```
**Returns:**
- 최소 내용 높이(픽셀 단위)
### getPrefContentWidth
```java
protected abstract int getPrefContentWidth(int height)
```
**Parameters:**
- `height` - 임시 컨텐트 높이(픽셀 단위),
또는 임시 높이가 계산되지 않은 경우 -1
**Returns:**
- 기본 컨텐트 너비(픽셀 단위)
### getPrefContentHeight
```java
protected abstract int getPrefContentHeight(int width)
```
**Parameters:**
- `width` - 임시 컨텐트 너비(픽셀 단위),
또는 임시 너비가 계산되지 않은 경우 -1
**Returns:**
- 기본 컨텐트 높이(픽셀 단위)
### sizeChanged
```java
protected void sizeChanged(int w,
int h)
```
**Parameters:**
- `h` - 항목 컨텐트 영역의 새 높이
### invalidate
```java
protected final void invalidate()
```
CustomItem 의 크기와 순회 위치를
업데이트해야 한다는 것을 알립니다.
이 메소드는 구현 시 CustomItem 컨텐트 영역의
크기나 내부 순회 위치를 변경해야 할 수 있다는 것을 알리기 위해 CustomItem 서브 클래스 코드에 의해 호출됩니다.
이는 CustomItem 의
내용이 수정될 때 자주 발생합니다. 이 메소드에 대한 호출은 즉시 결과를 반환하며
컨테이너 레이아웃 알고리즘이 향후의 특정 시점에 실행되도록 하므로 getMinContentHeight , getMinContentWidth , getPrefContentHeight , getPrefContentWidth , sizeChanged 나 traverse 에 대한 호출이 발생할 수 있습니다.
레이아웃 작업의 결과로 다시 그리기가 필요한 경우 paint 메소드도 호출될 수 있습니다. CustomItem 이 표시되지 않은 상태에서
컨텐트 크기가 무효화된 경우 해당 레이아웃 작업이 지연될 수 있습니다. invalidate 가 호출될 때 CustomItem 에 현재 순회 위치가 포함되어 있는 경우 traverse 메소드가 호출됩니다.
### paint
```java
protected abstract void paint(Graphics g,
int w,
int h)
```
**Parameters:**
- `h` - 항목의 현재 높이(픽셀 단위)
### repaint
```java
protected final void repaint()
```
항목 다시 그리기를 요청하기 위해 서브 클래스 코드에 의해 호출됩니다.
이 항목을 디스플레이에서 표시할 수 있는 경우 다음에 CustomItem 이 표시될 때 paint() 에 대한
호출이 발생합니다. 항목의 내부 상태가 업데이트되어 해당 시각적 표현을
업데이트해야 하는 경우 CustomItem 서브 클래스에서
이 메소드를 호출해야 합니다.
### repaint
```java
protected final void repaint(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - 업데이트할 직사각형 영역의 높이
### traverse
```java
protected boolean traverse(int dir,
int viewportWidth,
int viewportHeight,
int[] visRect_inout)
```
**Parameters:**
- `visRect_inout` - 표시 가능한 직사각형을 메소드에
전달한 다음 메소드로부터 업데이트된 순회 직사각형을 반환합니다.
**Returns:**
- 내부 순회가 발생한 경우 `true`,
순회가 범위를 벗어나는 경우 `false`
**See Also:**
- ``getInteractionModes()``,
``traverseOut()``,
``TRAVERSE_HORIZONTAL``,
``TRAVERSE_VERTICAL``
### traverseOut
```java
protected void traverseOut()
```
**See Also:**
- ``getInteractionModes()``,
``traverse(int, int, int, int[])``,
``TRAVERSE_HORIZONTAL``,
``TRAVERSE_VERTICAL``
### keyPressed
```java
protected void keyPressed(int keyCode)
```
**Parameters:**
- `keyCode` - 누른 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### keyReleased
```java
protected void keyReleased(int keyCode)
```
**Parameters:**
- `keyCode` - 놓은 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### keyRepeated
```java
protected void keyRepeated(int keyCode)
```
**Parameters:**
- `keyCode` - 반복된 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### getGameAction
```java
public int getGameAction(int keyCode)
```
**Parameters:**
- `keyCode` - 키 코드
**Returns:**
- 이 키에 해당하는 게임 작업,
또는 이러한 게임 작업이 없는 경우 `0`
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### pointerPressed
```java
protected void pointerPressed(int x,
int y)
```
**Parameters:**
- `y` - 포인터 내리기의 `y` 좌표
**See Also:**
- ``getInteractionModes()``
### pointerReleased
```java
protected void pointerReleased(int x,
int y)
```
**Parameters:**
- `y` - 포인터 내리기의 x 좌표
**See Also:**
- ``getInteractionModes()``
### pointerDragged
```java
protected void pointerDragged(int x,
int y)
```
**Parameters:**
- `y` - 포인터 끌기의 `y` 좌표
**See Also:**
- ``getInteractionModes()``
### showNotify
```java
protected void showNotify()
```
이전에는 완전히 표시되지 않았지만 현재 부분적으로
표시되는 항목을 알리기 위해 시스템에서 호출합니다. showNotify() 가 호출된 다음 항목은 paint() 호출을 받습니다. 이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
### hideNotify
```java
protected void hideNotify()
```
이전에는 부분이라도 표시되었지만
현재는 전혀 표시되지 않는 항목을 알리기 위해 시스템에서 호출합니다. showNotify() 가 다시 호출될 때까지는
이 항목에 대한 paint() 를 호출하지 않습니다. 이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
## 생성자 상세
### CustomItem
```java
protected CustomItem(String label)
```
- `CustomItem` 서브 클래스가
해당 레이블을 지정할 수 있게 하는 수퍼 클래스 구성자
**Parameters:**
- `label` - `CustomItem`의 레이블
### getInteractionModes
```java
protected final int getInteractionModes()
```
**Returns:**
- 사용 가능한 상호 작용 모드의 비트 마스크
### getMinContentWidth
```java
protected abstract int getMinContentWidth()
```
**Returns:**
- 최소 내용 너비(픽셀 단위)
### getMinContentHeight
```java
protected abstract int getMinContentHeight()
```
**Returns:**
- 최소 내용 높이(픽셀 단위)
### getPrefContentWidth
```java
protected abstract int getPrefContentWidth(int height)
```
**Parameters:**
- `height` - 임시 컨텐트 높이(픽셀 단위),
또는 임시 높이가 계산되지 않은 경우 -1
**Returns:**
- 기본 컨텐트 너비(픽셀 단위)
### getPrefContentHeight
```java
protected abstract int getPrefContentHeight(int width)
```
**Parameters:**
- `width` - 임시 컨텐트 너비(픽셀 단위),
또는 임시 너비가 계산되지 않은 경우 -1
**Returns:**
- 기본 컨텐트 높이(픽셀 단위)
### sizeChanged
```java
protected void sizeChanged(int w,
int h)
```
**Parameters:**
- `h` - 항목 컨텐트 영역의 새 높이
### invalidate
```java
protected final void invalidate()
```
CustomItem 의 크기와 순회 위치를
업데이트해야 한다는 것을 알립니다.
이 메소드는 구현 시 CustomItem 컨텐트 영역의
크기나 내부 순회 위치를 변경해야 할 수 있다는 것을 알리기 위해 CustomItem 서브 클래스 코드에 의해 호출됩니다.
이는 CustomItem 의
내용이 수정될 때 자주 발생합니다. 이 메소드에 대한 호출은 즉시 결과를 반환하며
컨테이너 레이아웃 알고리즘이 향후의 특정 시점에 실행되도록 하므로 getMinContentHeight , getMinContentWidth , getPrefContentHeight , getPrefContentWidth , sizeChanged 나 traverse 에 대한 호출이 발생할 수 있습니다.
레이아웃 작업의 결과로 다시 그리기가 필요한 경우 paint 메소드도 호출될 수 있습니다. CustomItem 이 표시되지 않은 상태에서
컨텐트 크기가 무효화된 경우 해당 레이아웃 작업이 지연될 수 있습니다. invalidate 가 호출될 때 CustomItem 에 현재 순회 위치가 포함되어 있는 경우 traverse 메소드가 호출됩니다.
### paint
```java
protected abstract void paint(Graphics g,
int w,
int h)
```
**Parameters:**
- `h` - 항목의 현재 높이(픽셀 단위)
### repaint
```java
protected final void repaint()
```
항목 다시 그리기를 요청하기 위해 서브 클래스 코드에 의해 호출됩니다.
이 항목을 디스플레이에서 표시할 수 있는 경우 다음에 CustomItem 이 표시될 때 paint() 에 대한
호출이 발생합니다. 항목의 내부 상태가 업데이트되어 해당 시각적 표현을
업데이트해야 하는 경우 CustomItem 서브 클래스에서
이 메소드를 호출해야 합니다.
### repaint
```java
protected final void repaint(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - 업데이트할 직사각형 영역의 높이
### traverse
```java
protected boolean traverse(int dir,
int viewportWidth,
int viewportHeight,
int[] visRect_inout)
```
**Parameters:**
- `visRect_inout` - 표시 가능한 직사각형을 메소드에
전달한 다음 메소드로부터 업데이트된 순회 직사각형을 반환합니다.
**Returns:**
- 내부 순회가 발생한 경우 `true`,
순회가 범위를 벗어나는 경우 `false`
**See Also:**
- ``getInteractionModes()``,
``traverseOut()``,
``TRAVERSE_HORIZONTAL``,
``TRAVERSE_VERTICAL``
### traverseOut
```java
protected void traverseOut()
```
**See Also:**
- ``getInteractionModes()``,
``traverse(int, int, int, int[])``,
``TRAVERSE_HORIZONTAL``,
``TRAVERSE_VERTICAL``
### keyPressed
```java
protected void keyPressed(int keyCode)
```
**Parameters:**
- `keyCode` - 누른 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### keyReleased
```java
protected void keyReleased(int keyCode)
```
**Parameters:**
- `keyCode` - 놓은 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### keyRepeated
```java
protected void keyRepeated(int keyCode)
```
**Parameters:**
- `keyCode` - 반복된 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### getGameAction
```java
public int getGameAction(int keyCode)
```
**Parameters:**
- `keyCode` - 키 코드
**Returns:**
- 이 키에 해당하는 게임 작업,
또는 이러한 게임 작업이 없는 경우 `0`
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### pointerPressed
```java
protected void pointerPressed(int x,
int y)
```
**Parameters:**
- `y` - 포인터 내리기의 `y` 좌표
**See Also:**
- ``getInteractionModes()``
### pointerReleased
```java
protected void pointerReleased(int x,
int y)
```
**Parameters:**
- `y` - 포인터 내리기의 x 좌표
**See Also:**
- ``getInteractionModes()``
### pointerDragged
```java
protected void pointerDragged(int x,
int y)
```
**Parameters:**
- `y` - 포인터 끌기의 `y` 좌표
**See Also:**
- ``getInteractionModes()``
### showNotify
```java
protected void showNotify()
```
이전에는 완전히 표시되지 않았지만 현재 부분적으로
표시되는 항목을 알리기 위해 시스템에서 호출합니다. showNotify() 가 호출된 다음 항목은 paint() 호출을 받습니다. 이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
### hideNotify
```java
protected void hideNotify()
```
이전에는 부분이라도 표시되었지만
현재는 전혀 표시되지 않는 항목을 알리기 위해 시스템에서 호출합니다. showNotify() 가 다시 호출될 때까지는
이 항목에 대한 paint() 를 호출하지 않습니다. 이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
## 메서드 상세
### getInteractionModes
```java
protected final int getInteractionModes()
```
**Returns:**
- 사용 가능한 상호 작용 모드의 비트 마스크
### getMinContentWidth
```java
protected abstract int getMinContentWidth()
```
**Returns:**
- 최소 내용 너비(픽셀 단위)
### getMinContentHeight
```java
protected abstract int getMinContentHeight()
```
**Returns:**
- 최소 내용 높이(픽셀 단위)
### getPrefContentWidth
```java
protected abstract int getPrefContentWidth(int height)
```
**Parameters:**
- `height` - 임시 컨텐트 높이(픽셀 단위),
또는 임시 높이가 계산되지 않은 경우 -1
**Returns:**
- 기본 컨텐트 너비(픽셀 단위)
### getPrefContentHeight
```java
protected abstract int getPrefContentHeight(int width)
```
**Parameters:**
- `width` - 임시 컨텐트 너비(픽셀 단위),
또는 임시 너비가 계산되지 않은 경우 -1
**Returns:**
- 기본 컨텐트 높이(픽셀 단위)
### sizeChanged
```java
protected void sizeChanged(int w,
int h)
```
**Parameters:**
- `h` - 항목 컨텐트 영역의 새 높이
### invalidate
```java
protected final void invalidate()
```
CustomItem 의 크기와 순회 위치를
업데이트해야 한다는 것을 알립니다.
이 메소드는 구현 시 CustomItem 컨텐트 영역의
크기나 내부 순회 위치를 변경해야 할 수 있다는 것을 알리기 위해 CustomItem 서브 클래스 코드에 의해 호출됩니다.
이는 CustomItem 의
내용이 수정될 때 자주 발생합니다. 이 메소드에 대한 호출은 즉시 결과를 반환하며
컨테이너 레이아웃 알고리즘이 향후의 특정 시점에 실행되도록 하므로 getMinContentHeight , getMinContentWidth , getPrefContentHeight , getPrefContentWidth , sizeChanged 나 traverse 에 대한 호출이 발생할 수 있습니다.
레이아웃 작업의 결과로 다시 그리기가 필요한 경우 paint 메소드도 호출될 수 있습니다. CustomItem 이 표시되지 않은 상태에서
컨텐트 크기가 무효화된 경우 해당 레이아웃 작업이 지연될 수 있습니다. invalidate 가 호출될 때 CustomItem 에 현재 순회 위치가 포함되어 있는 경우 traverse 메소드가 호출됩니다.
### paint
```java
protected abstract void paint(Graphics g,
int w,
int h)
```
**Parameters:**
- `h` - 항목의 현재 높이(픽셀 단위)
### repaint
```java
protected final void repaint()
```
항목 다시 그리기를 요청하기 위해 서브 클래스 코드에 의해 호출됩니다.
이 항목을 디스플레이에서 표시할 수 있는 경우 다음에 CustomItem 이 표시될 때 paint() 에 대한
호출이 발생합니다. 항목의 내부 상태가 업데이트되어 해당 시각적 표현을
업데이트해야 하는 경우 CustomItem 서브 클래스에서
이 메소드를 호출해야 합니다.
### repaint
```java
protected final void repaint(int x,
int y,
int w,
int h)
```
**Parameters:**
- `h` - 업데이트할 직사각형 영역의 높이
### traverse
```java
protected boolean traverse(int dir,
int viewportWidth,
int viewportHeight,
int[] visRect_inout)
```
**Parameters:**
- `visRect_inout` - 표시 가능한 직사각형을 메소드에
전달한 다음 메소드로부터 업데이트된 순회 직사각형을 반환합니다.
**Returns:**
- 내부 순회가 발생한 경우 `true`,
순회가 범위를 벗어나는 경우 `false`
**See Also:**
- ``getInteractionModes()``,
``traverseOut()``,
``TRAVERSE_HORIZONTAL``,
``TRAVERSE_VERTICAL``
### traverseOut
```java
protected void traverseOut()
```
**See Also:**
- ``getInteractionModes()``,
``traverse(int, int, int, int[])``,
``TRAVERSE_HORIZONTAL``,
``TRAVERSE_VERTICAL``
### keyPressed
```java
protected void keyPressed(int keyCode)
```
**Parameters:**
- `keyCode` - 누른 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### keyReleased
```java
protected void keyReleased(int keyCode)
```
**Parameters:**
- `keyCode` - 놓은 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### keyRepeated
```java
protected void keyRepeated(int keyCode)
```
**Parameters:**
- `keyCode` - 반복된 키의 키 코드
**See Also:**
- ``getInteractionModes()``
### getGameAction
```java
public int getGameAction(int keyCode)
```
**Parameters:**
- `keyCode` - 키 코드
**Returns:**
- 이 키에 해당하는 게임 작업,
또는 이러한 게임 작업이 없는 경우 `0`
**Throws:**
- `IllegalArgumentException` - `keyCode`가
유효한 키 코드가 아닌 경우
### pointerPressed
```java
protected void pointerPressed(int x,
int y)
```
**Parameters:**
- `y` - 포인터 내리기의 `y` 좌표
**See Also:**
- ``getInteractionModes()``
### pointerReleased
```java
protected void pointerReleased(int x,
int y)
```
**Parameters:**
- `y` - 포인터 내리기의 x 좌표
**See Also:**
- ``getInteractionModes()``
### pointerDragged
```java
protected void pointerDragged(int x,
int y)
```
**Parameters:**
- `y` - 포인터 끌기의 `y` 좌표
**See Also:**
- ``getInteractionModes()``
### showNotify
```java
protected void showNotify()
```
이전에는 완전히 표시되지 않았지만 현재 부분적으로
표시되는 항목을 알리기 위해 시스템에서 호출합니다. showNotify() 가 호출된 다음 항목은 paint() 호출을 받습니다. 이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
### hideNotify
```java
protected void hideNotify()
```
이전에는 부분이라도 표시되었지만
현재는 전혀 표시되지 않는 항목을 알리기 위해 시스템에서 호출합니다. showNotify() 가 다시 호출될 때까지는
이 항목에 대한 paint() 를 호출하지 않습니다. 이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
---
title: "Class DateField"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.DateField
```
## 설명
**extends Item:**
`DateField`는
`Form`에 넣을 수 있는
날짜와 시간(달력) 정보를 나타내기 위한 편집 가능한 구성 요소입니다.
이 필드에 대한 값은 처음에 설정하거나 설정하지 않은 상태로 둘 수 있습니다.
값이 설정되어 있지 않으면 이 필드의 UI에 분명히 표시됩니다.
"초기화되지 않은 상태"에 대한 필드 값은 유효한 값이 아니며
이 상태에 대한 `getDate()`는
`null`을 반환합니다.
날짜나 시간 정보 또는 두 가지를 모두 받아들이도록
`DateField`의 인스턴스를 구성할 수 있습니다.
입력 모드는 이 클래스의 `DATE`, `TIME` 또는
`DATE_TIME` 정적 필드로 구성됩니다.
`DATE` 입력 모드를 사용하면
날짜 정보만 설정할 수 있으며
`TIME` 입력 모드를 사용하면 시간 정보(시, 분)만
설정할 수 있지만 `DATE_TIME`을 사용하면
시간과 날짜 값을 모두 설정할 수 있습니다.
`TIME` 입력 모드에서 `Date`
객체의 날짜 구성 요소는 1970년 1월 1일을 "원년" 값으로
설정해야 합니다.
이 필드의 달력 계산은 기본 로켈 및 정의된 표준 시간대를
기반으로 합니다. 계산 및 다양한 입력 모드로 인해 날짜 객체를
이 필드로 설정한 다음 이 필드에서 값을 다시 가져오면 같은
밀리초 값을 포함하지 않습니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int DATE` — 날짜 정보(년, 월, 일)에 대한 입력 모드.
- `static int DATE_TIME` — 날짜(년, 월, 일) 및 시간(시, 분) 정보에 대한 입력 모드.
- `static int TIME` — 시간 정보(시, 분)에 대한 입력 모드.
## 생성자 요약
- DateField ( String label,
int mode) 지정된 레이블과 모드를 사용하여 DateField 객체를 만듭니다.
- DateField ( String label,
int mode, TimeZone timeZone) 특정 TimeZone 객체 및 현재 로켈의
기본 달력 시스템을 기반으로 달력을
계산하는 날짜 필드를 만듭니다.
## 메서드 요약
- `Date getDate ()` — 이 필드의 날짜 값을 반환합니다.
- `int getInputMode ()` — 이 날짜 필드의 입력 모드를 가져옵니다.
- `void setDate ( Date date)` — 이 필드에 새 값을 설정합니다.
- `void setInputMode (int mode)` — 이 날짜 필드의 입력 모드를 설정합니다.
## 필드 상세
### DATE
```java
public static final int DATE
```
**See Also:**
- `Constant Field Values`
### TIME
```java
public static final int TIME
```
**See Also:**
- `Constant Field Values`
### DATE_TIME
```java
public static final int DATE_TIME
```
**See Also:**
- `Constant Field Values`
### DateField
```java
public DateField(String label,
int mode)
```
- 지정된 레이블과 모드를 사용하여 `DateField`
객체를 만듭니다.
이 호출은 `DateField(label, mode, null)`에 대한 호출과 동일합니다.
**Parameters:**
- `mode` - 입력 모드, `DATE`, `TIME`,
`DATE_TIME` 중 하나
**Throws:**
- `IllegalArgumentException` - 입력 `mode` 값이
유효하지 않은 경우
### DateField
```java
public DateField(String label,
int mode,
TimeZone timeZone)
```
- 특정 `TimeZone` 객체 및 현재 로켈의
기본 달력 시스템을 기반으로 달력을
계산하는 날짜 필드를 만듭니다.
`DateField`의 값은
처음에는 "초기화되지 않은"
상태에 있습니다.
`timeZone`이 `null`인 경우
시스템의 기본 표준 시간대가 사용됩니다.
**Parameters:**
- `timeZone` - 특정 표준 시간대, 또는 기본 표준 시간대에 대해서는
`null`
**Throws:**
- `IllegalArgumentException` - 입력 `mode`의 값이
유효하지 않은 경우
### getDate
```java
public Date getDate()
```
**Returns:**
- 입력 모드에 따라 시간이나 날짜를 나타내는 날짜 객체
**See Also:**
- ``setDate(java.util.Date)``
### setDate
```java
public void setDate(Date date)
```
**Parameters:**
- `date` - 이 필드의 새 값
**See Also:**
- ``getDate()``
### getInputMode
```java
public int getInputMode()
```
**Returns:**
- 이 필드의 입력 모드
**See Also:**
- ``setInputMode(int)``
### setInputMode
```java
public void setInputMode(int mode)
```
**Parameters:**
- `mode` - 입력 모드는 `DATE`, `TIME`,
`DATE_TIME` 중 하나여야 합니다.
**Throws:**
- `IllegalArgumentException` - 유효하지 않은 값이 지정된 경우
**See Also:**
- ``getInputMode()``
## 생성자 상세
### DateField
```java
public DateField(String label,
int mode)
```
- 지정된 레이블과 모드를 사용하여 `DateField`
객체를 만듭니다.
이 호출은 `DateField(label, mode, null)`에 대한 호출과 동일합니다.
**Parameters:**
- `mode` - 입력 모드, `DATE`, `TIME`,
`DATE_TIME` 중 하나
**Throws:**
- `IllegalArgumentException` - 입력 `mode` 값이
유효하지 않은 경우
### DateField
```java
public DateField(String label,
int mode,
TimeZone timeZone)
```
- 특정 `TimeZone` 객체 및 현재 로켈의
기본 달력 시스템을 기반으로 달력을
계산하는 날짜 필드를 만듭니다.
`DateField`의 값은
처음에는 "초기화되지 않은"
상태에 있습니다.
`timeZone`이 `null`인 경우
시스템의 기본 표준 시간대가 사용됩니다.
**Parameters:**
- `timeZone` - 특정 표준 시간대, 또는 기본 표준 시간대에 대해서는
`null`
**Throws:**
- `IllegalArgumentException` - 입력 `mode`의 값이
유효하지 않은 경우
### getDate
```java
public Date getDate()
```
**Returns:**
- 입력 모드에 따라 시간이나 날짜를 나타내는 날짜 객체
**See Also:**
- ``setDate(java.util.Date)``
### setDate
```java
public void setDate(Date date)
```
**Parameters:**
- `date` - 이 필드의 새 값
**See Also:**
- ``getDate()``
### getInputMode
```java
public int getInputMode()
```
**Returns:**
- 이 필드의 입력 모드
**See Also:**
- ``setInputMode(int)``
### setInputMode
```java
public void setInputMode(int mode)
```
**Parameters:**
- `mode` - 입력 모드는 `DATE`, `TIME`,
`DATE_TIME` 중 하나여야 합니다.
**Throws:**
- `IllegalArgumentException` - 유효하지 않은 값이 지정된 경우
**See Also:**
- ``getInputMode()``
## 메서드 상세
### getDate
```java
public Date getDate()
```
**Returns:**
- 입력 모드에 따라 시간이나 날짜를 나타내는 날짜 객체
**See Also:**
- ``setDate(java.util.Date)``
### setDate
```java
public void setDate(Date date)
```
**Parameters:**
- `date` - 이 필드의 새 값
**See Also:**
- ``getDate()``
### getInputMode
```java
public int getInputMode()
```
**Returns:**
- 이 필드의 입력 모드
**See Also:**
- ``setInputMode(int)``
### setInputMode
```java
public void setInputMode(int mode)
```
**Parameters:**
- `mode` - 입력 모드는 `DATE`, `TIME`,
`DATE_TIME` 중 하나여야 합니다.
**Throws:**
- `IllegalArgumentException` - 유효하지 않은 값이 지정된 경우
**See Also:**
- ``getInputMode()``
---
title: "Class Display"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Display
```
## 설명
**extends Object:**
`Display`는 시스템의 입력 장치 및
디스플레이 관리자를 나타냅니다.
여기에는 장치의 등록 정보를 검색하고 장치에 해당 객체를 표시할 것을
요청하는 메소드가 포함됩니다. 장치 속성을 다루는 다른 메소드는
주로 ``Canvas`` 객체와 함께 사용되므로 여기가 아닌
그 쪽에서 정의됩니다.
``MIDlet``마다
정확히 한 개의 Display 인스턴스가 있으며 응용 프로그램은
``getDisplay()``
메소드를 호출하여 해당 인스턴스에 대한
참조를 가져올 수 있습니다.
응용 프로그램은 실행 중에 언제든지 `getDisplay()`
메소드를 호출할 수 있습니다.
`getDisplay()`에 대한 모든 호출로 반환되는
`Display` 객체는 이 기간 동안
동일한 상태로 있게 됩니다.
일반 응용 프로그램은 해당 `MIDlet` 메소드 호출에 대한
응답으로 다음 작업을 수행합니다.
- **startApp** - 응용 프로그램이
일시 중지 상태에서 활성 상태로 이동합니다.
응용 프로그램이 활성화되는 동안
필요한 객체를 초기화해야 합니다.
초기화가 이루어지지 않은 경우 응용 프로그램은
첫 화면에서 ``setCurrent()``를
호출할 수 있습니다.
그 사이에 `pauseApp()`가 호출되는 경우
`startApp()`를
여러 번 호출할 수 있습니다.
이는 일회성 초기화가 발생해서는 안 되며 대신
`MIDlet`
구성자 내에서 발생해야 한다는 것을 의미합니다.
- **pauseApp** - 응용 프로그램이 자신의 스레드를
일시 중지합니다. 또한 응용 프로그램이
다시 활성화될 때 다른 화면에서 시작하려는 경우에는
`setCurrent()`를 사용하여 새 화면을 설정합니다.
- **destroyApp** - 응용 프로그램에서 자원을
사용 가능하게 만들고 스레드를 종료합니다. `destroyApp()`가
반환된 후 사용자 인터페이스 객체에 있는 메소드 호출에 대한
동작은 정의되지 않습니다.
디스플레이 장치에 표시된 사용자 인터페이스 객체는
``Displayable`` 객체 내에 포함됩니다.
응용 프로그램은 언제든
디스플레이 장치에 표시되어 이를 통해
사용자 상호 작용이 가능한 `Displayable` 객체를 하나 정도
가질 수 있습니다. 이 `Displayable`을 *현재*
`Displayable`이라고 합니다.
`Display` 클래스에는
현재 `Displayable`을 설정하는
``setCurrent()`` 메소드가 있으며
현재 `Displayable`을 검색하는
``getCurrent()`` 메소드가 있습니다.
응용 프로그램은 현재 `Displayable`을 제어하며
언제든지 `setCurrent()`를
호출할 수 있습니다.
일반적으로 응용 프로그램은
일부 사용자 작업에 대한 응답으로
현재 `Displayable`을 변경합니다.
하지만 항상 그런 것은 아닙니다.
다른 스레드가 다른 자극에 대한 응답으로 현재
`Displayable`을 변경할 수 있습니다.
``Alert`` 타이머의
시간이 경과하면 현재
`Displayable`도 변경됩니다.
응용 프로그램의 현재 `Displayable`은
실제로 화면에 나타나지 않을 수 있으며 발생하는 사용자
이벤트(예: 키 입력)가 반드시 현재 `Displayable`로
지정되지 않을 수도 있습니다.
이는 같은 장치에서 동시에
다른 `MIDlet` 응용 프로그램이
실행되기 때문에 발생합니다.
현재 `Displayable`이 디스플레이 장치에
실제로 표시되고 사용자 입력 장치 이벤트가 이 장치에 전달되는 경우
응용 프로그램이 *포그라운드*에 있다고 말할 수 있습니다.
응용 프로그램이 포그라운드에 있지 않은 경우에는
디스플레이 장치와 입력 장치 모두에 액세스하기 어려우며
이 경우 *백그라운드*에 있다고 말할 수 있습니다.
이러한 장치를 다른 `MIDlet` 응용 프로그램에
할당하는 정책은 이 사양의 범위를 벗어나며 *응용 프로그램
관리 소프트웨어*라는 외부 에이전트의
제어를 받습니다.
위에 언급된 대로 응용 프로그램이 백그라운드에 있더라도
현재 `Displayable`의 개념은 여전히 가집니다.
현재 `Displayable`은 다음에 응용 프로그램을
포그라운드로 가져올 때 표시할 내용이므로
백그라운드 응용
프로그램인 경우에도 현재
`Displayable`은 중요합니다.
응용 프로그램은 ``isShown()``을
호출하여 `Displayable`을 디스플레이에서
실제로 표시할지 결정할 수 있습니다.
`Canvas`의 경우
`Canvas`를 표시하고
숨길 때 각각 ``showNotify()``와
``hideNotify()`` 메소드가
호출됩니다.
각 `MIDlet` 응용 프로그램은 고유한
현재 `Displayable`을 가집니다.
이는 `MIDlet`의 포그라운드/백그라운드 상태에
상관없이 ``getCurrent()`` 메소드가
`MIDlet`의 현재 `Displayable`을 반환한다는 것을
의미합니다.
예를 들어, 포그라운드에서 실행되는 `MIDlet`에
현재 `Displayable` *F*가 있고,
백그라운드에서 실행되는 `MIDlet`에 현재
`Displayable` *B*가 있다고 가정하는 경우,
포그라운드 `MIDlet`에서 `getCurrent()`를
호출하면 *F*를 반환하며 백그라운드 `MIDlet`에서
`getCurrent()`를 호출하면 *B*를 반환합니다.
그리고 `MIDlet`에서
`setCurrent()`를 호출하여
현재 `Displayable`을 변경하는 경우
다른 `MIDlet`의 현재
`Displayable`에
아무런 영향을 미치지 않습니다.
`getCurrent()`에서 `null`을
반환할 가능성이 있습니다. `MIDlet` 응용 프로그램이
첫 화면에서 `setCurrent()`를 호출하기 전에 시작하면
이러한 일이 발생할 수 있습니다.
`getCurrent(`) 메소드는
이전에 이 `MIDlet`에서
`setCurrent()`를
호출할 때 전달되지 않은 `Displayable` 객체에 대한
참조는 절대 반환하지 않습니다.
### 시스템 화면
일반적으로 포그라운드 `MIDlet`의 현재 화면은
디스플레이에 표시됩니다.
하지만 특정 상황에서 시스템은 응용 프로그램의
현재 화면을 일시적으로 흐리게 하는 화면을 만들 수 있습니다.
이러한 화면을 *시스템 화면*이라고 합니다.
이는 시스템이 명령 메뉴를 표시해야 하거나 시스템이
`Form` 내의 텍스트 필드 안이 아닌
별도의 화면에서 텍스트를 편집하도록 사용자에게 요구하는 경우에
발생합니다. 시스템 화면이 응용 프로그램 화면을 흐리게 하더라도
현재 화면의 개념은 변경되지 않습니다.
특히 시스템 화면이 표시되는 동안
`getCurrent()`에 대한
호출은 시스템 화면이 아닌 응용
프로그램의 현재 화면을 반환합니다.
시스템 화면으로 현재 `Displayable`이 희미해진 경우
`isShown()`이 반환하는 값은
`false`입니다.
시스템 화면이 캔버스를 흐리게 하면 `hideNotify()`
메소드가 호출됩니다.
시스템 화면이 제거되면
캔버스가 복구되면서 해당 `showNotify()` 메소드와
`paint()` 메소드가 호출됩니다.
명령을 실행할 사용자가 시스템 화면을 사용하는 경우
`showNotify()`가 호출된 다음
`commandAction()`
메소드가 호출됩니다.
이 클래스는 높은 수준 사용자 인터페이스의 일반적인 전경색
및 배경색을 검색하는 메소드를 포함합니다.
이러한 메소드는 다른 항목의 사용자 인터페이스와 일치하는
`CustomItem` 객체를 만들고 시스템 나머지 부분의
사용자 인터페이스와 일치하는 `Canvas` 내에서
사용자 인터페이스를 만들 때 유용합니다.
구현 시 사용자 인터페이스에서 전경색 및 배경색만 사용하도록
제한하지는 않지만(예: 비스듬하게 보이도록 강조 표시 및 그림자 색 사용)
반환되는 색은 해당 구현의 색 구성표와 상당히 일치하는 색입니다.
사용자 정의 항목을 구현하는 응용 프로그램은 배경색을 사용하여
해당 영역을 지운 다음 텍스트 및 기하 그래픽(선, 호, 직사각형)을
전경색으로 칠합니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int ALERT` — Alert 이미지의 이미지 유형.
- `static int CHOICE_GROUP_ELEMENT` — ChoiceGroup 요소 이미지의 이미지 유형.
- `static int COLOR_BACKGROUND` — getColor 에서 사용할 색 지정자.
- `static int COLOR_BORDER` — getColor 에서 사용할 색 지정자.
- `static int COLOR_FOREGROUND` — getColor 에서 사용할 색 지정자.
- `static int COLOR_HIGHLIGHTED_BACKGROUND` — getColor 에서 사용할 색 지정자.
- `static int COLOR_HIGHLIGHTED_BORDER` — getColor 에서 사용할 색 지정자.
- `static int COLOR_HIGHLIGHTED_FOREGROUND` — getColor 에서 사용할 색 지정자.
- `static int LIST_ELEMENT` — List 요소 이미지의 이미지 유형.
## 메서드 요약
- `void callSerially ( Runnable r)` — Runnable 객체 r 이 해당 run() 메소드를 나중에 호출하여 다시 그리기 주기가 완료된 직후 해당 이벤트 스트림과 일련화되도록 합니다.
- `boolean flashBacklight (int duration)` — 장치의 후광으로 깜박임 효과를 요청합니다.
- `int getBestImageHeight (int imageType)` — 지정된 이미지 유형에 최적인 이미지 높이를 반환합니다.
- `int getBestImageWidth (int imageType)` — 지정된 이미지 유형에 최적인 이미지 너비를 반환합니다.
- `int getBorderStyle (boolean highlighted)` — 구성 요소의 상태(강조 표시된/강조 표시되지 않은)에 따라 경계선 그리기에 사용된 입력 스타일을 반환합니다.
- `int getColor (int colorSpecifier)` — 전달된 colorSpecifier 를 기반으로 한 0x00RRGGBB 형식으로 높은 수준의 사용자 인터페이스 색 구성표에서 색 하나를 반환합니다.
- `Displayable getCurrent ()` — 이 MIDlet 의 현재 Displayable 객체를 가져옵니다.
- `static Display getDisplay ( MIDlet m)` — 이 MIDlet 에 고유한 Display 객체를 가져옵니다.
- `boolean isColor ()` — 장치의 색 지원에 대한 정보를 가져옵니다.
- `int numAlphaLevels ()` — 이 구현에서 지원하는 알파 투명도 수준의 수를 가져옵니다.
- `int numColors ()` — 장치에서 표현할 수 있는 색의 수( isColor() 가 true 인 경우) 또는 회색 수준( isColor() 가 false 인 경우)을 가져옵니다.
- `void setCurrent ( Alert alert, Displayable nextDisplayable)` — 이 Alert 를 현재로 만들고, Alert 가 닫힌 후에는 nextDisplayable 을 현재로 만들 것을 요청합니다.
- `void setCurrent ( Displayable nextDisplayable)` — 다양한 Displayable 객체를 디스플레이에 표시하도록 요청합니다.
- `void setCurrentItem ( Item item)` — 이 Item 을 포함하는 Displayable 이 현재가 되고 Displayable 을 스크롤하여 Item 을 표시하고 여기에 해당 초점을 할당하도록 요청합니다.
- `boolean vibrate (int duration)` — 장치의 바이브레이터 작업을 요청합니다.
## 필드 상세
### LIST_ELEMENT
```java
public static final int LIST_ELEMENT
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getBestImageWidth(int imageType)``,
``getBestImageHeight(int imageType)``,
`Constant Field Values`
### CHOICE_GROUP_ELEMENT
```java
public static final int CHOICE_GROUP_ELEMENT
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getBestImageWidth(int imageType)``,
``getBestImageHeight(int imageType)``,
`Constant Field Values`
### ALERT
```java
public static final int ALERT
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getBestImageWidth(int imageType)``,
``getBestImageHeight(int imageType)``,
`Constant Field Values`
### COLOR_BACKGROUND
```java
public static final int COLOR_BACKGROUND
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getColor(int)``,
`Constant Field Values`
### COLOR_FOREGROUND
```java
public static final int COLOR_FOREGROUND
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getColor(int)``,
`Constant Field Values`
### COLOR_HIGHLIGHTED_BACKGROUND
```java
public static final int COLOR_HIGHLIGHTED_BACKGROUND
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getColor(int)``,
`Constant Field Values`
### COLOR_HIGHLIGHTED_FOREGROUND
```java
public static final int COLOR_HIGHLIGHTED_FOREGROUND
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getColor(int)``,
`Constant Field Values`
### COLOR_BORDER
```java
public static final int COLOR_BORDER
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getColor(int)``,
`Constant Field Values`
### COLOR_HIGHLIGHTED_BORDER
```java
public static final int COLOR_HIGHLIGHTED_BORDER
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getColor(int)``,
`Constant Field Values`
### getDisplay
```java
public static Display getDisplay(MIDlet m)
```
**Parameters:**
- `m` - 응용 프로그램의 `MIDlet`
**Returns:**
- 응용 프로그램이 사용자 인터페이스에 사용할 수 있는
디스플레이 객체
**Throws:**
- `NullPointerException` - `m`이 `null`인 경우
### getColor
```java
public int getColor(int colorSpecifier)
```
**Parameters:**
- `colorSpecifier` - 미리
정의된 색 지정자.
``COLOR_BACKGROUND``,
``COLOR_FOREGROUND``,
``COLOR_HIGHLIGHTED_BACKGROUND``,
``COLOR_HIGHLIGHTED_FOREGROUND``,
``COLOR_BORDER``,
``COLOR_HIGHLIGHTED_BORDER`` 중 하나여야 합니다.
**Returns:**
- `0x00RRGGBB` 형식의 색
**Throws:**
- `IllegalArgumentException` - `colorSpecifier`가
유효한 색 지정자가 아닌 경우
**Since:**
- MIDP 2.0
### getBorderStyle
```java
public int getBorderStyle(boolean highlighted)
```
**Parameters:**
- `highlighted` - 요청된 경계선 스타일이
강조 표시된 상태용이면 `true`,
요청된 경계선 스타일이
강조 표시되지 않은 상태용이면
`false`
**Returns:**
- ``Graphics.DOTTED`` 또는 ``Graphics.SOLID``
**Since:**
- MIDP 2.0
### isColor
```java
public boolean isColor()
```
**Returns:**
- 디스플레이에서 색을 지원하면 `true`,
그렇지 않으면 `false`
### numColors
```java
public int numColors()
```
**Returns:**
- 색의 수
### numAlphaLevels
```java
public int numAlphaLevels()
```
**Returns:**
- 지원되는 알파 수준 수
**Since:**
- MIDP 2.0
### getCurrent
```java
public Displayable getCurrent()
```
**Returns:**
- `MIDlet`의 현재 `Displayable` 객체
**See Also:**
- ``setCurrent(javax.microedition.lcdui.Displayable)``
### setCurrent
```java
public void setCurrent(Displayable nextDisplayable)
```
**Parameters:**
- `nextDisplayable` - 현재로 만들기 위해
요청된 `Displayable`로
`null`이 허용됩니다.
**See Also:**
- ``getCurrent()``
### setCurrent
```java
public void setCurrent(Alert alert,
Displayable nextDisplayable)
```
**Parameters:**
- `nextDisplayable` - 이 경고가 닫힌 다음 표시될
`Displayable`
**Throws:**
- `IllegalArgumentException` - `nextDisplayable`이
`Alert`인 경우
**See Also:**
- ``Alert``,
``getCurrent()``
### setCurrentItem
```java
public void setCurrentItem(Item item)
```
**Parameters:**
- `item` - 표시되어야 하는 항목
**Throws:**
- `NullPointerException` - `item`이 `null`인 경우
**Since:**
- MIDP 2.0
### callSerially
```java
public void callSerially(Runnable r)
```
**Parameters:**
- `r` - 호출되는 `Runnable` 인터페이스의 인스턴스
### flashBacklight
```java
public boolean flashBacklight(int duration)
```
**Parameters:**
- `duration` - 후광이 깜박여야 할 시간(밀리초),
또는 깜박임이 중지되어야 하는 경우 0
**Returns:**
- 응용 프로그램에서 후광을 제어할 수 있고
이 디스플레이가 포그라운드에 있는 경우 `true`,
그렇지 않은 경우 `false`
**Throws:**
- `IllegalArgumentException` - `duration`이 음수인 경우
**Since:**
- MIDP 2.0
### vibrate
```java
public boolean vibrate(int duration)
```
**Parameters:**
- `duration` - 바이브레이터를 실행해야 하는 시간(밀리초),
또는 바이브레이터를 해제해야 하는 경우 0
**Returns:**
- 응용 프로그램에서 바이브레이터를 제어할 수 있고
이 디스플레이가 포그라운드에 있는 경우 `true`,
그렇지 않은 경우 `false`
**Throws:**
- `IllegalArgumentException` - `duration`이 음수인 경우
**Since:**
- MIDP 2.0
### getBestImageWidth
```java
public int getBestImageWidth(int imageType)
```
**Parameters:**
- `imageType` - 이미지 유형
**Returns:**
- 이미지 유형에 최적인 이미지 너비로 최적의 크기가
없는 경우 0일 수 있으며 음수가 아니어야 합니다.
**Throws:**
- `IllegalArgumentException` - `imageType`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
### getBestImageHeight
```java
public int getBestImageHeight(int imageType)
```
**Parameters:**
- `imageType` - 이미지 유형
**Returns:**
- 이미지 유형에 최적인 이미지 높이로 최적의 크기가
없는 경우 0일 수 있으며 음수가 아니어야 합니다.
**Throws:**
- `IllegalArgumentException` - `imageType`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
## 메서드 상세
### getDisplay
```java
public static Display getDisplay(MIDlet m)
```
**Parameters:**
- `m` - 응용 프로그램의 `MIDlet`
**Returns:**
- 응용 프로그램이 사용자 인터페이스에 사용할 수 있는
디스플레이 객체
**Throws:**
- `NullPointerException` - `m`이 `null`인 경우
### getColor
```java
public int getColor(int colorSpecifier)
```
**Parameters:**
- `colorSpecifier` - 미리
정의된 색 지정자.
``COLOR_BACKGROUND``,
``COLOR_FOREGROUND``,
``COLOR_HIGHLIGHTED_BACKGROUND``,
``COLOR_HIGHLIGHTED_FOREGROUND``,
``COLOR_BORDER``,
``COLOR_HIGHLIGHTED_BORDER`` 중 하나여야 합니다.
**Returns:**
- `0x00RRGGBB` 형식의 색
**Throws:**
- `IllegalArgumentException` - `colorSpecifier`가
유효한 색 지정자가 아닌 경우
**Since:**
- MIDP 2.0
### getBorderStyle
```java
public int getBorderStyle(boolean highlighted)
```
**Parameters:**
- `highlighted` - 요청된 경계선 스타일이
강조 표시된 상태용이면 `true`,
요청된 경계선 스타일이
강조 표시되지 않은 상태용이면
`false`
**Returns:**
- ``Graphics.DOTTED`` 또는 ``Graphics.SOLID``
**Since:**
- MIDP 2.0
### isColor
```java
public boolean isColor()
```
**Returns:**
- 디스플레이에서 색을 지원하면 `true`,
그렇지 않으면 `false`
### numColors
```java
public int numColors()
```
**Returns:**
- 색의 수
### numAlphaLevels
```java
public int numAlphaLevels()
```
**Returns:**
- 지원되는 알파 수준 수
**Since:**
- MIDP 2.0
### getCurrent
```java
public Displayable getCurrent()
```
**Returns:**
- `MIDlet`의 현재 `Displayable` 객체
**See Also:**
- ``setCurrent(javax.microedition.lcdui.Displayable)``
### setCurrent
```java
public void setCurrent(Displayable nextDisplayable)
```
**Parameters:**
- `nextDisplayable` - 현재로 만들기 위해
요청된 `Displayable`로
`null`이 허용됩니다.
**See Also:**
- ``getCurrent()``
### setCurrent
```java
public void setCurrent(Alert alert,
Displayable nextDisplayable)
```
**Parameters:**
- `nextDisplayable` - 이 경고가 닫힌 다음 표시될
`Displayable`
**Throws:**
- `IllegalArgumentException` - `nextDisplayable`이
`Alert`인 경우
**See Also:**
- ``Alert``,
``getCurrent()``
### setCurrentItem
```java
public void setCurrentItem(Item item)
```
**Parameters:**
- `item` - 표시되어야 하는 항목
**Throws:**
- `NullPointerException` - `item`이 `null`인 경우
**Since:**
- MIDP 2.0
### callSerially
```java
public void callSerially(Runnable r)
```
**Parameters:**
- `r` - 호출되는 `Runnable` 인터페이스의 인스턴스
### flashBacklight
```java
public boolean flashBacklight(int duration)
```
**Parameters:**
- `duration` - 후광이 깜박여야 할 시간(밀리초),
또는 깜박임이 중지되어야 하는 경우 0
**Returns:**
- 응용 프로그램에서 후광을 제어할 수 있고
이 디스플레이가 포그라운드에 있는 경우 `true`,
그렇지 않은 경우 `false`
**Throws:**
- `IllegalArgumentException` - `duration`이 음수인 경우
**Since:**
- MIDP 2.0
### vibrate
```java
public boolean vibrate(int duration)
```
**Parameters:**
- `duration` - 바이브레이터를 실행해야 하는 시간(밀리초),
또는 바이브레이터를 해제해야 하는 경우 0
**Returns:**
- 응용 프로그램에서 바이브레이터를 제어할 수 있고
이 디스플레이가 포그라운드에 있는 경우 `true`,
그렇지 않은 경우 `false`
**Throws:**
- `IllegalArgumentException` - `duration`이 음수인 경우
**Since:**
- MIDP 2.0
### getBestImageWidth
```java
public int getBestImageWidth(int imageType)
```
**Parameters:**
- `imageType` - 이미지 유형
**Returns:**
- 이미지 유형에 최적인 이미지 너비로 최적의 크기가
없는 경우 0일 수 있으며 음수가 아니어야 합니다.
**Throws:**
- `IllegalArgumentException` - `imageType`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
### getBestImageHeight
```java
public int getBestImageHeight(int imageType)
```
**Parameters:**
- `imageType` - 이미지 유형
**Returns:**
- 이미지 유형에 최적인 이미지 높이로 최적의 크기가
없는 경우 0일 수 있으며 음수가 아니어야 합니다.
**Throws:**
- `IllegalArgumentException` - `imageType`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
---
title: "Class Displayable"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
```
## 설명
**Direct Known Subclasses:**
- `Canvas`, `Screen`
**extends Object:**
디스플레이에 놓일 수 있는 기능을 보유한 객체입니다.
`Displayable` 객체에는 제목, 티커,
0개 이상의 명령 및 이와 연관된 수신기가 있습니다.
표시되는 내용 및 사용자와의 상호 작용은
서브 클래스에 의해 정의됩니다.
제목 문자열에는 `줄 바꿈`이
포함될 수 있습니다. 제목 문자열을 표시할 때는
적절하게 줄을 바꿔야 합니다.
예를 들어, 제목줄로 한 줄만 사용할 수 있고
줄 바꿈 문자열이 포함된 경우에는 줄 바꿈한 줄의
문자만 표시됩니다.
서브 클래스에 의해 다르게 지정되지 않는 경우
새로 만든 `Displayable` 객체의 기본 상태는 다음과 같습니다.
- `Display`에 표시되지 않습니다.
- 이 `Displayable`과 연관된
`Ticker`가 없습니다.
- 제목이 `null`입니다.
- `Commands`가 없습니다.
- `CommandListener`가 없습니다.
**Since:**
- MIDP 1.0
## 메서드 요약
- `void addCommand ( Command cmd)` — 명령을 Displayable 에 추가합니다.
- `int getHeight ()` — 응용 프로그램에서 사용 가능한 표시 가능 영역의 높이(픽셀 단위)를 가져옵니다.
- `Ticker getTicker ()` — 이 Displayable 에 사용되는 티커를 가져옵니다.
- `String getTitle ()` — Displayable 의 제목을 가져옵니다.
- `int getWidth ()` — 응용 프로그램에서 사용 가능한 표시 가능 영역의 너비(픽셀 단위)를 가져옵니다.
- `boolean isShown ()` — Displayable 이 디스플레이에서 실제로 표시되는지 확인합니다.
- `void removeCommand ( Command cmd)` — Displayable 에서 명령을 제거합니다.
- `void setCommandListener ( CommandListener l)` — `Commands` 의 수신기를 Displayable 로 설정하여 이전 CommandListener 를 대체합니다.
- `void setTicker ( Ticker ticker)` — 이 Displayable 과 함께 사용할 티커를 설정하면 이전 티커를 대체합니다.
- `void setTitle ( String s)` — Displayable 의 제목을 설정합니다.
- `protected void sizeChanged (int w, int h)` — Displayable 의 사용 가능 영역이 변경되면 구현 시 이 메소드를 호출합니다.
## 메서드 상세
### getTitle
```java
public String getTitle()
```
**Returns:**
- 인스턴스의 제목, 또는 제목이 없는 경우 `null`
**Since:**
- MIDP 2.0
**See Also:**
- ``setTitle(java.lang.String)``
### setTitle
```java
public void setTitle(String s)
```
**Parameters:**
- `s` - 새 제목, 또는 제목이 없는 경우 `null`
**Since:**
- MIDP 2.0
**See Also:**
- ``getTitle()``
### setTicker
```java
public void setTicker(Ticker ticker)
```
**Parameters:**
- `ticker` - 이 화면에 사용된 티커 객체
**Since:**
- MIDP 2.0
**See Also:**
- ``getTicker()``
### getTicker
```java
public Ticker getTicker()
```
**Returns:**
- 사용된 티커 객체, 또는 티커가
없는 경우 `null`
**Since:**
- MIDP 2.0
**See Also:**
- ``setTicker(javax.microedition.lcdui.Ticker)``
### isShown
```java
public boolean isShown()
```
**Returns:**
- `Displayable`이 현재 표시되는 경우
`true`
### addCommand
```java
public void addCommand(Command cmd)
```
**Parameters:**
- `cmd` - 추가되는 명령
**Throws:**
- `NullPointerException` - `cmd`가
`null`인 경우
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Parameters:**
- `cmd` - 제거되는 명령
### setCommandListener
```java
public void setCommandListener(CommandListener l)
```
**Parameters:**
- `l` - 새 수신기 또는 `null`.
### getWidth
```java
public int getWidth()
```
**Returns:**
- 응용 프로그램에서 사용 가능한 영역의 너비
**Since:**
- MIDP 2.0
### getHeight
```java
public int getHeight()
```
**Returns:**
- 응용 프로그램에서 사용 가능한 영역의 높이
**Since:**
- MIDP 2.0
### sizeChanged
```java
protected void sizeChanged(int w,
int h)
```
**Parameters:**
- `h` - 사용 가능한 영역의 새 높이(픽셀 단위)
**Since:**
- MIDP 2.0
---
title: "Class Font"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Font
```
## 설명
**extends Object:**
`Font` 클래스는
글꼴 및 글꼴 메트릭을 나타냅니다.
`Font`는 응용 프로그램에서 만들 수 없습니다.
대신 응용 프로그램은 글꼴 속성을
기반으로 글꼴을 쿼리하며
시스템은 가능하면 요청한 속성과 일치하는
글꼴을 제공하려고 시도합니다.
`Font`의 속성은 스타일, 크기 및 서체입니다.
속성 값은 심볼릭 상수를 기준으로 지정해야 합니다.
스타일 속성 값은 비트 방식 `OR` 연산자를
사용하여 결합될 수 있지만
다른 속성의 값은 결합되지 않을 수 있습니다.
예를 들어, 다음 값
`
STYLE_BOLD | STYLE_ITALIC
`은
굵은 기울임체 글꼴을 지정하는 데 사용할 수 있지만 다음 값
`
SIZE_LARGE | SIZE_SMALL
`은
유효하지 않습니다.
이러한 상수 값은 각 속성에 대해 0이 유효하도록 정렬되며
시스템에 적합한 기본 글꼴을 지정하는 데 사용할 수 있습니다.
정확한 프로그래밍을 위해 다음 심볼릭 상수가 제공되며
값은 0으로 정의됩니다.
- ` STYLE_PLAIN `
- ` SIZE_MEDIUM `
- ` FACE_SYSTEM `
다른 속성 값의 경우 실수로 이 속성을 잘못
사용하면(예: 스타일이 필요한 곳에
`FACE_PROPORTIONAL` 사용)
오류를 발생시키기 위해 분리된
비트 패턴을 가지도록 정렬됩니다.
하지만 다양한 속성 값은 서로 결합되지는 않습니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int FACE_MONOSPACE` — "고정 폭" 글꼴.
- `static int FACE_PROPORTIONAL` — "비례" 글꼴.
- `static int FACE_SYSTEM` — "시스템" 글꼴.
- `static int FONT_INPUT_TEXT` — 사용자가 텍스트 입력을 그리기 위해 구현 시 사용하는 글꼴 지정자.
- `static int FONT_STATIC_TEXT` — 항목 및 화면 내용을 그리기 위해 사용된 기본 글꼴 지정자.
- `static int SIZE_LARGE` — "큰" 시스템 종속 글꼴 크기.
- `static int SIZE_MEDIUM` — "중간" 시스템 종속 글꼴 크기.
- `static int SIZE_SMALL` — "작은" 시스템 종속 글꼴 크기.
- `static int STYLE_BOLD` — 굵은체 스타일 상수.
- `static int STYLE_ITALIC` — 기울임꼴 스타일 상수.
- `static int STYLE_PLAIN` — 일반 스타일 상수.
- `static int STYLE_UNDERLINED` — 밑줄 스타일 상수.
## 메서드 요약
- `int charsWidth (char[] ch, int offset, int length)` — 지정한 오프셋에서 시작하여 지정한 문자 수(길이)로 ch 의 문자 진행 폭을 반환합니다.
- `int charWidth (char ch)` — 이 글꼴로 지정된 문자의 진행 폭을 가져옵니다.
- `int getBaselinePosition ()` — 텍스트의 맨 위에서 텍스트 기준선까지의 거리(픽셀 단위)를 가져옵니다.
- `static Font getDefaultFont ()` — 시스템의 기본 글꼴을 가져옵니다.
- `int getFace ()` — 글꼴의 서체를 가져옵니다.
- `static Font getFont (int fontSpecifier)` — 전달된 fontSpecifier 에 높은 수준의 사용자 인터페이스에서 사용하는 Font 를 가져옵니다.
- `static Font getFont (int face, int style, int size)` — 지정한 서체, 스타일 및 크기를 갖는 글꼴을 나타내는 객체를 가져옵니다.
- `int getHeight ()` — 이 글꼴인 텍스트 행의 표준 높이를 가져옵니다.
- `int getSize ()` — 글꼴의 크기를 가져옵니다.
- `int getStyle ()` — 글꼴의 스타일을 가져옵니다.
- `boolean isBold ()` — 굵은체 글꼴인 경우 true 를 반환합니다.
- `boolean isItalic ()` — 기울임꼴 글꼴인 경우 true 를 반환합니다.
- `boolean isPlain ()` — 일반 글꼴인 경우 true 를 반환합니다.
- `boolean isUnderlined ()` — 밑줄 그어진 글꼴인 경우 true 를 반환합니다.
- `int stringWidth ( String str)` — 이 Font 로 지정한 String 을 표시하기 위해 전체 진행 폭을 가져옵니다.
- `int substringWidth ( String str, int offset, int len)` — 이 Font 로 지정한 하위 문자열을 표시하기 위해 전체 진행 폭을 가져옵니다.
## 필드 상세
### STYLE_PLAIN
```java
public static final int STYLE_PLAIN
```
**See Also:**
- `Constant Field Values`
### STYLE_BOLD
```java
public static final int STYLE_BOLD
```
**See Also:**
- `Constant Field Values`
### STYLE_ITALIC
```java
public static final int STYLE_ITALIC
```
**See Also:**
- `Constant Field Values`
### STYLE_UNDERLINED
```java
public static final int STYLE_UNDERLINED
```
**See Also:**
- `Constant Field Values`
### SIZE_SMALL
```java
public static final int SIZE_SMALL
```
**See Also:**
- `Constant Field Values`
### SIZE_MEDIUM
```java
public static final int SIZE_MEDIUM
```
**See Also:**
- `Constant Field Values`
### SIZE_LARGE
```java
public static final int SIZE_LARGE
```
**See Also:**
- `Constant Field Values`
### FACE_SYSTEM
```java
public static final int FACE_SYSTEM
```
**See Also:**
- `Constant Field Values`
### FACE_MONOSPACE
```java
public static final int FACE_MONOSPACE
```
**See Also:**
- `Constant Field Values`
### FACE_PROPORTIONAL
```java
public static final int FACE_PROPORTIONAL
```
**See Also:**
- `Constant Field Values`
### FONT_STATIC_TEXT
```java
public static final int FONT_STATIC_TEXT
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int fontSpecifier)``,
`Constant Field Values`
### FONT_INPUT_TEXT
```java
public static final int FONT_INPUT_TEXT
```
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int fontSpecifier)``,
`Constant Field Values`
### getFont
```java
public static Font getFont(int fontSpecifier)
```
**Parameters:**
- `fontSpecifier` - `FONT_INPUT_TEXT`나
`FONT_STATIC_TEXT` 중 하나
**Returns:**
- 글꼴 지정자에 전달된 글꼴
**Throws:**
- `IllegalArgumentException` - `fontSpecifier`가
유효한 fontSpecifier가 아닌 경우
**Since:**
- MIDP 2.0
### getDefaultFont
```java
public static Font getDefaultFont()
```
**Returns:**
- 기본 글꼴
### getFont
```java
public static Font getFont(int face,
int style,
int size)
```
**Parameters:**
- `size` - `SIZE_SMALL`이나 `SIZE_MEDIUM`,
`SIZE_LARGE` 중 하나
**Returns:**
- 검색된 가장 근접한 글꼴 인스턴스
**Throws:**
- `IllegalArgumentException` - `face`,
`style` 또는 `size`가
유효한 값이 아닌 경우
### getStyle
```java
public int getStyle()
```
**Returns:**
- 현재 글꼴 스타일
**See Also:**
- ``isPlain()``,
``isBold()``,
``isItalic()``
### getSize
```java
public int getSize()
```
**Returns:**
- `SIZE_SMALL`이나 `SIZE_MEDIUM`,
`SIZE_LARGE` 중 하나
### getFace
```java
public int getFace()
```
**Returns:**
- `FACE_SYSTEM`이나
`FACE_PROPORTIONAL`, `FACE_MONOSPACE` 중 하나
### isPlain
```java
public boolean isPlain()
```
**Returns:**
- 일반 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### isBold
```java
public boolean isBold()
```
**Returns:**
- 굵은체 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### isItalic
```java
public boolean isItalic()
```
**Returns:**
- 기울임꼴 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### isUnderlined
```java
public boolean isUnderlined()
```
**Returns:**
- 밑줄 그어진 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### getHeight
```java
public int getHeight()
```
**Returns:**
- 이 글꼴인 텍스트 행의
표준 높이(음수가 아닌 값)
### getBaselinePosition
```java
public int getBaselinePosition()
```
**Returns:**
- 텍스트의 맨 위에서 텍스트의
기준선까지의 거리(픽셀 단위)
### charWidth
```java
public int charWidth(char ch)
```
**Parameters:**
- `ch` - 측정되는 문자
**Returns:**
- 전체 진행 폭(음수가 아닌 값)
### charsWidth
```java
public int charsWidth(char[] ch,
int offset,
int length)
```
**Parameters:**
- `length` - 측정할 문자 수
**Returns:**
- 문자 범위의 너비
**Throws:**
- `NullPointerException` - `ch`가 `null`인 경우
### stringWidth
```java
public int stringWidth(String str)
```
**Parameters:**
- `str` - 측정되는 `String`
**Returns:**
- 전체 진행 폭
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
### substringWidth
```java
public int substringWidth(String str,
int offset,
int len)
```
**Parameters:**
- `len` - 하위 문자열 길이
**Returns:**
- 전체 진행 폭
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
## 메서드 상세
### getFont
```java
public static Font getFont(int fontSpecifier)
```
**Parameters:**
- `fontSpecifier` - `FONT_INPUT_TEXT`나
`FONT_STATIC_TEXT` 중 하나
**Returns:**
- 글꼴 지정자에 전달된 글꼴
**Throws:**
- `IllegalArgumentException` - `fontSpecifier`가
유효한 fontSpecifier가 아닌 경우
**Since:**
- MIDP 2.0
### getDefaultFont
```java
public static Font getDefaultFont()
```
**Returns:**
- 기본 글꼴
### getFont
```java
public static Font getFont(int face,
int style,
int size)
```
**Parameters:**
- `size` - `SIZE_SMALL`이나 `SIZE_MEDIUM`,
`SIZE_LARGE` 중 하나
**Returns:**
- 검색된 가장 근접한 글꼴 인스턴스
**Throws:**
- `IllegalArgumentException` - `face`,
`style` 또는 `size`가
유효한 값이 아닌 경우
### getStyle
```java
public int getStyle()
```
**Returns:**
- 현재 글꼴 스타일
**See Also:**
- ``isPlain()``,
``isBold()``,
``isItalic()``
### getSize
```java
public int getSize()
```
**Returns:**
- `SIZE_SMALL`이나 `SIZE_MEDIUM`,
`SIZE_LARGE` 중 하나
### getFace
```java
public int getFace()
```
**Returns:**
- `FACE_SYSTEM`이나
`FACE_PROPORTIONAL`, `FACE_MONOSPACE` 중 하나
### isPlain
```java
public boolean isPlain()
```
**Returns:**
- 일반 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### isBold
```java
public boolean isBold()
```
**Returns:**
- 굵은체 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### isItalic
```java
public boolean isItalic()
```
**Returns:**
- 기울임꼴 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### isUnderlined
```java
public boolean isUnderlined()
```
**Returns:**
- 밑줄 그어진 글꼴인 경우 `true`
**See Also:**
- ``getStyle()``
### getHeight
```java
public int getHeight()
```
**Returns:**
- 이 글꼴인 텍스트 행의
표준 높이(음수가 아닌 값)
### getBaselinePosition
```java
public int getBaselinePosition()
```
**Returns:**
- 텍스트의 맨 위에서 텍스트의
기준선까지의 거리(픽셀 단위)
### charWidth
```java
public int charWidth(char ch)
```
**Parameters:**
- `ch` - 측정되는 문자
**Returns:**
- 전체 진행 폭(음수가 아닌 값)
### charsWidth
```java
public int charsWidth(char[] ch,
int offset,
int length)
```
**Parameters:**
- `length` - 측정할 문자 수
**Returns:**
- 문자 범위의 너비
**Throws:**
- `NullPointerException` - `ch`가 `null`인 경우
### stringWidth
```java
public int stringWidth(String str)
```
**Parameters:**
- `str` - 측정되는 `String`
**Returns:**
- 전체 진행 폭
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
### substringWidth
```java
public int substringWidth(String str,
int offset,
int len)
```
**Parameters:**
- `len` - 하위 문자열 길이
**Returns:**
- 전체 진행 폭
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
---
title: "Class Form"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
|
+--javax.microedition.lcdui.Screen
|
+--javax.microedition.lcdui.Form
```
## 설명
**extends Screen:**
`Form`은 이미지, 읽기 전용 텍스트 필드,
편집 가능 텍스트 필드, 편집 가능 날짜 필드, 게이지, 선택 그룹 및
사용자 정의 항목 등의 임의 혼합을 포함하는 `Screen`입니다.
일반적으로 ``Item`` 클래스의 모든 서브 클래스는 양식 안에
포함될 수 있습니다. 구현 시 레이아웃, 순회 및
스크롤을 처리합니다. `Form`의 전체 내용은
함께 스크롤됩니다.
`Form` 안에
포함된 항목은 append, delete, insert,
및 set 메소드를 사용하여 편집할 수 있습니다. `Form`
내의 `Item`은
해당 색인으로 참조되며 0에서
`size()-1`까지의 범위에 있는 연속 정수로,
0은 첫 번째 항목을 참조하고 `size()-1`은
마지막 항목을 참조합니다.
한 항목은 한 `Form` 내에만 놓일 수 있습니다.
응용 프로그램이 한 항목을
`Form`에 놓으려 하고
해당 항목을 이것이나 다른
`Form`이 이미 소유한 경우
`IllegalStateException`이 발생합니다.
항목을 새 `Form`에
삽입하기 전에 응용 프로그램은
현재 포함하는 `Form`에서
해당 항목을 제거해야 합니다.
응용 프로그램에서 내용에 대한 변경을 요청할 때
디스플레이에 `Form`이 표시되는 경우
구현 시 가능한 한 빨리
디스플레이에 대한 업데이트가 이루어집니다.
양식의 내용이 수정된 다음 응용 프로그램은
`Form`의 디스플레이를 갱신하기 위해
아무런 작업을 수행하지 않아도 됩니다.
`Form`의 레이아웃 정책은 행을 중심으로 구성됩니다.
행은 일반적으로 여백, 스크롤 막대 등과 함께 화면의 너비와
연관되어 있습니다. 특정 `Form`에 있는
모든 행의 너비는 같습니다.
스크롤 막대를 추가하거나 제거해야 하는 것과 같은
특수 상황에서 행의 너비를 모두 변경할 수는 있지만
행 너비는 `Form`에 포함된 `Item`에 따라
달라지지 않습니다.
`Form`은 일반적으로 가로로
스크롤하지 않습니다.
`Form`은 세로로 확장되므로 필요하면
세로로 스크롤합니다. `Form`의 높이는 행의
수와 각 행의 높이에 따라 달라집니다.
각 행의 높이는 해당 행에 위치한 항목에 따라 결정됩니다.
행의 높이가 모두 같아야 할 필요는 없습니다.
`Item` 레이블을 세로로 정렬하거나
적절한 채워넣기를 제공하기 위해 구현 시 행 높이가
달라질 수도 있습니다.
사용 중인 언어 규칙에 따라 구현 시 왼쪽에서
오른쪽이나 오른쪽에서 왼쪽 방향으로 `Item`을
배치하도록 선택할 수 있습니다. 레이아웃 방향과 같게 선택하면
특정 `Form` 내의 모든 행에 적용해야 합니다.
레이아웃 알고리즘을 시작하기 전에
`Form`은 맨 위에
빈 행이 하나 있는 것으로 간주됩니다.
레이아웃 알고리즘은 `Item` 0에서
시작하여 `Form`의
마지막 `Item`이 처리될
때까지 각 `Item`을 차례로 진행합니다.
레이아웃 방향(위에 설명)이 왼쪽에서 오른쪽인 경우
행은 `Form`의 왼쪽
가장자리부터 시작합니다.
레이아웃 방향이 오른쪽에서 왼쪽인 경우
행은 `Form`의 오른쪽 가장자리부터 시작합니다.
행 압축을 일찍 종료시키는 조건이 발생하지 않는 한
`Item`은 각 행의
시작 부분에 놓이며 선택된
레이아웃 방향의 각 행을 거쳐 진행하여
각 행에 들어갈 만큼 압축됩니다.
그런 다음 새 행이 추가되고 위에 설명된 대로 거기에
`Item`이 압축됩니다. `Item`이 행에
압축되고 레이아웃 알고리즘에 의해 모든 `Item`이
처리될 때까지 기존 행 아래에 새 행이
필요한 만큼 추가됩니다.
레이아웃 알고리즘은 *현재 정렬*의 개념을 가집니다.
`LAYOUT_LEFT`, `LAYOUT_CENTER`
또는 `LAYOUT_RIGHT`의 값일 수 있습니다.
레이아웃 알고리즘 시작 시 현재 정렬의 값은
이 `Form`에 유효한 레이아웃 방향에 따라 달라집니다.
레이아웃 방향이 왼쪽에서 오른쪽인 경우
초기 정렬 값은 `LAYOUT_LEFT`여야 합니다.
레이아웃 방향이 오른쪽에서 왼쪽인 경우
초기 정렬 값은 `LAYOUT_RIGHT`여야 합니다.
레이아웃 알고리즘에 `LAYOUT_LEFT`,
`LAYOUT_CENTER` 또는 `LAYOUT_RIGHT`
레이아웃 지시어 중 하나를 가진 `Item`이 나타나면
현재 정렬이 변경됩니다. `Item`에 이러한 지시어 중
어느 하나도 없으면 현재 레이아웃 지시문은 변경되지 않습니다.
이 규칙은 정렬 값을 공유하는 연속 `Item`의 시퀀스로 `Form`의
내용을 그룹화하는 효과가 있습니다.
각 `Item`의 정렬 값은 `Form`에 대해
내부적으로 유지되어야 하며 ``Item.getLayout``
메소드에서 보고할 때 `Item`의 레이아웃 값에 영향을 미치지 않습니다.
"행 바꿈"을 일으키는 특정 조건이
발생하지 않는 한 레이아웃 알고리즘은 일반적으로
이전 항목과 같은 행에 항목을 두려고 시도합니다.
행 바꿈이 있으면 현재 항목은 여유 공간이 있더라도
이전 항목 다음이 아닌 새 행의
시작 부분에 놓입니다.
다음 조건 중 하나가 발생하면 행 바꿈이
항목 앞에서 발생합니다.
- 이전 행 다음에 행 바꿈이 있습니다.
- `LAYOUT_NEWLINE_BEFORE` 지시문이 있습니다.
- `StringItem` 내용이 "\n"으로 시작됩니다.
- `ChoiceGroup`,
`DateField`,
`Gauge` 또는 `TextField`
중 하나이며 `LAYOUT_2` 지시문이
설정되어 있지 않습니다.
- 이 `Item`에는 `Form`의
현재 정렬과 다른 `LAYOUT_LEFT`,
`LAYOUT_CENTER` 또는 `LAYOUT_RIGHT` 지시문 중 하나가 있습니다.
다음 조건 중 하나가 발생하면 항목 뒤에
행 바꿈이 발생합니다.
- `StringItem` 내용이 "\n"으로
끝납니다.
- `LAYOUT_NEWLINE_AFTER` 지시문이 있습니다.
- `ChoiceGroup`, `DateField`,
`Gauge` 또는 `TextField` 중 하나이며
`LAYOUT_2` 지시문이 설정되어 있지 않습니다.
이미 행 바꿈이 이미 있는 경우
`LAYOUT_NEWLINE_BEFORE`나
`LAYOUT_NEWLINE_AFTER` 지시문이 있더라도
추가 행 바꿈이 발생하지 않습니다.
예를 들어, 내용이 "\n"으로 시작하는
`StringItem`에 `LAYOUT_NEWLINE_BEFORE`
지시문이 표시되는 경우 행 바꿈은 하나만 있습니다.
유사한 규칙이 후행 "\n"과
`LAYOUT_NEWLINE_AFTER`에도 적용됩니다.
또한 한 항목에 `LAYOUT_NEWLINE_AFTER` 지시문이 있고
다음 항목에 `LAYOUT_NEWLINE_BEFORE` 지시문이 있는 경우
행 바꿈은 하나만 있습니다.
하지만 단일 `StringItem` 내에 또는
인접 `StringItem`에 연속 "\n" 문자가
있으면 "\n" 문자 만큼의 행 바꿈이 발생합니다.
이렇게 하면 빈 행이 생깁니다.
행을 끝내는 "\n"이 발생하는 `StringItem`의 일반적인 글꼴 높이에 의해 빈 행의 높이가 결정됩니다.
구현 시 행 바꿈이 일어날 수 있는 추가 조건을 제공할 수 있습니다.
예를 들어, 구현 시 레이아웃 정책에 따라
레이블이 특별하게 배치될 수 있습니다.
따라서 레이블이 있는 모든 `Item` 앞에는 암시적으로
줄 바꿈이 일어납니다. 또 다른 예로 특정 구현 시 사용자 인터페이스
스타일에서 DateField 항목이 항상 한 행에 따로 표시되도록
지시할 수 있습니다. 이 경우 구현 시 각 `DateField` 항목의
앞과 뒤에서 모두 행 바꿈이 발생하게 됩니다.
인접한 `Form` 색인이 있는
두 개의 항목이 있을 때 두 항목 사이의 행 바꿈에 대해 지정한 조건이나
구현별 조건이 발생하지 않고 공간이 허용하는 경우
이러한 항목은 같은 행에
놓여야 합니다.
한 행에 `Item`을 압축할 때 항목의
너비는 행의 나머지 공간과 비교됩니다.
이를 위해 `Item`에
`Item`의 최소 너비를
사용하는 `LAYOUT_SHRINK` 지시문이 없는 경우
`Item`의 기본 너비가 사용됩니다.
`Item`의 너비가
행에 남아 있는 공간에 비해
너무 넓은 경우 해당 행은 가득 찬 것으로 간주되어
이 행 바로 아래에 새 행이 추가되고
`Item`이
새 행에 놓입니다.
일단 행의 내용이 결정되면 항목을 확장하고
항목 사이에 공간을 추가하여 행에서 사용 가능한 공간이 분산됩니다.
이 행의 항목에 `LAYOUT_SHRINK` 지시문이 있는
경우(즉, 축소 가능한 경우) 공간이 이러한 항목에 먼저 분산됩니다.
공간은 `Item`의 기본
크기와 최소 크기 간의 차이에
비례하여 이러한 각 항목에 분산됩니다.
이 단계에서 기본 너비를 초과하여 확장되는
축소 가능 항목은 없습니다.
예를 들어, 한 행에 사용 가능한 공간이 `30`픽셀이고
두 개의 축소 가능 항목 `A`와 `B`가 있다고
가정합니다. `A` 항목의 기본 크기는
`15`이고 최소 크기는
`10`입니다.
`B` 항목의 기본 크기는
`30`이고
최소 크기는 `20`입니다.
`A`의 기본 크기와 최소 크기의 차이는
`5`이며 `B`의
차이는 `10`입니다.
이러한 차이에 비례하여 `30` 픽셀이
이러한 항목에 분산됩니다.
따라서 `10` 픽셀은
`A` 항목에 분산되고 `20` 픽셀은
`B` 항목에 분산됩니다.
축소 가능 항목을 기본 너비로 모두 확장해도 여전히
행에 남는 공간이 있습니다. 이 남은 공간은
`LAYOUT_EXPAND`
지시문(확장 가능 `Item`)이
있는 항목 사이에 균등하게 분산됩니다.
행에 확장 가능 항목이 있으면
이 행의 `Item`이 행의
전체 너비를 차지하게 됩니다.
이 행에 확장 가능 항목이 없고 사용 가능한 공간은
있는 경우 `Item`은 가능한 한 빽빽하게 압축되고
이 행의 `Item`에서 공유하는 정렬 값에 따라 행에 놓입니다.
현재 정렬을 변경하면 행 바꿈이
일어나기 때문에 같은 행에 있는
모든 `Item`은 같은 정렬 값을 공유해야 합니다.
정렬 값이 `LAYOUT_LEFT`인 경우 `Item`은
행의 왼쪽 끝에 놓이며 나머지 공간은 행의 오른쪽 끝에 놓입니다.
정렬 값이 `LAYOUT_RIGHT`인 경우 `Item`은
행의 오른쪽 끝에 놓이며 나머지 공간은 행의 왼쪽 끝에 놓입니다.
정렬 값이 `LAYOUT_CENTER`인 경우 나머지 공간이
행의 왼쪽 끝과 오른쪽 끝에 균등하게
나뉘도록 `Item`은
행의 중간에 놓입니다.
특정 행에 항목 집합이 있다고 가정하면
이러한 `Item`의 높이가 검사됩니다.
각 `Item`에서
`Item`의 최소 높이를
사용하는 `LAYOUT_VSHRINK` 지시문이
`Item`에 없는 경우 기본 높이가 사용됩니다.
`Item`의
최고 높이가 행의 높이를 결정합니다.
`LAYOUT_VSHRINK`
지시문이 있는 `Item`이
기본 높이나 해당 행의 높이 중 작은 값으로 확장됩니다.
행 높이보다 짧고 `LAYOUT_VEXPAND` 지시문이
있는 `Item`은
해당 행의 높이로 확장됩니다.
한 항목에 있는
`LAYOUT_VEXPAND` 지시문은
행의 높이를 결코 늘리지 않습니다.
행 높이보다 짧은 나머지 `Item`은
`LAYOUT_TOP`, `LAYOUT_BOTTOM` 및
`LAYOUT_VCENTER` 지시문을 사용하여 행 내에서
수직으로 배치됩니다. 수직 레이아웃
지시문이 지정되어 있지 않은 경우
항목은 행의 아래쪽을 따라 정렬되어야 합니다.
`StringItem`은
위의 알고리즘에서 특수 처리됩니다.
`StringItem`의
내용(레이블을 제외한 문자열 값)이
개행 문자("\n")를 포함하는 경우 문자열은
그 지점에서 분할되어야 하며 나머지는
다음 행의 시작 부분에 놓여야 합니다.
`StringItem` 기본 크기의 하나나
두 개의 치수가 잠긴 경우 `StringItem`은
해당 너비와 높이에 맞춰 줄 바꿈되며 최소 및 기본 너비와 높이가
이 직사각형의 너비와 높이인 직사각형으로 처리됩니다.
이 경우 `LAYOUT_SHRINK`,
`LAYOUT_EXPAND`
및 `LAYOUT_VEXPAND` 지시문은 무시됩니다.
`StringItem` 기본 크기의 두 치수가
잠기지 않은 경우 `StringItem`의 텍스트는
여러 행에 걸쳐 줄 바꿈할 수 있습니다.
`Item`의 너비가 행의 나머지 공간과 비교되는
레이아웃 알고리즘에서는 현재 행에 맞춰 `StringItem`
시작 부분에서 텍스트가 선택됩니다.
그런 다음 이 행의 내용은 현재 정렬 값에 따라 배치됩니다.
`StringItem`의 텍스트 나머지 부분은 텍스트를
채워 넣는 데 필요한 만큼 많은 새 행을 전체 너비로 줄 바꿈합니다.
채워진 각 행은 현재 정렬 값에 따라 배치됩니다.
텍스트의 마지막 줄에는 해당 행에 사용 가능한 공간이 남습니다.
이 `StringItem` 뒤에 행 바꿈이 없으면
후속 `Item`은 나머지 공간에 압축되며 행의 내용은
현재 정렬 값을 따라 배치됩니다.
이 규칙은 현재 정렬 값이 `LAYOUT_LEFT`,
`LAYOUT_RIGHT` 또는 `LAYOUT_CENTER`인지에
따라 `StringItem`의 내용을 왼쪽 맞춤,
오른쪽 맞춤 또는 가운데 맞춤으로 설정된 텍스트 단락으로 표시하는
효과를 가집니다.
``Item.getPreferredWidth``와
``Item.getPreferredHeight`` 메소드에서
보고하는 대로 여러 행에 걸쳐 줄 바꿈된
`StringItem`의 기본 너비와 높이는 줄 바꿈된
텍스트의 경계 직사각형의 너비와 높이를 설명합니다.
`ImageItem`은 위의 알고리즘에 의해
특수하게 처리됩니다. 수평 정렬 값 및
`LAYOUT_LEFT`, `LAYOUT_RIGHT`,
`LAYOUT_CENTER` 지시문과 관련하여 앞에 언급한 규칙은
`LAYOUT_2` 지시문이 해당 항목에 있는 경우에만
`ImageItem`에 적용됩니다.
`LAYOUT_2` 지시문이 `ImageItem`에 없으면
`LAYOUT_LEFT`, `LAYOUT_RIGHT` 및
`LAYOUT_CENTER` 지시문의 동작은 구현별로 달라집니다.
`Form`의 레이아웃은
필요하면 자동으로 다시 계산됩니다.
이는 내용의 변경으로 인한 `Item`의 크기 변경으로 인해
또는 해당 항목의 기본 크기를 변경하기 위한 응용 프로그램의
요청으로 인해 발생할 수 있습니다.
응용 프로그램이 `Item`의 레이아웃 지시문을
변경한 경우에도 발생할 수 있습니다.
응용 프로그램은 `Form`의
레이아웃을 업데이트하기 위해
특정 작업을 수행하지 않아도 됩니다.
텍스트가 줄 바꾸기되는 모든 경우 줄 바꿈은
개행 문자(`'\n'` = Unicode `'U+000A'`)마다
발생해야 합니다. 전체 텍스트를 표시할 공간이 없는 경우
줄 바꿈에서 잘립니다. 적절한
줄 바꿈이 없는 경우 구현 시 단어를
경계로 텍스트를 자르는 것이 좋습니다.
단어 경계가 없는 경우 구현 시 문자를 경계로 텍스트를
자르는 것이 좋습니다.
줄 바꿈이 있는 레이블은 줄 바꿈에서 잘리고
레이블의 나머지 부분이 표시되지 않을 수 있습니다.
디스플레이에 `Form`이 있으면
사용자는 해당 `Item`과
무한정으로 상호 작용할 수
있습니다(예: `Item`에서
`Item`으로 순회 및
가능한 경우 스크롤). 이러한 순회 및
스크롤 작업은 응용 프로그램 표시
가능 이벤트를 발생시키지 않습니다.
`Form`에 포함된 상호 작용
`Item`의 상태를
사용자가 수정하면 시스템은 응용 프로그램에 알립니다.
``setItemStateListener()`` 메소드와
함께 `Form`에 선언된 수신기의 ``itemStateChanged()``
메소드를 호출하여
알릴 수 있습니다.
다른 `Displayable` 객체와 마찬가지로
`Form`은 ``commands``를 선언하고
``setCommandListener()`` 메소드와
함께 명령 수신기를
선언할 수 있습니다.
``CommandListener`` 객체는
``ItemStateListener`` 객체와
구분되며 별도로 선언되고 호출됩니다.
- 이 클래스는 구성 요소를 임의로
조합하는 것을 허용하지만
응용 프로그램 개발자는
작은 화면 크기를 유념해야 합니다.
`Form`은 *소수의 밀접히 연관된* UI 요소를
포함하도록 설계되었습니다.
- 여러 개의 항목을 화면에 넣을 수 없는 경우 요소를 편집할 때 별도의 화면이 나타나도록
화면을 스크롤할 수 있게 할 것인지 일부 구성 요소를 접을 것인지를
구현 시 선택할 수 있습니다.
**Since:**
- MIDP 1.0
**See Also:**
- ``Item``
## 생성자 요약
- Form ( String title) 새로운, 빈 Form 을 만듭니다.
- Form ( String title, Item [] items) 지정된 내용으로 새 Form 을 만듭니다.
## 메서드 요약
- `int append ( Image img)` — 한 개의 Image 로 구성된 항목을 Form 에 추가합니다.
- `int append ( Item item)` — Item 을 Form 에 추가합니다.
- `int append ( String str)` — 한 개의 String 으로 구성된 항목을 Form 에 추가합니다.
- `void delete (int itemNum)` — itemNum 이 참조하는 Item 을 삭제합니다.
- `void deleteAll ()` — 이 Form 에서 모든 항목을 삭제하여 0개의 항목을 남깁니다.
- `Item get (int itemNum)` — 지정된 위치에서 항목을 가져옵니다.
- `int getHeight ()` — 항목에 대해 사용할 수 있는 표시 가능 영역의 높이(픽셀 단위)를 반환합니다.
- `int getWidth ()` — 항목에 대해 사용할 수 있는 표시 가능 영역의 너비(픽셀 단위)를 반환합니다.
- `void insert (int itemNum, Item item)` — Form 에 지정된 항목 바로 앞에 항목을 삽입합니다.
- `void set (int itemNum, Item item)` — itemNum 이 참조하는 항목을 지정 항목으로 설정하여 이전 항목을 대체합니다.
- `void setItemStateListener ( ItemStateListener iListener)` — 이전의 모든 ItemStateListener 를 대체하여 Form 에 대한 ItemStateListener 를 설정합니다.
- `int size ()` — Form 에 있는 항목의 수를 가져옵니다.
## 생성자 상세
### Form
```java
public Form(String title)
```
- 새로운, 빈 `Form`을 만듭니다.
**Parameters:**
- `title` - `Form`의 제목, 또는 제목이 없는 경우
`null`
### Form
```java
public Form(String title,
Item[] items)
```
- 지정된 내용으로 새 `Form`을 만듭니다.
이는 빈 `Form`을 만든 다음 일련의
`append` 메소드를
사용하는 것과 같습니다.
항목 배열은 `null`일 수 있으며 이 경우
`Form`은
빈 상태로 만들어집니다.
항목 배열이 null이 아닌 경우 각 요소는 다른
`Form`에 이미 포함되지 않은 유효한
`Item`이어야 합니다.
**Parameters:**
- `items` - `Form`에
놓일 항목의 배열,
또는 항목이 없는 경우 `null`
**Throws:**
- `NullPointerException` - 항목 배열의 요소가
`null`인 경우
### append
```java
public int append(Item item)
```
**Parameters:**
- `item` - 추가되는 ``Item``
**Returns:**
- `Item`의 할당된 색인
**Throws:**
- `NullPointerException` - 항목이 `null`인 경우
### append
```java
public int append(String str)
```
**Parameters:**
- `str` - 추가되는 `String`
**Returns:**
- `Item`의 할당된 색인
**Throws:**
- `NullPointerException` - str이 `null`인 경우
### append
```java
public int append(Image img)
```
**Parameters:**
- `img` - 추가되는 이미지
**Returns:**
- `Item`의 할당된 색인
**Throws:**
- `NullPointerException` - `img`가 `null`인 경우
### insert
```java
public void insert(int itemNum,
Item item)
```
**Parameters:**
- `item` - 삽입되는 항목
**Throws:**
- `NullPointerException` - `item`이
`null`인 경우
### delete
```java
public void delete(int itemNum)
```
**Parameters:**
- `itemNum` - 삭제되는 항목의 색인
**Throws:**
- `IndexOutOfBoundsException` - `itemNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Since:**
- MIDP 2.0
### set
```java
public void set(int itemNum,
Item item)
```
**Parameters:**
- `item` - `Form`에 놓일 새 항목
**Throws:**
- `NullPointerException` - `item`이
`null`인 경우
### get
```java
public Item get(int itemNum)
```
**Parameters:**
- `itemNum` - 항목의 색인
**Returns:**
- 지정된 위치의 항목
**Throws:**
- `IndexOutOfBoundsException` - `itemNum`이 유효하지 않은 경우
### setItemStateListener
```java
public void setItemStateListener(ItemStateListener iListener)
```
**Parameters:**
- `iListener` - 새 수신기, 또는 이를 제거하려면 `null`
### size
```java
public int size()
```
**Returns:**
- 항목의 수
### getWidth
```java
public int getWidth()
```
**Overrides:**
- `getWidth` in class `Displayable`
**Returns:**
- `Form`의 너비(픽셀 단위)
**Since:**
- MIDP 2.0
### getHeight
```java
public int getHeight()
```
**Overrides:**
- `getHeight` in class `Displayable`
**Returns:**
- `Form`의
표시 가능 영역 높이(픽셀 단위)
**Since:**
- MIDP 2.0
## 메서드 상세
### append
```java
public int append(Item item)
```
**Parameters:**
- `item` - 추가되는 ``Item``
**Returns:**
- `Item`의 할당된 색인
**Throws:**
- `NullPointerException` - 항목이 `null`인 경우
### append
```java
public int append(String str)
```
**Parameters:**
- `str` - 추가되는 `String`
**Returns:**
- `Item`의 할당된 색인
**Throws:**
- `NullPointerException` - str이 `null`인 경우
### append
```java
public int append(Image img)
```
**Parameters:**
- `img` - 추가되는 이미지
**Returns:**
- `Item`의 할당된 색인
**Throws:**
- `NullPointerException` - `img`가 `null`인 경우
### insert
```java
public void insert(int itemNum,
Item item)
```
**Parameters:**
- `item` - 삽입되는 항목
**Throws:**
- `NullPointerException` - `item`이
`null`인 경우
### delete
```java
public void delete(int itemNum)
```
**Parameters:**
- `itemNum` - 삭제되는 항목의 색인
**Throws:**
- `IndexOutOfBoundsException` - `itemNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Since:**
- MIDP 2.0
### set
```java
public void set(int itemNum,
Item item)
```
**Parameters:**
- `item` - `Form`에 놓일 새 항목
**Throws:**
- `NullPointerException` - `item`이
`null`인 경우
### get
```java
public Item get(int itemNum)
```
**Parameters:**
- `itemNum` - 항목의 색인
**Returns:**
- 지정된 위치의 항목
**Throws:**
- `IndexOutOfBoundsException` - `itemNum`이 유효하지 않은 경우
### setItemStateListener
```java
public void setItemStateListener(ItemStateListener iListener)
```
**Parameters:**
- `iListener` - 새 수신기, 또는 이를 제거하려면 `null`
### size
```java
public int size()
```
**Returns:**
- 항목의 수
### getWidth
```java
public int getWidth()
```
**Overrides:**
- `getWidth` in class `Displayable`
**Returns:**
- `Form`의 너비(픽셀 단위)
**Since:**
- MIDP 2.0
### getHeight
```java
public int getHeight()
```
**Overrides:**
- `getHeight` in class `Displayable`
**Returns:**
- `Form`의
표시 가능 영역 높이(픽셀 단위)
**Since:**
- MIDP 2.0
---
title: "Class Gauge"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.Gauge
```
## 설명
**extends Item:**
정수 값의 그래픽 디스플레이(예: 막대 그래프)를 구현합니다.
`Gauge`는 0에서 *최대값*까지의 범위(포함)에 있는
*현재 값*을 포함합니다. 응용 프로그램은
현재 값과 최대값을 제어할 수 있습니다.
응용 프로그램에서 지정하는 값의 범위는 장치의 구분되는 시각적 상태 수보다
클 수 있으므로 두 개 이상의 값이 동일한
시각적 표현을 가져야 합니다.
예를 들어, 0에서 `99`까지의 값 범위를
갖는 `Gauge` 객체가 1-10개의 막대 집합을 사용하여
`Gauge`의 근사값을 표시하는 장치에서 실행 중인
경우를 가정합니다. 장치에서 한 개의 막대는 0-9의 값을 표시하고
두 개의 막대는 10-`19`의 값을,
세 개의 막대는 `20`-`29`의 값을
표시할 수 있습니다.
`Gauge`는 대화형이거나 비대화형일 수 있습니다.
응용 프로그램은 상호 작용 모드에 관계없이 언제든지
`Gauge`의 값을 설정하거나 검색할 수 있습니다.
객체가 대화형 모드로 만들어지는지 여부에 따라 구현 시
막대 그래프의 시각적 모양이
변경될 수 있습니다.
대화형 모드에서는 사용자가 값을 수정할 수 있습니다.
사용자는 언제든 해당 값을 위로나 아래로 1씩 변경할 방법이 있으며 보다
큰 증분으로 값을 변경하는 방법도 있습니다.
사용자는 설정된 범위를 벗어나는 값으로 이동할 수 없습니다.
따라서 응용 프로그램에서
초기 값을 설정한 다음 사용자가
그 이후 값부터 수정하도록 허용하는 것이 좋습니다.
사용자가 값과 상호 작용하고 있는 동안에도 응용 프로그램은
해당 값을 수정할 수 있습니다.
많은 경우 사용자가 값을 수정하는 유일한 방법은 버튼을 눌러
한 번에 한 단위씩 값을 늘리거나 줄이는 것입니다.
따라서 응용 프로그램은 몇 십 개를 넘지 않는 범위 내에서
지정해야 합니다.
비대화형 모드에서는 사용자가 값을 수정할 수 없습니다.
비대화형 모드는 사용자에게 오래 실행되는 작업 상태에 관한 피드백을
제공하기 위해 사용됩니다. 비대화형 모드는 주로 오래 실행되는 작업 중에
사용자에게 피드백을 제공하는 "진행 표시기"나
"작업 표시기"로 사용됩니다.
응용 프로그램은 `setValue()` 메소드를 사용하여
주기적으로 값을 업데이트할 수 있습니다.
비대화형 `Gauge`의 범위는 유한하거나 무한할 수 있습니다.
`Gauge`의 범위가 유한하면 0과 응용 프로그램에서
설정한 최대값 사이의 정수 값(포함)을 가집니다. 구현 시에는 위에서
설명한 대로 이 값에 대한 그래픽 표현을
제공합니다.
무한 범위를 가지는 비대화형 `Gauge`는
계속 유휴 지속, 증분 유휴, 계속 실행, 증분 업데이트의 네 상태 중
하나에 있습니다. 이러한 상태는 작업의 특정 수준이 발생 중임을
사용자에게 알리는 것이 목적입니다.
증분 업데이트를 사용하는 경우 작업에 대해
알려진 종점이 없어도 진행 상태를 사용자에게 알릴 수 있습니다.
계속 실행을 사용하는 경우에는 사용자에게 보고할 진행이 없으며
알려진 종점이 없습니다.
계속 실행은 단지 사용 중임을 알리는 표시기입니다.
구현 시 이러한 내용을 적절하게 표시하는
그래픽 디스플레이를 사용해야 합니다.
구현 시 무한 지속 게이지와 무한 증분 게이지에 다양한 그래픽을
사용할 수 있습니다. 이러한 이유로 각 모드에 대해
별도의 유휴 상태가 존재합니다.
예를 들어, 구현 시 계속 실행 상태의 모래 시계나 회전 시계를
표시할 수 있지만 증분 업데이트 상태에서는 비치볼이나
줄무늬 막대 사탕 같은 다양한 상태의 애니메이션을 표시할 수 있습니다.
계속 유휴 상태나 증분 유휴 상태에서 `Gauge`는
아무 작업도 발생하지 않음을 나타냅니다.
증분 업데이트 상태에서 `Gauge`는 작업을 나타내지만
해당 그래픽 표현은 응용 프로그램에서 `setValue()`에
대한 호출을 사용하여 업데이트를 요청하는 경우에만
업데이트되어야 합니다. 계속 실행 상태에서 `Gauge`는
응용 프로그램으로부터의 업데이트 요청 없이도
계속 실행되는 애니메이션을 표시하여
작업을 나타냅니다.
`Gauge`가 비대화형이고 무한 범위를 갖도록
설정된 경우에만 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`,
`CONTINUOUS_RUNNING`
및 `INCREMENTAL_UPDATING` 값이 특별한 의미를 갖습니다.
`Gauge`가 대화형이거나 유한 범위를 갖도록 설정된 경우
이러한 값은 일반 값으로 간주됩니다.
또한 `Gauge`를 진행 표시기로 사용하는
응용 프로그램은 일반적으로 사용자가 진행 중인 작업을 중단시킬 수 있는
`Gauge`를 포함하는 컨테이너에
``STOP`` 명령을 연결해야 합니다.
### 응용 프로그램 개발자를 위한 참고 사항
위에서 언급한 대로 오래 실행되는 작업 도중
사용자에게 피드백을 제공하기 위해 비대화형 `Gauge`가
사용될 수 있습니다. 응용 프로그램에서
이미 알려진 종점으로 진행할 때
작업의 진행을 관찰할 수 있는 경우 응용 프로그램은
유한 범위를 갖는 비대화형 `Gauge`를 사용해야 합니다.
예를 들어, 응용 프로그램에서 크기가 `20`KB로
알려진 파일을 다운로드한다고 가정합니다.
응용 프로그램은 `Gauge`의 최대값을 `20`으로
설정하고 게이지 값을 지금까지 다운로드한 KB로 설정합니다.
지정된 시간에 완료된 작업의 비율을 보여주는
`Gauge`가 사용자에게 제시됩니다.
반면 응용 프로그램에서 알 수 없는 크기의 파일을
다운로드하고 있는 경우 응용 프로그램은 유한 범위를 갖는 비대화형 `Gauge`를
사용해야 합니다. 응용 프로그램은 주기적으로(예를 들어
입력 버퍼가 채워질 때마다) `setValue(INCREMENTAL_UPDATING)`를
호출해야 합니다. 그러면 사용자에게 진행의
발생 비율을 표시할 수 있습니다.
마지막으로 응용 프로그램이 작업을 수행하지만
진행을 파악할 수 있는 방법이 없다면 비대화형 `Gauge`가
무한 범위를 갖도록 설정하고 값을 `CONTINUOUS_RUNNING`이나
`CONTINUOUS_IDLE` 중
하나로 설정해야 합니다.
예를 들어, 응용 프로그램에서 네트워크 서버에 요청을 발행하고
서버가 응답 대기하는 것을 차단하려는 경우 `Gauge`의 상태를
응답 대기 전에는 `CONTINUOUS_RUNNING`으로,
응답을 받은 다음에는 `CONTINUOUS_IDLE`로
설정해야 합니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int CONTINUOUS_IDLE` — 무한 범위를 갖는 비대화형 Gauge 의 계속 유휴 상태를 나타내는 값.
- `static int CONTINUOUS_RUNNING` — 무한 범위를 갖는 비대화형 Gauge 의 계속 실행 상태를 나타내는 값.
- `static int INCREMENTAL_IDLE` — 무한 범위를 갖는 비대화형 Gauge 의 증분 유휴 상태를 나타내는 값.
- `static int INCREMENTAL_UPDATING` — 무한 범위를 갖는 비대화형 Gauge 의 증분 업데이트 상태를 나타내는 값.
- `static int INDEFINITE` — Gauge 가 무한 범위를 갖는다는 것을 나타내기 위해 최대값으로 특수 값이 사용되었습니다.
## 생성자 요약
- Gauge ( String label,
boolean interactive,
int maxValue,
int initialValue) 대화형 모드나 비대화형 모드에서 지정된 최대값 및
초기 값을 사용하여 지정된 레이블을 갖는
새 Gauge 객체를 만듭니다.
## 메서드 요약
- `int getMaxValue ()` — 이 Gauge 객체의 최대값을 가져옵니다.
- `int getValue ()` — 이 Gauge 객체의 현재 값을 가져옵니다.
- `boolean isInteractive ()` — 사용자가 Gauge 의 값을 변경할 수 있는지 여부를 알려줍니다.
- `void setMaxValue (int maxValue)` — 이 Gauge 객체의 최대값을 설정합니다.
- `void setValue (int value)` — 이 Gauge 객체의 현재 값을 설정합니다.
## 필드 상세
### INDEFINITE
```java
public static final int INDEFINITE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### CONTINUOUS_IDLE
```java
public static final int CONTINUOUS_IDLE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### INCREMENTAL_IDLE
```java
public static final int INCREMENTAL_IDLE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### CONTINUOUS_RUNNING
```java
public static final int CONTINUOUS_RUNNING
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### INCREMENTAL_UPDATING
```java
public static final int INCREMENTAL_UPDATING
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### Gauge
```java
public Gauge(String label,
boolean interactive,
int maxValue,
int initialValue)
```
- 대화형 모드나 비대화형 모드에서 지정된 최대값 및
초기 값을 사용하여 지정된 레이블을 갖는
새 `Gauge` 객체를 만듭니다.
대화형 모드(`interactive`가
`true`)에서 최대값은 0보다 커야 하며
그렇지 않으면 예외가 발생됩니다.
비대화형 모드(`interactive`가
`false`)에서 최대값은 0보다 크거나
특수 값 `INDEFINITE`과 같아야 하며 그렇지 않으면 예외가 발생됩니다.
최대값이 0보다 큰 경우 게이지는
유한 범위를 갖습니다.
이 경우 초기 값은 0-`maxValue` 범위(포함)에 있어야 합니다.
초기 값이 0보다 작은 경우 값은 0으로 설정됩니다.
초기 값이 `maxValue` 보다 큰 경우
`maxValue`로 설정됩니다.
`interactive`가 `false`이고
최대값이 `INDEFINITE`인 경우 무한 범위를 갖는
비대화형 게이지가 만들어집니다.
초기 값은 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`, `CONTINUOUS_RUNNING`,
`INCREMENTAL_UPDATING` 중 하나여야 합니다.
**Parameters:**
- `initialValue` - `[0..maxValue]` 범위의 초기 값,
또는 `maxValue`가 `INDEFINITE`인 경우
`CONTINUOUS_IDLE`, `INCREMENTAL_IDLE`,
`CONTINUOUS_RUNNING`,
`INCREMENTAL_UPDATING` 중 하나
**Throws:**
- `IllegalArgumentException` - 무한 범위를 갖는 비대화형 게이지에 대해
initialValue가 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`, `CONTINUOUS_RUNNING`, `INCREMENTAL_UPDATING`
중 하나가 아닌 경우
**See Also:**
- ``INDEFINITE``,
``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``
### setValue
```java
public void setValue(int value)
```
**Parameters:**
- `value` - 새 값
**Throws:**
- `IllegalArgumentException` - 무한 범위를 갖는
비대화형 게이지에 대한 값이 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`, `CONTINUOUS_RUNNING`,
`INCREMENTAL_UPDATING` 중 하나가 아닌 경우
**See Also:**
- ``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``,
``getValue()``
### getValue
```java
public int getValue()
```
**Returns:**
- `Gauge`의 현재 값
**See Also:**
- ``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``,
``setValue(int)``
### setMaxValue
```java
public void setMaxValue(int maxValue)
```
**Parameters:**
- `maxValue` - 새 최대값
**Throws:**
- `IllegalArgumentException` - `masValue`가 유효하지 않은 경우
**See Also:**
- ``INDEFINITE``,
``getMaxValue()``
### getMaxValue
```java
public int getMaxValue()
```
**Returns:**
- `Gauge`의 최대값, 또는
`INDEFINITE`
**See Also:**
- ``INDEFINITE``,
``setMaxValue(int)``
### isInteractive
```java
public boolean isInteractive()
```
**Returns:**
- `Gauge`가 대화형인지
여부를 나타내는 부울
## 생성자 상세
### Gauge
```java
public Gauge(String label,
boolean interactive,
int maxValue,
int initialValue)
```
- 대화형 모드나 비대화형 모드에서 지정된 최대값 및
초기 값을 사용하여 지정된 레이블을 갖는
새 `Gauge` 객체를 만듭니다.
대화형 모드(`interactive`가
`true`)에서 최대값은 0보다 커야 하며
그렇지 않으면 예외가 발생됩니다.
비대화형 모드(`interactive`가
`false`)에서 최대값은 0보다 크거나
특수 값 `INDEFINITE`과 같아야 하며 그렇지 않으면 예외가 발생됩니다.
최대값이 0보다 큰 경우 게이지는
유한 범위를 갖습니다.
이 경우 초기 값은 0-`maxValue` 범위(포함)에 있어야 합니다.
초기 값이 0보다 작은 경우 값은 0으로 설정됩니다.
초기 값이 `maxValue` 보다 큰 경우
`maxValue`로 설정됩니다.
`interactive`가 `false`이고
최대값이 `INDEFINITE`인 경우 무한 범위를 갖는
비대화형 게이지가 만들어집니다.
초기 값은 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`, `CONTINUOUS_RUNNING`,
`INCREMENTAL_UPDATING` 중 하나여야 합니다.
**Parameters:**
- `initialValue` - `[0..maxValue]` 범위의 초기 값,
또는 `maxValue`가 `INDEFINITE`인 경우
`CONTINUOUS_IDLE`, `INCREMENTAL_IDLE`,
`CONTINUOUS_RUNNING`,
`INCREMENTAL_UPDATING` 중 하나
**Throws:**
- `IllegalArgumentException` - 무한 범위를 갖는 비대화형 게이지에 대해
initialValue가 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`, `CONTINUOUS_RUNNING`, `INCREMENTAL_UPDATING`
중 하나가 아닌 경우
**See Also:**
- ``INDEFINITE``,
``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``
### setValue
```java
public void setValue(int value)
```
**Parameters:**
- `value` - 새 값
**Throws:**
- `IllegalArgumentException` - 무한 범위를 갖는
비대화형 게이지에 대한 값이 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`, `CONTINUOUS_RUNNING`,
`INCREMENTAL_UPDATING` 중 하나가 아닌 경우
**See Also:**
- ``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``,
``getValue()``
### getValue
```java
public int getValue()
```
**Returns:**
- `Gauge`의 현재 값
**See Also:**
- ``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``,
``setValue(int)``
### setMaxValue
```java
public void setMaxValue(int maxValue)
```
**Parameters:**
- `maxValue` - 새 최대값
**Throws:**
- `IllegalArgumentException` - `masValue`가 유효하지 않은 경우
**See Also:**
- ``INDEFINITE``,
``getMaxValue()``
### getMaxValue
```java
public int getMaxValue()
```
**Returns:**
- `Gauge`의 최대값, 또는
`INDEFINITE`
**See Also:**
- ``INDEFINITE``,
``setMaxValue(int)``
### isInteractive
```java
public boolean isInteractive()
```
**Returns:**
- `Gauge`가 대화형인지
여부를 나타내는 부울
## 메서드 상세
### setValue
```java
public void setValue(int value)
```
**Parameters:**
- `value` - 새 값
**Throws:**
- `IllegalArgumentException` - 무한 범위를 갖는
비대화형 게이지에 대한 값이 `CONTINUOUS_IDLE`,
`INCREMENTAL_IDLE`, `CONTINUOUS_RUNNING`,
`INCREMENTAL_UPDATING` 중 하나가 아닌 경우
**See Also:**
- ``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``,
``getValue()``
### getValue
```java
public int getValue()
```
**Returns:**
- `Gauge`의 현재 값
**See Also:**
- ``CONTINUOUS_IDLE``,
``INCREMENTAL_IDLE``,
``CONTINUOUS_RUNNING``,
``INCREMENTAL_UPDATING``,
``setValue(int)``
### setMaxValue
```java
public void setMaxValue(int maxValue)
```
**Parameters:**
- `maxValue` - 새 최대값
**Throws:**
- `IllegalArgumentException` - `masValue`가 유효하지 않은 경우
**See Also:**
- ``INDEFINITE``,
``getMaxValue()``
### getMaxValue
```java
public int getMaxValue()
```
**Returns:**
- `Gauge`의 최대값, 또는
`INDEFINITE`
**See Also:**
- ``INDEFINITE``,
``setMaxValue(int)``
### isInteractive
```java
public boolean isInteractive()
```
**Returns:**
- `Gauge`가 대화형인지
여부를 나타내는 부울
---
title: "Class Graphics"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Graphics
```
## 설명
**extends Object:**
단순한 2D 기하 렌더링 기능을 제공합니다.
텍스트, 이미지, 선, 직사각형 및 호에 대해 그리기 프리미티브가 제공됩니다.
또한 단색으로 직사각형과 호를 채울 수 있습니다.
직사각형에 둥근 모서리를 지정할 수도 있습니다.
색의 빨간색, 녹색, 파란색 구성 요소
각각에 대해 `8`비트씩 `24`비트
색상 모델이 제공됩니다. 모든 장치가 전체 `24`비트
색상을 지원하는 것은 아니므로
응용 프로그램에서 요청하는 색을
장치에서 사용 가능한 색으로 매핑합니다.
사용 가능한 색은 무엇인지,
사용 가능한 회색 수준은 몇 개나 되는지 등
장치 특성을 알 수 있는 기능이
``Display`` 클래스에 제공됩니다.
응용 프로그램은 요청한 색에 대해 디스플레이할 실제 색을 얻기 위해
``getDisplayColor()``를
사용할 수 있습니다.
이로 인해 응용 프로그램은 장치 독립성을
침해하지 않으면서도
장치에 동작을 순응시킬 수 있습니다.
모든 렌더링 작업의 경우 *소스 대 대상* 규칙
[Porter-Duff]를 사용하여 소스 픽셀은 항상 대상 픽셀과 결합됩니다.
소스 픽셀과 래스터 ops 같은 대상 픽셀을 결합하기 위한 다른 방법은
제공되지 않습니다.
텍스트, 선, 직사각형, 호 그리기 및 채우기 프리미티브의 경우
소스 픽셀은 렌더링에 사용되는 그래픽 객체의 현재 색을
나타내는 픽셀입니다.
이 픽셀은 항상 완전 불투명으로 간주됩니다.
항상 완전 불투명인 소스 픽셀을 사용하면 소스 대 대상 규칙은
픽셀을 바꾸는 효과를 가지므로 대상 픽셀은 단순히 그래픽 객체의
소스 픽셀로 바뀝니다.
``drawImage()`` 및 ``drawRegion()`` 메소드는
그래픽 객체의 현재 색 대신 작업을 렌더링하는 데
필요한 소스로 이미지를 사용합니다.
이 상황에서 소스 대 대상 규칙의 등록 정보는 다음과 같습니다.
소스의 완전 불투명 픽셀은 대상 픽셀로 바꿔야 하고 소스의 투명 픽셀은
대상 픽셀을 변경되지 않은 상태로 두어야 하며
소스의 반투명 픽셀은 대상 픽셀과 알파 블렌딩되어야 합니다.
반투명 픽셀을 알파 블렌딩해야 합니다.
구현 시 알파 블렌딩을 지원하지 않는 경우 이미지를 만들 때
이미지 소스 데이터에서 반투명도를 모두 제거해야 합니다.
자세한 내용은 `알파 처리`를 참조하십시오.
모든 그래픽 렌더링의 대상은 전체가
완전 불투명 픽셀로 구성되는 것으로
간주됩니다. 소스 대 대상 규칙의 특성은 완전 불투명 대상 픽셀을 갖는
픽셀을 합성하면 그 결과 완전 불투명 대상 픽셀이 반드시 생긴다는 것입니다.
이는 전체 및 부분 투명성을 렌더링 작업의 소스로만 사용될 수 있는
변경할 수 없는 이미지로 한정하는 효과가 있습니다.
그래픽은 디스플레이나 오프스크린
이미지 버퍼로 직접 렌더링될 수 있습니다.
렌더링된 그래픽의 대상은 그래픽 객체의 출처에 따라 달라집니다.
디스플레이에 렌더링할 그래픽 객체는 `Canvas` 객체의
``paint()`` 메소드에 전달됩니다.
이는 대상이 디스플레이인 그래픽 객체를 얻을 수 있는 유일한 방법입니다.
또한 응용 프로그램은 `paint()`
메소드가 지속되는 동안만
이 그래픽 객체를 사용하여 그릴 수 있습니다.
오프스크린 이미지 버퍼를 렌더링할
그래픽 객체는 원하는 이미지에서
``getGraphics()`` 메소드를 호출하여
얻을 수 있습니다. 이렇게 얻은 그래픽 객체는
응용 프로그램에 의해 무기한 보류되며
이 그래픽 객체에 대해 언제든지 요청을
실행할 수 있습니다.
기본 좌표계의 원점은 대상의 왼쪽 위 모서리에 있습니다.
X축 방향은 오른쪽으로 양수이며 Y축 방향은 아래쪽으로 양수입니다.
응용 프로그램은 좌표계의 수평 및
수직 거리가 실제 장치 디스플레이에서
같은 거리를 나타낸다고 가정합니다.
즉, 픽셀은 정사각형입니다. 좌표계 원점을 변환하기
위한 기능이 제공됩니다.
모든 좌표는 정수로 지정됩니다.
좌표계는 픽셀 자체가 아닌 픽셀 사이의 위치를 나타냅니다.
그러므로 디스플레이의 왼쪽 위 모서리에 있는
첫 번째 픽셀은 좌표 `(0,0), (1,0), (0,1), (1,1)` 범위의
정사각형에 놓입니다.
이러한 정의 하에 채우기 작업의 의미는 명확합니다.
좌표 격자 선은 픽셀 사이에 놓이므로 채우기 작업은
전체적으로 작업 좌표계에 의해 범위 설정된 영역 내에 놓인
픽셀에 영향을 줍니다. 예를 들어, 다음 작업은
g.fillRect(0, 0, 3, 2)
정확히 6개의 픽셀을 그립니다.
위의 예와 다음에 나오는 모든 예에서 변수 `g`가
`Graphics` 객체에 대한 참조를
포함한다고 가정합니다.
글꼴의 각 문자에는 문자의 모양을 형성하는 일련의
픽셀 집합이 포함됩니다. 문자를 그릴 때
문자의 모양을 형성하는 픽셀은
`Graphics`
객체의 현재 색으로 채워지며
문자 모양의 일부가 아닌 픽셀은 변경되지 않습니다.
텍스트 그리기 호출 ``drawChar()``,
``drawChars()``,
``drawString()``
및 ``drawSubstring()``은 텍스트를
모두 이 방식으로 그립니다.
``setStrokeStyle()`` 메소드에서
설정한 대로 선, 호, 직사각형 및 둥근 직사각형은
`SOLID`나 `DOTTED` 입력 스타일 중
하나로 그릴 수 있습니다. 입력 스타일은 채우기, 텍스트 및 이미지 작업에는
영향을 미치지 않습니다.
`SOLID` 입력 스타일의 경우 그리기 작업은
바로 아래의 픽셀을 지정한 좌표의 오른쪽까지 채우는
픽셀 하나 너비의 펜으로 수행됩니다.
그려진 선은 선의 양쪽 끝점에 있는 픽셀까지 사용합니다.
따라서 다음 작업으로
g.drawLine(0, 0, 0, 0);
정확히 한 픽셀, 디스플레이의 왼쪽 위 모서리에 있는
첫 번째 픽셀을 그립니다.
`DOTTED` 입력 스타일의 그리기 작업은
`SOLID` 입력 스타일에서
사용한 픽셀의 일부를 사용합니다.
점의 빈도와 길이는 구현별로 다릅니다.
선과 호의 끝점이 그려지지 않거나 직사각형의 모서리 점이
그려지지 않을 수도 있습니다.
현재 색을 사용하여 점을 칠하고
점 사이의 공간은 그대로 둡니다.
좌표계의 아티팩트는 채우기 작업에 의해 영향을 받는 영역이 같은 좌표에서 그리기
작업에 의해 영향을 받는 영역과 약간 다른 것입니다.
예를 들어 다음 작업을 참조하십시오.
g.fillRect(x, y, w, h); // 1
g.drawRect(x, y, w, h); // 2
명령문 (1)은 `w` 픽셀 너비와
`h` 픽셀 높이인 직사각형을 채웁니다.
명령문 (2)는 왼쪽과 위쪽 모서리가 명령문 (1)에서
채운 영역 내에 있는 직사각형을 그립니다.
하지만 아래쪽과 오른쪽 모서리는 채워진 영역 밖의 한 픽셀에 놓입니다.
이는 반직관적이지만 위의 명령문 (2)와 동일한 효과를 갖는
g.drawLine(x, y, x+w, y);
g.drawLine(x+w, y, x+w, y+h);
g.drawLine(x+w, y+h, x, y+h);
g.drawLine(x, y+h, x, y);
불변형을 보존합니다.
`drawLine()`과 `drawArc()`에 의해
그려지는 정확한 픽셀은 지정되어 있지 않습니다.
채우기 작업에서 사용하는 픽셀은 해당 그리기 작업에서 사용하는
픽셀에 바로 인접해 있거나 정확하게 겹쳐야 합니다.
채우기 작업 시에는 채우기 영역과 해당 그리기 작업으로
다루는 픽셀 사이에 간격을 두지 말아야 하며
해당 그리기 작업에 의해
범위가 설정된 영역 밖에 있는 픽셀을 사용하면 안 됩니다.
### 자르기
클립은 그래픽 렌더링 작업으로 수정할 수 있는
`Graphics` 객체의 대상
픽셀 집합입니다.
`Graphics` 객체마다 한 개의 클립이 있습니다.
그래픽 작업으로는 픽셀은 클립 내에 놓인 픽셀만 수정할 수 있습니다.
해당 클립의 범위를 벗어난 픽셀은 그래픽 작업으로 수정되지 않습니다.
현재 클립을 지정된 직사각형과 교차시키고 명확하게 설정하기 위한
작업이 제공됩니다. 응용 프로그램은
현재 좌표계에 상대적인 좌표를
사용하는 클립 직사각형을 제공하여 클립을 지정할 수 있습니다.
너비나 높이가 0이나 음수인 클립 직사각형을 지정하는 것은 유효합니다.
이 경우 클립은 비어 있는 것으로 간주됩니다.
즉, 클립에 포함된 픽셀이 없습니다.
따라서 이러한 클립에서 그래픽 작업이 실행된 경우
어떤 픽셀도 수정되지 않습니다.
대상의 범위를 벗어나 확장하거나 전체적으로 해당 범위 밖에 있는
클립 직사각형을 지정하는 것은 유효합니다.
대상의 범위 밖에 있는 픽셀은 없으며 대상의 범위 밖에 있는
클립 직사각형의 영역은 무시됩니다.
대상과 지정된 클립 직사각형 모두에 놓이는
픽셀만 클립의 일부로 간주됩니다.
``translate()``
같은 좌표계 작업은 클립을 수정하지 않습니다.
`Graphics` 객체 좌표계를 변경하지 않고
`setClip`에 전달하는 경우
``getClipX()``,
``getClipY()``,
``getClipWidth()`` 및
``getClipHeight()`` 메소드는
클립에서 동일한 픽셀 집합을 만드는
직사각형을 반환해야 합니다.
`getClip` 메소드 계열에서
반환된 직사각형은
``setClip()``에서
요청된 클립 직사각형과 다를 수 있습니다.
이러한 내용은 좌표계가 변경되었거나 구현 시
클립 직사각형이 `Graphics` 객체의
대상 경계와 교차하도록 선택한 경우
발생할 수 있습니다.
그래픽 작업이 클립의 영향을 받은 경우 해당 작업으로
다룬 픽셀은 클립이 작업에
영향을 미치지 않은 것처럼
다뤄지는 픽셀과 같아야 합니다. 예를 들어,
직사각형 `(cx, cy, cw, ch)`에 의해 표현되는 클립과
이 직사각형 밖에 있는 점 `(x1, y1)`, 그리고
이 직사각형 내에 있는 점 `(x2, y2)`를 가정합니다.
다음 코드 조각에서
g.setClip(0, 0, canvas.getWidth(),
canvas.getHeight());
g.drawLine(x1, y1, x2, y2); // 3
g.setClip(cx, cy, cw, ch);
g.drawLine(x1, y1, x2, y2); // 4
명령문 (4)의 터치를 받는 픽셀은 명령문 (3)의 터치를 받는
`(cx, cy, cw, ch)` 내의 픽셀과 동일해야 합니다.
### 앵커 포인트
텍스트의 그리기는 "앵커 포인트"를 기반으로 합니다.
앵커 포인트는 텍스트를 놓을 때 필요한 계산량을 최소화하기 위해 사용됩니다.
예를 들어, 텍스트 일부를 가운데 맞추기 위해
응용 프로그램은 `stringWidth()`나
`charWidth()`를 호출하여 너비를 구한 다음 빼기와
나누기의 조합을 수행하여 적절한
위치를 계산해야 합니다.
텍스트를 그리기 위한 메소드는
다음과 같이 정의되어 있습니다.
이 메소드는 앵커 포인트가
에 있는
현재 글꼴을 사용하여 텍스트를
현재 색으로 그립니다.
앵커 포인트의 정의는 비트
연산자를 사용하여
수직 상수
중
하나와 결합된 수평 상수
중
하나가 되어야 합니다.
0은 앵커 포인트의 값으로 사용될 수도 있습니다.
앵커 포인트 값에 0을 사용하면
를
사용하는 것과 같은 결과가 됩니다.
텍스트의 수직 가운데 맞춤은 지정하기 어렵고 구현하기
번거로워 유용하지 않으므로 지정하지 않습니다.
따라서 `VCENTER` 값은
텍스트 그리기 호출의 앵커
포인트 매개 변수에서 허용되지 않습니다.
`(x, y)` 위치에 비례하는
텍스트 경계 상자의 실제 위치는 앵커 포인트에 의해 결정됩니다.
이러한 앵커 포인트는 경계 상자의 외곽 모서리를 따라
이름이 지정된 위치에서 발생합니다.
따라서 `f`가 `g`의 현재
글꼴(`g.getFont()`에서 반환)인 경우
다음 호출은 모두 동일한 결과를
반환합니다.
g.drawString(str, x, y, TOP|LEFT);
g.drawString(str, x + f.stringWidth(str)/2, y, TOP|HCENTER);
g.drawString(str, x + f.stringWidth(str), y, TOP|RIGHT);
g.drawString(str, x,
y + f.getBaselinePosition(), BASELINE|LEFT);
g.drawString(str, x + f.stringWidth(str)/2,
y + f.getBaselinePosition(), BASELINE|HCENTER);
g.drawString(str, x + f.stringWidth(str),
y + f.getBaselinePosition(), BASELINE|RIGHT);
drawString(str, x,
y + f.getHeight(), BOTTOM|LEFT);
drawString(str, x + f.stringWidth(str)/2,
y + f.getHeight(), BOTTOM|HCENTER);
drawString(str, x + f.stringWidth(str),
y + f.getHeight(), BOTTOM|RIGHT);
텍스트 그리기의 경우 글꼴 설계자가 지정한 문자간 간격
및 줄간 간격(선행)은 ``Font`` 클래스의
``stringWidth()``와
``getHeight()``
호출에서 반환한 값의 일부로
포함됩니다. 예를 들어, 다음 코드의 경우
// (5)
g.drawString(string1+string2, x, y, TOP|LEFT);
// (6)
g.drawString(string1, x, y, TOP|LEFT);
g.drawString(string2, x + f.stringWidth(string1), y, TOP|LEFT);
코드 조각 (5)와 (6)은 같지는 않더라도 유사한 방식으로 작동합니다.
이러한 내용은 `f.stringWidth()`에 문자간 간격이
포함되기 때문에 발생합니다. 시스템에서 글꼴 돌출을 지원하는 경우
정확한 간격은 이러한 호출에 따라 다를 수 있습니다.
마찬가지로 다음 줄의 Y 위치에 글꼴 높이만 추가하면
합리적으로 수직 간격이 정해질 수 있습니다.
예를 들면 다음과 같습니다.
g.drawString(string1, x, y, TOP|LEFT);
g.drawString(string2, x, y + f.fontHeight(), TOP|LEFT);
적절한 줄간 간격으로 별도의 줄에서 `string1`과
`string2`를 그립니다.
그려지는 문자열의 `stringWidth()`와
글꼴의 `fontHeight()`는 텍스트 일부의
경계 상자 크기를 정의합니다.
위에서 설명한 대로 이 상자에는 줄간
간격 및 문자간 간격이 포함됩니다.
구현 시 그려진 문자에 실제로 속하도록 픽셀의 아래와 오른쪽에
이 공간을 두어야 합니다.
그래픽을 텍스트 가까이 배치하려는
응용 프로그램은 문자열의 아래쪽과 오른쪽에 공간이 있고
문자열의 위쪽과 왼쪽에는 공간이
*없다*고 가정합니다.
또한 이미지 배치를 위해 앵커 포인트가 사용됩니다.
텍스트 그리기와 마찬가지로 이미지의 앵커 포인트는
그래픽 요청에서 주어진 `(x,y)` 위치에
배치될 대상의 경계 직사각형에서 점을 지정합니다.
텍스트와 달리 이미지의 수직 가운데 맞춤은 잘 정의되어 있으므로
`VCENTER` 값은
이미지 그리기 요청의 앵커 포인트
매개 변수 내에서 사용될 수 있습니다.
이미지에는 기준선의 의미가 없으므로 `BASELINE` 값은
이미지 그리기 요청의 앵커 포인트 매개 변수 내에서
사용되지 않을 수 있습니다.
### 참조
**Porter-Duff:**
- Porter, T., T. Duff 공저. "Compositing Digital Images."
*Computer Graphics V18 N3 (SIGGRAPH 1984)*, p. 253-259.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int BASELINE` — 텍스트의 기준선에 앵커 포인트를 배치하기 위한 상수.
- `static int BOTTOM` — 텍스트나 이미지의 아래에 텍스트와 이미지의 앵커 포인트를 배치하기 위한 상수.
- `static int DOTTED` — DOTTED 입력 스타일의 상수.
- `static int HCENTER` — 앵커 포인트 주위로 텍스트와 이미지를 가로로 가운데 맞추기 위한 상수.
- `static int LEFT` — 텍스트나 이미지의 왼쪽에 텍스트와 이미지의 앵커 포인트를 배치하기 위한 상수.
- `static int RIGHT` — 텍스트나 이미지의 오른쪽에 텍스트와 이미지의 앵커 포인트를 배치하기 위한 상수.
- `static int SOLID` — SOLID 입력 스타일에 대한 상수.
- `static int TOP` — 텍스트나 이미지 위에 텍스트와 이미지의 앵커 포인트를 배치하기 위한 상수.
- `static int VCENTER` — 앵커 포인트 주위에 이미지를 세로로 가운데 맞추기 위한 상수.
## 메서드 요약
- `void clipRect (int x, int y, int width, int height)` — 현재 클립을 지정한 직사각형과 교차 시킵니다.
- `void copyArea (int x_src, int y_src, int width, int height, int x_dest, int y_dest, int anchor)` — 직사각형 영역 (x_src, y_src, width, height) 의 내용을 앵커에 의해 식별된 앵커 포인트가 (x_dest, y_dest) 에 있는 대상 영역으로 복사합니다.
- `void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle)` — 지정한 직사각형을 덮는 원형 호나 타원형 호의 윤곽을 현재 색과 입력 스타일을 사용하여 그립니다.
- `void drawChar (char character, int x, int y, int anchor)` — 지정한 문자를 현재 글꼴과 색을 사용하여 그립니다.
- `void drawChars (char[] data, int offset, int length, int x, int y, int anchor)` — 지정한 문자를 현재 글꼴과 색을 사용하여 그립니다.
- `void drawImage ( Image img, int x, int y, int anchor)` — 지정한 이미지를 앵커 포인트를 사용하여 그립니다.
- `void drawLine (int x1, int y1, int x2, int y2)` — 현재 색과 입력 스타일을 사용하여 (x1,y1) 과 (x2,y2) 좌표 사이에서 선을 그립니다.
- `void drawRect (int x, int y, int width, int height)` — 지정한 직사각형의 윤곽을 현재 색과 입력 스타일을 사용하여 그립니다.
- `void drawRegion ( Image src, int x_src, int y_src, int width, int height, int transform, int x_dest, int y_dest, int anchor)` — 지정한 소스 이미지의 영역을, 선택한 변환 함수를 사용하여 이미지 데이터를 변환(회전 및 반사)하여 대상 내의 위치로 복사합니다.
- `void drawRGB (int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha)` — 지정한 영역에서 일련의 장치 독립 RGB+투명도 값을 렌더링합니다.
- `void drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight)` — 지정한 둥근 모서리 직사각형의 윤곽을 현재 색과 입력 스타일을 사용하여 그립니다.
- `void drawString ( String str, int x, int y, int anchor)` — 지정한 String 을 현재 글꼴과 색을 사용하여 그립니다.
- `void drawSubstring ( String str, int offset, int len, int x, int y, int anchor)` — 지정한 String 을 현재 글꼴과 색을 사용하여 그립니다.
- `void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle)` — 지정한 직사각형을 덮는 원형 호나 타원형 호를 채웁니다.
- `void fillRect (int x, int y, int width, int height)` — 지정한 직사각형을 현재 색으로 채웁니다.
- `void fillRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight)` — 현재 색으로 지정된 둥근 모서리의 직사각형을 채웁니다.
- `void fillTriangle (int x1, int y1, int x2, int y2, int x3, int y3)` — 현재 색으로 지정한 삼각형을 채웁니다 각 지점 쌍을 연결하는 선이 채워진 삼각형에 포함됩니다.
- `int getBlueComponent ()` — 현재 색의 파랑 구성 요소를 가져옵니다.
- `int getClipHeight ()` — 현재 클립 영역의 높이를 가져옵니다.
- `int getClipWidth ()` — 현재 클립 영역의 너비를 가져옵니다.
- `int getClipX ()` — 이 그래픽 컨텍스트의 좌표계 원점과 비례하여 현재 클립 영역의 X 오프셋을 가져옵니다.
- `int getClipY ()` — 이 그래픽 컨텍스트의 좌표계 원점과 비례하여 현재 클립 영역의 Y 오프셋을 가져옵니다.
- `int getColor ()` — 현재 색을 가져옵니다.
- `int getDisplayColor (int color)` — 지정한 색을 요청하면 표시될 색을 가져옵니다.
- `Font getFont ()` — 현재 글꼴을 가져옵니다.
- `int getGrayScale ()` — 렌더링 작업에 사용된 색의 현재 회색조 값을 가져옵니다.
- `int getGreenComponent ()` — 현재 색의 녹색 구성 요소를 가져옵니다.
- `int getRedComponent ()` — 현재 색의 빨강 구성 요소를 가져옵니다.
- `int getStrokeStyle ()` — 그리기 작업에 사용된 입력 스타일을 가져옵니다.
- `int getTranslateX ()` — 이 그래픽 컨텍스트의 변환된 원점의 X 좌표를 가져옵니다.
- `int getTranslateY ()` — 이 그래픽 컨텍스트의 변환된 원점의 Y 좌표를 가져옵니다.
- `void setClip (int x, int y, int width, int height)` — 현재 클립을 주어진 좌표에 의해 지정된 직사각형으로 설정합니다.
- `void setColor (int RGB)` — 현재 색을 지정한 RGB 값으로 설정합니다.
- `void setColor (int red, int green, int blue)` — 현재 색을 지정한 RGB 값으로 설정합니다.
- `void setFont ( Font font)` — 모든 후속 텍스트 렌더링 작업의 글꼴을 설정합니다.
- `void setGrayScale (int value)` — 모든 후속 렌더링 작업에서 사용되는 현재 회색조를 설정합니다.
- `void setStrokeStyle (int style)` — 선, 호, 직사각형 및 둥근 직사각형을 그리는 데 사용된 입력 스타일을 설정합니다.
- `void translate (int x, int y)` — 그래픽 컨텍스트의 원점을 현재 좌표계의 점 (x, y) 로 변환됩니다.
## 필드 상세
### HCENTER
```java
public static final int HCENTER
```
**See Also:**
- `Constant Field Values`
### VCENTER
```java
public static final int VCENTER
```
**See Also:**
- `Constant Field Values`
### LEFT
```java
public static final int LEFT
```
**See Also:**
- `Constant Field Values`
### RIGHT
```java
public static final int RIGHT
```
**See Also:**
- `Constant Field Values`
### TOP
```java
public static final int TOP
```
**See Also:**
- `Constant Field Values`
### BOTTOM
```java
public static final int BOTTOM
```
**See Also:**
- `Constant Field Values`
### BASELINE
```java
public static final int BASELINE
```
**See Also:**
- `Constant Field Values`
### SOLID
```java
public static final int SOLID
```
**See Also:**
- `Constant Field Values`
### DOTTED
```java
public static final int DOTTED
```
**See Also:**
- `Constant Field Values`
### translate
```java
public void translate(int x,
int y)
```
**Parameters:**
- `y` - 새 변환 원점의 y 좌표
**See Also:**
- ``getTranslateX()``,
``getTranslateY()``
### getTranslateX
```java
public int getTranslateX()
```
**Returns:**
- 현재 원점의 X
### getTranslateY
```java
public int getTranslateY()
```
**Returns:**
- 현재 원점의 Y
### getColor
```java
public int getColor()
```
**Returns:**
- `0x00RRGGBB` 형식의 정수
**See Also:**
- ``setColor(int, int, int)``
### getRedComponent
```java
public int getRedComponent()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setColor(int, int, int)``
### getGreenComponent
```java
public int getGreenComponent()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setColor(int, int, int)``
### getBlueComponent
```java
public int getBlueComponent()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setColor(int, int, int)``
### getGrayScale
```java
public int getGrayScale()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setGrayScale(int)``
### setColor
```java
public void setColor(int red,
int green,
int blue)
```
**Parameters:**
- `blue` - `0-255` 범위에 설정된
색의 파랑 구성 요소
**Throws:**
- `IllegalArgumentException` - 색 구성 요소 중 하나가
`0-255` 범위를 벗어난 경우
**See Also:**
- ``getColor()``
### setColor
```java
public void setColor(int RGB)
```
**Parameters:**
- `RGB` - 설정된 색
**See Also:**
- ``getColor()``
### setGrayScale
```java
public void setGrayScale(int value)
```
**Parameters:**
- `value` - 원하는 회색조 값
**Throws:**
- `IllegalArgumentException` - 회색이 범위를 벗어나는 경우
**See Also:**
- ``getGrayScale()``
### getFont
```java
public Font getFont()
```
**Returns:**
- 현재 글꼴
**See Also:**
- ``Font``,
``setFont(javax.microedition.lcdui.Font)``
### setStrokeStyle
```java
public void setStrokeStyle(int style)
```
**Parameters:**
- `style` - `SOLID`나 `DOTTED`가 될 수 있습니다.
**Throws:**
- `IllegalArgumentException` - `style`이 유효하지 않은 경우
**See Also:**
- ``getStrokeStyle()``
### getStrokeStyle
```java
public int getStrokeStyle()
```
**Returns:**
- 입력 스타일, `SOLID` 또는 `DOTTED`
**See Also:**
- ``setStrokeStyle(int)``
### setFont
```java
public void setFont(Font font)
```
**Parameters:**
- `font` - 지정된 글꼴
**See Also:**
- ``Font``,
``getFont()``,
``drawString(java.lang.String, int, int, int)``,
``drawChars(char[], int, int, int, int, int)``
### getClipX
```java
public int getClipX()
```
**Returns:**
- 현재 클립 영역의 X 오프셋
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### getClipY
```java
public int getClipY()
```
**Returns:**
- 현재 클립 영역의 Y 오프셋
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### getClipWidth
```java
public int getClipWidth()
```
**Returns:**
- 현재 클립 영역의 너비
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### getClipHeight
```java
public int getClipHeight()
```
**Returns:**
- 현재 클립 영역의 높이
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### clipRect
```java
public void clipRect(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 클립과 교차할 직사각형의 높이
**See Also:**
- ``setClip(int, int, int, int)``
### setClip
```java
public void setClip(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 새 클립 직사각형의 높이
**See Also:**
- ``clipRect(int, int, int, int)``
### drawLine
```java
public void drawLine(int x1,
int y1,
int x2,
int y2)
```
**Parameters:**
- `y2` - 선이 끝나는 부분의 y 좌표
### fillRect
```java
public void fillRect(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 채워질 직사각형의 높이
**See Also:**
- ``drawRect(int, int, int, int)``
### drawRect
```java
public void drawRect(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 그려지는 직사각형의 높이
**See Also:**
- ``fillRect(int, int, int, int)``
### drawRoundRect
```java
public void drawRoundRect(int x,
int y,
int width,
int height,
int arcWidth,
int arcHeight)
```
**Parameters:**
- `arcHeight` - 네 개의 모서리에 있는 호의 세로 지름
**See Also:**
- ``fillRoundRect(int, int, int, int, int, int)``
### fillRoundRect
```java
public void fillRoundRect(int x,
int y,
int width,
int height,
int arcWidth,
int arcHeight)
```
**Parameters:**
- `arcHeight` - 네 개의 모서리에 있는 호의 세로 지름
**See Also:**
- ``drawRoundRect(int, int, int, int, int, int)``
### fillArc
```java
public void fillArc(int x,
int y,
int width,
int height,
int startAngle,
int arcAngle)
```
**Parameters:**
- `arcAngle` - 시작 각도에
비례하는 호의 각도 범위
**See Also:**
- ``drawArc(int, int, int, int, int, int)``
### drawArc
```java
public void drawArc(int x,
int y,
int width,
int height,
int startAngle,
int arcAngle)
```
**Parameters:**
- `arcAngle` - 시작 각도에
비례하는 호의 각 범위
**See Also:**
- ``fillArc(int, int, int, int, int, int)``
### drawString
```java
public void drawString(String str,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치할 앵커 포인트
**Throws:**
- `IllegalArgumentException` - 앵커가 유효한 값이 아닌 경우
**See Also:**
- ``drawChars(char[], int, int, int, int, int)``
### drawSubstring
```java
public void drawSubstring(String str,
int offset,
int len,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치하기 위한 앵커 포인트
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
**See Also:**
- ``drawString(String, int, int, int).``
### drawChar
```java
public void drawChar(char character,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치할 앵커 포인트.
앵커 포인트 참조
**Throws:**
- `IllegalArgumentException` - `anchor`가
유효한 값이 아닌 경우
**See Also:**
- ``drawString(java.lang.String, int, int, int)``,
``drawChars(char[], int, int, int, int, int)``
### drawChars
```java
public void drawChars(char[] data,
int offset,
int length,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치할 앵커 포인트.
앵커 포인트 참조
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
**See Also:**
- ``drawString(java.lang.String, int, int, int)``
### drawImage
```java
public void drawImage(Image img,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 이미지 배치를 위한 앵커 포인트
**Throws:**
- `NullPointerException` - `img`가 `null`인 경우
**See Also:**
- ``Image``
### drawRegion
```java
public void drawRegion(Image src,
int x_src,
int y_src,
int width,
int height,
int transform,
int x_dest,
int y_dest,
int anchor)
```
**Parameters:**
- `anchor` - 대상 이미지 내에서
영역을 배치할 앵커 포인트
**Throws:**
- `IllegalArgumentException` - 복사되는 영역이 소스 이미지의
범위를 넘는 경우
**Since:**
- MIDP 2.0
### copyArea
```java
public void copyArea(int x_src,
int y_src,
int width,
int height,
int x_dest,
int y_dest,
int anchor)
```
**Parameters:**
- `anchor` - 대상 이미지 내에서 영역을
배치할 앵커 포인트
**Throws:**
- `IllegalArgumentException` - 복사되는 영역이 소스 이미지의
범위를 넘는 경우
**Since:**
- MIDP 2.0
### fillTriangle
```java
public void fillTriangle(int x1,
int y1,
int x2,
int y2,
int x3,
int y3)
```
**Parameters:**
- `y3` - 삼각형의 세 번째 정점의 y 좌표
**Since:**
- MIDP 2.0
### drawRGB
```java
public void drawRGB(int[] rgbData,
int offset,
int scanlength,
int x,
int y,
int width,
int height,
boolean processAlpha)
```
**Parameters:**
- `processAlpha` - `rgbData`에
알파 채널이 있는 경우 `true`,
모든 픽셀이 전체적으로 불투명한 경우 false
**Throws:**
- `NullPointerException` - `rgbData`가 `null`인 경우
**Since:**
- MIDP 2.0
### getDisplayColor
```java
public int getDisplayColor(int color)
```
**Parameters:**
- `color` - 원하는
색(`0x00RRGGBB` 형식이며
상위 바이트는 무시됨)
**Returns:**
- 장치 화면에 표시될 해당
색(`0x00RRGGBB` 형식으로)
**Since:**
- MIDP 2.0
## 메서드 상세
### translate
```java
public void translate(int x,
int y)
```
**Parameters:**
- `y` - 새 변환 원점의 y 좌표
**See Also:**
- ``getTranslateX()``,
``getTranslateY()``
### getTranslateX
```java
public int getTranslateX()
```
**Returns:**
- 현재 원점의 X
### getTranslateY
```java
public int getTranslateY()
```
**Returns:**
- 현재 원점의 Y
### getColor
```java
public int getColor()
```
**Returns:**
- `0x00RRGGBB` 형식의 정수
**See Also:**
- ``setColor(int, int, int)``
### getRedComponent
```java
public int getRedComponent()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setColor(int, int, int)``
### getGreenComponent
```java
public int getGreenComponent()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setColor(int, int, int)``
### getBlueComponent
```java
public int getBlueComponent()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setColor(int, int, int)``
### getGrayScale
```java
public int getGrayScale()
```
**Returns:**
- `0-255` 범위의 정수 값
**See Also:**
- ``setGrayScale(int)``
### setColor
```java
public void setColor(int red,
int green,
int blue)
```
**Parameters:**
- `blue` - `0-255` 범위에 설정된
색의 파랑 구성 요소
**Throws:**
- `IllegalArgumentException` - 색 구성 요소 중 하나가
`0-255` 범위를 벗어난 경우
**See Also:**
- ``getColor()``
### setColor
```java
public void setColor(int RGB)
```
**Parameters:**
- `RGB` - 설정된 색
**See Also:**
- ``getColor()``
### setGrayScale
```java
public void setGrayScale(int value)
```
**Parameters:**
- `value` - 원하는 회색조 값
**Throws:**
- `IllegalArgumentException` - 회색이 범위를 벗어나는 경우
**See Also:**
- ``getGrayScale()``
### getFont
```java
public Font getFont()
```
**Returns:**
- 현재 글꼴
**See Also:**
- ``Font``,
``setFont(javax.microedition.lcdui.Font)``
### setStrokeStyle
```java
public void setStrokeStyle(int style)
```
**Parameters:**
- `style` - `SOLID`나 `DOTTED`가 될 수 있습니다.
**Throws:**
- `IllegalArgumentException` - `style`이 유효하지 않은 경우
**See Also:**
- ``getStrokeStyle()``
### getStrokeStyle
```java
public int getStrokeStyle()
```
**Returns:**
- 입력 스타일, `SOLID` 또는 `DOTTED`
**See Also:**
- ``setStrokeStyle(int)``
### setFont
```java
public void setFont(Font font)
```
**Parameters:**
- `font` - 지정된 글꼴
**See Also:**
- ``Font``,
``getFont()``,
``drawString(java.lang.String, int, int, int)``,
``drawChars(char[], int, int, int, int, int)``
### getClipX
```java
public int getClipX()
```
**Returns:**
- 현재 클립 영역의 X 오프셋
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### getClipY
```java
public int getClipY()
```
**Returns:**
- 현재 클립 영역의 Y 오프셋
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### getClipWidth
```java
public int getClipWidth()
```
**Returns:**
- 현재 클립 영역의 너비
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### getClipHeight
```java
public int getClipHeight()
```
**Returns:**
- 현재 클립 영역의 높이
**See Also:**
- ``clipRect(int, int, int, int)``,
``setClip(int, int, int, int)``
### clipRect
```java
public void clipRect(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 클립과 교차할 직사각형의 높이
**See Also:**
- ``setClip(int, int, int, int)``
### setClip
```java
public void setClip(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 새 클립 직사각형의 높이
**See Also:**
- ``clipRect(int, int, int, int)``
### drawLine
```java
public void drawLine(int x1,
int y1,
int x2,
int y2)
```
**Parameters:**
- `y2` - 선이 끝나는 부분의 y 좌표
### fillRect
```java
public void fillRect(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 채워질 직사각형의 높이
**See Also:**
- ``drawRect(int, int, int, int)``
### drawRect
```java
public void drawRect(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 그려지는 직사각형의 높이
**See Also:**
- ``fillRect(int, int, int, int)``
### drawRoundRect
```java
public void drawRoundRect(int x,
int y,
int width,
int height,
int arcWidth,
int arcHeight)
```
**Parameters:**
- `arcHeight` - 네 개의 모서리에 있는 호의 세로 지름
**See Also:**
- ``fillRoundRect(int, int, int, int, int, int)``
### fillRoundRect
```java
public void fillRoundRect(int x,
int y,
int width,
int height,
int arcWidth,
int arcHeight)
```
**Parameters:**
- `arcHeight` - 네 개의 모서리에 있는 호의 세로 지름
**See Also:**
- ``drawRoundRect(int, int, int, int, int, int)``
### fillArc
```java
public void fillArc(int x,
int y,
int width,
int height,
int startAngle,
int arcAngle)
```
**Parameters:**
- `arcAngle` - 시작 각도에
비례하는 호의 각도 범위
**See Also:**
- ``drawArc(int, int, int, int, int, int)``
### drawArc
```java
public void drawArc(int x,
int y,
int width,
int height,
int startAngle,
int arcAngle)
```
**Parameters:**
- `arcAngle` - 시작 각도에
비례하는 호의 각 범위
**See Also:**
- ``fillArc(int, int, int, int, int, int)``
### drawString
```java
public void drawString(String str,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치할 앵커 포인트
**Throws:**
- `IllegalArgumentException` - 앵커가 유효한 값이 아닌 경우
**See Also:**
- ``drawChars(char[], int, int, int, int, int)``
### drawSubstring
```java
public void drawSubstring(String str,
int offset,
int len,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치하기 위한 앵커 포인트
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
**See Also:**
- ``drawString(String, int, int, int).``
### drawChar
```java
public void drawChar(char character,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치할 앵커 포인트.
앵커 포인트 참조
**Throws:**
- `IllegalArgumentException` - `anchor`가
유효한 값이 아닌 경우
**See Also:**
- ``drawString(java.lang.String, int, int, int)``,
``drawChars(char[], int, int, int, int, int)``
### drawChars
```java
public void drawChars(char[] data,
int offset,
int length,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 텍스트를 배치할 앵커 포인트.
앵커 포인트 참조
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
**See Also:**
- ``drawString(java.lang.String, int, int, int)``
### drawImage
```java
public void drawImage(Image img,
int x,
int y,
int anchor)
```
**Parameters:**
- `anchor` - 이미지 배치를 위한 앵커 포인트
**Throws:**
- `NullPointerException` - `img`가 `null`인 경우
**See Also:**
- ``Image``
### drawRegion
```java
public void drawRegion(Image src,
int x_src,
int y_src,
int width,
int height,
int transform,
int x_dest,
int y_dest,
int anchor)
```
**Parameters:**
- `anchor` - 대상 이미지 내에서
영역을 배치할 앵커 포인트
**Throws:**
- `IllegalArgumentException` - 복사되는 영역이 소스 이미지의
범위를 넘는 경우
**Since:**
- MIDP 2.0
### copyArea
```java
public void copyArea(int x_src,
int y_src,
int width,
int height,
int x_dest,
int y_dest,
int anchor)
```
**Parameters:**
- `anchor` - 대상 이미지 내에서 영역을
배치할 앵커 포인트
**Throws:**
- `IllegalArgumentException` - 복사되는 영역이 소스 이미지의
범위를 넘는 경우
**Since:**
- MIDP 2.0
### fillTriangle
```java
public void fillTriangle(int x1,
int y1,
int x2,
int y2,
int x3,
int y3)
```
**Parameters:**
- `y3` - 삼각형의 세 번째 정점의 y 좌표
**Since:**
- MIDP 2.0
### drawRGB
```java
public void drawRGB(int[] rgbData,
int offset,
int scanlength,
int x,
int y,
int width,
int height,
boolean processAlpha)
```
**Parameters:**
- `processAlpha` - `rgbData`에
알파 채널이 있는 경우 `true`,
모든 픽셀이 전체적으로 불투명한 경우 false
**Throws:**
- `NullPointerException` - `rgbData`가 `null`인 경우
**Since:**
- MIDP 2.0
### getDisplayColor
```java
public int getDisplayColor(int color)
```
**Parameters:**
- `color` - 원하는
색(`0x00RRGGBB` 형식이며
상위 바이트는 무시됨)
**Returns:**
- 장치 화면에 표시될 해당
색(`0x00RRGGBB` 형식으로)
**Since:**
- MIDP 2.0
---
title: "Class Image"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Image
```
## 설명
**extends Object:**
`Image` 클래스는 그래픽 이미지 데이터를 보관하는 데
사용됩니다. `Image` 객체는 디스플레이 장치와는
별도로 존재합니다. 이러한 객체는 오프스크린 메모리에만
존재하며 응용 프로그램에서 명시적인
명령(예: `Canvas`의 `paint()` 메소드)을
실행하거나 활성화된 `Form` 화면 또는
`Alert` 화면에 `Image` 객체를
배치한 경우가 아니라면
디스플레이에 표시되지 않습니다.
이미지는 작성 방법에 따라 *변경 가능한* 경우도 있고
*변경 불가능한* 경우도 있습니다.
변경 불가능한 이미지는 일반적으로 자원 번들,
파일 또는 네트워크에서 이미지 데이터를 로드할 때 작성됩니다.
이러한 이미지는 한 번 작성되면 수정될 수 없습니다.
변경 가능한 이미지는 흰색 픽셀만 들어 있는 공백 이미지로 작성됩니다.
특히 이를 위해 응용 프로그램에서는 `Image`의
``getGraphics()``를 호출하는 방식으로 변경 가능한 이미지를 렌더링하여 `Graphics` 객체를 얻을 수 있습니다.
`Images`는 `Alert`,
`Choice`, `Form` 또는
`ImageItem` 객체에 배치될 수 있습니다.
응용 프로그램에 알리지 않고 언제든지 디스플레이를 업데이트하려면
고급 사용자 인터페이스 구현이 필요할 수도 있습니다.
동작을 예측 가능하도록 하기 위해 고급 사용자 인터페이스
객체는 이미지의 스냅샷 의미를 제공합니다.
즉, 변경 가능한 이미지가 `Alert`,
`Choice`, `Form` 또는
`ImageItem` 객체에 배치된 경우 현재 내용으로
스냅샷을 생성한 것과 같은 기능을 합니다.
그런 다음 이 스냅샷은 고급 사용자 인터페이스 구성 요소의
모든 후속 그리기에 사용됩니다.
응용 프로그램이 이미지의 내용을 수정한 경우 수정된 내용을 표시하려면
해당 이미지가 들어 있는 구성 요소를 업데이트해야 합니다(예:
`ImageItem.setImage` 호출).
변경 불가능한 이미지는 ``createImage``
메소드를 사용하여 변경 가능한 이미지에서 작성될 수 있습니다.
다음과 유사한 기술을 사용하여 변경 불가능한 이미지의
변경 가능한 사본을 작성할 수 있습니다.
Image source; // the image to be copied
source = Image.createImage(...);
Image copy = Image
.createImage(source.getWidth(), source.getHeight());
Graphics g = copy.getGraphics();
g.drawImage(source, 0, 0, TOP|LEFT);
### 알파 처리
변경 가능한 이미지에 있는 모든 픽셀은 항상 완전 불투명입니다.
변경 불가능한 이미지에는 완전 불투명
픽셀`(alpha = 2bitdepth - 1)`,
완전 투명 픽셀 (`alpha = 0`) 및
반투명 픽셀(`0 < alpha < 2bitdepth - 1`)의
조합이 들어 있을 수 있습니다.
여기서 *bitdepth*는
소스 데이터의 샘플당 비트 수입니다.
구현 시 변경 불가능 이미지에서 완전 불투명 픽셀과
완전 투명 픽셀의 저장소, 처리 및 렌더링을 지원해야 합니다.
소스 데이터에서 이미지를 작성할 때(PNG 파일에서건 ARGB 데이터
배열에서건 상관없이) 소스 데이터의 완전 불투명 픽셀은
새 이미지에서 항상 완전 불투명 픽셀이 되어야 하고
소스 데이터의 완전 투명 픽셀은 새 이미지에서 항상 완전
투명 픽셀이 되어야 합니다.
반투명 픽셀 데이터에 필요한 처리는
렌더링 시 알파 블렌딩을 지원하는지에 따라 다릅니다.
구현 시 알파 블렌딩을 지원하면 소스 데이터의 반투명 픽셀은
새 이미지에서도 반투명 픽셀이 되어야 합니다.
결과 알파 값은 플랫폼이 지원하는 반투명도 수준 수에 맞춰
수정될 수 있습니다.
``Display.numAlphaLevels()`` 메소드를
참조하십시오. 구현 시 알파 블렌딩을 지원하지 않으면
소스 데이터의 반투명 픽셀은 모두 새 이미지의
완전 투명 픽셀로 교체되어야 합니다.
### PNG 이미지 형식
구현 시 *PNG (Portable Network Graphics) 사양,
버전 1.0*에서 지정된 대로 PNG 형식으로 저장된 이미지를
지원해야 합니다. MIDP를 준수하는 모든 구현은 *PNG 사양*이
제공하는 최소 요구 사항 집합도 준수합니다.
MIDP 구현은 또한 PNG 이미지 처리와 관련하여
여기에 제공된 추가 요구 사항도 준수해야 합니다.
여기에 나열된 요구 사항은 *PNG 사양*에 제공된
권장 사항과 충돌할 경우 이보다 우선합니다.
PNG가 지정한 모든 '위험' 청크가 지원되어야 합니다.
아래 단락은 이러한 위험 청크를 설명합니다.
IHDR 청크. MIDP 장치는 IHDR 청크에서
다음 값을 처리해야 합니다.
- 모든 양수 값의 너비와 높이가 지원되지만
매우 큰 이미지는 메모리 제약 조건 때문에 읽지 못할 수도 있습니다.
결과 `Image` 객체의 치수는 PNG 이미지의
치수와 일치해야 합니다. 즉, ``getWidth()``
및 ``getHeight()``가 반환한 값과
렌더링된 너비 및 높이는 IHDR 청크에 지정된 너비 및
높이와 동일해야 합니다.
- 이미지의 모양은 장치 화면의 기능에 따라 달라지지만
모든 색상 유형이 지원됩니다. 알파 채널 데이터를 포함하는
색상 유형이 지원됩니다.
- 색상 유형 `4` & `6`(각각
알파가 있는 회색조 및 알파가 있는 RGB)의 경우
알파 채널은 디코딩되어야 합니다. 알파 값이 0인 픽셀은
투명으로 처리되어야 합니다.
알파 값이 `255`(샘플당 비트가 `8`인
이미지의 경우) 또는 `65535`(샘플당 비트가 `16`인
이미지의 경우)인 픽셀은 불투명으로 처리 되어야 합니다.
알파 블렌딩을 사용한 렌더링이 지원되면 중간 알파 값이 있는
모든 픽셀은 결과 이미지로 이동되어야 합니다.
알파 블렌딩이 지원되지 않으면 중간 알파 값이 있는
모든 픽셀은 완전 투명 픽셀로
교체되어야 합니다.
- 주어진 색상 유형에 대한 모든 비트 깊이 값이 지원됩니다.
- 압축 메소드 `0`(수축)은
지원되는 유일한 압축 메소드입니다.
이 메소드는 "zlib" 압축 방법을 활용하는 데
이 방법은 jar 파일에도 사용됩니다.
따라서 jar 디코딩과 PNG 디코딩 구현 간에
압축 해제(팽창) 코드가 공유될 수도 있습니다.
PNG 사양에서 언급되었듯이 압축된 데이터 스트림은
내부적으로 압축된 데이터와 압축 해제된(원시) 데이터 모두로
구성될 수 있습니다.
- 필터 메소드는 압축을 최적화하는 데 사용할 수 있는
일련의 인코딩 방법을 표현합니다.
PNG 사양은 현재 5개의 기본 필터 유형이 있는 적응 필터링 방법인
단일 필터 메소드(메소드 `0`)를 정의합니다.
필터링은 이미지 내에서 공간의 유사성을 이용하기 위한
수축 알고리즘을 사용할 수 있으므로 최적의 압축을 위해 매우 중요합니다.
그러므로, MIDP 장치는 필터 메소드 `0`으로 정의된
5개 필터 유형 모두를 지원해야 합니다.
- MIDP 장치는 교차 메소드 `0`(None) 또는
교차 메소드 `1`(Adam7)로 인코딩되는 PNG 이미지를
읽어야 합니다. MIDP에서의 이미지 로딩은 동기적이며 이미지
렌더링과 겹쳐질 수 없습니다. 따라서 응용 프로그램은
교차 메소드 `1`을 사용하는 장점이 없습니다.
이미 교차된 이미지를 사용하는
개발자들에게 편의를 제공하고
PNG와의 호환을 위해 교차된 이미지 디코딩을
지원해야 합니다.
PLTE 청크. 팔레트 기반 이미지가 지원되어야 합니다.
IDAT 청크. 이미지 데이터는 필터 메소드
`0`(None, Sub, Up, Average, Paeth)에 의해
정의된 `5` 필터 유형 중 하나를 사용하여
인코딩될 수 있습니다.
IEND 청크. 이미지가 유효한 것으로 간주되려면
이 청크가 있어야 합니다.
PNG는 PNG 이미지에 있을 수 있지만 이미지
디코딩에는 중요하지 않은 몇몇 '보조' 청크를 정의합니다.
tRNS 청크. 모든 구현은 tRNS 청크를 지원해야 합니다.
이 청크는 각 픽셀에 알파 채널 데이터를 제공하지 않고
투명도를 구현하는 데 사용됩니다.
색상 유형 `0`과 `2`의 경우
특정 회색이나 RGB 값이 투명 픽셀이 되도록 정의됩니다.
이런 경우에는 구현 시 이 값이 있는 픽셀을
완전 투명으로 처리해야 합니다.
픽셀 값 비교는 원본 샘플 깊이를 사용하여 실제 픽셀 값을
기준으로 해야 합니다. 즉, 픽셀 값이 장치의 디스플레이
기능을 반영하여 재배열되기 전에 이 비교를 수행해야 합니다.
색상 유형 `3`(색인 색상)의 경우,
색상 팔레트의 각 항목에 잠재적으로 `8`
비트 알파 값이 제공됩니다.
이런 경우에는 구현 시 알파 값이 `0`인 픽셀을
완전 투명으로 처리해야 하며 알파 값이 `255`인 픽셀을
완전 불투명으로 처리해야 합니다.
알파 블렌딩을 사용한 렌더링이 지원되면 중간 알파 값이
있는 모든 픽셀은 결과 이미지로 이동되어야 합니다.
알파 블렌딩이 지원되지 않으면 중간 알파 값이 있는 모든 픽셀은
완전 투명 픽셀로 교체되어야 합니다.
구현 시 다른 보조 청크를 지원하지
*않을 수도*(반드시 지원해야 하는 것은 아님) 있습니다.
지원되지 않는 보조 청크가 발생하면 모두 자동으로
*무시해야 합니다.* 현재 정의된 선택적 보조 청크는 다음과 같습니다.
### 참조
*PNG(Portable Network Graphics) Specification, Version 1.0.*
W3C Recommendation, October 1, 1996.
http://www.w3.org/TR/REC-png.html(RFC 2083, http://www.ietf.org/rfc/rfc2083.txt로도 다운로드 가능).
**Since:**
- MIDP 1.0
## 메서드 요약
- `static Image createImage (byte[] imageData, int imageOffset, int imageLength)` — 지정된 오프셋과 길이에 지정된 바이트 배열로 저장된 데이터에서 디코딩된 변경 불가능한 이미지를 작성합니다.
- `static Image createImage ( Image source)` — 소스 이미지에서 변경 불가능한 이미지를 작성합니다.
- `static Image createImage ( Image image, int x, int y, int width, int height, int transform)` — 지정된 대로 변환된 소스 이미지의 지정된 영역에서 픽셀 데이터를 사용하여 변경 불가능한 이미지를 작성합니다.
- `static Image createImage ( InputStream stream)` — InputStream 에서 얻은 디코딩된 이미지 데이터에서 변경 불가능한 이미지를 작성합니다.
- `static Image createImage (int width, int height)` — 오프스크린 그리기에 대한 새로운 변경 가능한 이미지를 작성합니다.
- `static Image createImage ( String name)` — 이름 지정된 자원에서 얻은 디코딩된 이미지 데이터에서 변경 불가능한 이미지를 작성합니다.
- `static Image createRGBImage (int[] rgb, int width, int height, boolean processAlpha)` — 0xAARRGGBB 로 지정된 ARGB 값 순서에서 변경 불가능한 이미지를 작성합니다.
- `Graphics getGraphics ()` — 이 이미지에 렌더링하는 새 Graphics 객체를 작성합니다.
- `int getHeight ()` — 이미지의 높이(단위: 픽셀)를 가져옵니다.
- `void getRGB (int[] rgbData, int offset, int scanlength, int x, int y, int width, int height)` — 이 이미지의 지정된 영역에서 ARGB 픽셀 데이터를 얻어 이를 제공된 정수 배열에 저장합니다.
- `int getWidth ()` — 이미지의 너비(단위: 픽셀)를 가져옵니다.
- `boolean isMutable ()` — 이미지가 변경 가능한지 확인합니다.
## 메서드 상세
### createImage
```java
public static Image createImage(int width,
int height)
```
**Parameters:**
- `height` - 새 이미지의 높이(단위: 픽셀)
**Returns:**
- 만든 이미지
**Throws:**
- `IllegalArgumentException` - `width`
또는 `height`가 0 이하인 경우
### createImage
```java
public static Image createImage(Image source)
```
**Parameters:**
- `source` - 복사할 소스 이미지
**Returns:**
- 변경 불가능한 새 이미지
**Throws:**
- `NullPointerException` - `source`가 `null`인 경우
### createImage
```java
public static Image createImage(String name)
throws IOException
```
**Parameters:**
- `name` - 지원되는 이미지 형식 중 하나로 된
이미지 데이터가 들어 있는 자원 이름
**Returns:**
- 만든 이미지
**Throws:**
- `IOException` - 자원이 존재하지 않거나,
데이터를 로드할 수 없거나,
이미지 데이터를 디코딩할 수 없는 경우
### createImage
```java
public static Image createImage(byte[] imageData,
int imageOffset,
int imageLength)
```
**Parameters:**
- `imageLength` - 배열에 있는 데이터 길이
**Returns:**
- 만든 이미지
**Throws:**
- `IllegalArgumentException` - `imageData`의
형식이 잘못되었거나 디코딩할 수 없는 경우
### createImage
```java
public static Image createImage(Image image,
int x,
int y,
int width,
int height,
int transform)
```
**Parameters:**
- `transform` - 영역에 적용할 변환
**Returns:**
- 변경 불가능한 새 이미지
**Throws:**
- `IllegalArgumentException` - `transform`이
유효하지 않은 경우
**Since:**
- MIDP 2.0
### createImage
```java
public static Image createImage(InputStream stream)
throws IOException
```
**Parameters:**
- `stream` - 지원되는 이미지 형식 중 하나로 된 이미지
데이터가 들어 있는 자원 이름
**Returns:**
- 만든 이미지
**Throws:**
- `IOException` - 입출력 오류가 발생한 경우,
이미지 데이터를 로드할 수 없는 경우 또는 이미지 데이터를 디코딩할 수 없는 경우
**Since:**
- MIDP 2.0
### getGraphics
```java
public Graphics getGraphics()
```
**Returns:**
- 이 이미지가 대상인 `Graphics` 객체
**Throws:**
- `IllegalStateException` - 이미지가 변경 불가능한 경우
### getWidth
```java
public int getWidth()
```
**Returns:**
- 이미지 너비
### getHeight
```java
public int getHeight()
```
**Returns:**
- 이미지 높이
### isMutable
```java
public boolean isMutable()
```
**Returns:**
- 이미지가 변경 가능한 경우 `true`,
그렇지 않은 경우 `false`
### createRGBImage
```java
public static Image createRGBImage(int[] rgb,
int width,
int height,
boolean processAlpha)
```
**Parameters:**
- `processAlpha` - `rgb`에 알파 채널이 있으면
`true`, 모든 픽셀이 완전 불투명이면
`false`
**Returns:**
- 만든 이미지
**Throws:**
- `ArrayIndexOutOfBoundsException` - `rgb`의
길이가 ` width * height`보다
작은 경우
**Since:**
- MIDP 2.0
### getRGB
```java
public void getRGB(int[] rgbData,
int offset,
int scanlength,
int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 영역의 높이
**Throws:**
- `NullPointerException` - `rgbData`가 `null`인 경우
**Since:**
- MIDP 2.0
---
title: "Class ImageItem"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.ImageItem
```
## 설명
**extends Item:**
이미지를 포함할 수 있는 항목입니다.
각 `ImageItem` 항목에는 ``Image``
객체에 대한 참조가 들어 있습니다.
이 `Image`는
변경 가능하거나 변경 불가능합니다.
`Image`가 변경 가능한 경우 `ImageItem`이
이 `Image`로 구성되고 `setImage`가
`Image`와 함께 호출되는 시점의 이미지 내용으로
스냅샷을 생성한 것과 같은 기능을 합니다.
이 스냅샷은 `ImageItem`의
내용이 표시될 때마다 사용됩니다.
그 후에 응용 프로그램이 `Image`에 그림을 그리더라도
`setImage`에 대한
다음 호출 전까지는
스냅샷이 수정되지 않습니다.
이 스냅샷은 `ImageItem`의 컨테이너가 활성 상태가
되거나 디스플레이에서 보이게 되면
업데이트되지 *않습니다.*
이는 응용 프로그램이 `Displayables`와 항목이
디스플레이에 나타나고 사라질 정확한 시기를
제어하지 못하기 때문입니다.
`ImageItem`의 이미지 내용에는
`null` 값이 지정될 수 있습니다.
이런 경우 및 레이블 또한
`null`인 경우에는
`ImageItem`이 화면에서
공간을 차지하지 않습니다.
`ImageItem`에는 처음에 MIDP 1.0에
정의된 레이아웃 지시어가 들어 있습니다.
이러한 레이아웃 지시어는 ``Item`` 클래스로 이동되었고
이제는 모든 항목에 적용됩니다.
선언은 소스 호환성을 위해 `ImageItem`에 남아 있습니다.
`altText` 매개 변수는 이미지가 디스플레이
용량을 초과한 경우 이미지의
위치에 표시될 문자열을 지정합니다.
`altText` 매개 변수는
`null`일 수 있습니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int LAYOUT_CENTER` — `Item.LAYOUT_CENTER` 를 참조하십시오.
- `static int LAYOUT_DEFAULT` — `Item.LAYOUT_DEFAULT` 를 참조하십시오.
- `static int LAYOUT_LEFT` — `Item.LAYOUT_LEFT` 를 참조하십시오.
- `static int LAYOUT_NEWLINE_AFTER` — `Item.LAYOUT_NEWLINE_AFTER` 를 참조하십시오.
- `static int LAYOUT_NEWLINE_BEFORE` — `Item.LAYOUT_NEWLINE_BEFORE` 를 참조하십시오.
- `static int LAYOUT_RIGHT` — `Item.LAYOUT_RIGHT` 를 참조하십시오.
## 생성자 요약
- ImageItem ( String label, Image img,
int layout, String altText) 주어진 레이블, 이미지, 레이아웃 지시어 및 대체 텍스트 문자열로
새 ImageItem 을 작성합니다.
- ImageItem ( String label, Image image,
int layout, String altText,
int appearanceMode) 주어진 레이블, 이미지, 레이아웃 지시어, 대체
텍스트 문자열 및 모양 모드로 새 ImageItem 객체를 작성합니다.
## 메서드 요약
- `String getAltText ()` — 이미지가 장치의 표시 용량을 초과한 경우 사용할 텍스트 문자열을 가져옵니다.
- `int getAppearanceMode ()` — ImageItem 의 모양 모드를 반환합니다.
- `Image getImage ()` — ImageItem 에 포함된 이미지를 가져오거나 포함된 이미지가 없으면 null 을 가져옵니다.
- `int getLayout ()` — 이미지 배치에 사용할 레이아웃 지시어를 가져옵니다.
- `void setAltText ( String text)` — ImageItem 의 대체 텍스트를 설정하거나 대체 텍스트가 제공되지 않은 경우 null 을 설정합니다.
- `void setImage ( Image img)` — ImageItem 에 포함된 Image 객체를 설정합니다.
- `void setLayout (int layout)` — 레이아웃 지시어를 설정합니다.
## 필드 상세
### LAYOUT_DEFAULT
```java
public static final int LAYOUT_DEFAULT
```
**See Also:**
- `Constant Field Values`
### LAYOUT_LEFT
```java
public static final int LAYOUT_LEFT
```
**See Also:**
- `Constant Field Values`
### LAYOUT_RIGHT
```java
public static final int LAYOUT_RIGHT
```
**See Also:**
- `Constant Field Values`
### LAYOUT_CENTER
```java
public static final int LAYOUT_CENTER
```
**See Also:**
- `Constant Field Values`
### LAYOUT_NEWLINE_BEFORE
```java
public static final int LAYOUT_NEWLINE_BEFORE
```
**See Also:**
- `Constant Field Values`
### LAYOUT_NEWLINE_AFTER
```java
public static final int LAYOUT_NEWLINE_AFTER
```
**See Also:**
- `Constant Field Values`
### ImageItem
```java
public ImageItem(String label,
Image img,
int layout,
String altText)
```
- 주어진 레이블, 이미지, 레이아웃 지시어 및 대체 텍스트 문자열로
새 `ImageItem`을 작성합니다.
이 구성자를 호출하는 것은 다음을 호출하는 것과 같습니다.
`
ImageItem(label, image, layout, altText, PLAIN); `
**Parameters:**
- `altText` - 이미지 위치에 사용할 수 있는 텍스트
**Throws:**
- `IllegalArgumentException` - `layout` 값이
지시어의 올바른 조합이 아닌 경우
**See Also:**
- ``ImageItem(String, Image, int, String, int)``
### ImageItem
```java
public ImageItem(String label,
Image image,
int layout,
String altText,
int appearanceMode)
```
- 주어진 레이블, 이미지, 레이아웃 지시어, 대체
텍스트 문자열 및 모양 모드로 새 `ImageItem` 객체를 작성합니다.
레이블이나 대체 텍스트는 존재하거나 `null`일 수 있습니다.
`appearanceMode`
매개 변수(`모양 모드` 참조)를
보면 응용 프로그램이 이 `ImageItem`에 사용할 플랫폼이
무엇인지 알 수 있습니다. 하이퍼링크나 버튼같은 동작을
제공하려면 응용 프로그램은 기본 `Command`를
이 `ImageItem`과 연관시키고
이 `ImageItem`에
`ItemCommandListener`를
추가해야 합니다.
`ImageItem`을 버튼으로
사용하는 예는 다음과 같습니다.
```java
ImageItem imgItem =
new ImageItem("Default: ", img,
Item.LAYOUT_CENTER, null,
Item.BUTTON);
imgItem.setDefaultCommand(
new Command("Set", Command.ITEM, 1);
// icl is ItemCommandListener
imgItem.setItemCommandListener(icl);
```
**Parameters:**
- `appearanceMode` - `ImageItem`의 모양 모드.
``Item.PLAIN``, ``Item.HYPERLINK`` 또는 ``Item.BUTTON`` 중 하나
**Throws:**
- `IllegalArgumentException` - `appearanceMode`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
### getImage
```java
public Image getImage()
```
**Returns:**
- `ImageItem`이 사용하는 이미지
**See Also:**
- ``setImage(javax.microedition.lcdui.Image)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `ImageItem`의
`Image` 또는 없는 경우 `null`
**See Also:**
- ``getImage()``
### getAltText
```java
public String getAltText()
```
**Returns:**
- 대체 텍스트 값 또는 없는 경우 `null`
**See Also:**
- ``setAltText(java.lang.String)``
### setAltText
```java
public void setAltText(String text)
```
**Parameters:**
- `text` - 새 대체 텍스트
**See Also:**
- ``getAltText()``
### getLayout
```java
public int getLayout()
```
**Overrides:**
- `getLayout` in class `Item`
**Returns:**
- 레이아웃 지시어 값의 조합
**See Also:**
- ``setLayout(int)``
### setLayout
```java
public void setLayout(int layout)
```
**Overrides:**
- `setLayout` in class `Item`
**Parameters:**
- `layout` - 레이아웃 지시어 값의 조합
**Throws:**
- `IllegalArgumentException` - `layout`의 값이
레이아웃 지시어의
유효한 조합이 아닌 경우
**See Also:**
- ``getLayout()``
### getAppearanceMode
```java
public int getAppearanceMode()
```
**Returns:**
- 모양 모드 값. ``Item.PLAIN``, ``Item.HYPERLINK`` 또는
``Item.BUTTON`` 중 하나
**Since:**
- MIDP 2.0
## 생성자 상세
### ImageItem
```java
public ImageItem(String label,
Image img,
int layout,
String altText)
```
- 주어진 레이블, 이미지, 레이아웃 지시어 및 대체 텍스트 문자열로
새 `ImageItem`을 작성합니다.
이 구성자를 호출하는 것은 다음을 호출하는 것과 같습니다.
`
ImageItem(label, image, layout, altText, PLAIN); `
**Parameters:**
- `altText` - 이미지 위치에 사용할 수 있는 텍스트
**Throws:**
- `IllegalArgumentException` - `layout` 값이
지시어의 올바른 조합이 아닌 경우
**See Also:**
- ``ImageItem(String, Image, int, String, int)``
### ImageItem
```java
public ImageItem(String label,
Image image,
int layout,
String altText,
int appearanceMode)
```
- 주어진 레이블, 이미지, 레이아웃 지시어, 대체
텍스트 문자열 및 모양 모드로 새 `ImageItem` 객체를 작성합니다.
레이블이나 대체 텍스트는 존재하거나 `null`일 수 있습니다.
`appearanceMode`
매개 변수(`모양 모드` 참조)를
보면 응용 프로그램이 이 `ImageItem`에 사용할 플랫폼이
무엇인지 알 수 있습니다. 하이퍼링크나 버튼같은 동작을
제공하려면 응용 프로그램은 기본 `Command`를
이 `ImageItem`과 연관시키고
이 `ImageItem`에
`ItemCommandListener`를
추가해야 합니다.
`ImageItem`을 버튼으로
사용하는 예는 다음과 같습니다.
```java
ImageItem imgItem =
new ImageItem("Default: ", img,
Item.LAYOUT_CENTER, null,
Item.BUTTON);
imgItem.setDefaultCommand(
new Command("Set", Command.ITEM, 1);
// icl is ItemCommandListener
imgItem.setItemCommandListener(icl);
```
**Parameters:**
- `appearanceMode` - `ImageItem`의 모양 모드.
``Item.PLAIN``, ``Item.HYPERLINK`` 또는 ``Item.BUTTON`` 중 하나
**Throws:**
- `IllegalArgumentException` - `appearanceMode`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
### getImage
```java
public Image getImage()
```
**Returns:**
- `ImageItem`이 사용하는 이미지
**See Also:**
- ``setImage(javax.microedition.lcdui.Image)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `ImageItem`의
`Image` 또는 없는 경우 `null`
**See Also:**
- ``getImage()``
### getAltText
```java
public String getAltText()
```
**Returns:**
- 대체 텍스트 값 또는 없는 경우 `null`
**See Also:**
- ``setAltText(java.lang.String)``
### setAltText
```java
public void setAltText(String text)
```
**Parameters:**
- `text` - 새 대체 텍스트
**See Also:**
- ``getAltText()``
### getLayout
```java
public int getLayout()
```
**Overrides:**
- `getLayout` in class `Item`
**Returns:**
- 레이아웃 지시어 값의 조합
**See Also:**
- ``setLayout(int)``
### setLayout
```java
public void setLayout(int layout)
```
**Overrides:**
- `setLayout` in class `Item`
**Parameters:**
- `layout` - 레이아웃 지시어 값의 조합
**Throws:**
- `IllegalArgumentException` - `layout`의 값이
레이아웃 지시어의
유효한 조합이 아닌 경우
**See Also:**
- ``getLayout()``
### getAppearanceMode
```java
public int getAppearanceMode()
```
**Returns:**
- 모양 모드 값. ``Item.PLAIN``, ``Item.HYPERLINK`` 또는
``Item.BUTTON`` 중 하나
**Since:**
- MIDP 2.0
## 메서드 상세
### getImage
```java
public Image getImage()
```
**Returns:**
- `ImageItem`이 사용하는 이미지
**See Also:**
- ``setImage(javax.microedition.lcdui.Image)``
### setImage
```java
public void setImage(Image img)
```
**Parameters:**
- `img` - `ImageItem`의
`Image` 또는 없는 경우 `null`
**See Also:**
- ``getImage()``
### getAltText
```java
public String getAltText()
```
**Returns:**
- 대체 텍스트 값 또는 없는 경우 `null`
**See Also:**
- ``setAltText(java.lang.String)``
### setAltText
```java
public void setAltText(String text)
```
**Parameters:**
- `text` - 새 대체 텍스트
**See Also:**
- ``getAltText()``
### getLayout
```java
public int getLayout()
```
**Overrides:**
- `getLayout` in class `Item`
**Returns:**
- 레이아웃 지시어 값의 조합
**See Also:**
- ``setLayout(int)``
### setLayout
```java
public void setLayout(int layout)
```
**Overrides:**
- `setLayout` in class `Item`
**Parameters:**
- `layout` - 레이아웃 지시어 값의 조합
**Throws:**
- `IllegalArgumentException` - `layout`의 값이
레이아웃 지시어의
유효한 조합이 아닌 경우
**See Also:**
- ``getLayout()``
### getAppearanceMode
```java
public int getAppearanceMode()
```
**Returns:**
- 모양 모드 값. ``Item.PLAIN``, ``Item.HYPERLINK`` 또는
``Item.BUTTON`` 중 하나
**Since:**
- MIDP 2.0
---
title: "Class Item"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
```
## 설명
**Direct Known Subclasses:**
- `ChoiceGroup`, `CustomItem`, `DateField`, `Gauge`, `ImageItem`, `Spacer`, `StringItem`, `TextField`
**extends Object:**
``Form``에 추가할 수 있는 구성 요소의 수퍼 클래스.
모든 `Item` 객체에는
항목에 연결된 문자열인 레이블 필드가 있습니다. 레이블은 일반적으로
화면에 표시될 때 구성 요소 가까이에
표시됩니다. 레이블은 항목과 같은 가로 행이나 항목의
바로 위에 있어야 합니다.
구현 시 레이블이 다른 문자열과 같은 행에
놓인 경우 레이블을 다른 글꼴로 표시하거나,
다른 여백에 맞추어 정렬하거나, 콜론을 추가하여 레이블 문자열을
다른 텍스트 내용과 구별할 수 있도록 해야 합니다.
화면이 스크롤될 때 `Item`과 동시에 레이블도
계속 표시되도록 해야 합니다.
사용자가 `Item`과 상호 작용하려고 할 때
시스템에서는 실제 상호 작용이 발생하는 시스템 생성 화면으로
전환하는 경우도 있습니다.
이러한 경우 일반적으로 레이블도 함께
새 화면에 표시되어 사용자에게 작업 상황을 알려줍니다.
그러므로 응용 프로그램은 모든 대화식 항목 객체에 레이블을
제공하는 것이 좋습니다.
그러나 이것은 필수 사항은 아니며
레이블에 `null` 값을 사용하여 레이블이 없음을
지정할 수도 있습니다.
### 항목 레이아웃
컨테이너 내의 `Item` 레이아웃은
레이아웃 지시어에 의해 영향을 받습니다.
- `LAYOUT_DEFAULT`
- `LAYOUT_LEFT`
- `LAYOUT_RIGHT`
- `LAYOUT_CENTER`
- `LAYOUT_TOP`
- `LAYOUT_BOTTOM`
- `LAYOUT_VCENTER`
- `LAYOUT_NEWLINE_BEFORE`
- `LAYOUT_NEWLINE_AFTER`
- `LAYOUT_SHRINK`
- `LAYOUT_VSHRINK`
- `LAYOUT_EXPAND`
- `LAYOUT_VEXPAND`
- `LAYOUT_2`
`LAYOUT_DEFAULT` 지시어는
이 항목에 사용할 컨테이너의 기본 레이아웃 정책을 나타냅니다.
`LAYOUT_DEFAULT`의 값은 0이며 다른 레이아웃 지시어와
결합되면 아무런 효과가 없습니다.
이 지시어는 프로그램 내에서 프로그래머의 의도를 명시적으로
나타내는 데 유용합니다.
`LAYOUT_LEFT`, `LAYOUT_RIGHT`
및 `LAYOUT_CENTER` 지시어는 수평 정렬을 나타내며
상호 배타적입니다. 이와 유사하게,
`LAYOUT_TOP`,
`LAYOUT_BOTTOM` 및 `LAYOUT_VCENTER`
지시어는 수직 정렬을 나타내며 상호 배타적입니다.
수평 정렬 지시어, 수직 정렬 지시어 및 기타 레이아웃 지시어의 조합은
비트 단위 `OR` 연산자(`|`)로
조합하여 레이아웃 지시어 값을 구성할 수 있습니다.
이러한 값은 ``setLayout(int)`` 메소드에 매개 변수로
사용되고 ``getLayout()`` 메소드의
반환 값입니다.
일부 지시어는 컨텍스트에 따라 정의된 동작이 없는 경우도 있습니다.
`Item`이 있는 특정 컨텍스트 내에서 지시어의
동작이 정의되지 않은 경우에는 해당 레이아웃 지시어가 무시됩니다.
`Form`에 있는 `Item` 레이아웃의
전체 사양은 `여기`에서
제공됩니다.
### 항목 크기
`Item`에는 2개의 명시적 크기 개념인 *최소* 크기와
*권장* 크기가 있습니다.
최소 및 권장 크기 모두
`Item`의 총 영역을 가리키며
여기에는 `Item`
내용 공간, `Item` 레이블
공간 및 레이아웃 정책에 중요한 다른 공간도 포함됩니다.
이러한 크기는 레이아웃 용도에 중요하지 않은
공간은 포함하지 않습니다.
예를 들어, `Item`에 레이블을
추가하면 여기에 필요한 공간을 만들기 위해 다른 `Item`을
이동하게 되므로 이 레이블이 차지하는
공간은 레이아웃에 중요하며
`Item`의 최소 및
권장 크기의 일부로 계산됩니다.
그러나 구현 시 레이블용으로
예약된 여백 영역에 레이블을 배치한 경우에는
인접한 `Item`의 레이아웃에 영향을 미치지 않습니다.
이런 경우 레이블이 차지하는 공간은 최소 및 권장 크기의 일부로
간주되지 않습니다.
최소 크기는 최적의 크기는 아니지만 `Item`이 작동하고
내용을 표시할 수 있는 가장 작은 크기입니다.
최소 크기는 `Item`의 내용이 변경될 때마다
재계산될 수 있습니다.
권장 크기는 일반적으로 `Item`의 내용을
기준으로 하는 크기이며 정보가 잘리지 않고 텍스트 줄 바꿈(있는 경우)이
허용 가능한 최소치로 유지되는 가장 작은 크기입니다.
권장 크기는 `Item`의 내용이 변경될 때마다
재계산될 수 있습니다. 응용 프로그램은
``setPreferredSize`` 메소드에
특정 매개 변수 값을 제공하여 권장 너비나 권장 높이(또는 둘 모두)를
*잠글 수*있습니다. 응용 프로그램이 지정한 권장 크기에
`Item`의 내용을 맞추는 방법은 구현별로 다릅니다.
그러나 텍스트 내용은 단어 단위로 줄바꿈하여 응용 프로그램에서
설정한 권장 크기에 맞추는 것이 좋습니다.
응용 프로그램은 `setPreferredSize` 메소드의
매개 변수에 `-1` 값을
제공하여 두 치수 중 하나 또는
모두를 *잠금 해제*할 수 있습니다.
`Item`이 작성되면
권장 너비와 높이 모두 잠금 해제됩니다.
이 상태에서 가능하면 `Item`의 그래픽 디자인과
화면 치수와 같은 관련 요소를 포함하여
`Item`의
내용을 기준으로 권장 너비와 높이를 계산합니다.
권장 너비 또는 높이를 잠근 후
응용 프로그램에서는
`setPreferredSize(-1, -1)`을 호출하여
초기의 잠금 해제된 상태로 복원할 수 있습니다.
응용 프로그램은 권장 크기의 한 치수는 잠그고
다른 치수는 잠금 해제 상태로 둘 수 있습니다.
이렇게 하면 시스템은 잠긴 치수에 맞게 내용을 정렬하여
잠금 해제된 치수의 적절한 값을 계산합니다.
내용이 변경되면 잠금 해제된 치수의 크기는
새로운 내용을 반영할 수 있도록 재계산되지만 잠금 해제된 치수의
크기는 변경되지 않습니다.
예를 들어, 응용 프로그램이 `setPreferredSize(50, -1)`을
호출하면 권장 너비는 `50` 픽셀로 잠겨지고
권장 높이는 `Item`의 내용을 기준으로 계산됩니다.
이와 유사하게, 응용 프로그램이
`setPreferredSize(-1, 60)`을 호출하면
권장 높이는 `60` 픽셀로 잠겨지고
권장 너비는 `Item`의 내용을 기준으로 계산됩니다.
이 기능은 특히 줄 바꿈할 수 있는 텍스트 내용이 있는
`Item`에 유용합니다.
응용 프로그램은 권장 너비와 높이 모두를 특정 값으로
잠글 수도 있습니다. `Item`의 내용은
이 요청을 처리하기 위해 필요에 따라 잘리거나 채워집니다.
텍스트를 포함하는 `Item`의 경우 텍스트는 지정된 너비에
맞춰 줄바꿈되어야 하며 텍스트의 끝부분에서 잘라야 합니다.
`Item`에는 구현에 의해 제공되는 암시적 최대
크기도 있습니다. 최대 크기는 일반적으로 `Form`에
사용 가능한 화면 공간의 너비를 기준으로 합니다.
`Form`은 수직으로 스크롤할 수 있으므로 사용 가능한
화면 공간의 높이를 기준으로 최대 높이를 설정하면 안 됩니다.
응용 프로그램이 권장 크기 수치를 최소보다 작거나 최대보다
큰 값으로 잠그려고 하면 구현에서는 요청된 값을 무시하고 대신
해당하는 최소값이나 최대값을 사용합니다.
이런 경우 응용 프로그램은
``getPreferredWidth`` 및
``getPreferredHeight`` 메소드에서
반환된 값을 통해 사용되는 실제 값을 볼 수 있습니다.
### 명령
``addCommand(javax.microedition.lcdui.Command)`` 또는 ``setDefaultCommand(javax.microedition.lcdui.Command)``를
사전 호출하여 `Command`를
`Item`에 추가한 후 ``removeCommand(javax.microedition.lcdui.Command)``를 호출하여
`Command`를
제거하지 않은 경우 `Item`에
`Command`가 있다고
합니다. 항목에 있는 `Command`는 `ITEM`
명령 유형을 가져야 합니다.
그러나, 유형이 `ITEM`이 아닌
명령이 항목에 추가되는 것이 오류는 아닙니다.
사용자 인터페이스 내에 표시되고 배치되도록 하기 위해 구현 시
명령의 항목 유형이 `ITEM`인 것처럼
처리할 수 있습니다.
`Item`은 *기본*
`Command`를 가질 수 있으며
이 상태는 ``setDefaultCommand(javax.microedition.lcdui.Command)`` 메소드로 제어됩니다.
기본 `Command`는 플랫폼 종속적인 특별한 사용자
동작으로 연결될 수 있습니다.
구현 시 해당 특정 `Item`에서
기본 명령을 시작하기 위해
가장 적합한 동작을 선택합니다.
예를 들어, 전용 선택 키가 있는 장치에서 이 키를 누르면 항목의
기본 명령을 호출할 수 있습니다.
또는 스타일러스 기반 장치에서
`Item`을 누르면 기본 명령을 호출할 수 있습니다.
기본 명령은 특별한 동작을 통해 호출할 수 있지만
다른 항목 명령과 같은
방식으로 호출할 수도 있습니다.
장치에 따라 항목의 기본 명령을 호출하는 데 적합한 특별한 동작이
없는 경우도 있습니다. 이런 경우 기본 명령은 다른 항목 명령과
같은 방식으로 사용자가 접근할 수 있어야 합니다.
구현 시 사용자 인터페이스 내에
명령 배치 위치를 결정하기 위해
기본 명령의 상태를 사용할 수 있습니다.
`Item`에 따라
기본 명령이 없는 경우도 있습니다.
이런 경우 특별한 사용자 동작(있는 경우)을 명령 메뉴 표시와 같은
다른 용도에 사용할 수도 있습니다.
`Item`의 기본 상태에는
기본 명령이 없습니다. `Item`은
`Item`에서 명령을 제거하거나
`setDefaultCommand()` 메소드에 `null`을
전달하여 기본 `Command`가
없는 것으로 설정될 수 있습니다.
둘 이상의 `Item`과 둘 이상의
`Displayable`에서
같은 명령이 발생할 수 있습니다.
이러한 상황이 발생하면 해당 `Item` 또는
`Displayable`이 디스플레이에 표시되는 동안
각 `Item` 또는
`Displayable`에서 해당 명령을
호출할 고유한 동작을
사용자에게 제공해야 합니다.
사용자가 명령을 호출하면 명령이 호출된
해당 객체의 수신기(`CommandListener` 또는
`ItemCommandListener`에 해당)가
호출됩니다.
`Item`에 명령을 추가하면 모양,
배치 방법 및 순회 동작에 영향을 미칠 수 있습니다.
예를 들어, `Item`에 명령이 있으면 행이 분리되거나
추가 그래픽 요소(예: 메뉴 아이콘)가 나타날 수 있습니다.
특히, 모양 모드가 `PLAIN`(아래 참조)인
`StringItem`에 하나 이상의
`Command`가 제공되면 구현 시 이 항목에
다른 모양 모드가 있는 것처럼 처리할 수 있습니다.
### 모양 모드
`StringItem` 및 `ImageItem` 클래스에는
구성자에 설정할 수 있는 *모양 모드* 속성이 있습니다.
이 속성은 ``PLAIN``,
``HYPERLINK`` 또는
``BUTTON`` 값 중 하나를 가질 수 있습니다.
`PLAIN` 모양 모드는 일반적으로 텍스트나
그래픽 자료의 비대화형
디스플레이에 사용됩니다.
모양 모드 값은 항목의 상호 작용에 어떠한 부작용도 미치지 않습니다.
대화식이 되려면 항목에는 하나 이상의
`Command`(기본 명령을 지정하는 것이 좋음)가
있어야 하며 `Command` 호출 통지를
수신하는 `CommandListener`가 있어야 합니다.
모양 모드 값은 항목에서 `Command` 호출의 의미에
영향을 미치지 않습니다.
예를 들어, `StringItem`의 모양 모드를
`HYPERLINK`로 설정하면 문자열 내용은
브라우저에서 하이퍼링크인 것처럼 표시됩니다.
하이퍼링크의 작업을 호출할 때 사용자가 기대하는
동작(예: 링크의 참조 대상 로딩 또는
링크를 사용자의 책갈피 집합에 추가)을
제공하는 `StringItem`에
`Command`와
수신기를 연결하는 것은 응용 프로그램의
책임입니다.
`Item`을 `PLAIN`이 아닌
모양 모드로 설정하면 배치 방법뿐 아니라 항목의 최소, 권장 및
최대 크기에까지 영향을 미칠 수 있습니다.
예를 들어, 모양 모드가 `BUTTON`인 `StringItem`은 여러 행에 걸쳐 줄 바꾸기를
수행할 수 없습니다. 그러나 모양 모드가 `HYPERLINK`인
`StringItem`은 모양 모드가 `PLAIN`인 것과
같은 방법으로 줄 바꾸기 되어야 합니다.
`BUTTON`
모드에 있는 `StringItem`
또는 `ImageItem`은
버튼 기반 사용자 인터페이스를 작성하는 데
사용할 수 있습니다. 그러면 응용 프로그램을
사용하기가 불편해질 수 있습니다.
예를 들어, 순회 기반 시스템에서 사용자가 버튼의 명령을
호출하려면 해당 버튼으로 이동해야 합니다.
버튼이 긴 `Form`에 흩어져 있다면 사용 가능한
모든 명령을 찾기 위해 상당 시간 탐색을 수행해야 할 수 있습니다.
게다가, `Form`의 다른 쪽 끝에 있는 버튼에서
명령을 호출하는 것은 매우 번거로울 수 있습니다.
순회 기반 시스템은 때로 특정 항목까지 순회할 필요 없이
어디에서나(예: 메뉴) 명령을 호출할 수 있는 수단을 제공합니다.
버튼에 명령을 추가하고
해당 버튼을 `Form`에 배치하는
대신 해당 명령을 `Form`에 직접 추가하는 것이
더 적절하고 편리할 수 있습니다.
버튼은 항목의 문자열이나 이미지 내용을 직접 사용해야
해당 항목에서 호출 가능한 명령을 알 수 있는 경우에만
사용되어야 합니다.
### 기본 상태
서브 클래스에서 별도로 지정하지 않는 한 새로
작성된 `Item`의 기본 상태는 다음과 같습니다.
- 해당 `Item`은 어떠한 컨테이너에도
들어 있지 않습니다("소유되지 않음")
- `Command`가 없습니다.
- 기본 `Command`가 `null`입니다.
- `ItemCommandListener`가 `null`입니다.
- 레이아웃 지시어 값이 `LAYOUT_DEFAULT`입니다.
- 권장 너비와 권장 높이가 모두 잠금 해제되어 있습니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int BUTTON` — Item 이 버튼으로 표시됨을 나타내는 모양 모드 값.
- `static int HYPERLINK` — Item 이 하이퍼링크로 표시됨을 나타내는 모양 모드 값.
- `static int LAYOUT_2` — 새 MIDP 2.0 레이아웃 규칙이 이 Item 에 적용되어 있음을 나타내는 레이아웃 지시어.
- `static int LAYOUT_BOTTOM` — 이 Item 이 아래로 정렬된 레이아웃이어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_CENTER` — 이 Item 이 수평 중심 레이아웃이어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_DEFAULT` — 이 Item 이 해당 컨테이너의 기본 레이아웃 정책을 따라야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_EXPAND` — 이 Item 의 너비가 사용 가능한 공간을 채우기 위해 늘어날 수 있음을 나타내는 레이아웃 지시어.
- `static int LAYOUT_LEFT` — 이 Item 이 왼쪽 정렬된 레이아웃이어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_NEWLINE_AFTER` — 이 Item 이 줄이나 행의 마지막 항목이어야 하고 컨테이너의 다음 Item (있는 경우)은 새 줄이나 행에 배치되어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_NEWLINE_BEFORE` — 이 Item 이 새 줄이나 행의 시작 위치에 배치되어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_RIGHT` — 이 Item 이 오른쪽 정렬된 레이아웃이어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_SHRINK` — 이 Item 의 너비가 최소 너비로 줄어들 수 있음을 나타내는 레이아웃 지시어.
- `static int LAYOUT_TOP` — 이 Item 이 위로 정렬된 레이아웃이어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_VCENTER` — 이 Item 이 수직 중심 레이아웃이어야 함을 나타내는 레이아웃 지시어.
- `static int LAYOUT_VEXPAND` — 이 Item 의 높이가 사용 가능한 공간을 채우기 위해 늘어날 수 있음을 나타내는 레이아웃 지시어.
- `static int LAYOUT_VSHRINK` — 이 Item 의 높이가 최소 높이로 줄어들 수 있음을 나타내는 레이아웃 지시어.
- `static int PLAIN` — Item 이 일반 모양임을 나타내는 모양 모드 값.
## 메서드 요약
- `void addCommand ( Command cmd)` — 컨텍스트에 맞는 Command 를 항목에 추가합니다.
- `String getLabel ()` — 이 Item 객체의 레이블을 가져옵니다.
- `int getLayout ()` — 항목을 배치하는 데 사용되는 레이아웃 지시어를 가져옵니다.
- `int getMinimumHeight ()` — 이 Item 의 최소 높이를 가져옵니다.
- `int getMinimumWidth ()` — 이 Item 의 최소 너비를 가져옵니다.
- `int getPreferredHeight ()` — 이 Item 의 권장 높이를 가져옵니다.
- `int getPreferredWidth ()` — 이 Item 의 권장 너비를 가져옵니다.
- `void notifyStateChanged ()` — Form 을 포함하는 이 Item 이 Item 의 `ItemStateListener` 에게 알려 줍니다.
- `void removeCommand ( Command cmd)` — 항목에서 상황에 맞는 명령을 제거합니다.
- `void setDefaultCommand ( Command cmd)` — 이 Item 에 기본 Command 를 설정합니다.
- `void setItemCommandListener ( ItemCommandListener l)` — 이 Item 에 Command 의 수신기를 설정하고 이전 ItemCommandListener 를 교체합니다.
- `void setLabel ( String label)` — Item 의 레이블을 설정합니다.
- `void setLayout (int layout)` — 이 항목에 레이아웃 지시어를 설정합니다.
- `void setPreferredSize (int width, int height)` — 이 Item 의 권장 너비와 높이를 설정합니다.
## 필드 상세
### LAYOUT_DEFAULT
```java
public static final int LAYOUT_DEFAULT
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_LEFT
```java
public static final int LAYOUT_LEFT
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_RIGHT
```java
public static final int LAYOUT_RIGHT
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_CENTER
```java
public static final int LAYOUT_CENTER
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_TOP
```java
public static final int LAYOUT_TOP
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_BOTTOM
```java
public static final int LAYOUT_BOTTOM
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_VCENTER
```java
public static final int LAYOUT_VCENTER
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_NEWLINE_BEFORE
```java
public static final int LAYOUT_NEWLINE_BEFORE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_NEWLINE_AFTER
```java
public static final int LAYOUT_NEWLINE_AFTER
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_SHRINK
```java
public static final int LAYOUT_SHRINK
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_EXPAND
```java
public static final int LAYOUT_EXPAND
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_VSHRINK
```java
public static final int LAYOUT_VSHRINK
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_VEXPAND
```java
public static final int LAYOUT_VEXPAND
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### LAYOUT_2
```java
public static final int LAYOUT_2
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### PLAIN
```java
public static final int PLAIN
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### HYPERLINK
```java
public static final int HYPERLINK
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### BUTTON
```java
public static final int BUTTON
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### setLabel
```java
public void setLabel(String label)
```
**Parameters:**
- `label` - 레이블 문자열
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**See Also:**
- ``getLabel()``
### getLabel
```java
public String getLabel()
```
**Returns:**
- 레이블 문자열
**See Also:**
- ``setLabel(java.lang.String)``
### getLayout
```java
public int getLayout()
```
**Returns:**
- 레이아웃 지시어 값의 조합
**Since:**
- MIDP 2.0
**See Also:**
- ``setLayout(int)``
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `layout` - 이 항목의 레이아웃 지시어 값의 조합
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getLayout()``
### addCommand
```java
public void addCommand(Command cmd)
```
**Parameters:**
- `cmd` - 추가되는 명령
**Throws:**
- `NullPointerException` - cmd가 `null`인 경우
**Since:**
- MIDP 2.0
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Parameters:**
- `cmd` - 제거되는 명령
**Since:**
- MIDP 2.0
### setItemCommandListener
```java
public void setItemCommandListener(ItemCommandListener l)
```
**Parameters:**
- `l` - 새 수신기 또는 `null`
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
### getPreferredWidth
```java
public int getPreferredWidth()
```
**Returns:**
- 항목의 권장 너비
**Since:**
- MIDP 2.0
**See Also:**
- ``getPreferredHeight()``,
``setPreferredSize(int, int)``
### getPreferredHeight
```java
public int getPreferredHeight()
```
**Returns:**
- `Item`의 권장 높이
**Since:**
- MIDP 2.0
**See Also:**
- ``getPreferredWidth()``,
``setPreferredSize(int, int)``
### setPreferredSize
```java
public void setPreferredSize(int width,
int height)
```
**Parameters:**
- `height` - 높이를 잠글 값 또는
잠금 해제할 경우 `-1`
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getPreferredHeight()``,
``getPreferredWidth()``
### getMinimumWidth
```java
public int getMinimumWidth()
```
**Returns:**
- 항목의 최소 너비
**Since:**
- MIDP 2.0
### getMinimumHeight
```java
public int getMinimumHeight()
```
**Returns:**
- 항목의 최소 높이
**Since:**
- MIDP 2.0
### setDefaultCommand
```java
public void setDefaultCommand(Command cmd)
```
**Parameters:**
- `cmd` - 이 `Item`의 기본
`Command`로 사용될 명령 또는
기본 명령이 없는 경우에는 `null`
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
### notifyStateChanged
```java
public void notifyStateChanged()
```
**Throws:**
- `IllegalStateException` - `Item`이
`Form`의 소유가 아닌 경우
**Since:**
- MIDP 2.0
## 메서드 상세
### setLabel
```java
public void setLabel(String label)
```
**Parameters:**
- `label` - 레이블 문자열
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**See Also:**
- ``getLabel()``
### getLabel
```java
public String getLabel()
```
**Returns:**
- 레이블 문자열
**See Also:**
- ``setLabel(java.lang.String)``
### getLayout
```java
public int getLayout()
```
**Returns:**
- 레이아웃 지시어 값의 조합
**Since:**
- MIDP 2.0
**See Also:**
- ``setLayout(int)``
### setLayout
```java
public void setLayout(int layout)
```
**Parameters:**
- `layout` - 이 항목의 레이아웃 지시어 값의 조합
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getLayout()``
### addCommand
```java
public void addCommand(Command cmd)
```
**Parameters:**
- `cmd` - 추가되는 명령
**Throws:**
- `NullPointerException` - cmd가 `null`인 경우
**Since:**
- MIDP 2.0
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Parameters:**
- `cmd` - 제거되는 명령
**Since:**
- MIDP 2.0
### setItemCommandListener
```java
public void setItemCommandListener(ItemCommandListener l)
```
**Parameters:**
- `l` - 새 수신기 또는 `null`
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
### getPreferredWidth
```java
public int getPreferredWidth()
```
**Returns:**
- 항목의 권장 너비
**Since:**
- MIDP 2.0
**See Also:**
- ``getPreferredHeight()``,
``setPreferredSize(int, int)``
### getPreferredHeight
```java
public int getPreferredHeight()
```
**Returns:**
- `Item`의 권장 높이
**Since:**
- MIDP 2.0
**See Also:**
- ``getPreferredWidth()``,
``setPreferredSize(int, int)``
### setPreferredSize
```java
public void setPreferredSize(int width,
int height)
```
**Parameters:**
- `height` - 높이를 잠글 값 또는
잠금 해제할 경우 `-1`
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getPreferredHeight()``,
``getPreferredWidth()``
### getMinimumWidth
```java
public int getMinimumWidth()
```
**Returns:**
- 항목의 최소 너비
**Since:**
- MIDP 2.0
### getMinimumHeight
```java
public int getMinimumHeight()
```
**Returns:**
- 항목의 최소 높이
**Since:**
- MIDP 2.0
### setDefaultCommand
```java
public void setDefaultCommand(Command cmd)
```
**Parameters:**
- `cmd` - 이 `Item`의 기본
`Command`로 사용될 명령 또는
기본 명령이 없는 경우에는 `null`
**Throws:**
- `IllegalStateException` - 이 `Item`이
`Alert`에 포함되어 있는 경우
**Since:**
- MIDP 2.0
### notifyStateChanged
```java
public void notifyStateChanged()
```
**Throws:**
- `IllegalStateException` - `Item`이
`Form`의 소유가 아닌 경우
**Since:**
- MIDP 2.0
---
title: "Interface ItemCommandListener"
---
`package javax.microedition.lcdui`
```text
public void commandAction(Command c,
Item item)
```
## 설명
**Parameters:**
- `item` - 명령이 호출된 `Item`
## 메서드 요약
- `void commandAction ( Command c, Item item)` — 시스템에 의해 호출되어 특정 항목에서 명령이 호출되었음을 나타냅니다.
## 메서드 상세
### commandAction
```java
public void commandAction(Command c,
Item item)
```
**Parameters:**
- `item` - 명령이 호출된 `Item`
---
title: "Interface ItemStateListener"
---
`package javax.microedition.lcdui`
```text
public void itemStateChanged(Item item)
```
## 설명
**Parameters:**
- `item` - 변경된 항목
## 메서드 요약
- `void itemStateChanged ( Item item)` — 사용자가 Item 의 내부 상태를 변경할 때 호출됩니다.
## 메서드 상세
### itemStateChanged
```java
public void itemStateChanged(Item item)
```
**Parameters:**
- `item` - 변경된 항목
---
title: "Class List"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
|
+--javax.microedition.lcdui.Screen
|
+--javax.microedition.lcdui.List
```
## 설명
**All Implemented Interfaces:**
- `Choice`
**implements Choice:**
선택 목록을 포함하는 `Screen`.
대부분의 동작은 ``ChoiceGroup`` 클래스 및
해당 공통 API와 유사합니다.
특히 다른 `List` 유형은 ``Choice``
인터페이스에 정의되어 있습니다.
디스플레이에 `List`가 있으면 사용자는 요소를 선택하고
가능한 경우 여러 요소 간을 순회하고 스크롤하여 목록과
상호 작용할 수 있습니다.
순회 및 스크롤 작업은 응용 프로그램 가시적 이벤트를 발생하지 않습니다.
시스템은 해당 ``CommandListener``에 알려
``Command``가 호출될 때만 응용 프로그램에 알립니다.
`List` 클래스는
또한 장치의 기능에 따라
특별히 호출될 수 있는 선택 명령도 지원합니다.
`List` 요소에
대한 *선택* 작업의
개념은 사용자와 `List`와의 상호 작용에 집중됩니다.
지정된 하드웨어 "선택" 또는 "이동" 키가 있는
장치에서는 해당 키를 사용하여 선택 작업을 구현합니다.
지정된 키가 없는 장치에서는
선택 작업을 수행할 수 있는
다른 방법을 제공해야 합니다(예: 소프트 키 사용).
유형이 다른 목록에서의 선택 작업 동작은
다음 절에 설명되어 있습니다.
`List` 객체는 ``Choice.EXCLUSIVE``,
``Choice.MULTIPLE`` 및 ``Choice.IMPLICIT``의
`Choice` 유형으로 작성될 수 있습니다.
``Choice.POPUP`` `Choice` 유형은 `List` 객체에서는 허용되지 않습니다.
### EXCLUSIVE 및 MULTIPLE 목록에서 선택
선택 작업은 `Command`
객체와 연관되지 않으므로
응용 프로그램에는 레이블을 설정하거나 작업 수행 시 알림을
받을 방법이 없습니다. `EXCLUSIVE`
유형의 `List`에서 선택 작업은 대상 요소를
선택하고 이전에 선택한 요소를 선택 해제합니다.
`MULTIPLE` 유형의 `List`에서
선택 작업은 대상 요소의 선택된 상태를 전환하고
다른 요소의 선택된 상태를 변경되지 않은 상태로 둡니다.
소프트 키를 사용하여 선택 작업을 구현하는 장치는
여기에 레이블을 제공해야 합니다.
레이블은 `EXCLUSIVE` 유형 `List`의
"선택" 및 `MULTIPLE`유형
`List`의 "표시" 또는
"표시 취소"와 유사한 부분이 있습니다.
### IMPLICIT 목록에서 선택
선택 작업은 *선택 명령*으로 불리는
`Command` 객체와 연관되어 있습니다.
사용자가 선택 작업을 수행할 때 시스템은 `List`의
``CommandListener``에 알려
선택 명령을 호출합니다.
기본 선택 명령은 시스템이 제공한
`SELECT_COMMAND` 명령입니다.
응용 프로그램은
``setSelectCommand`` 메소드를
사용하여 선택 명령을 수정할 수 있습니다.
소프트 키를 사용하여 선택 작업을 구현하는 장치는 선택 명령으로부터
레이블을 사용합니다.
선택 명령이 `SELECT_COMMAND`이면
장치는 `SELECT_COMMAND` 레이블 속성을 사용하는 대신
고유의 레이블을 제공하도록 선택할 수 있습니다.
응용 프로그램은 일반적으로 `SELECT_COMMAND`를 교체할
고유의 선택 명령을 제공해야 합니다. 이렇게 하면 응용 프로그램은
`SELECT_COMMAND`에 시스템이 제공한 레이블에 의존하는 대신
의미있는 레이블을 제공할 수 있습니다.
구현 시 `List`에 요소가 없는 경우 `List`가
비어 있으면 선택할 수 없기 때문에 선택 명령을
호출해서는 *안 됩니다.*
이런 경우 선택 명령이
소프트 버튼이나 메뉴에 명시적으로 표시되면 구현 시 이를 제거하거나
사용 불가능으로 해야 합니다.
일반적으로 `List`가 비어 있을 때
다른 명령은 호출할 수 있습니다.
### IMPLICIT 목록 사용
`IMPLICIT` `List`는 작업을
`List` 요소로 제공하여 메뉴를 구성하는 데
사용할 수 있습니다. 응용 프로그램은 `List` 요소를
선택하는 데 사용되는 `Command`를 제공한 다음
이 `Command`를 선택 명령으로 사용하도록 정의합니다.
응용 프로그램은 또한 사용자가
`Command`를 선택하거나
활성화할 때 호출되는 `CommandListener`를
등록해야 합니다.
String[] elements = { ... }; //Menu items as List elements
List menuList = new List("Menu", List.IMPLICIT, elements, null);
Command selectCommand = new Command("Open", Command.ITEM, 1);
menuList.setSelectCommand(selectCommand);
menuList.setCommandListener(...);
수신기는 `List`를 쿼리하여
어떤 요소가 선택되었는지 확인한 다음 해당 작업을 수행합니다.
명령을 선택 명령으로 설정하면 `List`가
잘못 동작할 수도 있습니다.
선택 명령은 선택 키를 누를 때 수행되는 *기본 작업*으로
간주되어야 합니다.
예를 들어, 전자 메일 헤더를 표시하는 `List`에는 읽기,
응답 및 삭제의 3가지 작업이 있을 수 있으며 읽기가
기본 작업으로 간주됩니다.
List list = new List("Email", List.IMPLICIT, headers);
readCommand = new Command("Read", Command.ITEM, 1);
replyCommand = new Command("Reply", Command.ITEM, 2);
deleteCommand = new Command("Delete", Command.ITEM, 3);
list.setSelectCommand(readCommand);
list.addCommand(replyCommand);
list.addCommand(deleteCommand);
list.setCommandListener(...);
지정된 선택 키가 있는 장치에서 이 키를 누르면
`readCommand`가 호출됩니다.
읽기 명령은 일반 `Command` 명령으로도 제공되기 때문에
선택 키가 없는 장치에서도 사용자는 읽기 명령을 호출할 수 있습니다.
이러한 종류의 기본 작업은 주의해서 사용해야 하며 그 결과로
만들어진 사용자 인터페이스의 유용성을 항상 염두에 두어야 합니다.
기본 작업은 항상 특정 목록에서
가장 직관적인 작업이어야 합니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static Command SELECT_COMMAND` — IMPLICIT List 의 기본 선택 명령.
## 생성자 요약
- List ( String title,
int listType) 비어 있는 새 List 를 만들고
목록의 제목과
유형을 지정합니다.
- List ( String title,
int listType, String [] stringElements, Image [] imageElements) 새 List 를 만들고 제목과 List 유형
및 초기 내용으로 사용할 String 및 Image 의 배열을 지정합니다.
## 메서드 요약
- `int append ( String stringPart, Image imagePart)` — List 의 요소에 첨부합니다.
- `void delete (int elementNum)` — elementNum 에서 참조하는 요소를 삭제합니다.
- `void deleteAll ()` — 이 목록에서 모든 요소를 삭제합니다.
- `int getFitPolicy ()` — Choice 요소 내용을 사용 가능한 화면 크기에 맞추기 위한 응용 프로그램의 권장 정책을 가져옵니다.
- `Font getFont (int elementNum)` — 이 Choice 의 지정된 요소를 렌더링하기 위한 응용 프로그램의 기본 글꼴을 가져옵니다.
- `Image getImage (int elementNum)` — elementNum 에서 참조하는 요소의 Image 부분을 가져옵니다.
- `int getSelectedFlags (boolean[] selectedArray_return)` — List 의 상태를 쿼리하고 부울 배열 selectedArray_return 의 모든 요소 상태를 반환합니다.
- `int getSelectedIndex ()` — List 에서 선택된 요소의 색인 번호를 반환합니다.
- `String getString (int elementNum)` — elementNum 에서 참조하는 요소의 String 부분을 가져옵니다.
- `void insert (int elementNum, String stringPart, Image imagePart)` — 요소를 지정하기 전에 List 에 요소를 삽입합니다.
- `boolean isSelected (int elementNum)` — 이 요소의 선택 여부를 나타내는 부울 값을 가져옵니다.
- `void removeCommand ( Command cmd)` — 다음과 같은 의미가 추가되고 나머지는 `Displayable.removeCommand` 와 동일합니다.
- `void set (int elementNum, String stringPart, Image imagePart)` — 요소의 이전 내용을 바꿔 elementNum 에서 참조하는 요소의 String 및 Image 부분을 설정합니다.
- `void setFitPolicy (int fitPolicy)` — Choice 요소 내용을 사용 가능한 화면 크기에 맞추기 위한 응용 프로그램의 기본 정책을 설정합니다.
- `void setFont (int elementNum, Font font)` — 이 Choice 의 지정된 요소를 렌더링하기 위한 응용 프로그램의 기본 글꼴을 설정합니다.
- `void setSelectCommand ( Command command)` — IMPLICIT List 선택 작업에 사용할 Command 를 설정합니다.
- `void setSelectedFlags (boolean[] selectedArray)` — List 의 모든 요소의 선택된 상태를 설정합니다.
- `void setSelectedIndex (int elementNum, boolean selected)` — 요소의 선택된 상태를 설정합니다.
- `int size ()` — List 의 요소 수를 가져옵니다.
## 필드 상세
### SELECT_COMMAND
```java
public static final Command SELECT_COMMAND
```
- `IMPLICIT`
`List`의 기본 선택 명령.
`IMPLICIT` `List`를 사용하는
응용 프로그램은 ``setSelectCommand``를
사용하여 고유의 선택 명령을 설정해야 합니다.
`SELECT_COMMAND`의 필드 값은 다음과 같습니다.
- `label = ""` (an empty string)
- `type = SCREEN`
- `priority = 0`
(유형이 `ITEM`이면 더 적합하지만
기록용으로 `SCREEN` 유형을
그대로 사용합니다.)
응용 프로그램은 `SELECT_COMMAND`를 인식하기 위해
이러한 값을 사용해서는 안 됩니다.
대신 `Command` 및
`Displayable`(`List`)의 객체 ID를 사용해야 합니다.
`SELECT_COMMAND`는 다른 `Displayable`
유형과 함께 사용된 경우 일반 `Command`로
처리됩니다.
### List
```java
public List(String title,
int listType)
```
- 비어 있는 새 `List`를 만들고
목록의 제목과
유형을 지정합니다.
**Parameters:**
- `listType` - `IMPLICIT`,
`EXCLUSIVE` 또는 `MULTIPLE` 중 하나
**Throws:**
- `IllegalArgumentException` - `listType`이
`IMPLICIT`, `EXCLUSIVE` 또는
`MULTIPLE` 중 하나가 아닌 경우
**See Also:**
- ``Choice``
### List
```java
public List(String title,
int listType,
String[] stringElements,
Image[] imageElements)
```
- 새 `List`를 만들고 제목과
`List`유형
및 초기 내용으로 사용할 `String` 및
`Image`의 배열을 지정합니다.
`stringElements` 배열은 null이 아니어야 하며
모든 배열 요소도 null이 아니어야 합니다.
`stringElements` 배열의 길이는
`List`의 요소 수를 결정합니다.
`imageElements` 배열은
`List` 요소에
이미지가 없음을 나타내기 위해
`null`일 수 있습니다.
`imageElements` 배열이 null이 아닌 경우
`stringElements` 배열과 길이가 같아야 합니다.
`imageElements` 배열의 개별 요소는 해당하는
`List` 요소에
이미지가 없음을 나타내기 위해
`null`일 수 있습니다.
`imageElements` 배열의 null이 아닌 요소는
변경 가능하거나 변경 불가능한 이미지를
나타낼 수 있습니다.
**Parameters:**
- `imageElements` - `List` 요소의 이미지 부분을
지정하는 이미지 집합
**Throws:**
- `IllegalArgumentException` - `listType`이
`IMPLICIT`, `EXCLUSIVE` 또는
`MULTIPLE` 중 하나가 아닌 경우
**See Also:**
- ``Choice.EXCLUSIVE``,
``Choice.MULTIPLE``,
``Choice.IMPLICIT``
### size
```java
public int size()
```
**Specified by:**
- `size` in interface `Choice`
**Returns:**
- `List`의 요소 수
### getString
```java
public String getString(int elementNum)
```
**Specified by:**
- `getString` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 문자열 부분
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getImage(int)``
### getImage
```java
public Image getImage(int elementNum)
```
**Specified by:**
- `getImage` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 수
**Returns:**
- 요소의 이미지 부분 또는 이미지가 없는 경우 `null`
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이
유효하지 않은 경우
**See Also:**
- ``getString(int)``
### append
```java
public int append(String stringPart,
Image imagePart)
```
**Specified by:**
- `append` in interface `Choice`
**Parameters:**
- `imagePart` - 추가되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Returns:**
- 요소의 할당된 색인
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### insert
```java
public void insert(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `insert` in interface `Choice`
**Parameters:**
- `imagePart` - 삽입되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### delete
```java
public void delete(int elementNum)
```
**Specified by:**
- `delete` in interface `Choice`
**Parameters:**
- `elementNum` - 삭제되는 요소 색인
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Specified by:**
- `deleteAll` in interface `Choice`
### set
```java
public void set(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `set` in interface `Choice`
**Parameters:**
- `imagePart` - 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### isSelected
```java
public boolean isSelected(int elementNum)
```
**Specified by:**
- `isSelected` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소의 색인
**Returns:**
- 요소의 선택 상태
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Specified by:**
- `getSelectedIndex` in interface `Choice`
**Returns:**
- 선택한 요소의 색인 또는 색인이 없는 경우 `-1`
**See Also:**
- ``setSelectedIndex(int, boolean)``
### getSelectedFlags
```java
public int getSelectedFlags(boolean[] selectedArray_return)
```
**Specified by:**
- `getSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray_return` - 결과를 포함할 배열
**Returns:**
- `Choice`에서 선택된 요소 수
**Throws:**
- `NullPointerException` - `selectedArray_return`이
`null`인 경우
**See Also:**
- ``setSelectedFlags(boolean[])``
### setSelectedIndex
```java
public void setSelectedIndex(int elementNum,
boolean selected)
```
**Specified by:**
- `setSelectedIndex` in interface `Choice`
**Parameters:**
- `selected` - 요소 상태, 여기서 `true`는 선택된 상태를,
`false`는 선택되지 않은 상태를 의미합니다.
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getSelectedIndex()``
### setSelectedFlags
```java
public void setSelectedFlags(boolean[] selectedArray)
```
**Specified by:**
- `setSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray` - 메소드가 선택 상태를
수집하는 배열
**Throws:**
- `NullPointerException` - `selectedArray`가
`null`인 경우
**See Also:**
- ``getSelectedFlags(boolean[])``
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Overrides:**
- `removeCommand` in class `Displayable`
**Parameters:**
- `cmd` - 제거되는 명령
**Since:**
- MIDP 2.0
### setSelectCommand
```java
public void setSelectCommand(Command command)
```
**Parameters:**
- `command` - `IMPLICIT` 목록 선택 작업에
사용할 명령, 없는 경우에는 `null`
**Since:**
- MIDP 2.0
### setFitPolicy
```java
public void setFitPolicy(int fitPolicy)
```
**Specified by:**
- `setFitPolicy` in interface `Choice`
**Parameters:**
- `fitPolicy` - 선택 사항 요소의 기본 내용 맞춤 정책
**Throws:**
- `IllegalArgumentException` - `fitPolicy`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``
### getFitPolicy
```java
public int getFitPolicy()
```
**Specified by:**
- `getFitPolicy` in interface `Choice`
**Returns:**
- ``Choice.TEXT_WRAP_DEFAULT``, ``Choice.TEXT_WRAP_ON`` 또는
``Choice.TEXT_WRAP_OFF`` 중의 하나
**Since:**
- MIDP 2.0
**See Also:**
- ``setFitPolicy(int)``
### setFont
```java
public void setFont(int elementNum,
Font font)
```
**Specified by:**
- `setFont` in interface `Choice`
**Parameters:**
- `font` - 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int)``
### getFont
```java
public Font getFont(int elementNum)
```
**Specified by:**
- `getFont` in interface `Choice`
**Parameters:**
- `elementNum` - 0부터 시작하는 요소의 색인
**Returns:**
- 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(int elementNum, Font font)``
## 생성자 상세
### List
```java
public List(String title,
int listType)
```
- 비어 있는 새 `List`를 만들고
목록의 제목과
유형을 지정합니다.
**Parameters:**
- `listType` - `IMPLICIT`,
`EXCLUSIVE` 또는 `MULTIPLE` 중 하나
**Throws:**
- `IllegalArgumentException` - `listType`이
`IMPLICIT`, `EXCLUSIVE` 또는
`MULTIPLE` 중 하나가 아닌 경우
**See Also:**
- ``Choice``
### List
```java
public List(String title,
int listType,
String[] stringElements,
Image[] imageElements)
```
- 새 `List`를 만들고 제목과
`List`유형
및 초기 내용으로 사용할 `String` 및
`Image`의 배열을 지정합니다.
`stringElements` 배열은 null이 아니어야 하며
모든 배열 요소도 null이 아니어야 합니다.
`stringElements` 배열의 길이는
`List`의 요소 수를 결정합니다.
`imageElements` 배열은
`List` 요소에
이미지가 없음을 나타내기 위해
`null`일 수 있습니다.
`imageElements` 배열이 null이 아닌 경우
`stringElements` 배열과 길이가 같아야 합니다.
`imageElements` 배열의 개별 요소는 해당하는
`List` 요소에
이미지가 없음을 나타내기 위해
`null`일 수 있습니다.
`imageElements` 배열의 null이 아닌 요소는
변경 가능하거나 변경 불가능한 이미지를
나타낼 수 있습니다.
**Parameters:**
- `imageElements` - `List` 요소의 이미지 부분을
지정하는 이미지 집합
**Throws:**
- `IllegalArgumentException` - `listType`이
`IMPLICIT`, `EXCLUSIVE` 또는
`MULTIPLE` 중 하나가 아닌 경우
**See Also:**
- ``Choice.EXCLUSIVE``,
``Choice.MULTIPLE``,
``Choice.IMPLICIT``
### size
```java
public int size()
```
**Specified by:**
- `size` in interface `Choice`
**Returns:**
- `List`의 요소 수
### getString
```java
public String getString(int elementNum)
```
**Specified by:**
- `getString` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 문자열 부분
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getImage(int)``
### getImage
```java
public Image getImage(int elementNum)
```
**Specified by:**
- `getImage` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 수
**Returns:**
- 요소의 이미지 부분 또는 이미지가 없는 경우 `null`
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이
유효하지 않은 경우
**See Also:**
- ``getString(int)``
### append
```java
public int append(String stringPart,
Image imagePart)
```
**Specified by:**
- `append` in interface `Choice`
**Parameters:**
- `imagePart` - 추가되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Returns:**
- 요소의 할당된 색인
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### insert
```java
public void insert(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `insert` in interface `Choice`
**Parameters:**
- `imagePart` - 삽입되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### delete
```java
public void delete(int elementNum)
```
**Specified by:**
- `delete` in interface `Choice`
**Parameters:**
- `elementNum` - 삭제되는 요소 색인
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Specified by:**
- `deleteAll` in interface `Choice`
### set
```java
public void set(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `set` in interface `Choice`
**Parameters:**
- `imagePart` - 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### isSelected
```java
public boolean isSelected(int elementNum)
```
**Specified by:**
- `isSelected` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소의 색인
**Returns:**
- 요소의 선택 상태
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Specified by:**
- `getSelectedIndex` in interface `Choice`
**Returns:**
- 선택한 요소의 색인 또는 색인이 없는 경우 `-1`
**See Also:**
- ``setSelectedIndex(int, boolean)``
### getSelectedFlags
```java
public int getSelectedFlags(boolean[] selectedArray_return)
```
**Specified by:**
- `getSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray_return` - 결과를 포함할 배열
**Returns:**
- `Choice`에서 선택된 요소 수
**Throws:**
- `NullPointerException` - `selectedArray_return`이
`null`인 경우
**See Also:**
- ``setSelectedFlags(boolean[])``
### setSelectedIndex
```java
public void setSelectedIndex(int elementNum,
boolean selected)
```
**Specified by:**
- `setSelectedIndex` in interface `Choice`
**Parameters:**
- `selected` - 요소 상태, 여기서 `true`는 선택된 상태를,
`false`는 선택되지 않은 상태를 의미합니다.
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getSelectedIndex()``
### setSelectedFlags
```java
public void setSelectedFlags(boolean[] selectedArray)
```
**Specified by:**
- `setSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray` - 메소드가 선택 상태를
수집하는 배열
**Throws:**
- `NullPointerException` - `selectedArray`가
`null`인 경우
**See Also:**
- ``getSelectedFlags(boolean[])``
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Overrides:**
- `removeCommand` in class `Displayable`
**Parameters:**
- `cmd` - 제거되는 명령
**Since:**
- MIDP 2.0
### setSelectCommand
```java
public void setSelectCommand(Command command)
```
**Parameters:**
- `command` - `IMPLICIT` 목록 선택 작업에
사용할 명령, 없는 경우에는 `null`
**Since:**
- MIDP 2.0
### setFitPolicy
```java
public void setFitPolicy(int fitPolicy)
```
**Specified by:**
- `setFitPolicy` in interface `Choice`
**Parameters:**
- `fitPolicy` - 선택 사항 요소의 기본 내용 맞춤 정책
**Throws:**
- `IllegalArgumentException` - `fitPolicy`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``
### getFitPolicy
```java
public int getFitPolicy()
```
**Specified by:**
- `getFitPolicy` in interface `Choice`
**Returns:**
- ``Choice.TEXT_WRAP_DEFAULT``, ``Choice.TEXT_WRAP_ON`` 또는
``Choice.TEXT_WRAP_OFF`` 중의 하나
**Since:**
- MIDP 2.0
**See Also:**
- ``setFitPolicy(int)``
### setFont
```java
public void setFont(int elementNum,
Font font)
```
**Specified by:**
- `setFont` in interface `Choice`
**Parameters:**
- `font` - 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int)``
### getFont
```java
public Font getFont(int elementNum)
```
**Specified by:**
- `getFont` in interface `Choice`
**Parameters:**
- `elementNum` - 0부터 시작하는 요소의 색인
**Returns:**
- 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(int elementNum, Font font)``
## 메서드 상세
### size
```java
public int size()
```
**Specified by:**
- `size` in interface `Choice`
**Returns:**
- `List`의 요소 수
### getString
```java
public String getString(int elementNum)
```
**Specified by:**
- `getString` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 색인
**Returns:**
- 요소의 문자열 부분
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getImage(int)``
### getImage
```java
public Image getImage(int elementNum)
```
**Specified by:**
- `getImage` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소 수
**Returns:**
- 요소의 이미지 부분 또는 이미지가 없는 경우 `null`
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이
유효하지 않은 경우
**See Also:**
- ``getString(int)``
### append
```java
public int append(String stringPart,
Image imagePart)
```
**Specified by:**
- `append` in interface `Choice`
**Parameters:**
- `imagePart` - 추가되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Returns:**
- 요소의 할당된 색인
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### insert
```java
public void insert(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `insert` in interface `Choice`
**Parameters:**
- `imagePart` - 삽입되는 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### delete
```java
public void delete(int elementNum)
```
**Specified by:**
- `delete` in interface `Choice`
**Parameters:**
- `elementNum` - 삭제되는 요소 색인
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### deleteAll
```java
public void deleteAll()
```
**Specified by:**
- `deleteAll` in interface `Choice`
### set
```java
public void set(int elementNum,
String stringPart,
Image imagePart)
```
**Specified by:**
- `set` in interface `Choice`
**Parameters:**
- `imagePart` - 요소의 이미지 부분 또는
이미지 부분이 없는 경우 `null`
**Throws:**
- `NullPointerException` - `stringPart`가
`null`인 경우
### isSelected
```java
public boolean isSelected(int elementNum)
```
**Specified by:**
- `isSelected` in interface `Choice`
**Parameters:**
- `elementNum` - 쿼리되는 요소의 색인
**Returns:**
- 요소의 선택 상태
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
### getSelectedIndex
```java
public int getSelectedIndex()
```
**Specified by:**
- `getSelectedIndex` in interface `Choice`
**Returns:**
- 선택한 요소의 색인 또는 색인이 없는 경우 `-1`
**See Also:**
- ``setSelectedIndex(int, boolean)``
### getSelectedFlags
```java
public int getSelectedFlags(boolean[] selectedArray_return)
```
**Specified by:**
- `getSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray_return` - 결과를 포함할 배열
**Returns:**
- `Choice`에서 선택된 요소 수
**Throws:**
- `NullPointerException` - `selectedArray_return`이
`null`인 경우
**See Also:**
- ``setSelectedFlags(boolean[])``
### setSelectedIndex
```java
public void setSelectedIndex(int elementNum,
boolean selected)
```
**Specified by:**
- `setSelectedIndex` in interface `Choice`
**Parameters:**
- `selected` - 요소 상태, 여기서 `true`는 선택된 상태를,
`false`는 선택되지 않은 상태를 의미합니다.
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**See Also:**
- ``getSelectedIndex()``
### setSelectedFlags
```java
public void setSelectedFlags(boolean[] selectedArray)
```
**Specified by:**
- `setSelectedFlags` in interface `Choice`
**Parameters:**
- `selectedArray` - 메소드가 선택 상태를
수집하는 배열
**Throws:**
- `NullPointerException` - `selectedArray`가
`null`인 경우
**See Also:**
- ``getSelectedFlags(boolean[])``
### removeCommand
```java
public void removeCommand(Command cmd)
```
**Overrides:**
- `removeCommand` in class `Displayable`
**Parameters:**
- `cmd` - 제거되는 명령
**Since:**
- MIDP 2.0
### setSelectCommand
```java
public void setSelectCommand(Command command)
```
**Parameters:**
- `command` - `IMPLICIT` 목록 선택 작업에
사용할 명령, 없는 경우에는 `null`
**Since:**
- MIDP 2.0
### setFitPolicy
```java
public void setFitPolicy(int fitPolicy)
```
**Specified by:**
- `setFitPolicy` in interface `Choice`
**Parameters:**
- `fitPolicy` - 선택 사항 요소의 기본 내용 맞춤 정책
**Throws:**
- `IllegalArgumentException` - `fitPolicy`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFitPolicy()``
### getFitPolicy
```java
public int getFitPolicy()
```
**Specified by:**
- `getFitPolicy` in interface `Choice`
**Returns:**
- ``Choice.TEXT_WRAP_DEFAULT``, ``Choice.TEXT_WRAP_ON`` 또는
``Choice.TEXT_WRAP_OFF`` 중의 하나
**Since:**
- MIDP 2.0
**See Also:**
- ``setFitPolicy(int)``
### setFont
```java
public void setFont(int elementNum,
Font font)
```
**Specified by:**
- `setFont` in interface `Choice`
**Parameters:**
- `font` - 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont(int)``
### getFont
```java
public Font getFont(int elementNum)
```
**Specified by:**
- `getFont` in interface `Choice`
**Parameters:**
- `elementNum` - 0부터 시작하는 요소의 색인
**Returns:**
- 요소 렌더링에 사용할 기본 글꼴
**Throws:**
- `IndexOutOfBoundsException` - `elementNum`이 유효하지 않은 경우
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(int elementNum, Font font)``
---
title: "Class Screen"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
|
+--javax.microedition.lcdui.Screen
```
## 설명
**Direct Known Subclasses:**
- `Alert`, `Form`, `List`, `TextBox`
**extends Displayable:**
고급 사용자 인터페이스 클래스의 공통 수퍼 클래스.
표시되는 내용과 사용자와의 상호 작용은
서브 클래스에서 정의합니다.
응용 프로그램은 서브 클래스가 정의한 메소드를 사용하여
`Screen` 객체가 사용자에게 표시되는 동안
해당 내용을 변경할 수 있습니다.
이런 경우 `Screen` 객체가 가시적이면 디스플레이는
자동으로 업데이트됩니다.
즉, 응용 프로그램이 추가 작업을
수행하기를 기다리지 않고 적절한 시기에 디스플레이를 갱신합니다.
예를 들어, 현재 `List` 객체가 표시되어 있다면
`List`의 모든 요소가 가시적입니다.
응용 프로그램이 `List`의 시작 부분에
새 요소를 삽입하면 이 요소는 즉시 표시되고
다른 요소는 적절하게 다시 정렬됩니다.
응용 프로그램이 디스플레이를 갱신하기 위해 다른 메소드를
호출할 필요는 없습니다.
응용 프로그램은 `Screen`이 가시적이 아닐 때
즉, 다른 `Displayable`이
표시되어 있을 때에만
그 내용을 변경하는 것이 좋습니다.
`Screen`이 가시적일 때
그 내용을 변경하면 일부 장치에서
성능 문제가 발생할 수 있고
사용자가 `Screen`과 상호 작용하고 있는 동안
그 내용이 변경되면 혼동을 야기할 수도 있습니다.
MIDP 2.0에서는 읽기/쓰기 표시기와
제목 속성을 정의하는
4개의 `Screen` 메소드를 `Screen`의
수퍼 클래스인 `Displayable`로 옮겼습니다.
이러한 메소드의 의미는 변경되지 않았습니다.
**Since:**
- MIDP 1.0
Methods inherited from class javax.microedition.lcdui. Displayable addCommand , getHeight , getTicker , getTitle , getWidth , isShown , removeCommand , setCommandListener , setTicker , setTitle , sizeChanged
Methods inherited from class java.lang. Object equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
---
title: "Class Spacer"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.Spacer
```
## 설명
**extends Item:**
설정 가능한 최소 크기를 가진 비어 있는 비대화식 항목.
최소 너비는 `Form`의 같은 행에서 `Item` 사이에
유연성 있는 공간을 할당하는 데 유용합니다.
최소 높이는 행의 특정 최소 높이를 적용하는 데 유용합니다.
응용 프로그램은 음수가 아닌 값으로
최소 너비나 높이를 설정할 수 있습니다.
최소 너비와 높이에 구현 시 정의한
최대값을 적용할 수 있습니다.
`Spacer`의 잠금 해제된 기본 너비는
현재 최소 너비와 같습니다. 잠금 해제된 기본 높이는
현재 최소 높이와 같습니다.
`Spacer`의 주요 용도는
다른 항목을 배치하는 것이므로
비대화식으로만 사용할 수 있으며
응용 프로그램은 `Spacer`에 `Command`를
추가할 수 없습니다. `Item`에 레이블이 있으면
장치마다 다른 방법으로 레이아웃에 영향을 미칠 수 있으므로
`Spacer`의 레이블은 항상 `null`로
제한되어 있으며 응용 프로그램은
이를 변경할 수 없습니다.
**Since:**
- MIDP 2.0
## 필드 요약
## 생성자 요약
- Spacer (int minWidth,
int minHeight) 제공된 최소 크기로 새 Spacer 를 만듭니다.
## 메서드 요약
- `void addCommand ( Command cmd)` — Spacer 는 Command 를 가질 수 없으므로 이 메소드는 호출될 때마다 항상 IllegalStateException 을 발생합니다.
- `void setDefaultCommand ( Command cmd)` — 스페이서는 Command를 가질 수 없으므로 이 메소드는 호출될 때마다 항상 IllegalStateException 을 발생합니다.
- `void setLabel ( String label)` — Spacer 는 null 레이블만 가질 수 있으므로 이 메소드는 호출될 때마다 항상 IllegalStateException 을 발생합니다.
- `void setMinimumSize (int minWidth, int minHeight)` — 이 스페이서의 최소 크기를 설정합니다.
## 생성자 상세
### Spacer
```java
public Spacer(int minWidth,
int minHeight)
```
- 제공된 최소 크기로 새
`Spacer`를 만듭니다.
`Spacer`의
레이블은 `null`입니다.
최소 크기는 0 이상이어야 합니다.
`minWidth`가 구현 시
정의한 최대 너비보다 크면
최대 너비가 사용됩니다.
`minHeight`가 구현 시
정의한 최대 높이보다 크면 최대 높이가 사용됩니다.
**Parameters:**
- `minHeight` - 최소 높이(단위: 픽셀)
**Throws:**
- `IllegalArgumentException` - `minWidth` 또는
`minHeight`가 0 미만인 경우
### setMinimumSize
```java
public void setMinimumSize(int minWidth,
int minHeight)
```
**Parameters:**
- `minHeight` - 최소 높이(단위: 픽셀)
**Throws:**
- `IllegalArgumentException` - `minWidth`
또는 `minHeight`가 0 미만인 경우
### addCommand
```java
public void addCommand(Command cmd)
```
**Overrides:**
- `addCommand` in class `Item`
**Parameters:**
- `cmd` - `Command`
**Throws:**
- `IllegalStateException` - 항상
### setDefaultCommand
```java
public void setDefaultCommand(Command cmd)
```
**Overrides:**
- `setDefaultCommand` in class `Item`
**Parameters:**
- `cmd` - `Command`
**Throws:**
- `IllegalStateException` - 항상
### setLabel
```java
public void setLabel(String label)
```
**Overrides:**
- `setLabel` in class `Item`
**Parameters:**
- `label` - 레이블 문자열
**Throws:**
- `IllegalStateException` - 항상
**See Also:**
- ``Item.getLabel()``
## 메서드 상세
### setMinimumSize
```java
public void setMinimumSize(int minWidth,
int minHeight)
```
**Parameters:**
- `minHeight` - 최소 높이(단위: 픽셀)
**Throws:**
- `IllegalArgumentException` - `minWidth`
또는 `minHeight`가 0 미만인 경우
### addCommand
```java
public void addCommand(Command cmd)
```
**Overrides:**
- `addCommand` in class `Item`
**Parameters:**
- `cmd` - `Command`
**Throws:**
- `IllegalStateException` - 항상
### setDefaultCommand
```java
public void setDefaultCommand(Command cmd)
```
**Overrides:**
- `setDefaultCommand` in class `Item`
**Parameters:**
- `cmd` - `Command`
**Throws:**
- `IllegalStateException` - 항상
### setLabel
```java
public void setLabel(String label)
```
**Overrides:**
- `setLabel` in class `Item`
**Parameters:**
- `label` - 레이블 문자열
**Throws:**
- `IllegalStateException` - 항상
**See Also:**
- ``Item.getLabel()``
---
title: "Class StringItem"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.StringItem
```
## 설명
**extends Item:**
문자열을 포함할 수 있는 항목.
`StringItem`은 디스플레이 전용이므로 사용자는 내용을
편집할 수 없습니다. `StringItem`의 레이블과 텍스트
내용 모두 응용 프로그램을 사용하여 수정할 수 있습니다.
레이블의 시각적 표현은 텍스트 내용의
시각적 표현과 다를 수 있습니다.
## 필드 요약
## 생성자 요약
- StringItem ( String label, String text) 새 StringItem 객체를 만듭니다.
- StringItem ( String label, String text,
int appearanceMode) 제공된 레이블, 텍스트 내용 및 모양 모드를 사용하여 새 StringItem 객체를 만듭니다.
## 메서드 요약
- `int getAppearanceMode ()` — StringItem 의 모양 모드를 반환합니다.
- `Font getFont ()` — 이 StringItem 을 렌더링하기 위한 응용 프로그램의 기본 글꼴을 가져옵니다.
- `String getText ()` — StringItem 의 텍스트 내용을 가져오거나 StringItem 이 비어 있는 경우에는 null 을 가져옵니다.
- `void setFont ( Font font)` — 이 StringItem 을 렌더링하기 위한 응용 프로그램의 기본 글꼴을 설정합니다.
- `void setText ( String text)` — StringItem 의 텍스트 내용을 설정합니다.
## 생성자 상세
### StringItem
```java
public StringItem(String label,
String text)
```
- 새 `StringItem` 객체를 만듭니다.
이 구성자를 호출하는 것은 다음을 호출하는 것과 같습니다.
`
StringItem(label, text, PLAIN); `
**Parameters:**
- `text` - 텍스트 내용
**See Also:**
- ``StringItem(String, String, int)``
### StringItem
```java
public StringItem(String label,
String text,
int appearanceMode)
```
- 제공된 레이블, 텍스트 내용 및 모양 모드를 사용하여 새
`StringItem` 객체를 만듭니다.
레이블이나 텍스트가 존재하거나 `null`일 수 있습니다.
`appearanceMode` 매개
변수(`모양 모드` 참조)를
보면 응용 프로그램이 이 `StringItem`에 사용할
플랫폼이 무엇인지 알 수 있습니다.
하이퍼링크나 버튼 같은 동작을 제공하려면 응용 프로그램은
기본 `Command`를 이 `StringItem`과
연관시키고 이 `StringItem`에
`ItemCommandListener`를
추가해야 합니다.
`StringItem`을 버튼으로 사용하는 예는
다음과 같습니다.
```java
StringItem strItem =
new StringItem("Default: ", "Set",
Item.BUTTON);
strItem.setDefaultCommand(
new Command("Set", Command.ITEM, 1);
// icl is ItemCommandListener
strItem.setItemCommandListener(icl);
```
**Parameters:**
- `appearanceMode` - `StringItem`의 모양 모드,
``Item.PLAIN``, ``Item.HYPERLINK`` 또는 ``Item.BUTTON`` 중 하나
**Throws:**
- `IllegalArgumentException` - `appearanceMode`가 유효하지 않은 경우
**Since:**
- MIDP 2.0
### getText
```java
public String getText()
```
**Returns:**
- 항목의 내용이 있는 문자열
**See Also:**
- ``setText(java.lang.String)``
### setText
```java
public void setText(String text)
```
**Parameters:**
- `text` - 새 내용
**See Also:**
- ``getText()``
### getAppearanceMode
```java
public int getAppearanceMode()
```
**Returns:**
- 모양 모드 값, ``Item.PLAIN``, ``Item.HYPERLINK`` 또는
``Item.BUTTON`` 중 하나
**Since:**
- MIDP 2.0
### setFont
```java
public void setFont(Font font)
```
**Parameters:**
- `font` - `StringItem` 렌더링에
사용할 기본 글꼴
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont()``
### getFont
```java
public Font getFont()
```
**Returns:**
- `StringItem` 렌더링에
사용할 기본 글꼴
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(javax.microedition.lcdui.Font)``
## 메서드 상세
### getText
```java
public String getText()
```
**Returns:**
- 항목의 내용이 있는 문자열
**See Also:**
- ``setText(java.lang.String)``
### setText
```java
public void setText(String text)
```
**Parameters:**
- `text` - 새 내용
**See Also:**
- ``getText()``
### getAppearanceMode
```java
public int getAppearanceMode()
```
**Returns:**
- 모양 모드 값, ``Item.PLAIN``, ``Item.HYPERLINK`` 또는
``Item.BUTTON`` 중 하나
**Since:**
- MIDP 2.0
### setFont
```java
public void setFont(Font font)
```
**Parameters:**
- `font` - `StringItem` 렌더링에
사용할 기본 글꼴
**Since:**
- MIDP 2.0
**See Also:**
- ``getFont()``
### getFont
```java
public Font getFont()
```
**Returns:**
- `StringItem` 렌더링에
사용할 기본 글꼴
**Since:**
- MIDP 2.0
**See Also:**
- ``setFont(javax.microedition.lcdui.Font)``
---
title: "Class TextBox"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
|
+--javax.microedition.lcdui.Screen
|
+--javax.microedition.lcdui.TextBox
```
## 설명
**extends Screen:**
`TextBox` 클래스는
사용자가 텍스트를 입력하고
편집할 수 있는 `Screen`입니다.
`TextBox`는 객체에 언제든지 저장할 수 있는
문자의 최대 수(용량)를 나타내는
최대 크기를 가집니다.
이 제한은 `TextBox` 인스턴스가 구성될 때
즉, 사용자가 `TextBox`에서 텍스트를 편집하고
응용 프로그램이 내용을 수정하는 `TextBox`의 메소드를
호출할 때 적용됩니다.
최대 크기는 최대 저장 용량이며
주어진 시간에 표시될 수 있는 문자 수와는 관계가 없습니다.
문자 수가 표시되고 행과 열에 배열되는 방법은
장치마다 다릅니다.
구현 시 최대 크기를 경계로 할 수 있으며
실제로 지정되는 최대 크기는 응용 프로그램이 요청한 크기보다
작을 수 있습니다.
지정된 실제 값은 ``getMaxSize()``가 반환하는 값에
반영됩니다. 방어적으로 작성된 응용 프로그램은
이 값을 요청한 최대 크기와 비교하고 이 값이 서로 다를 경우를 처리할 수 있어야 합니다.
`TextBox`에 포함된 텍스트는 한 번에 표시하기에
너무 많을 수도 있습니다. 이런 경우에는 구현 시 사용자 스크롤을 허용하여
텍스트의 모든 부분을 보고 편집할 수 있도록 합니다.
이 스크롤 작업은 응용 프로그램에
투명하게 발생합니다.
제약 조건이 ``TextField.ANY``로 설정된 경우 텍스트는
`줄 바꿈`을 포함할 수 있습니다.
이에 따라 텍스트 표시가 줄 바꿈되고 사용자는 줄 바꿈 문자를
입력할 수 있어야 합니다.
`TextBox`에는
`TextField`와 동일한
*입력 제약 조건* 개념이 있습니다.
`TextBox` 클래스에서 메소드의 `constraints`
매개 변수는 ``TextField``
클래스에 정의된 상수를 사용합니다.
이러한 상수에 대한 정의는 `TextField` 클래스에서
`입력 제약 조건`의 설명을
참조하십시오. `TextBox`에는 *실제 내용*,
*표시된 내용* 등
`TextField`와 같은 개념이
동일한 섹션에 설명되어 있습니다.
`TextBox`에는 또한 `TextField`와
동일한 *입력 모드* 개념이 있습니다.
자세한 내용은 `TextField` 클래스에 있는
`입력 모드`의
설명을 참조하십시오.
**Since:**
- MIDP 1.0
## 생성자 요약
- TextBox ( String title, String text,
int maxSize,
int constraints) 주어진 제목 문자열, 초기 내용, 최대 문자 수 및 제약 조건을 사용하여
새 TextBox 객체를 만듭니다.
## 메서드 요약
- `void delete (int offset, int length)` — TextBox 에서 문자를 삭제합니다.
- `int getCaretPosition ()` — 현재 입력 위치를 가져옵니다.
- `int getChars (char[] data)` — TextBox 의 내용을 색인 0에서 시작하는 문자 배열로 복사합니다.
- `int getConstraints ()` — TextBox 의 현재 입력 제약 조건을 가져옵니다.
- `int getMaxSize ()` — TextBox 에 저장될 수 있는 최대 크기(문자 수)를 반환합니다.
- `String getString ()` — 문자열 값으로 TextBox 의 내용을 가져옵니다.
- `void insert (char[] data, int offset, int length, int position)` — 문자 배열의 하위 범위를 TextBox 의 내용에 삽입합니다.
- `void insert ( String src, int position)` — 문자열을 TextBox 의 내용에 삽입합니다.
- `void setChars (char[] data, int offset, int length)` — 문자 배열로부터 TextBox 의 내용을 설정하여 이전 내용을 교체합니다.
- `void setConstraints (int constraints)` — TextBox 의 입력 제약 조건을 설정합니다.
- `void setInitialInputMode ( String characterSubset)` — 사용자가 이 TextBox 의 편집을 시작할 때 사용되어야 할 입력 모드에 대한 힌트를 설정합니다.
- `int setMaxSize (int maxSize)` — TextBox 내에 포함될 수 있는 최대 크기(문자 수)를 설정합니다.
- `void setString ( String text)` — 문자열 값으로 TextBox 의 내용을 설정하여 이전 내용을 대체합니다.
- `int size ()` — 현재 TextBox 내에 저장된 문자 수를 가져옵니다.
## 생성자 상세
### TextBox
```java
public TextBox(String title,
String text,
int maxSize,
int constraints)
```
- 주어진 제목 문자열, 초기 내용, 최대 문자 수 및 제약 조건을 사용하여
새 `TextBox` 객체를 만듭니다.
텍스트 매개 변수가 `null`이면 `TextBox`는
공백으로 작성됩니다. `maxSize`
매개 변수는 0보다 커야 합니다.
초기 내용 문자열의 길이가 `maxSize`를
초과하면 `IllegalArgumentException`이 발생합니다.
하지만 구현 시 응용 프로그램이 요청한 것보다
작은 최대 크기를 할당할 수 있습니다.
이런 경우 내용의 길이가
새로 할당된 최대 크기를 초과하면
여기에 맞추기 위해 내용의 끝부분이 잘리고
예외가 발생하지 않습니다.
**Parameters:**
- `constraints` - `입력
제약 조건`을 참조하십시오.
**Throws:**
- `IllegalArgumentException` - 문자열의 길이가 요청된
최대 용량을 초과할 경우
### getString
```java
public String getString()
```
**Returns:**
- 현재 내용
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String text)
```
**Parameters:**
- `text` - `TextBox`의 새 값 또는
`TextBox`가 비어 있는 경우
`null`
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재
최대 용량을 초과하는 경우
**See Also:**
- ``getString()``
### getChars
```java
public int getChars(char[] data)
```
**Parameters:**
- `data` - 값을 받을 문자 배열
**Returns:**
- 복사된 문자 수
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
**See Also:**
- ``setChars(char[], int, int)``
### setChars
```java
public void setChars(char[] data,
int offset,
int length)
```
**Parameters:**
- `length` - 복사할 문자 수
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재
최대 용량을 초과하는 경우
**See Also:**
- ``getChars(char[])``
### insert
```java
public void insert(String src,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `src`가 `null`인 경우
### insert
```java
public void insert(char[] data,
int offset,
int length,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
### delete
```java
public void delete(int offset,
int length)
```
**Parameters:**
- `length` - 삭제되는 문자 수
**Throws:**
- `StringIndexOutOfBoundsException` - `offset`과
`length`가 `TextBox` 내용 내의
유효한 범위를 지정하지 않는 경우
### getMaxSize
```java
public int getMaxSize()
```
**Returns:**
- 최대 문자 크기
**See Also:**
- ``setMaxSize(int)``
### setMaxSize
```java
public int setMaxSize(int maxSize)
```
**Parameters:**
- `maxSize` - 새 최대 크기
**Returns:**
- 할당된 최대 용량(요청된 것보다 작을 수 있음)
**Throws:**
- `IllegalArgumentException` - 잘려진 후
내용이 현재의 `입력 제약 조건`에
유효하지 않은 경우
**See Also:**
- ``getMaxSize()``
### size
```java
public int size()
```
**Returns:**
- 문자 수
### getCaretPosition
```java
public int getCaretPosition()
```
**Returns:**
- 현재 캐럿 위치. 시작 부분이면 `0`
### setConstraints
```java
public void setConstraints(int constraints)
```
**Parameters:**
- `constraints` - `입력 제약 조건`을
참조하십시오.
**Throws:**
- `IllegalArgumentException` - 제약 조건 매개 변수의 값이
유효하지 않을 경우
**See Also:**
- ``getConstraints()``
### getConstraints
```java
public int getConstraints()
```
**Returns:**
- 현재 제약 조건 값(`입력
제약 조건` 참조)
**See Also:**
- ``setConstraints(int)``
### setInitialInputMode
```java
public void setInitialInputMode(String characterSubset)
```
**Parameters:**
- `characterSubset` - 유니코드 문자 하위 집합의 이름인
문자열 또는 `null`
**Since:**
- MIDP 2.0
## 메서드 상세
### getString
```java
public String getString()
```
**Returns:**
- 현재 내용
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String text)
```
**Parameters:**
- `text` - `TextBox`의 새 값 또는
`TextBox`가 비어 있는 경우
`null`
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재
최대 용량을 초과하는 경우
**See Also:**
- ``getString()``
### getChars
```java
public int getChars(char[] data)
```
**Parameters:**
- `data` - 값을 받을 문자 배열
**Returns:**
- 복사된 문자 수
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
**See Also:**
- ``setChars(char[], int, int)``
### setChars
```java
public void setChars(char[] data,
int offset,
int length)
```
**Parameters:**
- `length` - 복사할 문자 수
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재
최대 용량을 초과하는 경우
**See Also:**
- ``getChars(char[])``
### insert
```java
public void insert(String src,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `src`가 `null`인 경우
### insert
```java
public void insert(char[] data,
int offset,
int length,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
### delete
```java
public void delete(int offset,
int length)
```
**Parameters:**
- `length` - 삭제되는 문자 수
**Throws:**
- `StringIndexOutOfBoundsException` - `offset`과
`length`가 `TextBox` 내용 내의
유효한 범위를 지정하지 않는 경우
### getMaxSize
```java
public int getMaxSize()
```
**Returns:**
- 최대 문자 크기
**See Also:**
- ``setMaxSize(int)``
### setMaxSize
```java
public int setMaxSize(int maxSize)
```
**Parameters:**
- `maxSize` - 새 최대 크기
**Returns:**
- 할당된 최대 용량(요청된 것보다 작을 수 있음)
**Throws:**
- `IllegalArgumentException` - 잘려진 후
내용이 현재의 `입력 제약 조건`에
유효하지 않은 경우
**See Also:**
- ``getMaxSize()``
### size
```java
public int size()
```
**Returns:**
- 문자 수
### getCaretPosition
```java
public int getCaretPosition()
```
**Returns:**
- 현재 캐럿 위치. 시작 부분이면 `0`
### setConstraints
```java
public void setConstraints(int constraints)
```
**Parameters:**
- `constraints` - `입력 제약 조건`을
참조하십시오.
**Throws:**
- `IllegalArgumentException` - 제약 조건 매개 변수의 값이
유효하지 않을 경우
**See Also:**
- ``getConstraints()``
### getConstraints
```java
public int getConstraints()
```
**Returns:**
- 현재 제약 조건 값(`입력
제약 조건` 참조)
**See Also:**
- ``setConstraints(int)``
### setInitialInputMode
```java
public void setInitialInputMode(String characterSubset)
```
**Parameters:**
- `characterSubset` - 유니코드 문자 하위 집합의 이름인
문자열 또는 `null`
**Since:**
- MIDP 2.0
---
title: "Class TextField"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Item
|
+--javax.microedition.lcdui.TextField
```
## 설명
**extends Item:**
`TextField`는 ``Form``에
들어갈 수 있는 편집할 수 있는
텍스트 구성 요소입니다.
초기 값으로 사용되는 텍스트가 제공될 수 있습니다.
`TextField`는 객체에 언제든지
저장할 수 있는 문자의 최대 수(용량)를
나타내는 최대 크기를 가집니다.
이 제한은 `TextField` 인스턴스가 구성될 때
즉, 사용자가 `TextField`에서 텍스트를 편집하고
응용 프로그램이 내용을 수정하는
`TextField`의 메소드를
호출할 때 적용됩니다. 최대 크기는
최대 저장 용량이며 주어진 시간에 표시될 수 있는
문자 수와는 관계가 없습니다. 문자 수가 표시되고
행과 열에 배열되는 방법은 장치마다 다릅니다.
구현 시 최대 크기를 경계로 할 수 있으며
실제로 지정되는 최대 크기는 응용 프로그램이
요청한 크기보다 작을 수 있습니다.
지정된 실제 값은 ``getMaxSize()``가
반환하는 값에 반영됩니다. 방어적으로 작성된 응용 프로그램은
이 값을 요청한 최대 크기와 비교하고 이 값이 서로 다를 경우를 처리할 수 있어야 합니다.
### 입력 제약 조건
`TextField`는 ``TextBox`` 클래스와
*입력 제약 조건* 개념을 공유합니다.
제약 조건이 서로 다르면 응용 프로그램은 사용자 입력을
여러 방법으로 제한하도록 요청할 수 있습니다.
구현 시에는 응용 프로그램이 요청한 대로 사용자 입력을 제한해야 합니다.
예를 들어, 응용 프로그램이 `TextField`에
`NUMERIC` 제약 조건을 요청하면 숫자만 입력할 수 있도록
구현해야 합니다.
텍스트 객체의 *실제 내용*은
`TextBox` 및 `TextField` API를
사용하여 설정 및 수정되고
응용 프로그램에 보고됩니다.
구현 시 텍스트 객체의 제약 조건 설정에 적합한 특수 포맷을
제공하는 경우에는 *표시된 내용*이
실제 내용과 다를 수 있습니다.
예를 들어, `PHONENUMBER` 필드는 숫자
구분자 및 구두점을 사용해서 숫자를 국가 코드, 지역 코드,
접미어 등으로 묶어 사용 중인 전화 번호 규칙에 적합하게 표시할 수 있습니다.
제공되는 모든 공백이나 구두점은 텍스트 객체의 실제 내용으로
간주되지 않습니다.
예를 들어, `PHONENUMBER` 제약 조건을
가진 텍스트 객체는 다음과 같이 표시될 수 있습니다.
(408) 555-1212
하지만 API를 통해 응용 프로그램에 제공되는 객체의
실제 내용은 "`4085551212`" 문자열입니다.
`size` 메소드는 표시되는 문자 수가 아닌
실제 내용의 문자 수를 나타내기 때문에,
이 예에서 `size` 메소드는
`10`을 반환합니다.
`DECIMAL`과 같은 일부 제약 조건을 사용하면
구현 시 텍스트 객체 내용의 구문을 검증해야 합니다.
구문 검사는 텍스트 객체의 실제 내용에 대해 수행되며
이 실제 내용은 위에서 설명한 대로 표시된 내용과 다를 수 있습니다.
구문 검사는 구성자에 전달된 초기 내용에 대해 수행되며
텍스트 객체의 내용에 영향을 주는
모든 메소드 호출에도 강제 수행됩니다.
메소드 및 구성자가 필요한 구문을 충족시키지 못하는 텍스트 객체 내용을
만들면 `IllegalArgumentException`이 발생합니다.
``setConstraints()`` 메소드에 전달된 값은
위에서 설명한 제한적 제약 조건과
텍스트 입력 및 표시를 수정하는
여러 플래그 비트로 구성되어 있습니다.
제한적 제약 조건 설정 값은 값의 하위 `16`비트 부분이며
비트 연산자 `AND`(`&`)로 제약 조건
값과 `CONSTRAINT_MASK`
상수를 결합하여 추출할 수 있습니다.
제한적 제약 조건 설정은 다음과 같습니다.
수정자 플래그는 제약 조건 값의
상위 `16`비트 부분
즉, `CONSTRAINT_MASK` 상수의 보수 부분에 있습니다.
수정자 플래그는 비트 `AND` (`&`)
연산자로 제약 조건 값을 수정자
플래그에 결합시켜 개별적으로
테스트될 수 있습니다.
수정자 플래그는 다음과 같습니다.
### 입력 모드
`TextField`는 ``TextBox``
클래스와 *입력 모드* 개념을 공유합니다.
응용 프로그램은 사용자가 `TextField` 또는
`TextBox`의 편집을 시작할 때
특정 입력 모드를 사용하도록 구현될 수 있습니다.
입력 모드는 특정 장치의 텍스트 입력용
사용자 인터페이스에 존재하는 개념입니다.
텍스트 입력용 사용자 인터페이스는 표준화되어 있지 않고 장치마다
다르기 때문에 응용 프로그램이 입력 모드를 직접 요청할 수는 없습니다.
대신 응용 프로그램은 특정 문자를 쉽게 입력할 수 있도록 요청할 수 있습니다.
``setInitialInputMode()`` 메소드에
유니코드 문자 하위 집합 이름을 전달하는 방법으로
이러한 작업을 요청할 수 있습니다.
이 메소드를 호출하면 구현 시 텍스트 입력 사용자 인터페이스
모드를 이 하위 집합에 포함되는 문자 입력을 쉽게 할 수 있도록
설정할 수 있습니다. 응용 프로그램은 수정자 플래그를 제약 조건 값으로 설정하여
입력 모드가 특정한 동작 특성을 가지도록 요청할 수도 있습니다.
요청된 입력 모드는 사용자가 `TextBox`
또는 `TextField` 객체의 편집을 시작할 때마다
사용되어야 합니다. 사용자가 이전 편집 세션에서 입력 모드를
변경한 경우 응용 프로그램이 요청한 입력 모드의
우선 순위가 사용자가 설정했던 이전 입력 모드의 우선 순위보다 높습니다.
하지만 입력 모드는 제한적이지 않으므로 사용자가 편집 중
언제든지 입력 모드를 변경할 수 있습니다.
편집이 이미 진행 중이면 `setInitialInputMode` 메소드에
대한 호출이 현재 입력 모드에는 영향을 주지 않고 대신
사용자가 다음 번에 이 텍스트 객체의 편집을 시작할 때 영향을 줍니다.
초기 입력 모드를 보면 구현에 대해 알 수 있습니다.
구현 시 응용 프로그램의 요청을 충족하는 입력 모드를 제공할 수 없는
경우에는 기본 입력 모드를 사용해야 합니다.
응용 프로그램이 요청하여 적용한 입력 모드는
사용자가 입력할 수 있는 문자 집합으로 제한되지 않습니다.
사용자는 입력 모드를 전환하여 현재 제약 조건 설정 내에서
허용되는 모든 문자를 입력할 수 있어야 합니다.
제약 조건 설정은 입력 모드 요청보다 우선 순위가 높으며 구현 시
현재 제약 조건 설정과 맞지 않을 경우 특정 입력 모드를
제공하지 않을 수 있습니다.
예를 들어, 현재 제약 조건이 `ANY`이면
setInitialInputMode("MIDP_UPPERCASE_LATIN");
호출은 초기 입력 모드가 라틴어 대문자 입력을
허용하도록 설정해야 합니다.
이로 인해 입력이 이러한 문자로 제한되는 것은 아니며
숫자 및 라틴어 소문자 입력을 허용하는 입력 모드로 전환하여
다른 문자를 입력할 수 있습니다.
하지만 현재 제약 조건이 `NUMERIC`이면
라틴어 대문자가 제약 조건이 `NUMERIC`인
`TextField`에 허용되지 않기 때문에
구현 시 초기 입력 모드가 `MIDP_UPPERCASE_LATIN`
문자를 허용하도록 설정하는 요청은 무시될 수 있습니다.
이 경우 숫자 입력을 허용하는 입력 모드가 `NUMERIC`
제약 조건 하에서의 데이터 입력에 가장 적합하기 때문에 구현 시
이 입력 모드를 대신 사용할 수 있습니다.
``setInitialInputMode()`` 메소드에
매개 변수로 전달된 유니코드 문자
하위 집합 이름에는 문자열이 사용됩니다.
문자열 비교는 대소문자를 구분합니다.
유니코드 문자 블록의 이름은 J2SE 클래스
`java.lang.Character.UnicodeBlock`에 정의된 대로,
유니코드 문자 블록을 나타내는 필드의 문자열 이름에
"`UCB`_"라는 접두어를 추가하여 만듭니다.
유니코드 문자 블록의 이름은 모두 이런 형태로 지정합니다.
편의를 위해 가장 일반적인 유니코드 문자 블록을 아래에 나열합니다.
"입력 하위 집합"은 J2SE 클래스
`java.awt.im.InputSubset`에 정의된 대로
이 클래스에 정의된 입력 하위 집합을 나타내는 필드의
문자열 이름에 "`IS_`"라는
접두어를 추가하여 만들 수 있습니다.
정의된 입력 하위 집합은 모두 사용할 수 있습니다. 편의를 위해 현재 정의된 입력 하위 집합의 이름을 다음에 나열합니다.
MIDP에서는 다음과 같은 문자 하위 집합도 정의합니다.
마지막으로 구현별 문자 하위 집합의 이름은
"`X_`"라는 접두어를 붙인
문자열로 지정할 수 있습니다. 이름 공간의 충돌을 피하기 위해
구현별 이름에는 "`X_`" 접두어 다음에
회사나 조직을 정의하는 이름을
포함시키는 것이 좋습니다.
예를 들어, 일본어 응용 프로그램에는 일본어가 아닌
언어에서 "차용한" 단어를 입력할 때 주로 사용할
특별한 `TextField`가 있을 수 있습니다.
응용 프로그램은 다음 메소드를
호출하여 히라가나를 사용하는
입력 모드를 요청할 수 있습니다.
textfield.setInitialInputMode("UCB_HIRAGANA");
### 구현 노트
구현 시 위에 나열된 모든 문자열을 컴파일할 필요는 없습니다.
대신 지원하는 유니코드 문자 하위 집합의 이름을 지정하는 문자열만
컴파일하면 됩니다. 응용 프로그램이 전달한 하위 집합 이름이
알려진 하위 집합 이름과 일치하지 않으면 요청은 오류 없이
그냥 무시되고 기본 입력 모드가 사용되어야 합니다.
이렇게 하면 구현 시 이 기능을 간단하게 지원할 수 있습니다.
하지만 응용 프로그램에서는 요청이 수락되었는지 여부 및
요청한 유니코드 문자 하위 집합이 실제로 유효한 하위 집합인지
여부를 알 수 없습니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int ANY` — 모든 텍스트를 입력할 수 있습니다.
- `static int CONSTRAINT_MASK` — 제약 조건 모드를 결정하는 마스크 값.
- `static int DECIMAL` — "-123", "0.123" 또는 ".5"와 같이 선택적 소수가 있는 숫자 값을 입력할 수 있습니다.
- `static int EMAILADDR` — 전자 메일 주소를 입력할 수 있습니다.
- `static int INITIAL_CAPS_SENTENCE` — 이 플래그를 보면 텍스트 편집 중 각 문장의 첫 번째 문자가 대문자여야 한다는 것을 알 수 있습니다.
- `static int INITIAL_CAPS_WORD` — 이 플래그를 보면 텍스트 편집 중 각 단어의 첫 번째 문자가 대문자여야 한다는 것을 알 수 있습니다.
- `static int NON_PREDICTIVE` — 입력된 텍스트가 일반적으로 예측 입력 계획에 사용되는, 사전에 없는 단어로 구성되어 있음을 표시합니다.
- `static int NUMERIC` — 정수 값만 입력할 수 있습니다.
- `static int PASSWORD` — 입력된 텍스트가 가능한 한 알아보기 힘들게 해야 하는 기밀 데이터임을 표시합니다.
- `static int PHONENUMBER` — 전화 번호를 입력할 수 있습니다.
- `static int SENSITIVE` — 입력된 텍스트가 구현 시 예측 가능하거나 자동 완성 또는 기타 빠른 입력 체계를 위해 내용을 사전이나 테이블에 저장하지 않아야 하는 중요한 데이터라는 것을 표시합니다.
- `static int UNEDITABLE` — 현재 편집이 허용되지 않음을 표시합니다.
- `static int URL` — URL을 입력할 수 있습니다.
## 생성자 요약
- TextField ( String label, String text,
int maxSize,
int constraints) 주어진 레이블, 초기 내용, 최대 문자 수 및
제약 조건을 사용하여 새 TextField 객체를 만듭니다.
## 메서드 요약
- `void delete (int offset, int length)` — TextField 에서 문자를 삭제합니다.
- `int getCaretPosition ()` — 현재 입력 위치를 가져옵니다.
- `int getChars (char[] data)` — TextField 의 내용을 색인 0에서 시작하는 문자 배열로 복사합니다.
- `int getConstraints ()` — TextField 의 현재 입력 제약 조건을 가져옵니다.
- `int getMaxSize ()` — TextField 에 저장될 수 있는 최대 크기(문자 수)를 반환합니다.
- `String getString ()` — 문자열 값으로 TextField 의 내용을 가져옵니다.
- `void insert (char[] data, int offset, int length, int position)` — 문자 배열의 하위 범위를 TextField 의 내용에 삽입합니다.
- `void insert ( String src, int position)` — 문자열을 TextField 의 내용에 삽입합니다.
- `void setChars (char[] data, int offset, int length)` — 문자 배열로부터 TextField 의 내용을 설정하여 이전 내용을 교체합니다.
- `void setConstraints (int constraints)` — TextField 의 입력 제약 조건을 설정합니다.
- `void setInitialInputMode ( String characterSubset)` — 사용자가 이 TextField 의 편집을 시작할 때 사용되어야 할 입력 모드에 대한 힌트를 설정합니다.
- `int setMaxSize (int maxSize)` — TextField 내에 포함될 수 있는 최대 크기(문자 수)를 설정합니다.
- `void setString ( String text)` — 문자열 값으로 TextField 의 내용을 설정하여 이전 내용을 대체합니다.
- `int size ()` — 현재 TextField 내에 저장된 문자 수를 가져옵니다.
## 필드 상세
### ANY
```java
public static final int ANY
```
**See Also:**
- `Constant Field Values`
### EMAILADDR
```java
public static final int EMAILADDR
```
**See Also:**
- `Constant Field Values`
### NUMERIC
```java
public static final int NUMERIC
```
**See Also:**
- `Constant Field Values`
### PHONENUMBER
```java
public static final int PHONENUMBER
```
**See Also:**
- `Constant Field Values`
### URL
```java
public static final int URL
```
**See Also:**
- `Constant Field Values`
### DECIMAL
```java
public static final int DECIMAL
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### PASSWORD
```java
public static final int PASSWORD
```
**See Also:**
- `Constant Field Values`
### UNEDITABLE
```java
public static final int UNEDITABLE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### SENSITIVE
```java
public static final int SENSITIVE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### NON_PREDICTIVE
```java
public static final int NON_PREDICTIVE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### INITIAL_CAPS_WORD
```java
public static final int INITIAL_CAPS_WORD
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### INITIAL_CAPS_SENTENCE
```java
public static final int INITIAL_CAPS_SENTENCE
```
**Since:**
- MIDP 2.0
**See Also:**
- `Constant Field Values`
### CONSTRAINT_MASK
```java
public static final int CONSTRAINT_MASK
```
**See Also:**
- `Constant Field Values`
### TextField
```java
public TextField(String label,
String text,
int maxSize,
int constraints)
```
- 주어진 레이블, 초기 내용, 최대 문자 수 및
제약 조건을 사용하여 새 `TextField` 객체를 만듭니다.
텍스트 매개 변수가 `null`이면 빈 `TextField`가
작성됩니다. `maxSize` 매개 변수는 0보다 커야 합니다.
초기 내용 문자열의 길이가 `maxSize`를 초과하면
`IllegalArgumentException`이 발생합니다.
하지만 구현 시 응용 프로그램이 요청한 것보다
작은 최대 크기를 할당할 수 있습니다.
이런 경우 내용의 길이가
새로 할당된 최대 크기를 초과하면
여기에 맞추기 위해 내용의 끝부분이 잘리고
예외가 발생하지 않습니다.
**Parameters:**
- `constraints` - 입력 제약 조건을 참조하십시오.
**Throws:**
- `IllegalArgumentException` - 문자열의 길이가 요청된
최대 용량을 초과할 경우
### getString
```java
public String getString()
```
**Returns:**
- 현재 내용
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String text)
```
**Parameters:**
- `text` - `TextField`의 새 값 또는
TextField가 비어 있는 경우에는 `null`
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재
최대 용량을 초과하는 경우
**See Also:**
- ``getString()``
### getChars
```java
public int getChars(char[] data)
```
**Parameters:**
- `data` - 값을 받을 문자 배열
**Returns:**
- 복사된 문자 수
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
**See Also:**
- ``setChars(char[], int, int)``
### setChars
```java
public void setChars(char[] data,
int offset,
int length)
```
**Parameters:**
- `length` - 복사할 문자 수
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재 최대 용량을
초과하는 경우
**See Also:**
- ``getChars(char[])``
### insert
```java
public void insert(String src,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `src`가 `null`인 경우
### insert
```java
public void insert(char[] data,
int offset,
int length,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
### delete
```java
public void delete(int offset,
int length)
```
**Parameters:**
- `length` - 삭제되는 문자 수
**Throws:**
- `StringIndexOutOfBoundsException` - `offset`과
`length`가 `TextField` 내용 내의
유효한 범위를 지정하지 않는 경우
### getMaxSize
```java
public int getMaxSize()
```
**Returns:**
- 최대 문자 크기
**See Also:**
- ``setMaxSize(int)``
### setMaxSize
```java
public int setMaxSize(int maxSize)
```
**Parameters:**
- `maxSize` - 새 최대 크기
**Returns:**
- 할당된 최대 용량(요청된 것보다 작을 수 있음)
**Throws:**
- `IllegalArgumentException` - 잘려진 후 내용이
현재의 `입력 제약 조건`에
유효하지 않은 경우
**See Also:**
- ``getMaxSize()``
### size
```java
public int size()
```
**Returns:**
- `TextField`의 문자 수
### getCaretPosition
```java
public int getCaretPosition()
```
**Returns:**
- 현재 캐럿 위치. 시작 부분이면 `0`
### setConstraints
```java
public void setConstraints(int constraints)
```
**Parameters:**
- `constraints` - 입력 제약 조건을 참조하십시오.
**Throws:**
- `IllegalArgumentException` - 제약 조건이 `입력 제약 조건`에
지정된 제약 조건 중 하나가 아닌 경우
**See Also:**
- ``getConstraints()``
### getConstraints
```java
public int getConstraints()
```
**Returns:**
- 현재 제약 조건 값(입력 제약 조건
참조)
**See Also:**
- ``setConstraints(int)``
### setInitialInputMode
```java
public void setInitialInputMode(String characterSubset)
```
**Parameters:**
- `characterSubset` - 유니코드 문자 하위 집합의 이름인
문자열 또는 `null`
**Since:**
- MIDP 2.0
## 생성자 상세
### TextField
```java
public TextField(String label,
String text,
int maxSize,
int constraints)
```
- 주어진 레이블, 초기 내용, 최대 문자 수 및
제약 조건을 사용하여 새 `TextField` 객체를 만듭니다.
텍스트 매개 변수가 `null`이면 빈 `TextField`가
작성됩니다. `maxSize` 매개 변수는 0보다 커야 합니다.
초기 내용 문자열의 길이가 `maxSize`를 초과하면
`IllegalArgumentException`이 발생합니다.
하지만 구현 시 응용 프로그램이 요청한 것보다
작은 최대 크기를 할당할 수 있습니다.
이런 경우 내용의 길이가
새로 할당된 최대 크기를 초과하면
여기에 맞추기 위해 내용의 끝부분이 잘리고
예외가 발생하지 않습니다.
**Parameters:**
- `constraints` - 입력 제약 조건을 참조하십시오.
**Throws:**
- `IllegalArgumentException` - 문자열의 길이가 요청된
최대 용량을 초과할 경우
### getString
```java
public String getString()
```
**Returns:**
- 현재 내용
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String text)
```
**Parameters:**
- `text` - `TextField`의 새 값 또는
TextField가 비어 있는 경우에는 `null`
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재
최대 용량을 초과하는 경우
**See Also:**
- ``getString()``
### getChars
```java
public int getChars(char[] data)
```
**Parameters:**
- `data` - 값을 받을 문자 배열
**Returns:**
- 복사된 문자 수
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
**See Also:**
- ``setChars(char[], int, int)``
### setChars
```java
public void setChars(char[] data,
int offset,
int length)
```
**Parameters:**
- `length` - 복사할 문자 수
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재 최대 용량을
초과하는 경우
**See Also:**
- ``getChars(char[])``
### insert
```java
public void insert(String src,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `src`가 `null`인 경우
### insert
```java
public void insert(char[] data,
int offset,
int length,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
### delete
```java
public void delete(int offset,
int length)
```
**Parameters:**
- `length` - 삭제되는 문자 수
**Throws:**
- `StringIndexOutOfBoundsException` - `offset`과
`length`가 `TextField` 내용 내의
유효한 범위를 지정하지 않는 경우
### getMaxSize
```java
public int getMaxSize()
```
**Returns:**
- 최대 문자 크기
**See Also:**
- ``setMaxSize(int)``
### setMaxSize
```java
public int setMaxSize(int maxSize)
```
**Parameters:**
- `maxSize` - 새 최대 크기
**Returns:**
- 할당된 최대 용량(요청된 것보다 작을 수 있음)
**Throws:**
- `IllegalArgumentException` - 잘려진 후 내용이
현재의 `입력 제약 조건`에
유효하지 않은 경우
**See Also:**
- ``getMaxSize()``
### size
```java
public int size()
```
**Returns:**
- `TextField`의 문자 수
### getCaretPosition
```java
public int getCaretPosition()
```
**Returns:**
- 현재 캐럿 위치. 시작 부분이면 `0`
### setConstraints
```java
public void setConstraints(int constraints)
```
**Parameters:**
- `constraints` - 입력 제약 조건을 참조하십시오.
**Throws:**
- `IllegalArgumentException` - 제약 조건이 `입력 제약 조건`에
지정된 제약 조건 중 하나가 아닌 경우
**See Also:**
- ``getConstraints()``
### getConstraints
```java
public int getConstraints()
```
**Returns:**
- 현재 제약 조건 값(입력 제약 조건
참조)
**See Also:**
- ``setConstraints(int)``
### setInitialInputMode
```java
public void setInitialInputMode(String characterSubset)
```
**Parameters:**
- `characterSubset` - 유니코드 문자 하위 집합의 이름인
문자열 또는 `null`
**Since:**
- MIDP 2.0
## 메서드 상세
### getString
```java
public String getString()
```
**Returns:**
- 현재 내용
**See Also:**
- ``setString(java.lang.String)``
### setString
```java
public void setString(String text)
```
**Parameters:**
- `text` - `TextField`의 새 값 또는
TextField가 비어 있는 경우에는 `null`
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재
최대 용량을 초과하는 경우
**See Also:**
- ``getString()``
### getChars
```java
public int getChars(char[] data)
```
**Parameters:**
- `data` - 값을 받을 문자 배열
**Returns:**
- 복사된 문자 수
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
**See Also:**
- ``setChars(char[], int, int)``
### setChars
```java
public void setChars(char[] data,
int offset,
int length)
```
**Parameters:**
- `length` - 복사할 문자 수
**Throws:**
- `IllegalArgumentException` - 텍스트가 현재 최대 용량을
초과하는 경우
**See Also:**
- ``getChars(char[])``
### insert
```java
public void insert(String src,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `src`가 `null`인 경우
### insert
```java
public void insert(char[] data,
int offset,
int length,
int position)
```
**Parameters:**
- `position` - 삽입이 발생하는 위치
**Throws:**
- `NullPointerException` - `data`가 `null`인 경우
### delete
```java
public void delete(int offset,
int length)
```
**Parameters:**
- `length` - 삭제되는 문자 수
**Throws:**
- `StringIndexOutOfBoundsException` - `offset`과
`length`가 `TextField` 내용 내의
유효한 범위를 지정하지 않는 경우
### getMaxSize
```java
public int getMaxSize()
```
**Returns:**
- 최대 문자 크기
**See Also:**
- ``setMaxSize(int)``
### setMaxSize
```java
public int setMaxSize(int maxSize)
```
**Parameters:**
- `maxSize` - 새 최대 크기
**Returns:**
- 할당된 최대 용량(요청된 것보다 작을 수 있음)
**Throws:**
- `IllegalArgumentException` - 잘려진 후 내용이
현재의 `입력 제약 조건`에
유효하지 않은 경우
**See Also:**
- ``getMaxSize()``
### size
```java
public int size()
```
**Returns:**
- `TextField`의 문자 수
### getCaretPosition
```java
public int getCaretPosition()
```
**Returns:**
- 현재 캐럿 위치. 시작 부분이면 `0`
### setConstraints
```java
public void setConstraints(int constraints)
```
**Parameters:**
- `constraints` - 입력 제약 조건을 참조하십시오.
**Throws:**
- `IllegalArgumentException` - 제약 조건이 `입력 제약 조건`에
지정된 제약 조건 중 하나가 아닌 경우
**See Also:**
- ``getConstraints()``
### getConstraints
```java
public int getConstraints()
```
**Returns:**
- 현재 제약 조건 값(입력 제약 조건
참조)
**See Also:**
- ``setConstraints(int)``
### setInitialInputMode
```java
public void setInitialInputMode(String characterSubset)
```
**Parameters:**
- `characterSubset` - 유니코드 문자 하위 집합의 이름인
문자열 또는 `null`
**Since:**
- MIDP 2.0
---
title: "Class Ticker"
---
`package javax.microedition.lcdui`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Ticker
```
## 설명
**extends Object:**
디스플레이에 텍스트의 일부가 계속하여 지나가는
"티커 테이프"를 구현합니다.
스크롤의 방향과 속도는 구현에 따라 다릅니다.
티커 문자열은 애니메이션이 지속되는 동안 계속하여 스크롤됩니다.
즉, 문자열이 디스플레이 밖에서 스크롤을 마치면 티커는 다시 문자열의 처음부터 스크롤을 시작합니다.
티커를 시작하거나 중지하는 API는 제공되지 않습니다.
응용 프로그램 모델에서는 티커가 항상 계속하여 스크롤하도록 되어 있습니다.
하지만 구현 시에는 예를 들어, 사용자가 일정 시간 동안 장치를
사용하지 않을 경우 전력 소모를 방지하기 위해 스크롤을
일시 중지할 수 있습니다. 사용자가 장치를 다시 사용하면
티커 스크롤을 다시 시작해야 합니다.
티커의 텍스트에는 `줄 바꿈`이
포함될 수 있습니다. 티커 내에
전체 텍스트가 표시되어야 하므로
줄 바꿈 문자는 표시되지 않아야 하지만
구분자로 사용될 수 있습니다.
같은 티커를 여러 `Displayable`
객체("screens")에서 공유할 수 있습니다.
이는 각각의 객체에서 ``setTicker()``를
호출하여 수행할 수 있습니다. 전형적인 사용법은 응용 프로그램이
같은 티커를 모든 화면에 배치하는 것입니다.
응용 프로그램이 같은 티커가 있는 두 개의 화면 사이를 전환하면
티커가 디스플레이의 같은 위치에 표시되고 같은 위치에서
내용이 계속 스크롤되도록 하는 것이 좋습니다.
이렇게 하면 티커가 각 화면이 아닌 해당 디스플레이에 연결된 것처럼 보입니다.
다른 사용 모델에서는 응용 프로그램이 서로 다른 화면 세트나
각 화면마다 서로 다른 티커를 사용합니다.
티커는 `Displayable` 클래스의 속성이므로,
응용 프로그램은 사용자가 여러 화면을 전환할 때 티커를
업데이트하여 표시되도록 하지 않고도
이 모델을 구현할 수 있습니다.
**Since:**
- MIDP 1.0
## 생성자 요약
- Ticker ( String str) 초기 내용 문자열을 제공하는 새 Ticker 객체를 구성합니다.
## 메서드 요약
- `String getString ()` — 현재 티커가 스크롤하는 문자열을 가져옵니다.
- `void setString ( String str)` — 티커가 해당 문자열을 표시하도록 설정합니다.
## 생성자 상세
### Ticker
```java
public Ticker(String str)
```
- 초기 내용 문자열을 제공하는 새 `Ticker`
객체를 구성합니다.
**Parameters:**
- `str` - `Ticker`에 설정될 문자열
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `Ticker`에 설정될 문자열
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
**See Also:**
- ``getString()``
### getString
```java
public String getString()
```
**Returns:**
- 티커의 문자열
**See Also:**
- ``setString(java.lang.String)``
## 메서드 상세
### setString
```java
public void setString(String str)
```
**Parameters:**
- `str` - `Ticker`에 설정될 문자열
**Throws:**
- `NullPointerException` - `str`이 `null`인 경우
**See Also:**
- ``getString()``
### getString
```java
public String getString()
```
**Returns:**
- 티커의 문자열
**See Also:**
- ``setString(java.lang.String)``
---
title: "Class GameCanvas"
---
`package javax.microedition.lcdui.game`
```text
java.lang.Object
|
+--javax.microedition.lcdui.Displayable
|
+--javax.microedition.lcdui.Canvas
|
+--javax.microedition.lcdui.game.GameCanvas
```
## 설명
**extends Canvas:**
GameCanvas 클래스는 게임 사용자 인터페이스 기반을 제공합니다.
Canvas(명령, 입력 이벤트 등)로부터 상속된 기능 이외에 오프스크린
그래픽 버퍼 및 키 상태 쿼리 기능 같은
게임 관련 기능도 제공합니다.
각 GameCanvas 인스턴스에 대해 전용 버퍼가 만들어집니다.
각 GameCanvas 인스턴스에 대해 고유한 버퍼가 제공되므로
힙 사용을 최소화하기 위해 단일 GameCanvas
인스턴스를 다시 사용하는 것이
좋습니다. 개발자는 GameCanvas 인스턴스로부터 얻은 Graphics 객체에
대한 호출에 의해서만 이 버퍼의 내용이 수정된다고 가정할 수 있습니다.
다른 MIDlet이나 시스템 수준 알림 같은 외부 소스에 의해서는
수정되지 않습니다. 버퍼는 초기에 흰색 픽셀로 채워집니다.
버퍼 크기는 GameCanvas의 최대 치수로 설정됩니다.
하지만 플러시가 요청되면 플러시될 영역은 GameCanvas의 현재
치수(티커, 명령 등의 존재 여부에 따라)의 제한을 받습니다.
GameCanvas의 현재 치수는
``getWidth``와
``getHeight``를
호출하여 얻을 수 있습니다.
게임은 게임 루프를 실행하기 위해 고유 스레드를 제공합니다.
일반 루프는 입력을 검사하고 게임 논리를 구현한 다음 업데이트된 사용자
인터페이스를 렌더링합니다. 다음 코드는 일반 게임 루프의
구조를 설명합니다.
```java
// Get the Graphics object for the off-screen buffer
Graphics g = getGraphics();
while (true) {
// Check user input and update positions if necessary
int keyState = getKeyStates();
if ((keyState & LEFT_PRESSED) != 0) {
sprite.move(-1, 0);
}
else if ((keyState & RIGHT_PRESSED) != 0) {
sprite.move(1, 0);
}
// Clear the background to white
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(), getHeight());
// Draw the Sprite
sprite.paint(g);
// Flush the off-screen buffer
flushGraphics();
}
```
**Since:**
- MIDP 2.0
## 필드 요약
- `static int DOWN_PRESSED` — DOWN 키를 나타내는 비트.
- `static int FIRE_PRESSED` — FIRE 키를 나타내는 비트.
- `static int GAME_A_PRESSED` — GAME_A 키를 나타내는 비트(일부 장치에서 지원하지 않을 수 있음).
- `static int GAME_B_PRESSED` — GAME_B 키를 나타내는 비트(일부 장치에서 지원하지 않을 수 있음).
- `static int GAME_C_PRESSED` — GAME_C 키를 나타내는 비트(일부 장치에서 지원하지 않을 수 있음).
- `static int GAME_D_PRESSED` — GAME_D 키를 나타내는 비트(일부 장치에서 지원하지 않을 수 있음).
- `static int LEFT_PRESSED` — LEFT 키를 나타내는 비트.
- `static int RIGHT_PRESSED` — RIGHT 키를 나타내는 비트.
- `static int UP_PRESSED` — UP 키를 나타내는 비트.
## 생성자 요약
- `protected GameCanvas (boolean suppressKeyEvents)` — GameCanvas의 새 인스턴스를 만듭니다.
## 메서드 요약
- `void flushGraphics ()` — 오프스크린 버퍼를 디스플레이에 플러시합니다.
- `void flushGraphics (int x, int y, int width, int height)` — 오프스크린 버퍼의 지정된 영역을 디스플레이로 플러시합니다.
- `protected Graphics getGraphics ()` — GameCanvas를 렌더링하기 위한 Graphics 객체를 얻습니다.
- `int getKeyStates ()` — 물리적 게임 키의 상태를 가져옵니다.
- `void paint ( Graphics g)` — 이 GameCanvas를 그립니다.
## 필드 상세
### UP_PRESSED
```java
public static final int UP_PRESSED
```
**See Also:**
- `Constant Field Values`
### DOWN_PRESSED
```java
public static final int DOWN_PRESSED
```
**See Also:**
- `Constant Field Values`
### LEFT_PRESSED
```java
public static final int LEFT_PRESSED
```
**See Also:**
- `Constant Field Values`
### RIGHT_PRESSED
```java
public static final int RIGHT_PRESSED
```
**See Also:**
- `Constant Field Values`
### FIRE_PRESSED
```java
public static final int FIRE_PRESSED
```
**See Also:**
- `Constant Field Values`
### GAME_A_PRESSED
```java
public static final int GAME_A_PRESSED
```
**See Also:**
- `Constant Field Values`
### GAME_B_PRESSED
```java
public static final int GAME_B_PRESSED
```
**See Also:**
- `Constant Field Values`
### GAME_C_PRESSED
```java
public static final int GAME_C_PRESSED
```
**See Also:**
- `Constant Field Values`
### GAME_D_PRESSED
```java
public static final int GAME_D_PRESSED
```
**See Also:**
- `Constant Field Values`
### GameCanvas
```java
protected GameCanvas(boolean suppressKeyEvents)
```
- GameCanvas의 새 인스턴스를 만듭니다. GameCanvas에 대해서도
새 버퍼가 만들어지며 초기에는 흰색 픽셀로 채워집니다.
개발자가 getKeyStates 메소드를 사용하여
키 상태만 쿼리하면 되는 경우 이 GameCanvas가 표시되는 동안
게임 키에 대해 표준 키 이벤트 기법을 억제할 수 있습니다.
응용 프로그램에서 필요한 경우가 아니라면 키 이벤트 억제는
keyPressed, keyRepeated 및 keyReleased 메소드에 대한 불필요한
시스템 호출을 제거하여 성능을 향상시킬 수 있습니다.
요청하는 경우 GameCanvas가 표시되면(showNotify가 호출되면)
지정된 GameCanvas에 대한 키 이벤트 억제가 시작되며,
숨겨지면(hideNotify가 호출되면) 중지됩니다.
화면 표시 및 숨기기는 이벤트 대기열을 사용하여 일련화되므로
이러한 정렬은 억제가 해당 GameCanvas용 키 이벤트에 대해서만
영향을 미치도록 합니다. 따라서 다른 화면이 아직 표시되는 동안
키 이벤트가 생성된 경우 해당 화면이 숨겨지고
GameCanvas로 대체될 때까지
이러한 키 이벤트는 계속 대기열에 있으며 디스패치됩니다.
정의된 게임 키(UP, DOWN, FIRE 등)에 대해서만
키 이벤트가 억제되고 다른 모든 키에 대해서는
항상 키 이벤트가 생성됩니다.
**Parameters:**
- `suppressKeyEvents` - 게임 키에 대해 일반 키 이벤트 기법을 억제하는 경우 `true`,
그렇지 않은 경우 `false`
### getGraphics
```java
protected Graphics getGraphics()
```
**Returns:**
- 이 GameCanvas의 오프스크린 버퍼로
렌더링하는 Graphics 객체
**See Also:**
- ``flushGraphics()``,
``flushGraphics(int, int, int, int)``
### getKeyStates
```java
public int getKeyStates()
```
**Returns:**
- 키 상태 정보를 포함하는 정수(키당 한 비트),
또는 GameCanvas가 현재 표시되지 않은 경우 0
**See Also:**
- ``UP_PRESSED``,
``DOWN_PRESSED``,
``LEFT_PRESSED``,
``RIGHT_PRESSED``,
``FIRE_PRESSED``,
``GAME_A_PRESSED``,
``GAME_B_PRESSED``,
``GAME_C_PRESSED``,
``GAME_D_PRESSED``
### paint
```java
public void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Canvas`
**Parameters:**
- `g` - 화면을 렌더링할 때 사용할 Graphics 객체.
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
### flushGraphics
```java
public void flushGraphics(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 플러시되는 영역의 높이
**See Also:**
- ``flushGraphics()``
### flushGraphics
```java
public void flushGraphics()
```
**See Also:**
- ``flushGraphics(int,int,int,int)``
## 생성자 상세
### GameCanvas
```java
protected GameCanvas(boolean suppressKeyEvents)
```
- GameCanvas의 새 인스턴스를 만듭니다. GameCanvas에 대해서도
새 버퍼가 만들어지며 초기에는 흰색 픽셀로 채워집니다.
개발자가 getKeyStates 메소드를 사용하여
키 상태만 쿼리하면 되는 경우 이 GameCanvas가 표시되는 동안
게임 키에 대해 표준 키 이벤트 기법을 억제할 수 있습니다.
응용 프로그램에서 필요한 경우가 아니라면 키 이벤트 억제는
keyPressed, keyRepeated 및 keyReleased 메소드에 대한 불필요한
시스템 호출을 제거하여 성능을 향상시킬 수 있습니다.
요청하는 경우 GameCanvas가 표시되면(showNotify가 호출되면)
지정된 GameCanvas에 대한 키 이벤트 억제가 시작되며,
숨겨지면(hideNotify가 호출되면) 중지됩니다.
화면 표시 및 숨기기는 이벤트 대기열을 사용하여 일련화되므로
이러한 정렬은 억제가 해당 GameCanvas용 키 이벤트에 대해서만
영향을 미치도록 합니다. 따라서 다른 화면이 아직 표시되는 동안
키 이벤트가 생성된 경우 해당 화면이 숨겨지고
GameCanvas로 대체될 때까지
이러한 키 이벤트는 계속 대기열에 있으며 디스패치됩니다.
정의된 게임 키(UP, DOWN, FIRE 등)에 대해서만
키 이벤트가 억제되고 다른 모든 키에 대해서는
항상 키 이벤트가 생성됩니다.
**Parameters:**
- `suppressKeyEvents` - 게임 키에 대해 일반 키 이벤트 기법을 억제하는 경우 `true`,
그렇지 않은 경우 `false`
### getGraphics
```java
protected Graphics getGraphics()
```
**Returns:**
- 이 GameCanvas의 오프스크린 버퍼로
렌더링하는 Graphics 객체
**See Also:**
- ``flushGraphics()``,
``flushGraphics(int, int, int, int)``
### getKeyStates
```java
public int getKeyStates()
```
**Returns:**
- 키 상태 정보를 포함하는 정수(키당 한 비트),
또는 GameCanvas가 현재 표시되지 않은 경우 0
**See Also:**
- ``UP_PRESSED``,
``DOWN_PRESSED``,
``LEFT_PRESSED``,
``RIGHT_PRESSED``,
``FIRE_PRESSED``,
``GAME_A_PRESSED``,
``GAME_B_PRESSED``,
``GAME_C_PRESSED``,
``GAME_D_PRESSED``
### paint
```java
public void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Canvas`
**Parameters:**
- `g` - 화면을 렌더링할 때 사용할 Graphics 객체.
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
### flushGraphics
```java
public void flushGraphics(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 플러시되는 영역의 높이
**See Also:**
- ``flushGraphics()``
### flushGraphics
```java
public void flushGraphics()
```
**See Also:**
- ``flushGraphics(int,int,int,int)``
## 메서드 상세
### getGraphics
```java
protected Graphics getGraphics()
```
**Returns:**
- 이 GameCanvas의 오프스크린 버퍼로
렌더링하는 Graphics 객체
**See Also:**
- ``flushGraphics()``,
``flushGraphics(int, int, int, int)``
### getKeyStates
```java
public int getKeyStates()
```
**Returns:**
- 키 상태 정보를 포함하는 정수(키당 한 비트),
또는 GameCanvas가 현재 표시되지 않은 경우 0
**See Also:**
- ``UP_PRESSED``,
``DOWN_PRESSED``,
``LEFT_PRESSED``,
``RIGHT_PRESSED``,
``FIRE_PRESSED``,
``GAME_A_PRESSED``,
``GAME_B_PRESSED``,
``GAME_C_PRESSED``,
``GAME_D_PRESSED``
### paint
```java
public void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Canvas`
**Parameters:**
- `g` - 화면을 렌더링할 때 사용할 Graphics 객체.
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
### flushGraphics
```java
public void flushGraphics(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 플러시되는 영역의 높이
**See Also:**
- ``flushGraphics()``
### flushGraphics
```java
public void flushGraphics()
```
**See Also:**
- ``flushGraphics(int,int,int,int)``
---
title: "Class Layer"
---
`package javax.microedition.lcdui.game`
```text
java.lang.Object
|
+--javax.microedition.lcdui.game.Layer
```
## 설명
**Direct Known Subclasses:**
- `Sprite`, `TiledLayer`
**extends Object:**
Layer는 게임의 시각적 요소를 나타내는 추상 클래스입니다.
각 Layer는 위치(표시되는 범위 내의 왼쪽 위 모서리를 중심으로),
너비, 높이를 포함하며 Layer의 표시 여부를 선택할 수 있습니다.
Layer 서브 클래스는 렌더링될 수 있도록 ``paint(Graphics)``
메소드를 구현해야 합니다.
Layer의 위치(x,y)는 항상 Layer의 paint() 메소드에 전달된
Graphics 객체의 좌표계와 연관되어 해석됩니다.
이 좌표계는 *painter*의 좌표계로 불립니다.
Layer의 처음 위치는 (0,0)입니다.
**Since:**
- MIDP 2.0
## 메서드 요약
- `int getHeight ()` — 이 계층의 현재 높이(픽셀 단위)를 가져옵니다.
- `int getWidth ()` — 이 계층의 현재 너비(픽셀 단위)를 가져옵니다.
- `int getX ()` — painter의 좌표계에서 이 Layer 왼쪽 위 모서리의 수평 위치를 가져옵니다.
- `int getY ()` — painter의 좌표계에서 이 Layer 왼쪽 위 모서리의 수직 위치를 가져옵니다.
- `boolean isVisible ()` — 이 Layer의 표시 여부를 가져옵니다.
- `void move (int dx, int dy)` — 지정한 수평 및 수직 거리를 기준으로 이 Layer를 이동합니다.
- `abstract void paint ( Graphics g)` — Layer가 표시되면 이 Layer를 그립니다.
- `void setPosition (int x, int y)` — 왼쪽 위 모서리가 painter 좌표계의 (x,y)에 위치하도록 Layer의 위치를 설정합니다.
- `void setVisible (boolean visible)` — Layer의 표시 여부를 설정합니다.
## 메서드 상세
### setPosition
```java
public void setPosition(int x,
int y)
```
**Parameters:**
- `y` - 수직 위치
**See Also:**
- ``move(int, int)``,
``getX()``,
``getY()``
### move
```java
public void move(int dx,
int dy)
```
**Parameters:**
- `dy` - 세로 축을 따라 이동할
거리(양수는 아래, 음수는 위)
**See Also:**
- ``setPosition(int, int)``,
``getX()``,
``getY()``
### getX
```java
public final int getX()
```
**Returns:**
- Layer의 수평 위치
**See Also:**
- ``getY()``,
``setPosition(int, int)``,
``move(int, int)``
### getY
```java
public final int getY()
```
**Returns:**
- Layer의 수직 위치
**See Also:**
- ``getX()``,
``setPosition(int, int)``,
``move(int, int)``
### getWidth
```java
public final int getWidth()
```
**Returns:**
- 너비(픽셀 단위)
**See Also:**
- ``getHeight()``
### getHeight
```java
public final int getHeight()
```
**Returns:**
- 높이(픽셀 단위)
**See Also:**
- ``getWidth()``
### setVisible
```java
public void setVisible(boolean visible)
```
**Parameters:**
- `visible` - `Layer`를 표시하려면
`true`, 표시하지 않으려면 `false`
**See Also:**
- ``isVisible()``
### isVisible
```java
public final boolean isVisible()
```
**Returns:**
- `Layer`가 표시되면 `true`,
표시되지 않으면 `false`
**See Also:**
- ``setVisible(boolean)``
### paint
```java
public abstract void paint(Graphics g)
```
**Parameters:**
- `g` - `Layer`를 렌더링하기 위한 그래픽 객체
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
---
title: "Class LayerManager"
---
`package javax.microedition.lcdui.game`
```text
java.lang.Object
|
+--javax.microedition.lcdui.game.LayerManager
```
## 설명
**extends Object:**
LayerManager는 일련의 Layer를 관리합니다.
LayerManager는 각 Layer의 올바른 영역을 적절한 순서로
자동 렌더링함으로써 추가된 Layer를
렌더링하는 과정을 단순화합니다.
LayerManager는 Layer를 추가, 삽입 및 제거할 수 있는 정렬된
목록을 유지 관리합니다. Layer의 색인은 해당 z-order와 상관 관계가 있습니다.
가장 높은 색인을 갖는 Layer는 사용자로부터 가장 멀리 있는 반면
색인 0의 계층은 사용자와 가장 가깝습니다.
색인은 항상 연속적이어야 합니다.
즉, Layer가 제거되면 연속성을 유지하기 위해 후속 Layer의 색인이 조정됩니다.
LayerManager 클래스는 화면에서 게임의 Layer를 렌더링하는
방법을 제어하는 몇 가지 기능을 제공합니다.
*보기 창*은 표시 가능 영역의 크기 및
LayerManager 좌표계에 대한 위치를 제어합니다.
보기 창의 위치를 변경하면 사용자 보기를 스크롤하거나 화면 이동하는
효과가 발생합니다. 예를 들어, 오른쪽으로 스크롤하려면 보기 창의
위치를 오른쪽으로 이동하면 됩니다.
보기 창의 크기는 사용자 보기의 크기를 제어하며 대개는
장치 화면에 적절한 크기로 고정됩니다.
이 예에서 보기 창은 85 x 85 픽셀로 설정되며
LayerManager 좌표계의 (52, 11)에 위치합니다.
각 Layer는 LayerManager 원점에 상대적인 위치에 표시됩니다.
``paint(Graphics, int, int)`` 메소드는 화면에 대하여
보기 창을 렌더링할 위치를 제어하는 (x,y) 위치를 포함합니다.
이러한 매개 변수를 변경하더라도 보기 창의 내용은 변경되지 않고
보기 창이 그려질 위치만 변경됩니다.
이 위치는 Graphics 객체의 원점에 상대적이므로 Graphics
객체의 변환 속성에 종속됩니다.
예를 들어, 게임에서 화면 위쪽에 현재 점수를 표시하는 경우
보기 창은 점수를 표시할 충분할 공간을 제공하기 위해 (17, 17)에서
렌더링될 수 있습니다.
**Since:**
- MIDP 2.0
## 생성자 요약
- LayerManager () 새 LayerManager를 만듭니다.
## 메서드 요약
- `void append ( Layer l)` — Layer를 LayerManager에 추가합니다.
- `Layer getLayerAt (int index)` — 지정된 색인의 Layer를 가져옵니다.
- `int getSize ()` — 이 LayerManager에 있는 Layer의 수를 가져옵니다.
- `void insert ( Layer l, int index)` — 이 LayerManager의 지정된 색인에 새 Layer를 삽입합니다.
- `void paint ( Graphics g, int x, int y)` — LayerManager의 현재 보기 창을 지정된 위치에서 렌더링합니다.
- `void remove ( Layer l)` — 이 LayerManager에서 지정된 Layer를 제거합니다.
- `void setViewWindow (int x, int y, int width, int height)` — LayerManager에서 보기 창을 설정합니다.
## 생성자 상세
### LayerManager
```java
public LayerManager()
```
- 새 LayerManager를 만듭니다.
### append
```java
public void append(Layer l)
```
**Parameters:**
- `l` - 추가되는 `Layer`
**Throws:**
- `NullPointerException` - `Layer`가
`null`인 경우
**See Also:**
- ``insert(Layer, int)``,
``remove(Layer)``
### insert
```java
public void insert(Layer l,
int index)
```
**Parameters:**
- `index` - 새 `Layer`가
삽입되는 색인
**Throws:**
- `IndexOutOfBoundsException` - 색인이
`0`보다 작거나
이 `LayerManager`에 이미 추가된
Layer 수보다 큰 경우
**See Also:**
- ``append(Layer)``,
``remove(Layer)``
### getLayerAt
```java
public Layer getLayerAt(int index)
```
**Parameters:**
- `index` - 원하는 Layer의 색인
**Returns:**
- 지정된 색인을 갖는 Layer
**Throws:**
- `IndexOutOfBoundsException` - 지정된
`index`가 0보다 작은 경우 또는
이 `LayerManager`에 추가된
Layer의 수보다 큰 경우
### getSize
```java
public int getSize()
```
**Returns:**
- Layer의 수
### remove
```java
public void remove(Layer l)
```
**Parameters:**
- `l` - 제거되는 `Layer`
**Throws:**
- `NullPointerException` - 지정된
`Layer`가 `null`인 경우
**See Also:**
- ``append(Layer)``,
``insert(Layer, int)``
### paint
```java
public void paint(Graphics g,
int x,
int y)
```
**Parameters:**
- `y` - Graphics의 변환 원점에 상대적인 보기 창을
렌더링할 수직 위치
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
**See Also:**
- ``setViewWindow(int, int, int, int)``
### setViewWindow
```java
public void setViewWindow(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 보기 창의 높이
**Throws:**
- `IllegalArgumentException` - `width`나
`height`가 `0`보다 작은 경우
## 메서드 상세
### append
```java
public void append(Layer l)
```
**Parameters:**
- `l` - 추가되는 `Layer`
**Throws:**
- `NullPointerException` - `Layer`가
`null`인 경우
**See Also:**
- ``insert(Layer, int)``,
``remove(Layer)``
### insert
```java
public void insert(Layer l,
int index)
```
**Parameters:**
- `index` - 새 `Layer`가
삽입되는 색인
**Throws:**
- `IndexOutOfBoundsException` - 색인이
`0`보다 작거나
이 `LayerManager`에 이미 추가된
Layer 수보다 큰 경우
**See Also:**
- ``append(Layer)``,
``remove(Layer)``
### getLayerAt
```java
public Layer getLayerAt(int index)
```
**Parameters:**
- `index` - 원하는 Layer의 색인
**Returns:**
- 지정된 색인을 갖는 Layer
**Throws:**
- `IndexOutOfBoundsException` - 지정된
`index`가 0보다 작은 경우 또는
이 `LayerManager`에 추가된
Layer의 수보다 큰 경우
### getSize
```java
public int getSize()
```
**Returns:**
- Layer의 수
### remove
```java
public void remove(Layer l)
```
**Parameters:**
- `l` - 제거되는 `Layer`
**Throws:**
- `NullPointerException` - 지정된
`Layer`가 `null`인 경우
**See Also:**
- ``append(Layer)``,
``insert(Layer, int)``
### paint
```java
public void paint(Graphics g,
int x,
int y)
```
**Parameters:**
- `y` - Graphics의 변환 원점에 상대적인 보기 창을
렌더링할 수직 위치
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
**See Also:**
- ``setViewWindow(int, int, int, int)``
### setViewWindow
```java
public void setViewWindow(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 보기 창의 높이
**Throws:**
- `IllegalArgumentException` - `width`나
`height`가 `0`보다 작은 경우
---
title: "Class Sprite"
---
`package javax.microedition.lcdui.game`
```text
java.lang.Object
|
+--javax.microedition.lcdui.game.Layer
|
+--javax.microedition.lcdui.game.Sprite
```
## 설명
**extends Layer:**
Sprite는 Image에 저장되어 있는 여러 프레임 중 하나를 사용하여
렌더링할 수 있는 기본 시각적 요소입니다.
Sprite에 애니메이션 효과를 주기 위해 다양한 프레임을 표시할 수 있습니다.
Sprite의 모양을 보다 다양화하기 위해 대칭 이동 및 회전 같은
여러 변환을 적용할 수도 있습니다.
모든 Layer 서브 클래스와 마찬가지로 Sprite의 위치를 변경할 수 있으며 표시하거나 표시하지 않을 수 있습니다.
### Sprite 프레임
Sprite를 렌더링하는 데 사용된 원시 프레임은 변경 가능하거나
불가능한 단일 Image 객체에서 제공합니다.
두 개 이상의 프레임이 사용되면 Image는 지정된 너비 및
높이와 같은 크기를 가지는 일련의 프레임으로 나뉩니다.
아래 그림에 표시된 대로 게임 개발자의 편의상 동일한 프레임 집합을
여러 가지 다양한 배열로 저장할 수 있습니다.
각 프레임에는 고유 색인 번호가 할당됩니다.
Image의 왼쪽 위 모서리에 있는 프레임에는 색인 0이 할당됩니다.
그런 다음 나머지 프레임의 번호는 행 순서 위주로(첫 번째 행에 색인을
할당한 다음 두 번째 행에 할당하는 식으로) 연속하여 매겨집니다.
``getRawFrameCount()`` 메소드는 총 원시 프레임 수를 반환합니다.
### 프레임 시퀀스
Sprite의 프레임 시퀀스는 표시할 프레임의 정렬된 목록을 정의합니다.
기본 프레임 시퀀스는 사용 가능한 프레임의 목록을 미러하므로
시퀀스 색인과 해당 프레임 색인 사이에 직접 매핑됩니다.
이는 또한 기본 프레임 시퀀스의 길이가 원시 프레임 수와 같다는 것을
의미합니다. 예를 들어, Sprite에 4개의 프레임이 있는 경우
기본 프레임 시퀀스는 {0, 1, 2, 3}입니다.
개발자는 프레임 시퀀스에서 현재 프레임을 수동으로 교환해야 합니다.
이 작업은 ``setFrame(int)``, ``prevFrame()`` 또는
``nextFrame()``을 호출하면 가능합니다.
이러한 메소드는 항상 시퀀스 색인에서 작동해야 하며
프레임 색인에서는 작동하지 않습니다.
하지만 기본 프레임 시퀀스가 사용되는 경우 시퀀스 색인 및 프레임 색인은 상호 교환할 수 있습니다.
필요한 경우 Sprite에 대해 임의의 프레임 시퀀스가
정의되어 있을 수 있습니다. 프레임 시퀀스는 한 개 이상의 요소를 포함해야 하며
각 요소는 유효한 프레임 색인을 참조해야 합니다.
개발자는 새 프레임 시퀀스를 정의하여 원하는 순서대로 편리하게
Sprite 프레임을 표시할 수 있습니다. 즉, 프레임을 반복하거나 생략하거나 역순으로 표시할 수 있습니다.
예를 들어, 아래의 다이어그램은 모기에게 애니메이션 효과를 주기 위해
특수 프레임 시퀀스를 사용하는 방법을 보여 줍니다.
프레임 시퀀스는 모기가 날개를 세 번 퍼덕거린 다음 주기가 반복되기 전에
일시 중지되도록 설계되어 있습니다.
디스플레이가 업데이트될 때마다
을 호출하면
결과 애니메이션은 다음과 같습니다.
### 참조 픽셀
Sprite는 Layer의 서브 클래스로
,
,
등의 위치를 설정하고 검색할 수 있는
다양한 메소드를 상속합니다. 이러한 메소드는 모두 Sprite 시각적 경계의
왼쪽 위 모서리를 기준으로 위치를 정의합니다.
하지만 경우에 따라, 특히 Sprite에 변환이 적용된 경우에는 프레임 내에서
임의의 픽셀을 기준으로 Sprite의 위치를 정의하는 것이 보다 편리할 수 있습니다.
그러므로 Sprite에는 *참조 픽셀*의 개념이 포함됩니다.
참조 픽셀은 ``defineReferencePixel(x,y)``을
사용하여 Sprite의 변환되지 않은
프레임에서 위치를 지정하여 정의됩니다.
기본적으로 참조 픽셀은 프레임에서 (0,0)의 픽셀이 되도록 정의됩니다.
필요한 경우 프레임 범위 밖에 있도록
참조 픽셀을 정의할 수 있습니다.
이 예에서 참조 픽셀은 원숭이가 매달려 있는
모습의 픽셀이 되도록 정의됩니다.
painter의 좌표계에서 참조 픽셀의 위치를 쿼리하기 위해
``getRefPixelX()``와
``getRefPixelY()``를 사용할 수 있습니다.
또한 개발자는 참조 픽셀이 painter 좌표계의 특정 위치에 나타나도록
``setRefPixelPosition(x,y)``을 사용하여
Sprite를 배치할 수 있습니다.
이러한 메소드는 Sprite에 적용된 변환에도 자동으로 적용됩니다.
이 예에서 참조 픽셀의 위치는 나뭇가지 끝에 있는 점으로 설정됩니다.
Sprite의 위치는 이 지점에 참조 픽셀이 표시되고 원숭이가 가지에
매달려 있는 것처럼 보이도록 변경됩니다.
### Sprite 변환
Sprite에 다양한 변환이 적용될 수 있습니다.
사용 가능한 변환에는 90도 배수로 회전 및 각 회전의
미러된(수직 축 주위로) 버전이 포함됩니다.
Sprite의 변환은
을 호출하여 설정됩니다.
변환이 적용되면 Sprite는 참조 픽셀이 painter의 좌표계에 고정되어
표시되도록 자동으로 재배치됩니다.
따라서 참조 픽셀은 효과적으로 변환 작업의 중심이 됩니다.
참조 픽셀이 이동하지 않기 때문에
와
에서 반환하는 값은 그대로 있습니다.
하지만
와
에서
반환하는 값은 Sprite 왼쪽 위 모서리의 이동을 반영하도록
변경될 수 있습니다.
원숭이 예를 다시 한 번 참조하면 90도 회전을 적용하는 경우
참조 픽셀의 위치는 (48, 22)에 그대로 있습니다.
따라서 원숭이가 가지에서 흔드는 것처럼
보이도록 할 수 있습니다.
### Sprite 그리기
메소드를 사용하여
언제든지 Sprite를 그릴 수 있습니다.
Sprite에서 유지하는 현재 상태 정보(즉, 위치, 프레임, 표시 여부)에 따라
Graphics 객체에 Sprite를 그립니다.
Sprite를 지우는 것은 항상 Sprite 클래스 밖에 있는 코드를 통해 수행됩니다.
Sprite는 제조업체가 사용하고자 하는 기술을 사용하여 구현될 수 있습니다.
예를 들어, 모든 Sprite에 대해 또는 특정 크기의 Sprite에 대해
하드웨어 가속이 사용될 수도 있고 전혀 사용되지 않을 수도 있습니다.
일부 플랫폼에서 특정 Sprite 크기는 다른 크기보다
더 효율적일 수 있습니다. 제조업체는 이와 같은 장치별 특성에 대한
정보를 개발자에게 제공할지 여부를 선택할 수 있습니다.
**Since:**
- MIDP 2.0
## 필드 요약
- `static int TRANS_MIRROR` — Sprite가 수직 중심을 기준으로 대칭된 상태로 표시되게 합니다.
- `static int TRANS_MIRROR_ROT180` — Sprite가 수직 중심을 기준으로 대칭된 후 시계 방향으로 180도 회전하여 표시되게 합니다.
- `static int TRANS_MIRROR_ROT270` — Sprite가 수직 중심을 기준으로 대칭된 후 시계 방향으로 270도 회전하여 표시되게 합니다.
- `static int TRANS_MIRROR_ROT90` — Sprite가 수직 중심을 기준으로 대칭된 후 시계 방향으로 90도 회전하여 표시되게 합니다.
- `static int TRANS_NONE` — Sprite에 적용되는 변환은 없습니다.
- `static int TRANS_ROT180` — Sprite가 시계 방향으로 180도 회전하여 표시되게 합니다.
- `static int TRANS_ROT270` — Sprite가 시계 방향으로 270도 회전하여 표시되게 합니다.
- `static int TRANS_ROT90` — Sprite가 시계 방향으로 90도 회전하여 표시되게 합니다.
## 생성자 요약
- Sprite ( Image image) 제공된 Image를 사용하여 애니메이션 효과를 넣지 않은
새로운 Sprite를 만듭니다.
- Sprite ( Image image,
int frameWidth,
int frameHeight) 제공된 Image에 포함된 프레임을 사용하여 애니메이션 효과를 넣을
새 Sprite를 만듭니다.
- Sprite ( Sprite s) 다른 Sprite에서 새 Sprite를 만듭니다.
## 메서드 요약
- `boolean collidesWith ( Image image, int x, int y, boolean pixelLevel)` — 이 Sprite와 지정한 위치에 왼쪽 위 모서리가 있는 지정한 Image 사이의 충돌을 검사합니다.
- `boolean collidesWith ( Sprite s, boolean pixelLevel)` — 이 Sprite와 지정한 Sprite 사이의 충돌을 검사합니다.
- `boolean collidesWith ( TiledLayer t, boolean pixelLevel)` — 이 Sprite와 지정한 TiledLayer 사이의 충돌을 검사합니다.
- `void defineCollisionRectangle (int x, int y, int width, int height)` — 충돌 감지를 목적으로 사용되는 Sprite의 경계 직사각형을 정의합니다.
- `void defineReferencePixel (int x, int y)` — 이 Sprite의 참조 픽셀을 정의합니다.
- `int getFrame ()` — 프레임 시퀀스의 현재 색인을 가져옵니다.
- `int getFrameSequenceLength ()` — 프레임 시퀀스에서 요소의 수를 가져옵니다.
- `int getRawFrameCount ()` — 이 Sprite에 대한 원시 프레임의 수를 가져옵니다.
- `int getRefPixelX ()` — painter의 좌표계에서 Sprite 참조 픽셀의 수평 위치를 가져옵니다.
- `int getRefPixelY ()` — painter의 좌표계에서 Sprite 참조 픽셀의 수직 위치를 가져옵니다.
- `void nextFrame ()` — 프레임 시퀀스에서 다음 프레임을 선택합니다.
- `void paint ( Graphics g)` — Sprite를 그립니다.
- `void prevFrame ()` — 프레임 시퀀스에서 이전 프레임을 선택합니다.
- `void setFrame (int sequenceIndex)` — 프레임 시퀀스에서 현재 프레임을 선택합니다.
- `void setFrameSequence (int[] sequence)` — 이 Sprite의 프레임 시퀀스를 설정합니다.
- `void setImage ( Image img, int frameWidth, int frameHeight)` — Sprite의 프레임을 포함하는 Image를 변경합니다.
- `void setRefPixelPosition (int x, int y)` — Sprite의 참조 픽셀이 painter 좌표계의 (x,y)에 일치하도록 Sprite의 위치를 설정합니다.
- `void setTransform (int transform)` — 이 Sprite의 변환을 설정합니다.
## 필드 상세
### TRANS_NONE
```java
public static final int TRANS_NONE
```
**See Also:**
- `Constant Field Values`
### TRANS_ROT90
```java
public static final int TRANS_ROT90
```
**See Also:**
- `Constant Field Values`
### TRANS_ROT180
```java
public static final int TRANS_ROT180
```
**See Also:**
- `Constant Field Values`
### TRANS_ROT270
```java
public static final int TRANS_ROT270
```
**See Also:**
- `Constant Field Values`
### TRANS_MIRROR
```java
public static final int TRANS_MIRROR
```
**See Also:**
- `Constant Field Values`
### TRANS_MIRROR_ROT90
```java
public static final int TRANS_MIRROR_ROT90
```
**See Also:**
- `Constant Field Values`
### TRANS_MIRROR_ROT180
```java
public static final int TRANS_MIRROR_ROT180
```
**See Also:**
- `Constant Field Values`
### TRANS_MIRROR_ROT270
```java
public static final int TRANS_MIRROR_ROT270
```
**See Also:**
- `Constant Field Values`
### Sprite
```java
public Sprite(Image image)
```
- 제공된 Image를 사용하여 애니메이션 효과를 넣지 않은
새로운 Sprite를 만듭니다.
이 구성자는 `new Sprite(image, image.getWidth(), image.getHeight())`를 호출하는 것과 같은 기능을 합니다.
기본적으로 Sprite가 표시되며 왼쪽 위 모서리는 painter 좌표계의 (0,0)에
위치합니다.
**Parameters:**
- `image` - Sprite의 단일 프레임으로 사용할
`Image`
**Throws:**
- `NullPointerException` - `img`가 `null`인 경우
### Sprite
```java
public Sprite(Image image,
int frameWidth,
int frameHeight)
```
- 제공된 Image에 포함된 프레임을 사용하여 애니메이션 효과를 넣을
새 Sprite를 만듭니다. 프레임은 `frameWidth`와
`frameHeight`에 의해 지정된 치수를 갖는 동일한 크기여야 하며
이미지에서 수평이나 수직으로 또는 격자 형태로 배치될 수 있습니다.
소스 이미지의 너비는 프레임
너비 정수의 배수가 되어야 하며
소스 이미지의 높이는 프레임
높이 정수의 배수가 되어야 합니다.
``Layer.getWidth()``와 ``Layer.getHeight()``가 반환하는 값은
Sprite의 현재 변환에 따라 프레임 너비와 프레임 높이를 반영합니다.
Sprite는 프레임 0에서 시작하여 원시 프레임에 해당하는
기본 프레임 시퀀스를 가집니다.
프레임 시퀀스는 ``setFrameSequence(int[])``로 수정할 수 있습니다.
기본적으로 Sprite가 표시되며 왼쪽 위 모서리는 painter의 좌표계 (0,0)에
위치합니다.
**Parameters:**
- `frameHeight` - 개별 원시 프레임의
`height`(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - `image` 높이가
`frameHeight`의 정수 배수가 아닌 경우
### Sprite
```java
public Sprite(Sprite s)
```
- 다른 Sprite에서 새 Sprite를 만듭니다.
소스 Sprite의 모든 인스턴스 속성(원시 프레임, 위치, 프레임 시퀀스,
현재 프레임, 참조 점, 충돌 직사각형, 변환 및 표시 여부)은
새 Sprite에 복제됩니다.
**Parameters:**
- `s` - 복사본을 만들 `Sprite`
**Throws:**
- `NullPointerException` - `s`가 `null`인 경우
### defineReferencePixel
```java
public void defineReferencePixel(int x,
int y)
```
**Parameters:**
- `y` - 변환되지 않은 프레임의 왼쪽 모서리에 상대적인 참조
픽셀의 수직 위치
**See Also:**
- ``setRefPixelPosition(int, int)``,
``getRefPixelX()``,
``getRefPixelY()``
### setRefPixelPosition
```java
public void setRefPixelPosition(int x,
int y)
```
**Parameters:**
- `y` - 참조 픽셀을 둘 수직 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``getRefPixelX()``,
``getRefPixelY()``
### getRefPixelX
```java
public int getRefPixelX()
```
**Returns:**
- 참조 픽셀의 수평 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``setRefPixelPosition(int, int)``,
``getRefPixelY()``
### getRefPixelY
```java
public int getRefPixelY()
```
**Returns:**
- 참조 픽셀의 수직 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``setRefPixelPosition(int, int)``,
``getRefPixelX()``
### setFrame
```java
public void setFrame(int sequenceIndex)
```
**Parameters:**
- `sequenceIndex` - 프레임 시퀀스에 있는
원하는 항목의 색인
**Throws:**
- `IndexOutOfBoundsException` - `frameIndex`가
현재 프레임 시퀀스(또는 기본 시퀀스의 원시 프레임 수)의
길이보다 큰 경우
**See Also:**
- ``setFrameSequence(int[])``,
``getFrame()``
### getFrame
```java
public final int getFrame()
```
**Returns:**
- 프레임 시퀀스의 현재 색인
**See Also:**
- ``setFrameSequence(int[])``,
``setFrame(int)``
### getRawFrameCount
```java
public int getRawFrameCount()
```
**Returns:**
- 이 Sprite 원시 프레임의 수
**See Also:**
- ``getFrameSequenceLength()``
### getFrameSequenceLength
```java
public int getFrameSequenceLength()
```
**Returns:**
- 이 Sprite 프레임 시퀀스의 요소 수
**See Also:**
- ``getRawFrameCount()``
### nextFrame
```java
public void nextFrame()
```
**See Also:**
- ``setFrameSequence(int[])``,
``prevFrame()``
### prevFrame
```java
public void prevFrame()
```
**See Also:**
- ``setFrameSequence(int[])``,
``nextFrame()``
### paint
```java
public final void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Layer`
**Parameters:**
- `g` - `Sprite`를 그릴 그래픽 객체
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
### setFrameSequence
```java
public void setFrameSequence(int[] sequence)
```
**Parameters:**
- `sequence` - 색인 배열, 여기서 각 정수는
프레임 색인을 나타냅니다.
**Throws:**
- `IllegalArgumentException` - 배열의 요소 수가
`1`보다 적은 경우
**See Also:**
- ``nextFrame()``,
``prevFrame()``,
``setFrame(int)``,
``getFrame()``
### setImage
```java
public void setImage(Image img,
int frameWidth,
int frameHeight)
```
**Parameters:**
- `frameHeight` - 개별 원시 프레임의 높이(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - 이미지 높이가
`frameHeight`의 정수 배수가 아닌 경우
### defineCollisionRectangle
```java
public void defineCollisionRectangle(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 충돌 직사각형의 높이
**Throws:**
- `IllegalArgumentException` - 지정한
`width`나 `height`가
`0`보다 작은 경우
### setTransform
```java
public void setTransform(int transform)
```
**Parameters:**
- `transform` - 이 `Sprite`에 필요한 변환
**Throws:**
- `IllegalArgumentException` - 요청한
`transform`이 유효하지 않은 경우
**See Also:**
- ``TRANS_NONE``,
``TRANS_ROT90``,
``TRANS_ROT180``,
``TRANS_ROT270``,
``TRANS_MIRROR``,
``TRANS_MIRROR_ROT90``,
``TRANS_MIRROR_ROT180``,
``TRANS_MIRROR_ROT270``
### collidesWith
```java
public final boolean collidesWith(Sprite s,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 간단한 경계 검사를
테스트하려면 `false`
**Returns:**
- 두 Sprite가 충돌한 경우 `true`,
그렇지 않은 경우 `false`
**Throws:**
- `NullPointerException` - Sprite `s`가 `null`인 경우
### collidesWith
```java
public final boolean collidesWith(TiledLayer t,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 비어있지 않은 셀에 대해
간단한 경계 검사를 테스트하려면 `false`
**Returns:**
- 이 `Sprite`가 `TiledLayer`와
충돌한 경우 `true` 그렇지 않은 경우
`false`
**Throws:**
- `NullPointerException` - `t`가 `null`인 경우
### collidesWith
```java
public final boolean collidesWith(Image image,
int x,
int y,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 단순한 경계 검사를 사용하여
테스트하려면 `false`
**Returns:**
- `Sprite`가 `Image`와
충돌한 경우 `true`, 그렇지 않은 경우
`false`
**Throws:**
- `NullPointerException` - `image`가
`null`인 경우
## 생성자 상세
### Sprite
```java
public Sprite(Image image)
```
- 제공된 Image를 사용하여 애니메이션 효과를 넣지 않은
새로운 Sprite를 만듭니다.
이 구성자는 `new Sprite(image, image.getWidth(), image.getHeight())`를 호출하는 것과 같은 기능을 합니다.
기본적으로 Sprite가 표시되며 왼쪽 위 모서리는 painter 좌표계의 (0,0)에
위치합니다.
**Parameters:**
- `image` - Sprite의 단일 프레임으로 사용할
`Image`
**Throws:**
- `NullPointerException` - `img`가 `null`인 경우
### Sprite
```java
public Sprite(Image image,
int frameWidth,
int frameHeight)
```
- 제공된 Image에 포함된 프레임을 사용하여 애니메이션 효과를 넣을
새 Sprite를 만듭니다. 프레임은 `frameWidth`와
`frameHeight`에 의해 지정된 치수를 갖는 동일한 크기여야 하며
이미지에서 수평이나 수직으로 또는 격자 형태로 배치될 수 있습니다.
소스 이미지의 너비는 프레임
너비 정수의 배수가 되어야 하며
소스 이미지의 높이는 프레임
높이 정수의 배수가 되어야 합니다.
``Layer.getWidth()``와 ``Layer.getHeight()``가 반환하는 값은
Sprite의 현재 변환에 따라 프레임 너비와 프레임 높이를 반영합니다.
Sprite는 프레임 0에서 시작하여 원시 프레임에 해당하는
기본 프레임 시퀀스를 가집니다.
프레임 시퀀스는 ``setFrameSequence(int[])``로 수정할 수 있습니다.
기본적으로 Sprite가 표시되며 왼쪽 위 모서리는 painter의 좌표계 (0,0)에
위치합니다.
**Parameters:**
- `frameHeight` - 개별 원시 프레임의
`height`(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - `image` 높이가
`frameHeight`의 정수 배수가 아닌 경우
### Sprite
```java
public Sprite(Sprite s)
```
- 다른 Sprite에서 새 Sprite를 만듭니다.
소스 Sprite의 모든 인스턴스 속성(원시 프레임, 위치, 프레임 시퀀스,
현재 프레임, 참조 점, 충돌 직사각형, 변환 및 표시 여부)은
새 Sprite에 복제됩니다.
**Parameters:**
- `s` - 복사본을 만들 `Sprite`
**Throws:**
- `NullPointerException` - `s`가 `null`인 경우
### defineReferencePixel
```java
public void defineReferencePixel(int x,
int y)
```
**Parameters:**
- `y` - 변환되지 않은 프레임의 왼쪽 모서리에 상대적인 참조
픽셀의 수직 위치
**See Also:**
- ``setRefPixelPosition(int, int)``,
``getRefPixelX()``,
``getRefPixelY()``
### setRefPixelPosition
```java
public void setRefPixelPosition(int x,
int y)
```
**Parameters:**
- `y` - 참조 픽셀을 둘 수직 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``getRefPixelX()``,
``getRefPixelY()``
### getRefPixelX
```java
public int getRefPixelX()
```
**Returns:**
- 참조 픽셀의 수평 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``setRefPixelPosition(int, int)``,
``getRefPixelY()``
### getRefPixelY
```java
public int getRefPixelY()
```
**Returns:**
- 참조 픽셀의 수직 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``setRefPixelPosition(int, int)``,
``getRefPixelX()``
### setFrame
```java
public void setFrame(int sequenceIndex)
```
**Parameters:**
- `sequenceIndex` - 프레임 시퀀스에 있는
원하는 항목의 색인
**Throws:**
- `IndexOutOfBoundsException` - `frameIndex`가
현재 프레임 시퀀스(또는 기본 시퀀스의 원시 프레임 수)의
길이보다 큰 경우
**See Also:**
- ``setFrameSequence(int[])``,
``getFrame()``
### getFrame
```java
public final int getFrame()
```
**Returns:**
- 프레임 시퀀스의 현재 색인
**See Also:**
- ``setFrameSequence(int[])``,
``setFrame(int)``
### getRawFrameCount
```java
public int getRawFrameCount()
```
**Returns:**
- 이 Sprite 원시 프레임의 수
**See Also:**
- ``getFrameSequenceLength()``
### getFrameSequenceLength
```java
public int getFrameSequenceLength()
```
**Returns:**
- 이 Sprite 프레임 시퀀스의 요소 수
**See Also:**
- ``getRawFrameCount()``
### nextFrame
```java
public void nextFrame()
```
**See Also:**
- ``setFrameSequence(int[])``,
``prevFrame()``
### prevFrame
```java
public void prevFrame()
```
**See Also:**
- ``setFrameSequence(int[])``,
``nextFrame()``
### paint
```java
public final void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Layer`
**Parameters:**
- `g` - `Sprite`를 그릴 그래픽 객체
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
### setFrameSequence
```java
public void setFrameSequence(int[] sequence)
```
**Parameters:**
- `sequence` - 색인 배열, 여기서 각 정수는
프레임 색인을 나타냅니다.
**Throws:**
- `IllegalArgumentException` - 배열의 요소 수가
`1`보다 적은 경우
**See Also:**
- ``nextFrame()``,
``prevFrame()``,
``setFrame(int)``,
``getFrame()``
### setImage
```java
public void setImage(Image img,
int frameWidth,
int frameHeight)
```
**Parameters:**
- `frameHeight` - 개별 원시 프레임의 높이(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - 이미지 높이가
`frameHeight`의 정수 배수가 아닌 경우
### defineCollisionRectangle
```java
public void defineCollisionRectangle(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 충돌 직사각형의 높이
**Throws:**
- `IllegalArgumentException` - 지정한
`width`나 `height`가
`0`보다 작은 경우
### setTransform
```java
public void setTransform(int transform)
```
**Parameters:**
- `transform` - 이 `Sprite`에 필요한 변환
**Throws:**
- `IllegalArgumentException` - 요청한
`transform`이 유효하지 않은 경우
**See Also:**
- ``TRANS_NONE``,
``TRANS_ROT90``,
``TRANS_ROT180``,
``TRANS_ROT270``,
``TRANS_MIRROR``,
``TRANS_MIRROR_ROT90``,
``TRANS_MIRROR_ROT180``,
``TRANS_MIRROR_ROT270``
### collidesWith
```java
public final boolean collidesWith(Sprite s,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 간단한 경계 검사를
테스트하려면 `false`
**Returns:**
- 두 Sprite가 충돌한 경우 `true`,
그렇지 않은 경우 `false`
**Throws:**
- `NullPointerException` - Sprite `s`가 `null`인 경우
### collidesWith
```java
public final boolean collidesWith(TiledLayer t,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 비어있지 않은 셀에 대해
간단한 경계 검사를 테스트하려면 `false`
**Returns:**
- 이 `Sprite`가 `TiledLayer`와
충돌한 경우 `true` 그렇지 않은 경우
`false`
**Throws:**
- `NullPointerException` - `t`가 `null`인 경우
### collidesWith
```java
public final boolean collidesWith(Image image,
int x,
int y,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 단순한 경계 검사를 사용하여
테스트하려면 `false`
**Returns:**
- `Sprite`가 `Image`와
충돌한 경우 `true`, 그렇지 않은 경우
`false`
**Throws:**
- `NullPointerException` - `image`가
`null`인 경우
## 메서드 상세
### defineReferencePixel
```java
public void defineReferencePixel(int x,
int y)
```
**Parameters:**
- `y` - 변환되지 않은 프레임의 왼쪽 모서리에 상대적인 참조
픽셀의 수직 위치
**See Also:**
- ``setRefPixelPosition(int, int)``,
``getRefPixelX()``,
``getRefPixelY()``
### setRefPixelPosition
```java
public void setRefPixelPosition(int x,
int y)
```
**Parameters:**
- `y` - 참조 픽셀을 둘 수직 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``getRefPixelX()``,
``getRefPixelY()``
### getRefPixelX
```java
public int getRefPixelX()
```
**Returns:**
- 참조 픽셀의 수평 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``setRefPixelPosition(int, int)``,
``getRefPixelY()``
### getRefPixelY
```java
public int getRefPixelY()
```
**Returns:**
- 참조 픽셀의 수직 위치
**See Also:**
- ``defineReferencePixel(int, int)``,
``setRefPixelPosition(int, int)``,
``getRefPixelX()``
### setFrame
```java
public void setFrame(int sequenceIndex)
```
**Parameters:**
- `sequenceIndex` - 프레임 시퀀스에 있는
원하는 항목의 색인
**Throws:**
- `IndexOutOfBoundsException` - `frameIndex`가
현재 프레임 시퀀스(또는 기본 시퀀스의 원시 프레임 수)의
길이보다 큰 경우
**See Also:**
- ``setFrameSequence(int[])``,
``getFrame()``
### getFrame
```java
public final int getFrame()
```
**Returns:**
- 프레임 시퀀스의 현재 색인
**See Also:**
- ``setFrameSequence(int[])``,
``setFrame(int)``
### getRawFrameCount
```java
public int getRawFrameCount()
```
**Returns:**
- 이 Sprite 원시 프레임의 수
**See Also:**
- ``getFrameSequenceLength()``
### getFrameSequenceLength
```java
public int getFrameSequenceLength()
```
**Returns:**
- 이 Sprite 프레임 시퀀스의 요소 수
**See Also:**
- ``getRawFrameCount()``
### nextFrame
```java
public void nextFrame()
```
**See Also:**
- ``setFrameSequence(int[])``,
``prevFrame()``
### prevFrame
```java
public void prevFrame()
```
**See Also:**
- ``setFrameSequence(int[])``,
``nextFrame()``
### paint
```java
public final void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Layer`
**Parameters:**
- `g` - `Sprite`를 그릴 그래픽 객체
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
### setFrameSequence
```java
public void setFrameSequence(int[] sequence)
```
**Parameters:**
- `sequence` - 색인 배열, 여기서 각 정수는
프레임 색인을 나타냅니다.
**Throws:**
- `IllegalArgumentException` - 배열의 요소 수가
`1`보다 적은 경우
**See Also:**
- ``nextFrame()``,
``prevFrame()``,
``setFrame(int)``,
``getFrame()``
### setImage
```java
public void setImage(Image img,
int frameWidth,
int frameHeight)
```
**Parameters:**
- `frameHeight` - 개별 원시 프레임의 높이(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - 이미지 높이가
`frameHeight`의 정수 배수가 아닌 경우
### defineCollisionRectangle
```java
public void defineCollisionRectangle(int x,
int y,
int width,
int height)
```
**Parameters:**
- `height` - 충돌 직사각형의 높이
**Throws:**
- `IllegalArgumentException` - 지정한
`width`나 `height`가
`0`보다 작은 경우
### setTransform
```java
public void setTransform(int transform)
```
**Parameters:**
- `transform` - 이 `Sprite`에 필요한 변환
**Throws:**
- `IllegalArgumentException` - 요청한
`transform`이 유효하지 않은 경우
**See Also:**
- ``TRANS_NONE``,
``TRANS_ROT90``,
``TRANS_ROT180``,
``TRANS_ROT270``,
``TRANS_MIRROR``,
``TRANS_MIRROR_ROT90``,
``TRANS_MIRROR_ROT180``,
``TRANS_MIRROR_ROT270``
### collidesWith
```java
public final boolean collidesWith(Sprite s,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 간단한 경계 검사를
테스트하려면 `false`
**Returns:**
- 두 Sprite가 충돌한 경우 `true`,
그렇지 않은 경우 `false`
**Throws:**
- `NullPointerException` - Sprite `s`가 `null`인 경우
### collidesWith
```java
public final boolean collidesWith(TiledLayer t,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 비어있지 않은 셀에 대해
간단한 경계 검사를 테스트하려면 `false`
**Returns:**
- 이 `Sprite`가 `TiledLayer`와
충돌한 경우 `true` 그렇지 않은 경우
`false`
**Throws:**
- `NullPointerException` - `t`가 `null`인 경우
### collidesWith
```java
public final boolean collidesWith(Image image,
int x,
int y,
boolean pixelLevel)
```
**Parameters:**
- `pixelLevel` - 픽셀 단위로 충돌을 테스트하려면
`true`, 단순한 경계 검사를 사용하여
테스트하려면 `false`
**Returns:**
- `Sprite`가 `Image`와
충돌한 경우 `true`, 그렇지 않은 경우
`false`
**Throws:**
- `NullPointerException` - `image`가
`null`인 경우
---
title: "Class TiledLayer"
---
`package javax.microedition.lcdui.game`
```text
java.lang.Object
|
+--javax.microedition.lcdui.game.Layer
|
+--javax.microedition.lcdui.game.TiledLayer
```
## 설명
**extends Layer:**
TiledLayer는 타일 이미지 집합으로
채울 수 있는
셀의 격자로 구성된 시각적 요소입니다.
이 클래스를 사용하면 아주 큰 이미지가 없어도
큰 가상 계층을 만들 수 있습니다.
이 기술은 주로 2D 게임 플랫폼에서
아주 큰 스크롤 배경을 만드는데 사용됩니다.
### 타일
TiledLayer 셀을 채우기 위해
사용된 타일은 변경 가능하거나
불가능한 단일 Image 객체로 제공됩니다.
Image는 같은 크기를 갖는
일련의 타일로 쪼개집니다.
타일 크기는 Image에 따라 지정됩니다.
아래의 그림에 표시된 대로 게임
개발자의 편의상 같은 타일 집합을
여러 가지 다양한 배열로 저장할 수 있습니다.
각 타일에는 고유 색인 번호가 할당됩니다.
Image의 왼쪽 위 모서리에 있는
타일에는 색인 1이 할당됩니다.
그런 다음 나머지 타일의 번호는 행 순서
위주로(첫 번째 행에 색인을 할당한 다음
두 번째 행에 할당하는 식으로)
연속하여 매겨집니다. 타일 및 타일과 연관된 이미지 데이터 사이에는
고정된 연결이 있으므로 이러한 타일은
로 간주됩니다.
TiledLayer를 인스턴스화할 때 정적
타일 집합이 만들어지며 이는 ``setStaticTileSet(javax.microedition.lcdui.Image, int, int)`` 메소드를
사용하여 언제든지 업데이트할 수 있습니다.
정적 타일 집합 외에도 개발자는
여러 *애니메이션 타일*을
정의할 수 있습니다. 애니메이션 타일은 정적 타일과
동적으로 연결되는 가상 타일입니다.
애니메이션 타일의 모양은
현재 연결된 정적 타일의 모양이 됩니다.
애니메이션 타일을 사용하면 개발자는
셀 그룹의 모양을 매우 쉽게 변경할 수 있습니다.
애니메이션 타일로 모두 채워진
셀 그룹을 사용하는 경우
애니메이션 타일과 연결된 정적 타일만 변경하면
전체 그룹의 모양을 변경할 수 있습니다.
이 기술은 여러 셀의 내용을
명시적으로 변경하지 않고도 반복되는
큰 영역에 애니메이션 효과를 줄 때 매우 유용합니다.
애니메이션 타일은 새 애니메이션 타일에
사용될 색인을 반환하는 ``createAnimatedTile(int)`` 메소드를
사용하여 만들어집니다.
애니메이션 타일 색인은 -1에서 시작하며 항상 음수이고 연속적입니다.
애니메이션 타일이 일단 만들어지면
애니메이션 타일과 연결된 정적 타일은
``setAnimatedTile(int, int)`` 메소드를
사용하여 변경할 수 있습니다.
### 셀
TiledLayer 격자는 같은
크기의 셀로 구성됩니다.
격자에 있는 열과 행의 수는
구성자에서 지정되며
셀의 물리적 크기는 타일의 크기에 의해 정의됩니다.
각 셀의 내용은 타일 색인을 사용하여 지정됩니다.
양수 타일 색인은 정적 타일을 참조하며
음수 타일 색인은 애니메이션 타일을 참조합니다.
타일 색인 0은 셀이 비어 있음을 나타냅니다.
빈 셀은 완전히 투명하며
해당 영역에는 TiledLayer로 그려진
내용이 없습니다. 기본적으로 모든 셀은 타일
색인 0을 포함합니다.
``setCell(int, int, int)``과 ``fillCells(int, int, int, int, int)``를 사용하면
셀의 내용을 변경할 수 있습니다.
여러 셀에 같은 타일이 포함될 수 있지만
단일 셀에 두 개 이상의 타일이 포함될 수는 없습니다.
다음 예에서는 TiledLayer를 사용하여 단순한 배경을 만들 수 있는 방법을
설명합니다.
이 예에서 물의 영역은 색인 -1인 애니메이션 타일로 채워지는데
처음에 이 타일은 정적 타일 5와 연결됩니다.
을 사용하여
연결된 정적 타일만 변경하면
전체 물의 영역에 애니메이션
효과를 줄 수 있습니다.
### TiledLayer 렌더링
TiledLayer는 해당 paint 메소드를 수동으로
호출하여 렌더링할 수 있으며 LayerManager 객체를
사용하여 자동으로 렌더링할 수도 있습니다.
paint 메소드는 Graphics
객체의 클립 영역에 따라
전체 TiledLayer를
렌더링하려고 시도합니다.
TiledLayer의 왼쪽 위 모서리는 Graphics 객체의 원점에 대해
현재 (x,y) 위치에서 렌더링됩니다.
이에 따라 Graphics 객체의 클립 영역을 설정하여
렌더링된 영역을 제어할 수 있습니다.
**Since:**
- MIDP 2.0
## 생성자 요약
- TiledLayer (int columns,
int rows, Image image,
int tileWidth,
int tileHeight) 새 TiledLayer를 만듭니다.
## 메서드 요약
- `int createAnimatedTile (int staticTileIndex)` — 새 애니메이션 타일을 만들고 새 애니메이션 타일을 참조하는 색인을 반환합니다.
- `void fillCells (int col, int row, int numCols, int numRows, int tileIndex)` — 특정 타일을 사용하여 영역 셀을 채웁니다.
- `int getAnimatedTile (int animatedTileIndex)` — 애니메이션 타일이 참조하는 타일을 가져옵니다.
- `int getCell (int col, int row)` — 셀의 내용을 가져옵니다.
- `int getCellHeight ()` — 단일 셀의 높이(픽셀 단위)를 가져옵니다.
- `int getCellWidth ()` — 단일 셀의 너비(픽셀 단위)를 가져옵니다.
- `int getColumns ()` — TiledLayer 격자 열의 수를 가져옵니다.
- `int getRows ()` — TiledLayer 격자의 행 수를 가져옵니다.
- `void paint ( Graphics g)` — TiledLayer를 그립니다.
- `void setAnimatedTile (int animatedTileIndex, int staticTileIndex)` — 애니메이션 타일을 지정한 정적 타일과 연결합니다.
- `void setCell (int col, int row, int tileIndex)` — 셀의 내용을 설정합니다.
- `void setStaticTileSet ( Image image, int tileWidth, int tileHeight)` — 정적 타일 집합을 변경합니다.
## 생성자 상세
### TiledLayer
```java
public TiledLayer(int columns,
int rows,
Image image,
int tileWidth,
int tileHeight)
```
- 새 TiledLayer를 만듭니다.
TiledLayer의 격자는 `rows` 셀의 높이와
`columns` 셀의 너비를 가집니다.
격자의 모든 셀은 처음에는 비어 있습니다(즉, 타일 색인 0 포함).
``setCell(int, int, int)``과 ``fillCells(int, int, int, int, int)``를 사용하여 격자의 내용을 수정할 수 있습니다.
TiledLayer의 정적 타일 집합은
지정한 Image로부터 만들어지며
각 타일의 치수는 tileWidth x tileHeight가 됩니다.
소스 이미지의 너비는 타일 너비 정수의 배수가 되어야 하며
소스 이미지의 높이는 타일 높이 정수의 배수가 되어야 합니다.
그렇지 않은 경우 IllegalArgumentException이 발생합니다.
``setStaticTileSet(Image, int, int)``를
사용하여 전체 정적 타일 집합을 변경할 수 있습니다.
이러한 메소드는 메모리와 시간을 많이 소모하므로
자주 사용하지 않습니다.
가능하면 타일 모양에 애니메이션 효과를 주기 보다
애니메이션 타일을 사용해야 합니다.
**Parameters:**
- `tileHeight` - 단일 타일의 높이(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - `image` 높이가
`tileHeight` 정수의 배수가 아닌 경우
### createAnimatedTile
```java
public int createAnimatedTile(int staticTileIndex)
```
**Parameters:**
- `staticTileIndex` - 연결된 타일의 색인(`0` 또는
유효한 정적 타일 색인)
**Returns:**
- 새로 만든 애니메이션 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `staticTileIndex`가
유효하지 않은 경우
### setAnimatedTile
```java
public void setAnimatedTile(int animatedTileIndex,
int staticTileIndex)
```
**Parameters:**
- `staticTileIndex` - 연결된 타일의 색인(`0`이거나
유효한 정적 타일 색인)
**Throws:**
- `IndexOutOfBoundsException` - 애니메이션 타일 색인이
유효하지 않은 경우
**See Also:**
- ``getAnimatedTile(int)``
### getAnimatedTile
```java
public int getAnimatedTile(int animatedTileIndex)
```
**Parameters:**
- `animatedTileIndex` - 애니메이션 타일의 색인
**Returns:**
- 애니메이션 타일에서 참조하는 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - 애니메이션 타일 색인이
유효하지 않은 경우
**See Also:**
- ``setAnimatedTile(int, int)``
### setCell
```java
public void setCell(int col,
int row,
int tileIndex)
```
**Parameters:**
- `tileIndex` - 셀에 놓을 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `row`나
`col`이 `TiledLayer` 격자의
범위를 벗어나는 경우
**See Also:**
- ``getCell(int, int)``,
``fillCells(int, int, int, int, int)``
### getCell
```java
public int getCell(int col,
int row)
```
**Parameters:**
- `row` - 검사할 셀의 행
**Returns:**
- 셀에 있는 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `row`나
`col`이 `TiledLayer`
격자의 범위를 벗어나는 경우
**See Also:**
- ``setCell(int, int, int)``,
``fillCells(int, int, int, int, int)``
### fillCells
```java
public void fillCells(int col,
int row,
int numCols,
int numRows,
int tileIndex)
```
**Parameters:**
- `tileIndex` - 지정한 영역의 모든
셀에 놓을 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `tileIndex`
색인이 있는 타일이 없는 경우
**See Also:**
- ``setCell(int, int, int)``,
``getCell(int, int)``
### getCellWidth
```java
public final int getCellWidth()
```
**Returns:**
- `TiledLayer` 격자에 있는
단일 셀의 너비(픽셀 단위)
### getCellHeight
```java
public final int getCellHeight()
```
**Returns:**
- `TiledLayer` 격자에 있는
단일 셀의 높이(픽셀 단위)
### getColumns
```java
public final int getColumns()
```
**Returns:**
- `TiledLayer`
격자의 열 너비
### getRows
```java
public final int getRows()
```
**Returns:**
- `TiledLayer`
격자의 행 높이
### setStaticTileSet
```java
public void setStaticTileSet(Image image,
int tileWidth,
int tileHeight)
```
**Parameters:**
- `tileHeight` - 단일 타일의 높이(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - `image` 높이가
`tileHeight` 정수의 배수가 아닌 경우
### paint
```java
public final void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Layer`
**Parameters:**
- `g` - `TiledLayer`를 그릴 graphics 객체
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
## 메서드 상세
### createAnimatedTile
```java
public int createAnimatedTile(int staticTileIndex)
```
**Parameters:**
- `staticTileIndex` - 연결된 타일의 색인(`0` 또는
유효한 정적 타일 색인)
**Returns:**
- 새로 만든 애니메이션 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `staticTileIndex`가
유효하지 않은 경우
### setAnimatedTile
```java
public void setAnimatedTile(int animatedTileIndex,
int staticTileIndex)
```
**Parameters:**
- `staticTileIndex` - 연결된 타일의 색인(`0`이거나
유효한 정적 타일 색인)
**Throws:**
- `IndexOutOfBoundsException` - 애니메이션 타일 색인이
유효하지 않은 경우
**See Also:**
- ``getAnimatedTile(int)``
### getAnimatedTile
```java
public int getAnimatedTile(int animatedTileIndex)
```
**Parameters:**
- `animatedTileIndex` - 애니메이션 타일의 색인
**Returns:**
- 애니메이션 타일에서 참조하는 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - 애니메이션 타일 색인이
유효하지 않은 경우
**See Also:**
- ``setAnimatedTile(int, int)``
### setCell
```java
public void setCell(int col,
int row,
int tileIndex)
```
**Parameters:**
- `tileIndex` - 셀에 놓을 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `row`나
`col`이 `TiledLayer` 격자의
범위를 벗어나는 경우
**See Also:**
- ``getCell(int, int)``,
``fillCells(int, int, int, int, int)``
### getCell
```java
public int getCell(int col,
int row)
```
**Parameters:**
- `row` - 검사할 셀의 행
**Returns:**
- 셀에 있는 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `row`나
`col`이 `TiledLayer`
격자의 범위를 벗어나는 경우
**See Also:**
- ``setCell(int, int, int)``,
``fillCells(int, int, int, int, int)``
### fillCells
```java
public void fillCells(int col,
int row,
int numCols,
int numRows,
int tileIndex)
```
**Parameters:**
- `tileIndex` - 지정한 영역의 모든
셀에 놓을 타일의 색인
**Throws:**
- `IndexOutOfBoundsException` - `tileIndex`
색인이 있는 타일이 없는 경우
**See Also:**
- ``setCell(int, int, int)``,
``getCell(int, int)``
### getCellWidth
```java
public final int getCellWidth()
```
**Returns:**
- `TiledLayer` 격자에 있는
단일 셀의 너비(픽셀 단위)
### getCellHeight
```java
public final int getCellHeight()
```
**Returns:**
- `TiledLayer` 격자에 있는
단일 셀의 높이(픽셀 단위)
### getColumns
```java
public final int getColumns()
```
**Returns:**
- `TiledLayer`
격자의 열 너비
### getRows
```java
public final int getRows()
```
**Returns:**
- `TiledLayer`
격자의 행 높이
### setStaticTileSet
```java
public void setStaticTileSet(Image image,
int tileWidth,
int tileHeight)
```
**Parameters:**
- `tileHeight` - 단일 타일의 높이(픽셀 단위)
**Throws:**
- `IllegalArgumentException` - `image` 높이가
`tileHeight` 정수의 배수가 아닌 경우
### paint
```java
public final void paint(Graphics g)
```
**Specified by:**
- `paint` in class `Layer`
**Parameters:**
- `g` - `TiledLayer`를 그릴 graphics 객체
**Throws:**
- `NullPointerException` - `g`가 `null`인 경우
---
title: "package javax.microedition.lcdui.game"
---
**See:**
**Description**
## Class Summary
- [GameCanvas](GameCanvas.md) — GameCanvas 클래스는 게임 사용자 인터페이스 기반을 제공합니다.
- [Layer](Layer.md) — Layer는 게임의 시각적 요소를 나타내는 추상 클래스입니다.
- [LayerManager](LayerManager.md) — LayerManager는 일련의 Layer를 관리합니다.
- [Sprite](Sprite.md) — Sprite는 Image에 저장되어 있는 여러 프레임 중 하나를 사용하여 렌더링할 수 있는 기본 시각적 요소입니다.
- [TiledLayer](TiledLayer.md) — TiledLayer는 타일 이미지 집합으로 채울 수 있는 셀의 격자로 구성된 시각적 요소입니다.
---
title: "package javax.microedition.lcdui"
---
**See:**
**Description**
## Interface Summary
- [Choice](Choice.md) — Choice는 미리 정의된 선택 항목 개수에서 선택 사항을 구현하는 사용자 인터페이스 구성 요소에 대한 API를 정의합니다.
- [CommandListener](CommandListener.md) — 이 인터페이스는 구현 시 높은 수준의 이벤트를 받아야 하는 응용 프로그램에서 사용합니다.
- [ItemCommandListener](ItemCommandListener.md) — Item 객체에서 호출된 명령 통지를 받기 위한 수신기 유형.
- [ItemStateListener](ItemStateListener.md) — 이 인터페이스는 Form 화면에서 대화식 항목의 내부 상태 변경을 나타내는 이벤트를 받아야 하는 응용 프로그램에서 사용합니다.
## Class Summary
- [Alert](Alert.md) — 경고는 다음 Displayable 로 이동하기 전에 사용자에게 데이터를 표시하고 특정 시간 동안 대기하는 화면입니다.
- [AlertType](AlertType.md) — AlertType 은 경고의 특징을 표시합니다.
- [Canvas](Canvas.md) — Canvas 클래스는 낮은 수준의 이벤트를 처리하고 디스플레이로 이동하기 위한 그래픽을 호출해야 하는 응용 프로그램을 작성하기 위한 기본 클래스입니다.
- [ChoiceGroup](ChoiceGroup.md) — ChoiceGroup 은 Form 내에 놓을 선택 가능한 요소 그룹입니다.
- [Command](Command.md) — Command 클래스는 작업의 의미 정보를 캡슐화하는 구조입니다.
- [CustomItem](CustomItem.md) — CustomItem은 새로운 시각적 요소 및 대화식 요소를 Forms 에 도입하기 위해 클래스 세분화를 통해 사용자 정의할 수 있습니다.
- [DateField](DateField.md) — DateField 는 Form 에 넣을 수 있는 날짜와 시간(달력) 정보를 나타내기 위한 편집 가능한 구성 요소입니다.
- [Display](Display.md) — Display 는 시스템의 입력 장치 및 디스플레이 관리자를 나타냅니다.
- [Displayable](Displayable.md) — 디스플레이에 놓일 수 있는 기능을 보유한 객체입니다.
- [Font](Font.md) — Font 클래스는 글꼴 및 글꼴 메트릭을 나타냅니다.
- [Form](Form.md) — Form 은 이미지, 읽기 전용 텍스트 필드, 편집 가능 텍스트 필드, 편집 가능 날짜 필드, 게이지, 선택 그룹 및 사용자 정의 항목 등의 임의 혼합을 포함하는 Screen 입니다.
- [Gauge](Gauge.md) — 정수 값의 그래픽 디스플레이(예: 막대 그래프)를 구현합니다.
- [Graphics](Graphics.md) — 단순한 2D 기하 렌더링 기능을 제공합니다.
- [Image](Image.md) — Image 클래스는 그래픽 이미지 데이터를 보관하는 데 사용됩니다.
- [ImageItem](ImageItem.md) — 이미지를 포함할 수 있는 항목입니다.
- [Item](Item.md) — Form 에 추가할 수 있는 구성 요소의 수퍼 클래스.
- [List](List.md) — 선택 목록을 포함하는 Screen .
- [Screen](Screen.md) — 고급 사용자 인터페이스 클래스의 공통 수퍼 클래스.
- [Spacer](Spacer.md) — 설정 가능한 최소 크기를 가진 비어 있는 비대화식 항목.
- [StringItem](StringItem.md) — 문자열을 포함할 수 있는 항목.
- [TextBox](TextBox.md) — TextBox 클래스는 사용자가 텍스트를 입력하고 편집할 수 있는 Screen 입니다.
- [TextField](TextField.md) — TextField 는 Form 에 들어갈 수 있는 편집할 수 있는 텍스트 구성 요소입니다.
- [Ticker](Ticker.md) — 디스플레이에 텍스트의 일부가 계속하여 지나가는 "티커 테이프"를 구현합니다.
---
title: "Interface Control"
---
`package javax.microedition.media`
---
title: "Interface Controllable"
---
`package javax.microedition.media`
```text
public Control[] getControls()
```
## 설명
**Returns:**
- `Control` 객체 모음
**Throws:**
- `IllegalStateException` - `getControls`가
잘못된 상태에서 호출된 경우 발생합니다.
자세한 내용은 ``Player``를
참조하십시오.
### getControl
**Parameters:**
- `controlType` - `Control`의 클래스 이름.
클래스 이름은 클래스의 전체 이름으로 제공되어야 하며
클래스의 패키지가 제공되지 않는 경우
`javax.microedition.media.control`
패키지로 간주합니다.
**Returns:**
- 컨트롤을 구현하는 객체 또는
`null`
**Throws:**
- `IllegalStateException` - `getControl`이
잘못된 상태에서 호출된 경우 발생합니다.
자세한 내용은 ``Player``를
참조하십시오.
## 메서드 요약
- `Control getControl ( String controlType)` — 지정된 Control 인터페이스를 구현하는 객체를 가져옵니다.
- `Control [] getControls ()` — 이 인터페이스를 구현하는 객체에서 Control 모음을 가져옵니다.
## 메서드 상세
### getControls
```java
public Control[] getControls()
```
**Returns:**
- `Control` 객체 모음
**Throws:**
- `IllegalStateException` - `getControls`가
잘못된 상태에서 호출된 경우 발생합니다.
자세한 내용은 ``Player``를
참조하십시오.
### getControl
```java
public Control getControl(String controlType)
```
**Parameters:**
- `controlType` - `Control`의 클래스 이름.
클래스 이름은 클래스의 전체 이름으로 제공되어야 하며
클래스의 패키지가 제공되지 않는 경우
`javax.microedition.media.control`
패키지로 간주합니다.
**Returns:**
- 컨트롤을 구현하는 객체 또는
`null`
**Throws:**
- `IllegalStateException` - `getControl`이
잘못된 상태에서 호출된 경우 발생합니다.
자세한 내용은 ``Player``를
참조하십시오.
---
title: "Class Manager"
---
`package javax.microedition.media`
```text
java.lang.Object
|
+--javax.microedition.media.Manager
```
## 설명
**extends Object:**
`Manager`는 멀티미디어를 처리하는
`Player`와 같은 시스템 종속 자원을 얻기 위한
액세스 포인트입니다.
`Player`는
데이터의
내용 유형에
적합한 미디어를
제어하고 렌더링하는 데
사용하는 객체입니다.
`Manager`에서는 `Player`를
구성하기 위한 구현별 기법에 액세스할 수 있습니다.
편의상 `Manager`는 단순 톤을 생성하기 위한
간소화된 메소드도 제공합니다.
**See Also:**
- ``Player``
## 필드 요약
- `static String TONE_DEVICE_LOCATOR` — 톤 시퀀스를 재생하기 위한 톤 Player 를 만드는 로케이터.
## 메서드 요약
- `static Player createPlayer ( InputStream stream, String type)` — InputStream 에서 미디어를 재생하기 위해 Player 를 만듭니다.
- `static Player createPlayer ( String locator)` — 입력 로케이터에서 Player 를 만듭니다.
- `static String [] getSupportedContentTypes ( String protocol)` — 주어진 프로토콜에 대해 지원되는 내용 유형 목록을 반환합니다.
- `static String [] getSupportedProtocols ( String content_type)` — 제공된 내용 유형을 지원하는 프로토콜의 목록을 반환합니다.
- `static void playTone (int note, int duration, int volume)` — 음표와 재생 시간에 의해 지정된 대로 톤을 재생합니다.
## 필드 상세
### TONE_DEVICE_LOCATOR
```java
public static final String TONE_DEVICE_LOCATOR
```
**See Also:**
- `Constant Field Values`
### getSupportedContentTypes
```java
public static String[] getSupportedContentTypes(String protocol)
```
**Parameters:**
- `protocol` - 지원되는 내용 유형의 입력 프로토콜
**Returns:**
- 주어진 프로토콜을 지원하는 내용 유형 목록
### getSupportedProtocols
```java
public static String[] getSupportedProtocols(String content_type)
```
**Parameters:**
- `content_type` - 지원되는 프로토콜의 내용 유형
**Returns:**
- 주어진 내용 유형을 지원하는 프로토콜 목록
### createPlayer
```java
public static Player createPlayer(String locator)
throws IOException,
MediaException
```
**Parameters:**
- `locator` - 미디어 내용을 설명하는
URI 구문의 로케이터 문자열
**Returns:**
- 새 `Player`
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
만들 보안 권한이 없는 경우 발생합니다.
### createPlayer
```java
public static Player createPlayer(InputStream stream,
String type)
throws IOException,
MediaException
```
**Parameters:**
- `type` - 미디어의 `ContentType`
**Returns:**
- 새 `Player`
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
만들 보안 권한이 없는 경우 발생합니다.
### playTone
```java
public static void playTone(int note,
int duration,
int volume)
throws MediaException
```
**Parameters:**
- `volume` - 오디오 볼륨은
0 ~ 100 사이입니다.
100은 현재 하드웨어 수준에서 최대 볼륨을 표시합니다.
볼륨을 0 미만의 값으로 설정하면 볼륨은 0으로 설정됩니다.
볼륨을 100보다 큰 값으로 설정하면
볼륨은 100으로 설정됩니다.
**Throws:**
- `MediaException` - 장치 관련 문제로 인해 톤을 재생할 수 없는 경우
발생합니다.
## 메서드 상세
### getSupportedContentTypes
```java
public static String[] getSupportedContentTypes(String protocol)
```
**Parameters:**
- `protocol` - 지원되는 내용 유형의 입력 프로토콜
**Returns:**
- 주어진 프로토콜을 지원하는 내용 유형 목록
### getSupportedProtocols
```java
public static String[] getSupportedProtocols(String content_type)
```
**Parameters:**
- `content_type` - 지원되는 프로토콜의 내용 유형
**Returns:**
- 주어진 내용 유형을 지원하는 프로토콜 목록
### createPlayer
```java
public static Player createPlayer(String locator)
throws IOException,
MediaException
```
**Parameters:**
- `locator` - 미디어 내용을 설명하는
URI 구문의 로케이터 문자열
**Returns:**
- 새 `Player`
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
만들 보안 권한이 없는 경우 발생합니다.
### createPlayer
```java
public static Player createPlayer(InputStream stream,
String type)
throws IOException,
MediaException
```
**Parameters:**
- `type` - 미디어의 `ContentType`
**Returns:**
- 새 `Player`
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
만들 보안 권한이 없는 경우 발생합니다.
### playTone
```java
public static void playTone(int note,
int duration,
int volume)
throws MediaException
```
**Parameters:**
- `volume` - 오디오 볼륨은
0 ~ 100 사이입니다.
100은 현재 하드웨어 수준에서 최대 볼륨을 표시합니다.
볼륨을 0 미만의 값으로 설정하면 볼륨은 0으로 설정됩니다.
볼륨을 100보다 큰 값으로 설정하면
볼륨은 100으로 설정됩니다.
**Throws:**
- `MediaException` - 장치 관련 문제로 인해 톤을 재생할 수 없는 경우
발생합니다.
---
title: "Class MediaException"
---
`package javax.microedition.media`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--javax.microedition.media.MediaException
```
## 설명
**extends Exception:**
`MediaException`은 메소드에 예기치 않은
오류 조건이 있음을 나타냅니다.
## 생성자 요약
- MediaException () null 을 오류 세부 정보 메시지로 사용하여 MediaException 을 구성합니다.
- MediaException ( String reason) 지정한 세부 정보 메시지를 사용하여 MediaException 을 구성합니다.
## 생성자 상세
### MediaException
```java
public MediaException()
```
- `null`을 오류 세부 정보 메시지로 사용하여
`MediaException`을 구성합니다.
### MediaException
```java
public MediaException(String reason)
```
- 지정한 세부 정보 메시지를 사용하여 `MediaException`을 구성합니다.
오류 메시지 문자열 `s`는 나중에
`java.lang.Throwable` 클래스의
`Throwable.getMessage()` 메소드로
검색할 수 있습니다.
**Parameters:**
- `reason` - 세부 정보 메시지
---
title: "Interface Player"
---
`package javax.microedition.media`
```text
try {
Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
p.start();
} catch (MediaException me) {}
} catch (IOException ioe) {
}
```
## 필드 요약
- `static int CLOSED` — Player 가 종료되었음을 나타내는 Player 의 상태.
- `static int PREFETCHED` — 재생하는 데 필요한 모든 자원을 획득했음을 나타내는 Player 의 상태.
- `static int REALIZED` — 작동하는 데 필요한 정보를 획득했지만 자원은 획득하지 않았음을 나타내는 Player 의 상태.
- `static int STARTED` — Player 가 이미 시작되었음을 나타내는 Player 의 상태.
- `static long TIME_UNKNOWN` — 요청된 시간을 알 수 없음을 나타내는 반환 값.
- `static int UNREALIZED` — 작동하는 데 필요한 정보와 자원을 획득하지 않았음을 나타내는 Player 의 상태.
## 메서드 요약
- `void addPlayerListener ( PlayerListener playerListener)` — 이 플레이어에 플레이어 수신기를 추가합니다.
- `void close ()` — Player 를 종료하고 자원을 해제합니다.
- `void deallocate ()` — Player 에서 획득한 오디오 장치와 같은 희귀 자원이나 독점 자원을 해제합니다.
- `String getContentType ()` — 이 Player 로 재생 중인 미디어의 내용 유형을 가져옵니다.
- `long getDuration ()` — 미디어의 재생 시간을 가져옵니다.
- `long getMediaTime ()` — 이 Player 의 현재 미디어 시간 을 가져옵니다.
- `int getState ()` — 이 Player 의 현재 상태를 가져옵니다.
- `void prefetch ()` — 희귀 자원이나 독점 자원을 획득하고 시작 대기 시간을 줄이는 데 필요한 만큼의 데이터를 처리합니다.
- `void realize ()` — 희귀 자원이나 독점 자원을 획득하지 않고 Player 의 일부를 구성합니다.
- `void removePlayerListener ( PlayerListener playerListener)` — 이 플레이어의 플레이어 수신기를 제거합니다.
- `void setLoopCount (int count)` — Player 가 내용을 루프 및 재생할 횟수를 설정합니다.
- `long setMediaTime (long now)` — Player 의 미디어 시간 을 설정합니다.
- `void start ()` — 가능한 빨리 Player 를 시작합니다.
- `void stop ()` — Player 를 정지합니다.
## 필드 상세
### UNREALIZED
```java
public static final int UNREALIZED
```
**See Also:**
- `Constant Field Values`
### REALIZED
```java
public static final int REALIZED
```
**See Also:**
- `Constant Field Values`
### PREFETCHED
```java
public static final int PREFETCHED
```
**See Also:**
- `Constant Field Values`
### STARTED
```java
public static final int STARTED
```
**See Also:**
- `Constant Field Values`
### CLOSED
```java
public static final int CLOSED
```
**See Also:**
- `Constant Field Values`
### TIME_UNKNOWN
```java
public static final long TIME_UNKNOWN
```
**See Also:**
- `Constant Field Values`
### realize
```java
public void realize()
throws MediaException
```
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
인식하기 위한 보안 권한이 없는 경우 발생합니다.
### prefetch
```java
public void prefetch()
throws MediaException
```
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
프리패치할 보안 권한이 없는 경우 발생합니다.
### start
```java
public void start()
throws MediaException
```
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
시작할 보안 권한이 없는 경우 발생합니다.
### stop
```java
public void stop()
throws MediaException
```
**Throws:**
- `MediaException` - `Player`를 정지할 수 없는 경우
발생합니다.
### deallocate
```java
public void deallocate()
```
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
### close
```java
public void close()
```
Player 를 종료하고 자원을 해제합니다. 메소드가 반환되면 Player 는 CLOSED 상태가 되어 더 이상 사용할 수 없습니다. CLOSED 이벤트는 등록된 PlayerListener 에
전달됩니다. 종료된 Player 에서 close 를
호출하면 요청은 무시됩니다.
### setMediaTime
```java
public long setMediaTime(long now)
throws MediaException
```
**Parameters:**
- `now` - 밀리초 단위로 된 새 미디어 시간
**Returns:**
- 밀리초 단위로 설정된 실제 미디어 시간
**Throws:**
- `MediaException` - 미디어 시간을 설정할 수 없는 경우
발생합니다.
**See Also:**
- ``getMediaTime()``
### getMediaTime
```java
public long getMediaTime()
```
**Returns:**
- 밀리초로 된 현재 *미디어 시간* 또는
`TIME_UNKNOWN`
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
**See Also:**
- ``setMediaTime(long)``
### getState
```java
public int getState()
```
**Returns:**
- `Player`의 현재 상태
### getDuration
```java
public long getDuration()
```
**Returns:**
- 밀리초 단위로 된 재생 시간이나 `TIME_UNKNOWN`
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
### getContentType
```java
public String getContentType()
```
**Returns:**
- 이 `Player`가 재생 중인
내용 유형
**Throws:**
- `IllegalStateException` - `Player`가
*UNREALIZED* 또는 *CLOSED* 상태인 경우 발생합니다.
### setLoopCount
```java
public void setLoopCount(int count)
```
**Parameters:**
- `count` - 내용을 재생할 횟수를 나타냅니다.
1이 기본값입니다. 0은 유효하지 않습니다.
-1은 무기한으로 루프함을 나타냅니다.
**Throws:**
- `IllegalStateException` - `Player`가
*STARTED* 또는 *CLOSED*
상태인 경우 발생합니다.
### addPlayerListener
```java
public void addPlayerListener(PlayerListener playerListener)
```
**Parameters:**
- `playerListener` - 추가할 수신기. `null`이
사용되면 요청은 무시됩니다.
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
**See Also:**
- ``removePlayerListener(javax.microedition.media.PlayerListener)``
### removePlayerListener
```java
public void removePlayerListener(PlayerListener playerListener)
```
**Parameters:**
- `playerListener` - 제거할 수신기. `null`이
사용되거나 주어진 `playerListener`가
이 `Player`의 수신기가 아닌
경우 요청은 무시됩니다.
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
**See Also:**
- ``addPlayerListener(javax.microedition.media.PlayerListener)``
## 메서드 상세
### realize
```java
public void realize()
throws MediaException
```
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
인식하기 위한 보안 권한이 없는 경우 발생합니다.
### prefetch
```java
public void prefetch()
throws MediaException
```
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
프리패치할 보안 권한이 없는 경우 발생합니다.
### start
```java
public void start()
throws MediaException
```
**Throws:**
- `SecurityException` - 호출자에게 `Player`를
시작할 보안 권한이 없는 경우 발생합니다.
### stop
```java
public void stop()
throws MediaException
```
**Throws:**
- `MediaException` - `Player`를 정지할 수 없는 경우
발생합니다.
### deallocate
```java
public void deallocate()
```
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
### close
```java
public void close()
```
Player 를 종료하고 자원을 해제합니다. 메소드가 반환되면 Player 는 CLOSED 상태가 되어 더 이상 사용할 수 없습니다. CLOSED 이벤트는 등록된 PlayerListener 에
전달됩니다. 종료된 Player 에서 close 를
호출하면 요청은 무시됩니다.
### setMediaTime
```java
public long setMediaTime(long now)
throws MediaException
```
**Parameters:**
- `now` - 밀리초 단위로 된 새 미디어 시간
**Returns:**
- 밀리초 단위로 설정된 실제 미디어 시간
**Throws:**
- `MediaException` - 미디어 시간을 설정할 수 없는 경우
발생합니다.
**See Also:**
- ``getMediaTime()``
### getMediaTime
```java
public long getMediaTime()
```
**Returns:**
- 밀리초로 된 현재 *미디어 시간* 또는
`TIME_UNKNOWN`
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
**See Also:**
- ``setMediaTime(long)``
### getState
```java
public int getState()
```
**Returns:**
- `Player`의 현재 상태
### getDuration
```java
public long getDuration()
```
**Returns:**
- 밀리초 단위로 된 재생 시간이나 `TIME_UNKNOWN`
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
### getContentType
```java
public String getContentType()
```
**Returns:**
- 이 `Player`가 재생 중인
내용 유형
**Throws:**
- `IllegalStateException` - `Player`가
*UNREALIZED* 또는 *CLOSED* 상태인 경우 발생합니다.
### setLoopCount
```java
public void setLoopCount(int count)
```
**Parameters:**
- `count` - 내용을 재생할 횟수를 나타냅니다.
1이 기본값입니다. 0은 유효하지 않습니다.
-1은 무기한으로 루프함을 나타냅니다.
**Throws:**
- `IllegalStateException` - `Player`가
*STARTED* 또는 *CLOSED*
상태인 경우 발생합니다.
### addPlayerListener
```java
public void addPlayerListener(PlayerListener playerListener)
```
**Parameters:**
- `playerListener` - 추가할 수신기. `null`이
사용되면 요청은 무시됩니다.
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
**See Also:**
- ``removePlayerListener(javax.microedition.media.PlayerListener)``
### removePlayerListener
```java
public void removePlayerListener(PlayerListener playerListener)
```
**Parameters:**
- `playerListener` - 제거할 수신기. `null`이
사용되거나 주어진 `playerListener`가
이 `Player`의 수신기가 아닌
경우 요청은 무시됩니다.
**Throws:**
- `IllegalStateException` - `Player`가
*CLOSED* 상태인 경우 발생합니다.
**See Also:**
- ``addPlayerListener(javax.microedition.media.PlayerListener)``
---
title: "Interface PlayerListener"
---
`package javax.microedition.media`
```text
public static final String STARTED
```
## 설명
**See Also:**
- `Constant Field Values`
### STOPPED
**See Also:**
- `Constant Field Values`
### END_OF_MEDIA
**See Also:**
- `Constant Field Values`
### DURATION_UPDATED
**See Also:**
- `Constant Field Values`
### DEVICE_UNAVAILABLE
**See Also:**
- `Constant Field Values`
### DEVICE_AVAILABLE
**See Also:**
- `Constant Field Values`
### VOLUME_CHANGED
**See Also:**
- `Constant Field Values`
### ERROR
**See Also:**
- `Constant Field Values`
### CLOSED
**See Also:**
- `Constant Field Values`
Method Detail
### playerUpdate
**Parameters:**
- `eventData` - 연관된 이벤트 데이터
## 필드 요약
- `static String CLOSED` — Player 가 종료되면 게시됩니다.
- `static String DEVICE_AVAILABLE` — 시스템이나 우선 순위가 더 높은 다른 응용 프로그램이 현재 Player 가 사용할 수 있는 독점 장치를 해제할 때 게시됩니다.
- `static String DEVICE_UNAVAILABLE` — 시스템이나 우선 순위가 더 높은 다른 응용 프로그램이 Player 가 이전에 사용했던 독점 장치를 일시적으로 제어할 때 게시됩니다.
- `static String DURATION_UPDATED` — Player 의 재생 시간이 업데이트될 때 게시됩니다.
- `static String END_OF_MEDIA` — Player 가 미디어 끝에 도달할 때 게시됩니다.
- `static String ERROR` — 오류가 발생한 경우 게시됩니다.
- `static String STARTED` — Player 가 시작되면 게시됩니다.
- `static String STOPPED` — stop 메소드 호출에 응답하여 Player 가 정지할 때 게시됩니다.
- `static String VOLUME_CHANGED` — 오디오 장치 볼륨이 변경될 때 게시됩니다.
## 메서드 요약
- `void playerUpdate ( Player player, String event, Object eventData)` — 이 메소드는 Player 이벤트가 관찰될 때 등록된 수신기에 이벤트를 전달하기 위해 호출됩니다.
## 필드 상세
### STARTED
```java
public static final String STARTED
```
**See Also:**
- `Constant Field Values`
### STOPPED
```java
public static final String STOPPED
```
**See Also:**
- `Constant Field Values`
### END_OF_MEDIA
```java
public static final String END_OF_MEDIA
```
**See Also:**
- `Constant Field Values`
### DURATION_UPDATED
```java
public static final String DURATION_UPDATED
```
**See Also:**
- `Constant Field Values`
### DEVICE_UNAVAILABLE
```java
public static final String DEVICE_UNAVAILABLE
```
**See Also:**
- `Constant Field Values`
### DEVICE_AVAILABLE
```java
public static final String DEVICE_AVAILABLE
```
**See Also:**
- `Constant Field Values`
### VOLUME_CHANGED
```java
public static final String VOLUME_CHANGED
```
**See Also:**
- `Constant Field Values`
### ERROR
```java
public static final String ERROR
```
**See Also:**
- `Constant Field Values`
### CLOSED
```java
public static final String CLOSED
```
**See Also:**
- `Constant Field Values`
### playerUpdate
```java
public void playerUpdate(Player player,
String event,
Object eventData)
```
**Parameters:**
- `eventData` - 연관된 이벤트 데이터
## 메서드 상세
### playerUpdate
```java
public void playerUpdate(Player player,
String event,
Object eventData)
```
**Parameters:**
- `eventData` - 연관된 이벤트 데이터
---
title: "Interface ToneControl"
---
`package javax.microedition.media.control`
```text
sequence = version *1tempo_definition *1resolution_definition
*block_definition 1*sequence_event
version = VERSION version_number
VERSION = byte-value
version_number = 1 ; version # 1
tempo_definition = TEMPO tempo_modifier
TEMPO = byte-value
tempo_modifier = byte-value
; multiply by 4 to get the tempo (in bpm) used
; in the sequence.
resolution_definition = RESOLUTION resolution_unit
RESOLUTION = byte-value
resolution_unit = byte-value
block_definition = BLOCK_START block_number
1*sequence_event
BLOCK_END block_number
BLOCK_START = byte-value
BLOCK_END = byte-value
block_number = byte-value
; block_number specified in BLOCK_END has to be the
; same as the one in BLOCK_START
sequence_event = tone_event / block_event /
volume_event / repeat_event
tone_event = note duration
note = byte-value ; note to be played
duration = byte-value ; duration of the note
block_event = PLAY_BLOCK block_number
PLAY_BLOCK = byte-value
block_number = byte-value
; block_number must be previously defined
; by a full block_definition
volume_event = SET_VOLUME volume
SET_VOLUME = byte-value
volume = byte-value ; new volume
repeat_event = REPEAT multiplier tone_event
REPEAT = byte-value
multiplier = byte-value
; number of times to repeat a tone
byte-value = -128 - 127
; the value of each constant and additional
; constraints on each parameter are specified below.
```
## 필드 요약
- `static byte BLOCK_END` — 블록의 끝점을 정의합니다.
- `static byte BLOCK_START` — 블록의 시작점을 정의합니다.
- `static byte C4` — 중앙 C 60 값이 C4 에 지정됩니다.
- `static byte PLAY_BLOCK` — 정의된 블록을 재생합니다.
- `static byte REPEAT` — REPEAT 이벤트 태그 -9 값이 REPEAT 에 지정됩니다.
- `static byte RESOLUTION` — RESOLUTION 이벤트 태그.
- `static byte SET_VOLUME` — SET_VOLUME 이벤트 태그.
- `static byte SILENCE` — 무음 -1 값이 SILENCE 에 지정됩니다.
- `static byte TEMPO` — TEMPO 이벤트 태그.
- `static byte VERSION` — VERSION 속성 태그 -2 값이 VERSION 에 지정됩니다.
## 메서드 요약
- `void setSequence (byte[] sequence)` — 톤 시퀀스를 설정합니다.
## 필드 상세
### VERSION
```java
public static final byte VERSION
```
**See Also:**
- `Constant Field Values`
### TEMPO
```java
public static final byte TEMPO
```
**See Also:**
- `Constant Field Values`
### RESOLUTION
```java
public static final byte RESOLUTION
```
**See Also:**
- `Constant Field Values`
### BLOCK_START
```java
public static final byte BLOCK_START
```
**See Also:**
- `Constant Field Values`
### BLOCK_END
```java
public static final byte BLOCK_END
```
**See Also:**
- `Constant Field Values`
### PLAY_BLOCK
```java
public static final byte PLAY_BLOCK
```
**See Also:**
- `Constant Field Values`
### SET_VOLUME
```java
public static final byte SET_VOLUME
```
**See Also:**
- `Constant Field Values`
### REPEAT
```java
public static final byte REPEAT
```
**See Also:**
- `Constant Field Values`
### C4
```java
public static final byte C4
```
**See Also:**
- `Constant Field Values`
### SILENCE
```java
public static final byte SILENCE
```
**See Also:**
- `Constant Field Values`
### setSequence
```java
public void setSequence(byte[] sequence)
```
**Parameters:**
- `sequence` - 설정할 시퀀스
**Throws:**
- `IllegalStateException` - 이 컨트롤이 속해 있는
`Player`가 *PREFETCHED* 또는
*STARTED* 상태에 있는 경우 발생합니다.
## 메서드 상세
### setSequence
```java
public void setSequence(byte[] sequence)
```
**Parameters:**
- `sequence` - 설정할 시퀀스
**Throws:**
- `IllegalStateException` - 이 컨트롤이 속해 있는
`Player`가 *PREFETCHED* 또는
*STARTED* 상태에 있는 경우 발생합니다.
---
title: "Interface VolumeControl"
---
`package javax.microedition.media.control`
```text
public void setMute(boolean mute)
```
## 설명
**Parameters:**
- `mute` - 신호를 뮤트하려면 `true`를 지정하고
신호의 뮤트를 해제하려면 `false`를 지정합니다.
**See Also:**
- ``isMuted()``
### isMuted
**Returns:**
- 뮤트 상태
**See Also:**
- ``setMute(boolean)``
### setLevel
**Parameters:**
- `level` - 수준 스케일에 지정된 새 볼륨
**Returns:**
- 실제로 설정된 수준
**See Also:**
- ``getLevel()``
### getLevel
**Returns:**
- 현재 볼륨 수준 또는 `-1`
**See Also:**
- ``setLevel(int)``
## 메서드 요약
- `int getLevel ()` — 현재 볼륨 수준 설정을 가져옵니다.
- `boolean isMuted ()` — 이 VolumeControl 과 연관된 신호의 뮤트 상태를 가져옵니다.
- `int setLevel (int level)` — 값이 0부터 100 사이인 선형 스케일을 사용하여 볼륨을 설정합니다.
- `void setMute (boolean mute)` — 이 VolumeControl 에 연결된 Player 의 뮤트를 설정하거나 해제합니다.
## 메서드 상세
### setMute
```java
public void setMute(boolean mute)
```
**Parameters:**
- `mute` - 신호를 뮤트하려면 `true`를 지정하고
신호의 뮤트를 해제하려면 `false`를 지정합니다.
**See Also:**
- ``isMuted()``
### isMuted
```java
public boolean isMuted()
```
**Returns:**
- 뮤트 상태
**See Also:**
- ``setMute(boolean)``
### setLevel
```java
public int setLevel(int level)
```
**Parameters:**
- `level` - 수준 스케일에 지정된 새 볼륨
**Returns:**
- 실제로 설정된 수준
**See Also:**
- ``getLevel()``
### getLevel
```java
public int getLevel()
```
**Returns:**
- 현재 볼륨 수준 또는 `-1`
**See Also:**
- ``setLevel(int)``
---
title: "package javax.microedition.media.control"
---
## Interface Summary
- [ToneControl](ToneControl.md) — ToneControl 은 사용자 정의 모노 톤 시퀀스를 재생할 수 있는 인터페이스입니다.
- [VolumeControl](VolumeControl.md) — VolumeControl 은 Player 의 오디오 볼륨을 조작하기 위한 인터페이스입니다.
---
title: "package javax.microedition.media"
---
**See:**
**Description**
## Interface Summary
- [Control](Control-interface.md) — Control 객체는 일부 미디어 처리 기능을 제어하는 데 사용합니다.
- [Controllable](Controllable.md) — Controllable 은 Player 와 같은 객체에서 Control 을 가져오기 위한 인터페이스를 제공합니다.
- [Player](Player.md) — Player 는 시간 기반 미디어 데이터의 렌더링을 제어합니다.
- [PlayerListener](PlayerListener.md) — PlayerListener 는 Player 가 생성한 비동기적 이벤트를 수신하기 위한 인터페이스입니다.
## Class Summary
- [Manager](Manager.md) — Manager 는 멀티미디어를 처리하는 Player 와 같은 시스템 종속 자원을 얻기 위한 액세스 포인트입니다.
## Exception Summary
- [MediaException](MediaException.md) — MediaException 은 메소드에 예기치 않은 오류 조건이 있음을 나타냅니다.
---
title: "Class MIDlet"
---
`package javax.microedition.midlet`
```text
java.lang.Object
|
+--javax.microedition.midlet.MIDlet
```
## 설명
**extends Object:**
`MIDlet`은 MID 프로필 응용 프로그램입니다.
응용 프로그램은 이 클래스를 확장하여
응용 프로그램 관리 소프트웨어가
MIDlet을 제어하고 응용 프로그램 설명자에서 등록 정보를 검색하고
상태 변경을 통지 및 요청할 수 있게 합니다.
이 클래스의 메소드를 사용하면 응용 프로그램 관리 소프트웨어가
MIDlet을 작성, 시작, 일시 중지 및 완전 삭제할 수 있습니다.
`MIDlet`은 이 인터페이스를 통해 응용 프로그램
관리 소프트웨어에서 실행 및 제어되도록 설계된 클래스 집합입니다.
상태를 사용하면 응용 프로그램 관리
소프트웨어가 런타임 환경의
여러 `MIDlet` 작업을 관리할 수 있습니다.
이를 통해 개별적으로 MIDlet을 시작 및 일시 중지시켰을 때
주어진 시간에 어떤 `MIDlet`이
활성 상태인지 선택할 수 있습니다.
응용 프로그램 관리 소프트웨어는 `MIDlet`의 상태를
관리하고 `MIDlet`의 메소드를
호출하여 MIDlet의 상태 변경을 알립니다.
`MIDlet`은 이러한 메소드를 구현하여 응용 프로그램 관리
소프트웨어에서 지시하는 대로 해당 내부 작업 및
자원 사용을 업데이트합니다.
`MIDlet`은 자체적으로 몇 가지 상태 변경을 시작할 수 있으며
적절한 메소드를 호출하여 응용 프로그램 관리 소프트웨어에
이러한 상태 변경을 알립니다.
**주:** 이 인터페이스의 메소드가 상태 변경을 알립니다.
상태 변경 메소드가 반환되어야 상태 변경이
완료된 것으로 간주합니다.
이는 이러한 메소드가 빨리 반환되게 하기 위함입니다.
## 생성자 요약
- `protected MIDlet ()` — 서브 클래스에 대해 보호된 구성자.
## 메서드 요약
- `int checkPermission ( String permission)` — 지정된 권한 상태를 가져옵니다.
- `protected abstract void destroyApp (boolean unconditional)` — MIDlet 이 종료되어 완전 삭제 상태에 들어갔음을 알립니다.
- `String getAppProperty ( String key)` — 응용 프로그램 관리 소프트웨어에서 명명된 등록 정보를 검색하는 기법을 MIDlet 에 제공합니다.
- `void notifyDestroyed ()` — MIDlet 이 완전 삭제 상태에 들어갔다는 것을 응용 프로그램 관리 소프트웨어에 알릴 때 사용합니다.
- `void notifyPaused ()` — MIDlet이 활성화되지 않고 일시 중지 상태에 들어갔음을 응용 프로그램 관리 소프트웨어에 알립니다.
- `protected abstract void pauseApp ()` — MIDlet 이 일시 중지 상태에 들어갔음을 알립니다.
- `boolean platformRequest ( String URL)` — 장치가 표시된 URL을 처리(예: 표시 또는 설치)하도록 요청합니다.
- `void resumeRequest ()` — MIDlet 이 활성 상태에 들어가려고 함을 표시하는 기법을 MIDlet에 제공합니다.
- `protected abstract void startApp ()` — MIDlet 이 활성 상태로 들어갔음을 MIDlet에 알립니다.
## 생성자 상세
### MIDlet
```java
protected MIDlet()
```
- 서브 클래스에 대해 보호된 구성자.
응용 프로그램 관리 소프트웨어에서 MIDlet 작성을 담당하며
이 작업은 제한되어 있습니다.
MIDlet에서 다른 MIDlet을 작성할 수 없습니다.
**Throws:**
- `SecurityException` - 응용 프로그램
관리 소프트웨어에서 MIDlet을 작성하지 않은 경우
### startApp
```java
protected abstract void startApp()
throws MIDletStateChangeException
```
**Throws:**
- `MIDletStateChangeException` - `MIDlet`을 현재 시작할 수 없고
나중에 시작할 수 있는
경우 발생합니다.
### pauseApp
```java
protected abstract void pauseApp()
```
MIDlet 이 일시 중지 상태에 들어갔음을 알립니다. 일시 중지 상태의 MIDlet 은
공유 자원을 해제하고 정지 상태가 되어야 합니다.
이 메소드는 MIDlet 이 활성 상태인
경우에만 호출됩니다. pauseApp 중 런타임 예외가 발생하면
MIDlet은 즉시 완전 삭제됩니다.
해당 destroyApp 가 호출되어
MIDlet을 지웁니다.
### destroyApp
```java
protected abstract void destroyApp(boolean unconditional)
throws MIDletStateChangeException
```
**Parameters:**
- `unconditional` - 이 메소드가 호출될 때 true이면
`MIDlet`이 정리되고 모든 자원을 해제해야 합니다.
반대로 false이면 `MIDlet`이 `MIDletStateChangeException`을 발생시켜
지금은 완전 삭제되지 않을 것임을 표시합니다.
**Throws:**
- `MIDletStateChangeException` - `MIDlet`이
실행을 계속하지 않으려는 경우 발생합니다(*완전 삭제* 상태에
들어가지 않음).
이 예외는 `unconditional`이
`true`인 경우에는 무시됩니다.
### notifyDestroyed
```java
public final void notifyDestroyed()
```
MIDlet 이 완전 삭제 상태에 들어갔다는 것을 응용 프로그램
관리 소프트웨어에 알릴 때 사용합니다.
이 경우 응용 프로그램 관리 소프트웨어는 MIDlet의 destroyApp 메소드를 호출하지 않고 MIDlet 이 보유한
모든 자원을 다시 사용할 수 있는 것으로
간주합니다. MIDlet.destroyApp() 가 호출되면 MIDlet 은 동일한 작업(정리 및 자원 해제 등)을
수행해야 합니다.
### notifyPaused
```java
public final void notifyPaused()
```
MIDlet이 활성화되지 않고 일시 중지 상태에 들어갔음을
응용 프로그램 관리 소프트웨어에 알립니다. MIDlet 이
완전 삭제되었거나
아직 시작되지 않은 경우에는
이 메소드를 호출해도 아무 효과가 없습니다. MIDlet 이 활성 상태에 있으면
MIDlet에 의해 이 메소드가 호출될 수 있습니다. MIDlet 이 notifyPaused() 를 호출하면 나중에 startApp() 메소드가 호출되어
MIDlet을 다시 활성화할 수도 있고 destroyApp() 메소드가 호출되어 완전 삭제할 수도 있습니다. 응용 프로그램 자체적으로 일시 중지되면 resumeRequest 를 호출하여 활성 상태에 다시 들어가도록 요청해야 합니다.
### getAppProperty
```java
public final String getAppProperty(String key)
```
**Parameters:**
- `key` - 등록 정보 이름
**Returns:**
- 등록 정보 값을 가진 문자열.
키에 사용 가능한 값이 없는 경우
`null`이 반환됩니다.
**Throws:**
- `NullPointerException` - 키가 `null`인 경우 발생합니다.
### resumeRequest
```java
public final void resumeRequest()
```
MIDlet 이 활성 상태에 들어가려고
함을 표시하는 기법을 MIDlet에 제공합니다.
응용 프로그램 관리 소프트웨어는
이 메소드를 호출하여 활성 상태로 이동할 응용 프로그램을
결정할 수 있습니다. 응용 프로그램 관리 소프트웨어가
이 응용 프로그램을 활성화할 때 startApp 메소드가 호출됩니다. 이 메소드가 호출되는 경우 응용 프로그램은 일반적으로 일시 중지 상태입니다.
응용 프로그램은 일시 중지 상태에서도 타이머 또는 콜백과 같은
비동기 이벤트를 처리할 수 있습니다.
### platformRequest
```java
public final boolean platformRequest(String URL)
throws ConnectionNotFoundException
```
**Parameters:**
- `URL` - 플랫폼에서 로드할 URL. 공백 문자열(null 아님)은
보류 중인 요청을 취소합니다.
**Returns:**
- 내용을 가져오기 전에 먼저 MIDlet Suite를
종료해야 하는 경우 true
**Throws:**
- `ConnectionNotFoundException` - 플랫폼이 요청된 URL을 처리할 수 없는 경우
**Since:**
- MIDP 2.0
### checkPermission
```java
public final int checkPermission(String permission)
```
**Parameters:**
- `permission` - 거부, 허용 또는 알 수 없음인지 확인
**Returns:**
- 권한이 거부되면 0, 권한이 허용되면 1,
알려지지 않은 상태이면 -1
**Since:**
- MIDP 2.0
## 메서드 상세
### startApp
```java
protected abstract void startApp()
throws MIDletStateChangeException
```
**Throws:**
- `MIDletStateChangeException` - `MIDlet`을 현재 시작할 수 없고
나중에 시작할 수 있는
경우 발생합니다.
### pauseApp
```java
protected abstract void pauseApp()
```
MIDlet 이 일시 중지 상태에 들어갔음을 알립니다. 일시 중지 상태의 MIDlet 은
공유 자원을 해제하고 정지 상태가 되어야 합니다.
이 메소드는 MIDlet 이 활성 상태인
경우에만 호출됩니다. pauseApp 중 런타임 예외가 발생하면
MIDlet은 즉시 완전 삭제됩니다.
해당 destroyApp 가 호출되어
MIDlet을 지웁니다.
### destroyApp
```java
protected abstract void destroyApp(boolean unconditional)
throws MIDletStateChangeException
```
**Parameters:**
- `unconditional` - 이 메소드가 호출될 때 true이면
`MIDlet`이 정리되고 모든 자원을 해제해야 합니다.
반대로 false이면 `MIDlet`이 `MIDletStateChangeException`을 발생시켜
지금은 완전 삭제되지 않을 것임을 표시합니다.
**Throws:**
- `MIDletStateChangeException` - `MIDlet`이
실행을 계속하지 않으려는 경우 발생합니다(*완전 삭제* 상태에
들어가지 않음).
이 예외는 `unconditional`이
`true`인 경우에는 무시됩니다.
### notifyDestroyed
```java
public final void notifyDestroyed()
```
MIDlet 이 완전 삭제 상태에 들어갔다는 것을 응용 프로그램
관리 소프트웨어에 알릴 때 사용합니다.
이 경우 응용 프로그램 관리 소프트웨어는 MIDlet의 destroyApp 메소드를 호출하지 않고 MIDlet 이 보유한
모든 자원을 다시 사용할 수 있는 것으로
간주합니다. MIDlet.destroyApp() 가 호출되면 MIDlet 은 동일한 작업(정리 및 자원 해제 등)을
수행해야 합니다.
### notifyPaused
```java
public final void notifyPaused()
```
MIDlet이 활성화되지 않고 일시 중지 상태에 들어갔음을
응용 프로그램 관리 소프트웨어에 알립니다. MIDlet 이
완전 삭제되었거나
아직 시작되지 않은 경우에는
이 메소드를 호출해도 아무 효과가 없습니다. MIDlet 이 활성 상태에 있으면
MIDlet에 의해 이 메소드가 호출될 수 있습니다. MIDlet 이 notifyPaused() 를 호출하면 나중에 startApp() 메소드가 호출되어
MIDlet을 다시 활성화할 수도 있고 destroyApp() 메소드가 호출되어 완전 삭제할 수도 있습니다. 응용 프로그램 자체적으로 일시 중지되면 resumeRequest 를 호출하여 활성 상태에 다시 들어가도록 요청해야 합니다.
### getAppProperty
```java
public final String getAppProperty(String key)
```
**Parameters:**
- `key` - 등록 정보 이름
**Returns:**
- 등록 정보 값을 가진 문자열.
키에 사용 가능한 값이 없는 경우
`null`이 반환됩니다.
**Throws:**
- `NullPointerException` - 키가 `null`인 경우 발생합니다.
### resumeRequest
```java
public final void resumeRequest()
```
MIDlet 이 활성 상태에 들어가려고
함을 표시하는 기법을 MIDlet에 제공합니다.
응용 프로그램 관리 소프트웨어는
이 메소드를 호출하여 활성 상태로 이동할 응용 프로그램을
결정할 수 있습니다. 응용 프로그램 관리 소프트웨어가
이 응용 프로그램을 활성화할 때 startApp 메소드가 호출됩니다. 이 메소드가 호출되는 경우 응용 프로그램은 일반적으로 일시 중지 상태입니다.
응용 프로그램은 일시 중지 상태에서도 타이머 또는 콜백과 같은
비동기 이벤트를 처리할 수 있습니다.
### platformRequest
```java
public final boolean platformRequest(String URL)
throws ConnectionNotFoundException
```
**Parameters:**
- `URL` - 플랫폼에서 로드할 URL. 공백 문자열(null 아님)은
보류 중인 요청을 취소합니다.
**Returns:**
- 내용을 가져오기 전에 먼저 MIDlet Suite를
종료해야 하는 경우 true
**Throws:**
- `ConnectionNotFoundException` - 플랫폼이 요청된 URL을 처리할 수 없는 경우
**Since:**
- MIDP 2.0
### checkPermission
```java
public final int checkPermission(String permission)
```
**Parameters:**
- `permission` - 거부, 허용 또는 알 수 없음인지 확인
**Returns:**
- 권한이 거부되면 0, 권한이 허용되면 1,
알려지지 않은 상태이면 -1
**Since:**
- MIDP 2.0
---
title: "Class MIDletStateChangeException"
---
`package javax.microedition.midlet`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--javax.microedition.midlet.MIDletStateChangeException
```
## 설명
**extends Exception:**
요청된 `MIDlet` 상태 변경 신호가 실패했습니다.
이 예외는 `MIDlet` 인터페이스를 통한 응용 프로그램으로의
상태 변경 호출에 대한 응답으로
`MIDlet`에 의해 발생합니다.
**Since:**
- MIDP 1.0
**See Also:**
- ``MIDlet``
## 생성자 요약
- MIDletStateChangeException () 세부 정보 메시지를 지정하지 않고 예외를 구성합니다.
- MIDletStateChangeException ( String s) 세부 정보 메시지를 지정하여 예외를 구성합니다.
## 생성자 상세
### MIDletStateChangeException
```java
public MIDletStateChangeException()
```
- 세부 정보 메시지를 지정하지 않고 예외를 구성합니다.
### MIDletStateChangeException
```java
public MIDletStateChangeException(String s)
```
- 세부 정보 메시지를 지정하여 예외를 구성합니다.
**Parameters:**
- `s` - 세부 정보 메시지
---
title: "package javax.microedition.midlet"
---
**See:**
**Description**
## Class Summary
- [MIDlet](MIDlet.md) — MIDlet 은 MID 프로필 응용 프로그램입니다.
## Exception Summary
- [MIDletStateChangeException](MIDletStateChangeException.md) — 요청된 MIDlet 상태 변경 신호가 실패했습니다.
---
title: "Interface Certificate"
---
`package javax.microedition.pki`
```text
public String getSubject()
```
## 설명
**Returns:**
- 이 `Certificate`의 제목.
이 값은 `null`일 수 없습니다.
### getIssuer
**Returns:**
- 이 `Certificate`의 발행인.
이 값은 `null`일 수 없습니다.
### getType
**Returns:**
- `Certificate`의 유형.
이 값은 `null`일 수 없습니다.
### getVersion
**Returns:**
- `Certificate`의 버전 번호.
이 값은 `null`일 수 없습니다.
### getSigAlgName
**Returns:**
- 서명 알고리즘 이름.
이 값은 `null`일 수 없습니다.
### getNotBefore
**Returns:**
- `Certificate`를 사용할 수 있는
밀리초 단위의 시작 시간.
반드시 양수여야 합니다.
인증서의 유효성에 시간적인 제한이 없을 경우 `0`이 반환됩니다.
### getNotAfter
**Returns:**
- `Certificate`를 사용할 수 있는
밀리초 단위의 끝 시간(만료 날짜).
반드시 양수여야 합니다.
인증서의 유효성에 시간적인 제한이 없을 경우
`Long.MAX_VALUE`가 반환됩니다.
### getSerialNumber
**Returns:**
- 사용자에게 친숙한 형식의
일련 번호를 포함하는 문자열.
일련 번호가 없는 경우 `null`이 반환됩니다.
## 메서드 요약
- `String getIssuer ()` — 이 인증서 발행인의 이름을 가져옵니다.
- `long getNotAfter ()` — 유효 기간 중 Certificate 를 사용할 수 있는 끝 시간을 가져옵니다.
- `long getNotBefore ()` — 유효 기간 중 Certificate 를 사용할 수 있는 시작 시간을 가져옵니다.
- `String getSerialNumber ()` — 이 Certificate 의 인쇄 가능한 일련 번호 형식을 가져옵니다.
- `String getSigAlgName ()` — Certificate 서명에 사용된 알고리즘 이름을 가져옵니다.
- `String getSubject ()` — 이 인증서 제목의 이름을 가져옵니다.
- `String getType ()` — Certificate 의 유형을 가져옵니다.
- `String getVersion ()` — 이 Certificate 의 버전 번호를 가져옵니다.
## 메서드 상세
### getSubject
```java
public String getSubject()
```
**Returns:**
- 이 `Certificate`의 제목.
이 값은 `null`일 수 없습니다.
### getIssuer
```java
public String getIssuer()
```
**Returns:**
- 이 `Certificate`의 발행인.
이 값은 `null`일 수 없습니다.
### getType
```java
public String getType()
```
**Returns:**
- `Certificate`의 유형.
이 값은 `null`일 수 없습니다.
### getVersion
```java
public String getVersion()
```
**Returns:**
- `Certificate`의 버전 번호.
이 값은 `null`일 수 없습니다.
### getSigAlgName
```java
public String getSigAlgName()
```
**Returns:**
- 서명 알고리즘 이름.
이 값은 `null`일 수 없습니다.
### getNotBefore
```java
public long getNotBefore()
```
**Returns:**
- `Certificate`를 사용할 수 있는
밀리초 단위의 시작 시간.
반드시 양수여야 합니다.
인증서의 유효성에 시간적인 제한이 없을 경우 `0`이 반환됩니다.
### getNotAfter
```java
public long getNotAfter()
```
**Returns:**
- `Certificate`를 사용할 수 있는
밀리초 단위의 끝 시간(만료 날짜).
반드시 양수여야 합니다.
인증서의 유효성에 시간적인 제한이 없을 경우
`Long.MAX_VALUE`가 반환됩니다.
### getSerialNumber
```java
public String getSerialNumber()
```
**Returns:**
- 사용자에게 친숙한 형식의
일련 번호를 포함하는 문자열.
일련 번호가 없는 경우 `null`이 반환됩니다.
---
title: "Class CertificateException"
---
`package javax.microedition.pki`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.io.IOException
|
+--javax.microedition.pki.CertificateException
```
## 설명
**extends IOException:**
`CertificateException`은
`Certificate`가 사용되는 중 발생한 오류를 캡슐화합니다.
`Certificate`에서 여러 개의 오류가 발견되면 더 심각한 오류가
예외로 보고됩니다.
**Since:**
- MIDP 2.0
## 필드 요약
- `static byte BAD_EXTENSIONS` — 인증서에 알 수 없는 중요 확장이 있음을 표시합니다.
- `static byte BROKEN_CHAIN` — 체인 내의 인증서를 체인의 다음 기관이 발행하지 않았음을 표시합니다.
- `static byte CERTIFICATE_CHAIN_TOO_LONG` — 서버 인증서 체인이 발행자 정책에서 허용하는 길이를 초과했음을 표시합니다.
- `static byte EXPIRED` — 인증서가 만료되었음을 표시합니다.
- `static byte INAPPROPRIATE_KEY_USAGE` — 발행자가 인증서 공용 키에 부적절하다고 판단되는 방법을 사용했음을 표시합니다.
- `static byte MISSING_SIGNATURE` — 인증서 객체에 서명이 없음을 표시합니다.
- `static byte NOT_YET_VALID` — 인증서가 아직 유효하지 않음을 표시합니다.
- `static byte ROOT_CA_EXPIRED` — 루트 CA의 공용 키가 만료되었음을 표시합니다.
- `static byte SITENAME_MISMATCH` — 인증서에 올바른 사이트 이름이 없음을 표시합니다.
- `static byte UNAUTHORIZED_INTERMEDIATE_CA` — 체인의 중간 인증서에 중간 CA가 될 권한이 없음을 표시합니다.
- `static byte UNRECOGNIZED_ISSUER` — 인증서가 알 수 없는 엔티티에 의해 발행되었음을 표시합니다.
- `static byte UNSUPPORTED_PUBLIC_KEY_TYPE` — 인증서의 공용 키 유형이 장치에서 지원되지 않음을 표시합니다.
- `static byte UNSUPPORTED_SIGALG` — 인증서가 지원되지 않는 알고리즘을 사용하여 서명되었음을 표시합니다.
- `static byte VERIFICATION_FAILED` — 인증서 확인에 실패했음을 표시합니다.
## 생성자 요약
- CertificateException ( Certificate certificate,
byte status) Certificate 및 구체적인 오류 이유를 사용하여
새 예외를 작성합니다.
- CertificateException ( String message, Certificate certificate,
byte status) 메시지, Certificate 및 구체적인 오류 이유를 사용하여
새 예외를 작성합니다.
## 메서드 요약
- `Certificate getCertificate ()` — 예외가 발생한 Certificate 를 가져옵니다.
- `byte getReason ()` — 이유 코드를 가져옵니다.
## 필드 상세
### BAD_EXTENSIONS
```java
public static final byte BAD_EXTENSIONS
```
**See Also:**
- `Constant Field Values`
### CERTIFICATE_CHAIN_TOO_LONG
```java
public static final byte CERTIFICATE_CHAIN_TOO_LONG
```
**See Also:**
- `Constant Field Values`
### EXPIRED
```java
public static final byte EXPIRED
```
**See Also:**
- `Constant Field Values`
### UNAUTHORIZED_INTERMEDIATE_CA
```java
public static final byte UNAUTHORIZED_INTERMEDIATE_CA
```
**See Also:**
- `Constant Field Values`
### MISSING_SIGNATURE
```java
public static final byte MISSING_SIGNATURE
```
**See Also:**
- `Constant Field Values`
### NOT_YET_VALID
```java
public static final byte NOT_YET_VALID
```
**See Also:**
- `Constant Field Values`
### SITENAME_MISMATCH
```java
public static final byte SITENAME_MISMATCH
```
**See Also:**
- `Constant Field Values`
### UNRECOGNIZED_ISSUER
```java
public static final byte UNRECOGNIZED_ISSUER
```
**See Also:**
- `Constant Field Values`
### UNSUPPORTED_SIGALG
```java
public static final byte UNSUPPORTED_SIGALG
```
**See Also:**
- `Constant Field Values`
### INAPPROPRIATE_KEY_USAGE
```java
public static final byte INAPPROPRIATE_KEY_USAGE
```
**See Also:**
- `Constant Field Values`
### BROKEN_CHAIN
```java
public static final byte BROKEN_CHAIN
```
**See Also:**
- `Constant Field Values`
### ROOT_CA_EXPIRED
```java
public static final byte ROOT_CA_EXPIRED
```
**See Also:**
- `Constant Field Values`
### UNSUPPORTED_PUBLIC_KEY_TYPE
```java
public static final byte UNSUPPORTED_PUBLIC_KEY_TYPE
```
**See Also:**
- `Constant Field Values`
### VERIFICATION_FAILED
```java
public static final byte VERIFICATION_FAILED
```
**See Also:**
- `Constant Field Values`
### CertificateException
```java
public CertificateException(Certificate certificate,
byte status)
```
- `Certificate` 및 구체적인 오류 이유를 사용하여
새 예외를 작성합니다.
오류 이유에 따라 새 예외에 대한
설명 메시지가 자동으로 제공됩니다.
**Parameters:**
- `status` - 예외 이유. 상태는 BAD_EXTENSIONS 및
VERIFICATION_FAILED 내에 있어야 합니다.
### CertificateException
```java
public CertificateException(String message,
Certificate certificate,
byte status)
```
- 메시지, `Certificate` 및 구체적인 오류 이유를 사용하여
새 예외를 작성합니다.
**Parameters:**
- `status` - 예외 이유.
상태는 BAD_EXTENSIONS 및
VERIFICATION_FAILED 내에 있어야 합니다.
### getCertificate
```java
public Certificate getCertificate()
```
**Returns:**
- 오류가 있는 `Certificate`
### getReason
```java
public byte getReason()
```
**Returns:**
- 이유 코드
## 생성자 상세
### CertificateException
```java
public CertificateException(Certificate certificate,
byte status)
```
- `Certificate` 및 구체적인 오류 이유를 사용하여
새 예외를 작성합니다.
오류 이유에 따라 새 예외에 대한
설명 메시지가 자동으로 제공됩니다.
**Parameters:**
- `status` - 예외 이유. 상태는 BAD_EXTENSIONS 및
VERIFICATION_FAILED 내에 있어야 합니다.
### CertificateException
```java
public CertificateException(String message,
Certificate certificate,
byte status)
```
- 메시지, `Certificate` 및 구체적인 오류 이유를 사용하여
새 예외를 작성합니다.
**Parameters:**
- `status` - 예외 이유.
상태는 BAD_EXTENSIONS 및
VERIFICATION_FAILED 내에 있어야 합니다.
### getCertificate
```java
public Certificate getCertificate()
```
**Returns:**
- 오류가 있는 `Certificate`
### getReason
```java
public byte getReason()
```
**Returns:**
- 이유 코드
## 메서드 상세
### getCertificate
```java
public Certificate getCertificate()
```
**Returns:**
- 오류가 있는 `Certificate`
### getReason
```java
public byte getReason()
```
**Returns:**
- 이유 코드
---
title: "package javax.microedition.pki"
---
**See:**
**Description**
## Interface Summary
- [Certificate](Certificate.md) — 인증용 공용 인터페이스.
## Exception Summary
- [CertificateException](CertificateException.md) — CertificateException 은 Certificate 가 사용되는 중 발생한 오류를 캡슐화합니다.
---
title: "Class InvalidRecordIDException"
---
`package javax.microedition.rms`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--javax.microedition.rms.RecordStoreException
|
+--javax.microedition.rms.InvalidRecordIDException
```
## 설명
**extends RecordStoreException:**
레코드 ID가 유효하지 않아 작업이 완료될 수 없음을
표시하기 위해 발생합니다.
**Since:**
- MIDP 1.0
## 생성자 요약
- InvalidRecordIDException () 세부 정보 메시지 없이 새 InvalidRecordIDException 을 구성합니다.
- InvalidRecordIDException ( String message) 지정된 세부 정보 메시지로 새 InvalidRecordIDException 을 구성합니다.
## 생성자 상세
### InvalidRecordIDException
```java
public InvalidRecordIDException(String message)
```
- 지정된 세부 정보 메시지로 새
`InvalidRecordIDException`을 구성합니다.
**Parameters:**
- `message` - 세부 정보 메시지
### InvalidRecordIDException
```java
public InvalidRecordIDException()
```
- 세부 정보 메시지 없이 새
`InvalidRecordIDException`을 구성합니다.
---
title: "Interface RecordComparator"
---
`package javax.microedition.rms`
```text
RecordComparator c = new AddressRecordComparator();
if (c.compare(recordStore.getRecord(rec1), recordStore.getRecord(rec2))
== RecordComparator.PRECEDES)
return rec1;
```
## 설명
**Since:**
- MIDP 1.0
## 필드 요약
- `static int EQUIVALENT` — EQUIVALENT는 검색 또는 정렬 순서 관점에서 두 레코드가 동일하다는 것을 의미합니다.
- `static int FOLLOWS` — FOLLOWS는 검색 또는 정렬 순서 관점에서 왼쪽(첫 번째 매개 변수) 레코드가 오른쪽(두 번째 매개 변수) 레코드 뒤에 옴 을 의미합니다.
- `static int PRECEDES` — RECEDES는 검색 또는 정렬 순서 관점에서 왼쪽(첫 번째 매개 변수) 레코드가 오른쪽(두 번째 매개 변수) 레코드 앞에 옴 을 의미합니다.
## 메서드 요약
- `int compare (byte[] rec1, byte[] rec2)` — 정렬 순서상 rec1이 rec2 앞에 오면 RecordComparator.PRECEDES , 정렬 순서상 rec1이 rec2 뒤에 오면 RecordComparator.FOLLOWS , 정렬 순서상 rec1이 rec2와 동등하면 RecordComparator.EQUIVALENT 가 반환됩니다.
## 필드 상세
### EQUIVALENT
```java
public static final int EQUIVALENT
```
**See Also:**
- `Constant Field Values`
### FOLLOWS
```java
public static final int FOLLOWS
```
**See Also:**
- `Constant Field Values`
### PRECEDES
```java
public static final int PRECEDES
```
**See Also:**
- `Constant Field Values`
### compare
```java
public int compare(byte[] rec1,
byte[] rec2)
```
**Parameters:**
- `rec2` - 비교에 사용할 두 번째 레코드 메소드 내에서
응용 프로그램은 이 매개 변수를
읽기 전용으로 처리해야 합니다.
**Returns:**
- 정렬 순서상 rec1이 rec2 앞에 오면
`RecordComparator.PRECEDES`,
정렬 순서상 rec1이 rec2 뒤에 오면
`RecordComparator.FOLLOWS`,
정렬 순서상 rec1이 rec2와 동등하면
`RecordComparator.EQUIVALENT`
## 메서드 상세
### compare
```java
public int compare(byte[] rec1,
byte[] rec2)
```
**Parameters:**
- `rec2` - 비교에 사용할 두 번째 레코드 메소드 내에서
응용 프로그램은 이 매개 변수를
읽기 전용으로 처리해야 합니다.
**Returns:**
- 정렬 순서상 rec1이 rec2 앞에 오면
`RecordComparator.PRECEDES`,
정렬 순서상 rec1이 rec2 뒤에 오면
`RecordComparator.FOLLOWS`,
정렬 순서상 rec1이 rec2와 동등하면
`RecordComparator.EQUIVALENT`
---
title: "Interface RecordEnumeration"
---
`package javax.microedition.rms`
```text
public int numRecords()
```
## 설명
**Returns:**
- 이 열거 세트에서 사용 가능한 레코드 수.
즉, 필터 기준과 일치하는 레코드 수가
반환됩니다.
### nextRecord
**Returns:**
- 이 열거의 다음 레코드
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
### nextRecordId
**Returns:**
- 이 열거에 있는 다음 레코드의 recordId
**Throws:**
- `InvalidRecordIDException` - 사용할 수 있는
레코드가 없는 경우, `reset()`을 호출하여
열거를 재설정할 때까지 메소드의
후속 호출 시
계속 이 예외가 발생합니다.
### previousRecord
**Returns:**
- 이 열거의 이전 레코드
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
### previousRecordId
**Returns:**
- 이 열거에 있는 이전 레코드의 recordId
**Throws:**
- `InvalidRecordIDException` - 사용할 수 있는
레코드가 없는 경우,
`reset()`을 호출하여
열거를 재설정할 때까지 메소드의 후속 호출 시
계속 이 예외가 발생합니다.
### hasNextElement
**Returns:**
- *다음* 방향에 요소가
더 많으면 true
### hasPreviousElement
**Returns:**
- *이전* 방향에 요소가
더 많으면 true
### reset
열거가 작성된 직후와 동일한 상태로
열거 색인을 반환합니다.
### rebuild
**See Also:**
- ``keepUpdated(boolean)``
### keepUpdated
**Parameters:**
- `keepUpdated` - true인 경우 열거자는
레코드 저장소의 레코드가 변경되면
열거를 최신 상태로 유지합니다.
성능 문제가 발생할 가능성이 있으므로 주의해서 사용합니다.
`keepUpdated(true)`를 호출하면
현재 레코드 세트를 반영하기 위해 열거가 갱신된다는 면에서
`RecordEnumeration.rebuild`를 호출하는 것과
동일한 효과를 갖습니다.
false인 경우 열거는 최신 상태로 유지되지 않으며
삭제된 레코드의 레코드 ID를 반환하거나
나중에 추가된 레코드를 누락시킬 수 있습니다.
열거가 만들어진 후 수정된 순서와
상관 없이 레코드를 반환할 수도 있습니다.
레코드 저장소의 레코드에 대한 변경 내용은
나중에 레코드를 직접 검색하거나
열거를 통해 검색할 때 정확하게 반영됩니다.
이 매개 변수를 false로 설정할 때
주의해야 할 점은 레코드가 수정,
추가 또는 삭제될 때 열거의 필터링 및 정렬 순서입니다.
**See Also:**
- ``rebuild()``
### isKeptUpdated
**Returns:**
- 레코드의 변경과 함께 열거를
최신 상태로 유지하는 경우 true
### destroy
이 RecordEnumeration에서 사용하는 내부 자원을 해제합니다.
MIDlet이 RecordEnumeration을 사용하여 수행한 경우
이 메소드를 호출해야 합니다.
MIDlet이 RecordEnumeration이 호출된 다음에
이 메소드를 사용하려고 하면 IllegalStateException 이
발생합니다. 더 이상 이 열거가 필요하지 않은 경우
즉각적인 자원 요구 사항을 최소화하기 위해
이 메소드가 수동으로 사용됩니다.
## 메서드 요약
- `void destroy ()` — 이 RecordEnumeration에서 사용하는 내부 자원을 해제합니다.
- `boolean hasNextElement ()` — 다음 방향에 요소가 더 많으면 true를 반환합니다.
- `boolean hasPreviousElement ()` — 이전 방향에 요소가 더 많으면 true를 반환합니다.
- `boolean isKeptUpdated ()` — 레코드의 변경과 함께 열거를 최신 상태로 유지하는 경우 true를 반환합니다.
- `void keepUpdated (boolean keepUpdated)` — 레코드 저장소의 레코드가 추가/삭제/변경됨에 따라 열거의 내부 색인을 최신 상태로 유지할 수 있는지 여부를 설정할 때 사용됩니다.
- `byte[] nextRecord ()` — 열거의 다음 레코드 사본을 반환합니다.
- `int nextRecordId ()` — 이 열거에 있는 다음 레코드의 recordId를 반환합니다.
- `int numRecords ()` — 이 열거 세트에서 사용 가능한 레코드 수를 반환합니다.
- `byte[] previousRecord ()` — 이 열거의 이전 레코드 사본을 반환합니다.
- `int previousRecordId ()` — 이 열거에 있는 이전 레코드의 recordId를 반환합니다.
- `void rebuild ()` — 현재 레코드 세트를 반영하기 위해 열거를 갱신하도록 요청합니다.
- `void reset ()` — 열거가 작성된 직후와 동일한 상태로 열거 색인을 반환합니다.
## 메서드 상세
### numRecords
```java
public int numRecords()
```
**Returns:**
- 이 열거 세트에서 사용 가능한 레코드 수.
즉, 필터 기준과 일치하는 레코드 수가
반환됩니다.
### nextRecord
```java
public byte[] nextRecord()
throws InvalidRecordIDException,
RecordStoreNotOpenException,
RecordStoreException
```
**Returns:**
- 이 열거의 다음 레코드
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
### nextRecordId
```java
public int nextRecordId()
throws InvalidRecordIDException
```
**Returns:**
- 이 열거에 있는 다음 레코드의 recordId
**Throws:**
- `InvalidRecordIDException` - 사용할 수 있는
레코드가 없는 경우, `reset()`을 호출하여
열거를 재설정할 때까지 메소드의
후속 호출 시
계속 이 예외가 발생합니다.
### previousRecord
```java
public byte[] previousRecord()
throws InvalidRecordIDException,
RecordStoreNotOpenException,
RecordStoreException
```
**Returns:**
- 이 열거의 이전 레코드
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
### previousRecordId
```java
public int previousRecordId()
throws InvalidRecordIDException
```
**Returns:**
- 이 열거에 있는 이전 레코드의 recordId
**Throws:**
- `InvalidRecordIDException` - 사용할 수 있는
레코드가 없는 경우,
`reset()`을 호출하여
열거를 재설정할 때까지 메소드의 후속 호출 시
계속 이 예외가 발생합니다.
### hasNextElement
```java
public boolean hasNextElement()
```
**Returns:**
- *다음* 방향에 요소가
더 많으면 true
### hasPreviousElement
```java
public boolean hasPreviousElement()
```
**Returns:**
- *이전* 방향에 요소가
더 많으면 true
### reset
```java
public void reset()
```
열거가 작성된 직후와 동일한 상태로
열거 색인을 반환합니다.
### rebuild
```java
public void rebuild()
```
**See Also:**
- ``keepUpdated(boolean)``
### keepUpdated
```java
public void keepUpdated(boolean keepUpdated)
```
**Parameters:**
- `keepUpdated` - true인 경우 열거자는
레코드 저장소의 레코드가 변경되면
열거를 최신 상태로 유지합니다.
성능 문제가 발생할 가능성이 있으므로 주의해서 사용합니다.
`keepUpdated(true)`를 호출하면
현재 레코드 세트를 반영하기 위해 열거가 갱신된다는 면에서
`RecordEnumeration.rebuild`를 호출하는 것과
동일한 효과를 갖습니다.
false인 경우 열거는 최신 상태로 유지되지 않으며
삭제된 레코드의 레코드 ID를 반환하거나
나중에 추가된 레코드를 누락시킬 수 있습니다.
열거가 만들어진 후 수정된 순서와
상관 없이 레코드를 반환할 수도 있습니다.
레코드 저장소의 레코드에 대한 변경 내용은
나중에 레코드를 직접 검색하거나
열거를 통해 검색할 때 정확하게 반영됩니다.
이 매개 변수를 false로 설정할 때
주의해야 할 점은 레코드가 수정,
추가 또는 삭제될 때 열거의 필터링 및 정렬 순서입니다.
**See Also:**
- ``rebuild()``
### isKeptUpdated
```java
public boolean isKeptUpdated()
```
**Returns:**
- 레코드의 변경과 함께 열거를
최신 상태로 유지하는 경우 true
### destroy
```java
public void destroy()
```
이 RecordEnumeration에서 사용하는 내부 자원을 해제합니다.
MIDlet이 RecordEnumeration을 사용하여 수행한 경우
이 메소드를 호출해야 합니다.
MIDlet이 RecordEnumeration이 호출된 다음에
이 메소드를 사용하려고 하면 IllegalStateException 이
발생합니다. 더 이상 이 열거가 필요하지 않은 경우
즉각적인 자원 요구 사항을 최소화하기 위해
이 메소드가 수동으로 사용됩니다.
---
title: "Interface RecordFilter"
---
`package javax.microedition.rms`
```text
RecordFilter f = new DateRecordFilter(); // class implements RecordFilter
if (f.matches(recordStore.getRecord(theRecordID)) == true)
DoSomethingUseful(theRecordID);
```
## 설명
**Since:**
- MIDP 1.0
## 메서드 요약
- `boolean matches (byte[] candidate)` — 후보가 구현된 기준에 일치하면 true를 반환합니다.
## 메서드 상세
### matches
```java
public boolean matches(byte[] candidate)
```
**Parameters:**
- `candidate` - 고려할 레코드.
메소드 내에서 응용 프로그램은
이 매개 변수를 읽기 전용으로 처리해야 합니다.
**Returns:**
- 후보가 구현된 기준에 일치하면 true
---
title: "Interface RecordListener"
---
`package javax.microedition.rms`
```text
public void recordAdded(RecordStore recordStore,
int recordId)
```
## 설명
**Parameters:**
- `recordId` - 추가된 레코드의 recordId
### recordChanged
**Parameters:**
- `recordId` - 변경된 레코드의 recordId
### recordDeleted
**Parameters:**
- `recordId` - 삭제된 레코드의 recordId
## 메서드 요약
- `void recordAdded ( RecordStore recordStore, int recordId)` — 레코드가 레코드 저장소에 추가되었을 때 호출됩니다.
- `void recordChanged ( RecordStore recordStore, int recordId)` — 레코드 저장소의 레코드가 변경된 후 호출됩니다.
- `void recordDeleted ( RecordStore recordStore, int recordId)` — 레코드가 레코드 저장소에서 삭제된 후 호출됩니다.
## 메서드 상세
### recordAdded
```java
public void recordAdded(RecordStore recordStore,
int recordId)
```
**Parameters:**
- `recordId` - 추가된 레코드의 recordId
### recordChanged
```java
public void recordChanged(RecordStore recordStore,
int recordId)
```
**Parameters:**
- `recordId` - 변경된 레코드의 recordId
### recordDeleted
```java
public void recordDeleted(RecordStore recordStore,
int recordId)
```
**Parameters:**
- `recordId` - 삭제된 레코드의 recordId
---
title: "Class RecordStore"
---
`package javax.microedition.rms`
```text
java.lang.Object
|
+--javax.microedition.rms.RecordStore
```
## 설명
**extends Object:**
레코드 저장소를 나타내는 클래스.
레코드 저장소는 MIDlet을 여러 번 호출하는 경우에도
영구적으로 남아 있는 레코드의 모음으로 구성되어 있습니다.
플랫폼에서는 재부트, 배터리 변경 등을 포함하는
플랫폼의 정상적 사용에 대해 MIDlet 레코드 저장소의 무결성을
최대한 유지할 수 있도록 해야 합니다.
레코드 저장소는 플랫폼에 따라 다른 위치에 만들어지며
이러한 위치는 MIDlet에 제공되지 않습니다.
레코드 저장소의 이름 지정 공간은 MIDlet Suite 단위로 제어됩니다.
MIDlet Suite 내 MIDlet은 이름만 다르게 지정하면
여러 레코드 저장소를 만들 수 있습니다.
MIDlet Suite가 플랫폼에서 제거되면 해당 MIDlet에 연관된
모든 레코드 저장소도 제거됩니다.
MIDlet Suite 내의 MIDlet은 서로 다른 레코드 저장소에
직접 액세스할 수 있습니다. RecordStore를 만드는 MIDlet이 이러한 권한을
제공하도록 선택하면 MIDP 2.0의 새 API가 레코드 저장소를 명시적으로 공유할 수 있습니다.
공유는 다른 MIDlet Suite가 만든 RecordStore를 지정하는 기능을
사용하여 수행됩니다.
RecordStore는 MIDlet Suite의 고유 이름과
RecordStore의 이름을 사용하여 고유하게 지정됩니다.
응용 프로그램 설명자의 MIDlet-Vendor 및 MIDlet-Name 속성이
MIDlet Suite를 식별합니다.
공유할 RecordStore를 만들 때 액세스 컨트롤이 정의됩니다.
액세스 컨트롤은 RecordStore를 열 때 적용됩니다.
액세스 모드는 다른 MIDlet Suite와 공유할 수 있거나
개인 사용을 허용합니다.
레코드 저장소 이름은 대소문자를 구분하고
최대 32자의 유니코드 문자 조합으로 구성될 수 있습니다.
레코드 저장소 이름은 주어진 MIDlet Suite 범위 내에서 고유해야 합니다.
즉, 하나의 MIDlet Suite에 있는 여러 MIDlet은 동일한 이름을 갖는
레코드 저장소를 둘 이상 만들 수 없지만,
하나의 MIDlet Suite에 있는 하나의 MIDlet은
다른 MIDlet Suite의 MIDlet과 동일한 이름을 갖는
레코드 저장소를 가질 수 있습니다.
이럴 경우에도 레코드 저장소는 여전히 고유하고 구분되어 있습니다.
이 API에는 잠금 작업이 제공되지 않습니다.
레코드 저장소 구현 시 모든 개별 레코드 저장소 작업이 최소 단위이고
동기적이며 일련화되어 있는지 확인하여
다중 액세스로 손상이 발생하지 않도록 합니다.
하지만 MIDlet이 다중 스레드를 사용하여 레코드 저장소를 액세스하면
MIDlet에서 이 액세스를 조정해야 하며,
그렇지 않은 경우 예상치 못한 결과가 발생할 수 있습니다.
마찬가지로, 플랫폼이 레코드 저장소의 투명한 동기화를 수행하면
해당 플랫폼에서 MIDlet과 동기화 엔진 사이의 레코드 저장소에 대한
배타적 액세스를 적용해야 합니다.
레코드는 주어진 레코드 저장소 내에서 정수 값인
recordId로 고유하게 식별됩니다.
이 recordId는 레코드의 기본 키로 사용됩니다.
레코드 저장소에서 만든 첫 번째 레코드의 recordId는 1입니다.
RecordStore에 추가되는 이후 레코드에는 전에 추가된 레코드에 비해
1만큼 큰 recordId가 할당됩니다.
즉, 두 개의 레코드가 레코드 저장소에 추가되는 경우
첫 번째 레코드의 recordId가 'n'이면 다음 레코드의 recordId는 'n + 1'이 됩니다.
MIDlet은 `RecordEnumeration` 클래스를 사용하여
RecordStore에 다른 순서의 레코드를 만들 수 있습니다.
이 레코드 저장소는 시간/날짜 스탬프에 대해
System.currentTimeMillis()에서 사용하는 형식의 long형 정수를 사용합니다.
레코드 저장소는 수정된 마지막 시간을 타임 스탬프로 사용합니다.
레코드 저장소는 RecordStore의 내용을 수정할 때마다 증가하는 정수인
*버전* 번호를 유지합니다.
이러한 특성은 동기화 엔진뿐 아니라
다른 응용 프로그램에도 유용합니다.
**Since:**
- MIDP 1.0
## 필드 요약
- `static int AUTHMODE_ANY` — MIDlet Suite에 대한 액세스를 허용하는 인증.
- `static int AUTHMODE_PRIVATE` — 현재 MIDlet Suite에만 액세스를 허용하는 인증.
## 메서드 요약
- `int addRecord (byte[] data, int offset, int numBytes)` — 레코드 저장소에 새 레코드를 추가합니다.
- `void addRecordListener ( RecordListener listener)` — 지정된 RecordListener를 추가합니다.
- `void closeRecordStore ()` — 레코드 저장소를 갖는 MIDlet 요청이 닫힐 때 이 메소드가 호출됩니다.
- `void deleteRecord (int recordId)` — 레코드가 레코드 저장소에서 삭제됩니다.
- `static void deleteRecordStore ( String recordStoreName)` — 명명된 레코드 저장소를 삭제합니다.
- `RecordEnumeration enumerateRecords ( RecordFilter filter, RecordComparator comparator, boolean keepUpdated)` — 선택적으로 지정된 순서로 레코드 저장소의 레코드 집합을 순회하는 열거를 반환합니다.
- `long getLastModified ()` — 레코드 저장소가 수정된 마지막 시간을 System.currentTimeMillis()에서 사용하는 형식으로 반환합니다.
- `String getName ()` — 이 RecordStore의 이름을 반환합니다.
- `int getNextRecordID ()` — 레코드 저장소에 추가될 다음 레코드의 recordId를 반환합니다.
- `int getNumRecords ()` — 레코드 저장소의 현재 레코드 수를 반환합니다.
- `byte[] getRecord (int recordId)` — 주어진 레코드에 저장된 데이터의 복사본을 반환합니다.
- `int getRecord (int recordId, byte[] buffer, int offset)` — 주어진 레코드에 저장된 데이터를 반환합니다.
- `int getRecordSize (int recordId)` — 주어진 레코드에서 사용할 수 있는 MIDlet 데이터의 크기(바이트)를 반환합니다.
- `int getSize ()` — 레코드 저장소가 차지하고 있는 바이트 단위의 공간 크기를 반환합니다.
- `int getSizeAvailable ()` — 레코드 저장소 증가에 사용할 수 있는 추가 공간(바이트)의 양을 반환합니다.
- `int getVersion ()` — addRecord , setRecord 또는 deleteRecord 메소드가 레코드 저장소를 수정할 때마다 버전 이 증가합니다.
- `static String [] listRecordStores ()` — MIDlet Suite가 소유한 레코드 저장소의 이름 배열을 반환합니다.
- `static RecordStore openRecordStore ( String recordStoreName, boolean createIfNecessary)` — 주어진 MIDlet Suite에 연관된 레코드 저장소를 엽니다(또는 만듭니다).
- `static RecordStore openRecordStore ( String recordStoreName, boolean createIfNecessary, int authmode, boolean writable)` — 다른 MIDlet Suite와 공유할 수 있는 레코드 저장소를 엽니다(또는 만듭니다).
- `static RecordStore openRecordStore ( String recordStoreName, String vendorName, String suiteName)` — 명명된 MIDlet Suite에 연관된 레코드 저장소를 엽니다.
- `void removeRecordListener ( RecordListener listener)` — 지정된 RecordListener를 제거합니다.
- `void setMode (int authmode, boolean writable)` — 이 RecordStore의 액세스 모드를 변경합니다.
- `void setRecord (int recordId, byte[] newData, int offset, int numBytes)` — 전달된 레코드에 데이터를 설정합니다.
## 필드 상세
### AUTHMODE_PRIVATE
```java
public static final int AUTHMODE_PRIVATE
```
**See Also:**
- `Constant Field Values`
### AUTHMODE_ANY
```java
public static final int AUTHMODE_ANY
```
**See Also:**
- `Constant Field Values`
### deleteRecordStore
```java
public static void deleteRecordStore(String recordStoreName)
throws RecordStoreException,
RecordStoreNotFoundException
```
**Parameters:**
- `recordStoreName` - 삭제할 MIDlet Suite
고유 레코드 저장소
**Throws:**
- `RecordStoreNotFoundException` - 레코드 저장소를
찾을 수 없는 경우
### openRecordStore
```java
public static RecordStore openRecordStore(String recordStoreName,
boolean createIfNecessary)
throws RecordStoreException,
RecordStoreFullException,
RecordStoreNotFoundException
```
**Parameters:**
- `createIfNecessary` - true인 경우 필요하면
레코드 저장소를 만듭니다.
**Returns:**
- 레코드 저장소의 `RecordStore` 객체
**Throws:**
- `IllegalArgumentException` - recordStoreName이
유효하지 않은 경우
### openRecordStore
```java
public static RecordStore openRecordStore(String recordStoreName,
boolean createIfNecessary,
int authmode,
boolean writable)
throws RecordStoreException,
RecordStoreFullException,
RecordStoreNotFoundException
```
**Parameters:**
- `writable` - 액세스를 부여할 수 있는
다른 MIDlet Suite에서 RecordStore를 쓸 수 있으면 true.
RecordStore가 존재하면 이 인자는 무시됩니다.
**Returns:**
- 레코드 저장소의 `RecordStore` 객체
**Throws:**
- `IllegalArgumentException` - authmode 또는
recordStoreName이 유효하지 않은 경우
**Since:**
- MIDP 2.0
### openRecordStore
```java
public static RecordStore openRecordStore(String recordStoreName,
String vendorName,
String suiteName)
throws RecordStoreException,
RecordStoreNotFoundException
```
**Parameters:**
- `suiteName` - MIDlet Suite의 이름
**Returns:**
- 레코드 저장소의 `RecordStore` 객체
**Throws:**
- `IllegalArgumentException` - recordStoreName이
유효하지 않은 경우
**Since:**
- MIDP 2.0
### setMode
```java
public void setMode(int authmode,
boolean writable)
throws RecordStoreException
```
**Parameters:**
- `writable` - 액세스를 부여할 수 있는 다른 MIDlet Suite에서
RecordStore를 쓸 수 있으면 true
**Throws:**
- `IllegalArgumentException` - authmode가 유효하지 않은 경우
**Since:**
- MIDP 2.0
### closeRecordStore
```java
public void closeRecordStore()
throws RecordStoreNotOpenException,
RecordStoreException
```
**Throws:**
- `RecordStoreException` - 다른 레코드 저장소 관련
예외가 발생한 경우
### listRecordStores
```java
public static String[] listRecordStores()
```
**Returns:**
- MIDlet Suite가 소유한 레코드 저장소의 이름 배열.
MIDlet Suite에 레코드 저장소가 없는 경우
이 함수는 null을 반환합니다.
### getName
```java
public String getName()
throws RecordStoreNotOpenException
```
**Returns:**
- 이 RecordStore의 이름
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가 열려 있지 않은 경우
### getVersion
```java
public int getVersion()
throws RecordStoreNotOpenException
```
**Returns:**
- 현재 레코드 저장소 버전
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getNumRecords
```java
public int getNumRecords()
throws RecordStoreNotOpenException
```
**Returns:**
- 레코드 저장소의 현재 레코드 수
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getSize
```java
public int getSize()
throws RecordStoreNotOpenException
```
**Returns:**
- 바이트 단위의 레코드 저장소 크기
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getSizeAvailable
```java
public int getSizeAvailable()
throws RecordStoreNotOpenException
```
**Returns:**
- 이 레코드 저장소의 증가에 사용할 수 있는
추가 공간의 양(바이트)
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getLastModified
```java
public long getLastModified()
throws RecordStoreNotOpenException
```
**Returns:**
- System.currentTimeMillis()에서 사용하는 형식의
레코드 저장소가 수정된 마지막 시간
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### addRecordListener
```java
public void addRecordListener(RecordListener listener)
```
**Parameters:**
- `listener` - RecordChangedListener
**See Also:**
- ``removeRecordListener(javax.microedition.rms.RecordListener)``
### removeRecordListener
```java
public void removeRecordListener(RecordListener listener)
```
**Parameters:**
- `listener` - RecordChangedListener
**See Also:**
- ``addRecordListener(javax.microedition.rms.RecordListener)``
### getNextRecordID
```java
public int getNextRecordID()
throws RecordStoreNotOpenException,
RecordStoreException
```
**Returns:**
- 레코드 저장소에 추가될 다음 레코드의
recordId
**Throws:**
- `RecordStoreException` - 다른 레코드 저장소 관련
예외가 발생한 경우
### addRecord
```java
public int addRecord(byte[] data,
int offset,
int numBytes)
throws RecordStoreNotOpenException,
RecordStoreException,
RecordStoreFullException
```
**Parameters:**
- `numBytes` - 이 레코드에 사용할 데이터 버퍼의
바이트 수(0일 수 있음)
**Returns:**
- 새 레코드의 recordId
**Throws:**
- `SecurityException` - MIDlet에 RecordStore에 대한
읽기 전용 액세스가 있는 경우
### deleteRecord
```java
public void deleteRecord(int recordId)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `recordId` - 삭제할 레코드 ID
**Throws:**
- `SecurityException` - MIDlet에 RecordStore에 대한
읽기 전용 액세스가 있는 경우
### getRecordSize
```java
public int getRecordSize(int recordId)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `recordId` - 이 작업에서 사용할 레코드 ID
**Returns:**
- 주어진 레코드에서 사용할 수 있는
MIDlet 데이터의 크기(바이트)
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
### getRecord
```java
public int getRecord(int recordId,
byte[] buffer,
int offset)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `offset` - 복사를 시작할 버퍼의 색인
**Returns:**
- 색인 `offset`에서 시작하여 버퍼에
복사한 바이트 수
**Throws:**
- `ArrayIndexOutOfBoundsException` - 레코드가 제공된 버퍼보다
큰 경우
**See Also:**
- ``setRecord(int, byte[], int, int)``
### getRecord
```java
public byte[] getRecord(int recordId)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `recordId` - 이 작업에서 사용할 레코드 ID
**Returns:**
- 주어진 레코드에 저장된 데이터. 레코드에 데이터가 없는 경우
이 메소드는 null을 반환합니다.
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
**See Also:**
- ``setRecord(int, byte[], int, int)``
### setRecord
```java
public void setRecord(int recordId,
byte[] newData,
int offset,
int numBytes)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException,
RecordStoreFullException
```
**Parameters:**
- `numBytes` - 이 레코드에 사용할
데이터 버퍼의 바이트 수
**Throws:**
- `SecurityException` - MIDlet에 RecordStore에 대한
읽기 전용 액세스가 있는 경우
**See Also:**
- ``getRecord(int, byte[], int)``
### enumerateRecords
```java
public RecordEnumeration enumerateRecords(RecordFilter filter,
RecordComparator comparator,
boolean keepUpdated)
throws RecordStoreNotOpenException
```
**Parameters:**
- `keepUpdated` - true인 경우 열거자는
레코드 저장소 레코드의 변경 사항을
사용하여 열거를 최신 상태로 유지합니다.
성능 관련 문제가 생길 수 있으므로
주의해서 사용합니다.
false인 경우 열거는 최신 상태로 유지되지 않으며 삭제된 레코드의
레코드 ID를 반환하거나 나중에 추가된
레코드를 누락시킬 수 있습니다.
열거가 만들어진 후 수정된 순서와
상관 없이 레코드를 반환할 수도 있습니다.
레코드 저장소의 레코드에 대한 변경 내용은 나중에 레코드를
직접 검색하거나 열거를 통해
검색할 때 정확하게 반영됩니다.
이 매개 변수를 false로 설정할 때 주의해야 할 점은 레코드가
수정, 추가 또는 삭제될 때 열거의 필터링 및 정렬 순서입니다.
**Returns:**
- 선택적으로 지정된 순서로 레코드
저장소의 레코드 집합을 순회하는 열거
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
**See Also:**
- ``RecordEnumeration.rebuild()``
## 메서드 상세
### deleteRecordStore
```java
public static void deleteRecordStore(String recordStoreName)
throws RecordStoreException,
RecordStoreNotFoundException
```
**Parameters:**
- `recordStoreName` - 삭제할 MIDlet Suite
고유 레코드 저장소
**Throws:**
- `RecordStoreNotFoundException` - 레코드 저장소를
찾을 수 없는 경우
### openRecordStore
```java
public static RecordStore openRecordStore(String recordStoreName,
boolean createIfNecessary)
throws RecordStoreException,
RecordStoreFullException,
RecordStoreNotFoundException
```
**Parameters:**
- `createIfNecessary` - true인 경우 필요하면
레코드 저장소를 만듭니다.
**Returns:**
- 레코드 저장소의 `RecordStore` 객체
**Throws:**
- `IllegalArgumentException` - recordStoreName이
유효하지 않은 경우
### openRecordStore
```java
public static RecordStore openRecordStore(String recordStoreName,
boolean createIfNecessary,
int authmode,
boolean writable)
throws RecordStoreException,
RecordStoreFullException,
RecordStoreNotFoundException
```
**Parameters:**
- `writable` - 액세스를 부여할 수 있는
다른 MIDlet Suite에서 RecordStore를 쓸 수 있으면 true.
RecordStore가 존재하면 이 인자는 무시됩니다.
**Returns:**
- 레코드 저장소의 `RecordStore` 객체
**Throws:**
- `IllegalArgumentException` - authmode 또는
recordStoreName이 유효하지 않은 경우
**Since:**
- MIDP 2.0
### openRecordStore
```java
public static RecordStore openRecordStore(String recordStoreName,
String vendorName,
String suiteName)
throws RecordStoreException,
RecordStoreNotFoundException
```
**Parameters:**
- `suiteName` - MIDlet Suite의 이름
**Returns:**
- 레코드 저장소의 `RecordStore` 객체
**Throws:**
- `IllegalArgumentException` - recordStoreName이
유효하지 않은 경우
**Since:**
- MIDP 2.0
### setMode
```java
public void setMode(int authmode,
boolean writable)
throws RecordStoreException
```
**Parameters:**
- `writable` - 액세스를 부여할 수 있는 다른 MIDlet Suite에서
RecordStore를 쓸 수 있으면 true
**Throws:**
- `IllegalArgumentException` - authmode가 유효하지 않은 경우
**Since:**
- MIDP 2.0
### closeRecordStore
```java
public void closeRecordStore()
throws RecordStoreNotOpenException,
RecordStoreException
```
**Throws:**
- `RecordStoreException` - 다른 레코드 저장소 관련
예외가 발생한 경우
### listRecordStores
```java
public static String[] listRecordStores()
```
**Returns:**
- MIDlet Suite가 소유한 레코드 저장소의 이름 배열.
MIDlet Suite에 레코드 저장소가 없는 경우
이 함수는 null을 반환합니다.
### getName
```java
public String getName()
throws RecordStoreNotOpenException
```
**Returns:**
- 이 RecordStore의 이름
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가 열려 있지 않은 경우
### getVersion
```java
public int getVersion()
throws RecordStoreNotOpenException
```
**Returns:**
- 현재 레코드 저장소 버전
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getNumRecords
```java
public int getNumRecords()
throws RecordStoreNotOpenException
```
**Returns:**
- 레코드 저장소의 현재 레코드 수
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getSize
```java
public int getSize()
throws RecordStoreNotOpenException
```
**Returns:**
- 바이트 단위의 레코드 저장소 크기
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getSizeAvailable
```java
public int getSizeAvailable()
throws RecordStoreNotOpenException
```
**Returns:**
- 이 레코드 저장소의 증가에 사용할 수 있는
추가 공간의 양(바이트)
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### getLastModified
```java
public long getLastModified()
throws RecordStoreNotOpenException
```
**Returns:**
- System.currentTimeMillis()에서 사용하는 형식의
레코드 저장소가 수정된 마지막 시간
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
### addRecordListener
```java
public void addRecordListener(RecordListener listener)
```
**Parameters:**
- `listener` - RecordChangedListener
**See Also:**
- ``removeRecordListener(javax.microedition.rms.RecordListener)``
### removeRecordListener
```java
public void removeRecordListener(RecordListener listener)
```
**Parameters:**
- `listener` - RecordChangedListener
**See Also:**
- ``addRecordListener(javax.microedition.rms.RecordListener)``
### getNextRecordID
```java
public int getNextRecordID()
throws RecordStoreNotOpenException,
RecordStoreException
```
**Returns:**
- 레코드 저장소에 추가될 다음 레코드의
recordId
**Throws:**
- `RecordStoreException` - 다른 레코드 저장소 관련
예외가 발생한 경우
### addRecord
```java
public int addRecord(byte[] data,
int offset,
int numBytes)
throws RecordStoreNotOpenException,
RecordStoreException,
RecordStoreFullException
```
**Parameters:**
- `numBytes` - 이 레코드에 사용할 데이터 버퍼의
바이트 수(0일 수 있음)
**Returns:**
- 새 레코드의 recordId
**Throws:**
- `SecurityException` - MIDlet에 RecordStore에 대한
읽기 전용 액세스가 있는 경우
### deleteRecord
```java
public void deleteRecord(int recordId)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `recordId` - 삭제할 레코드 ID
**Throws:**
- `SecurityException` - MIDlet에 RecordStore에 대한
읽기 전용 액세스가 있는 경우
### getRecordSize
```java
public int getRecordSize(int recordId)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `recordId` - 이 작업에서 사용할 레코드 ID
**Returns:**
- 주어진 레코드에서 사용할 수 있는
MIDlet 데이터의 크기(바이트)
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
### getRecord
```java
public int getRecord(int recordId,
byte[] buffer,
int offset)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `offset` - 복사를 시작할 버퍼의 색인
**Returns:**
- 색인 `offset`에서 시작하여 버퍼에
복사한 바이트 수
**Throws:**
- `ArrayIndexOutOfBoundsException` - 레코드가 제공된 버퍼보다
큰 경우
**See Also:**
- ``setRecord(int, byte[], int, int)``
### getRecord
```java
public byte[] getRecord(int recordId)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException
```
**Parameters:**
- `recordId` - 이 작업에서 사용할 레코드 ID
**Returns:**
- 주어진 레코드에 저장된 데이터. 레코드에 데이터가 없는 경우
이 메소드는 null을 반환합니다.
**Throws:**
- `RecordStoreException` - 일반 레코드 저장소
예외가 발생한 경우
**See Also:**
- ``setRecord(int, byte[], int, int)``
### setRecord
```java
public void setRecord(int recordId,
byte[] newData,
int offset,
int numBytes)
throws RecordStoreNotOpenException,
InvalidRecordIDException,
RecordStoreException,
RecordStoreFullException
```
**Parameters:**
- `numBytes` - 이 레코드에 사용할
데이터 버퍼의 바이트 수
**Throws:**
- `SecurityException` - MIDlet에 RecordStore에 대한
읽기 전용 액세스가 있는 경우
**See Also:**
- ``getRecord(int, byte[], int)``
### enumerateRecords
```java
public RecordEnumeration enumerateRecords(RecordFilter filter,
RecordComparator comparator,
boolean keepUpdated)
throws RecordStoreNotOpenException
```
**Parameters:**
- `keepUpdated` - true인 경우 열거자는
레코드 저장소 레코드의 변경 사항을
사용하여 열거를 최신 상태로 유지합니다.
성능 관련 문제가 생길 수 있으므로
주의해서 사용합니다.
false인 경우 열거는 최신 상태로 유지되지 않으며 삭제된 레코드의
레코드 ID를 반환하거나 나중에 추가된
레코드를 누락시킬 수 있습니다.
열거가 만들어진 후 수정된 순서와
상관 없이 레코드를 반환할 수도 있습니다.
레코드 저장소의 레코드에 대한 변경 내용은 나중에 레코드를
직접 검색하거나 열거를 통해
검색할 때 정확하게 반영됩니다.
이 매개 변수를 false로 설정할 때 주의해야 할 점은 레코드가
수정, 추가 또는 삭제될 때 열거의 필터링 및 정렬 순서입니다.
**Returns:**
- 선택적으로 지정된 순서로 레코드
저장소의 레코드 집합을 순회하는 열거
**Throws:**
- `RecordStoreNotOpenException` - 레코드 저장소가
열려 있지 않은 경우
**See Also:**
- ``RecordEnumeration.rebuild()``
---
title: "Class RecordStoreException"
---
`package javax.microedition.rms`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--javax.microedition.rms.RecordStoreException
```
## 설명
**Direct Known Subclasses:**
- `InvalidRecordIDException`, `RecordStoreFullException`, `RecordStoreNotFoundException`, `RecordStoreNotOpenException`
**extends Exception:**
레코드 저장소 작업에서 일반 예외가 발생했음을 표시하기 위해 발생합니다.
**Since:**
- MIDP 1.0
## 생성자 요약
- RecordStoreException () 세부 정보 메시지 없이 새 RecordStoreException 을
구성합니다.
- RecordStoreException ( String message) 지정된 세부 정보 메시지로 새 RecordStoreException 을
구성합니다.
## 생성자 상세
### RecordStoreException
```java
public RecordStoreException(String message)
```
- 지정된 세부 정보 메시지로 새 `RecordStoreException`을
구성합니다.
**Parameters:**
- `message` - 세부 정보 메시지
### RecordStoreException
```java
public RecordStoreException()
```
- 세부 정보 메시지 없이 새 `RecordStoreException`을
구성합니다.
---
title: "Class RecordStoreFullException"
---
`package javax.microedition.rms`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--javax.microedition.rms.RecordStoreException
|
+--javax.microedition.rms.RecordStoreFullException
```
## 설명
**extends RecordStoreException:**
레코드 저장 시스템 저장소가 가득 차서 작업을 완료할 수 없음을
표시하기 위해 발생합니다.
**Since:**
- MIDP 1.0
## 생성자 요약
- RecordStoreFullException () 세부 정보 메시지 없이 새 RecordStoreFullException 을
구성합니다.
- RecordStoreFullException ( String message) 지정된 세부 정보 메시지로 새 RecordStoreFullException 을
구성합니다.
## 생성자 상세
### RecordStoreFullException
```java
public RecordStoreFullException(String message)
```
- 지정된 세부 정보 메시지로 새 `RecordStoreFullException`을
구성합니다.
**Parameters:**
- `message` - 세부 정보 메시지
### RecordStoreFullException
```java
public RecordStoreFullException()
```
- 세부 정보 메시지 없이 새 `RecordStoreFullException`을
구성합니다.
---
title: "Class RecordStoreNotFoundException"
---
`package javax.microedition.rms`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--javax.microedition.rms.RecordStoreException
|
+--javax.microedition.rms.RecordStoreNotFoundException
```
## 설명
**extends RecordStoreException:**
레코드 저장소를 찾을 수 없어
작업을 완료할 수 없음을 표시하기 위해 발생합니다.
**Since:**
- MIDP 1.0
## 생성자 요약
- RecordStoreNotFoundException () 세부 정보 메시지 없이 새 RecordStoreNotFoundException 을
구성합니다.
- RecordStoreNotFoundException ( String message) 지정된 세부 정보 메시지로 새 RecordStoreNotFoundException 을
구성합니다.
## 생성자 상세
### RecordStoreNotFoundException
```java
public RecordStoreNotFoundException(String message)
```
- 지정된 세부 정보 메시지로 새 `RecordStoreNotFoundException`을
구성합니다.
**Parameters:**
- `message` - 세부 정보 메시지
### RecordStoreNotFoundException
```java
public RecordStoreNotFoundException()
```
- 세부 정보 메시지 없이 새 `RecordStoreNotFoundException`을
구성합니다.
---
title: "Class RecordStoreNotOpenException"
---
`package javax.microedition.rms`
```text
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--javax.microedition.rms.RecordStoreException
|
+--javax.microedition.rms.RecordStoreNotOpenException
```
## 설명
**extends RecordStoreException:**
닫힌 레코드 저장소에서 작업을 시도하였음을 표시하기 위해 발생합니다.
**Since:**
- MIDP 1.0
## 생성자 요약
- RecordStoreNotOpenException () 세부 정보 메시지 없이 새 RecordStoreNotOpenException 을
구성합니다.
- RecordStoreNotOpenException ( String message) 지정된 세부 정보 메시지로
새 RecordStoreNotOpenException 을 구성합니다.
## 생성자 상세
### RecordStoreNotOpenException
```java
public RecordStoreNotOpenException(String message)
```
- 지정된 세부 정보 메시지로
새 `RecordStoreNotOpenException`을 구성합니다.
**Parameters:**
- `message` - 세부 정보 메시지
### RecordStoreNotOpenException
```java
public RecordStoreNotOpenException()
```
- 세부 정보 메시지 없이 새 `RecordStoreNotOpenException`을
구성합니다.
---
title: "package javax.microedition.rms"
---
**See:**
**Description**
## Interface Summary
- [RecordComparator](RecordComparator.md) — 두 레코드를 비교하여(구현 시 정의하는 방법으로) 일치 여부 또는 상대적 정렬 순서를 확인하는 비교기를 정의하는 인터페이스.
- [RecordEnumeration](RecordEnumeration.md) — 양방향 레코드 저장소 Record 열거자를 표시하는 인터페이스.
- [RecordFilter](RecordFilter.md) — 레코드가 일치하는지(응용 프로그램이 정의한 기준에 기반하여) 조사하는 필터를 정의하는 인터페이스.
- [RecordListener](RecordListener.md) — 레코드 저장소에서 레코드 변경/추가/삭제 이벤트를 수신하는 수신기 인터페이스
## Class Summary
- [RecordStore](RecordStore.md) — 레코드 저장소를 나타내는 클래스.
## Exception Summary
- [InvalidRecordIDException](InvalidRecordIDException.md) — 레코드 ID가 유효하지 않아 작업이 완료될 수 없음을 표시하기 위해 발생합니다.
- [RecordStoreException](RecordStoreException.md) — 레코드 저장소 작업에서 일반 예외가 발생했음을 표시하기 위해 발생합니다.
- [RecordStoreFullException](RecordStoreFullException.md) — 레코드 저장 시스템 저장소가 가득 차서 작업을 완료할 수 없음을 표시하기 위해 발생합니다.
- [RecordStoreNotFoundException](RecordStoreNotFoundException.md) — 레코드 저장소를 찾을 수 없어 작업을 완료할 수 없음을 표시하기 위해 발생합니다.
- [RecordStoreNotOpenException](RecordStoreNotOpenException.md) — 닫힌 레코드 저장소에서 작업을 시도하였음을 표시하기 위해 발생합니다.
---
title: "MIDP 2.0 규격 라이선스"
---
**Mobile
Information Device Profile Specification ("Specification")**
**Version: 2.0**
**Status: FCS**
**Release:
November 5, 2002**
**Copyright 2002 Sun Microsystems,
Inc. and Motorola, Inc.**
**All
rights reserved.**
**NOTICE; LIMITED LICENSE GRANTS**
Sun Microsystems, Inc. ("Sun")
hereby grants you a fully-paid, non-exclusive, non-transferable,
worldwide, limited license (without the right to sublicense), under
Sun's applicable intellectual property rights to view, download,
use and reproduce the Specification only for the purpose of internal
evaluation, which shall be understood to include developing
applications intended to run on an implementation of the
Specification provided that such applications do not themselves
implement any portion(s) of the Specification.
Sun also grants you a perpetual,
non-exclusive, worldwide, fully paid-up, royalty free, limited
license (without the right to sublicense) under any applicable
copyrights or patent rights it may have in the Specification to
create and/or distribute an Independent Implementation of the
Specification that: (i) fully implements the Spec(s) including all
its required interfaces and functionality; (ii) does not modify,
subset, superset or otherwise extend the Licensor Name Space, or
include any public or protected packages, classes, Java interfaces,
fields or methods within the Licensor Name Space other than those
required/authorized by the Specification or Specifications being
implemented; and (iii) passes the TCK (including satisfying the
requirements of the applicable TCK Users Guide) for such
Specification. The foregoing license is expressly conditioned on your
not acting outside its scope. No license is granted hereunder for any
other purpose.
You need not include limitations
(i)-(iii) from the previous paragraph or any other particular "pass
through" requirements in any license You grant concerning the
use of your Independent Implementation or products derived from it.
However, except with respect to implementations of the Specification
(and products derived from them) that satisfy limitations (i)-(iii)
from the previous paragraph, You may neither: (a) grant or otherwise
pass through to your licensees any licenses under Sun's applicable
intellectual property rights; nor (b) authorize your licensees to
make any claims concerning their implementation's compliance with the
Spec in question.
For the purposes of this Agreement:
"*Independent Implementation*" shall mean an
implementation of the Specification that neither derives from any of
Sun's source code or binary code materials nor, except with an
appropriate and separate license from Sun, includes any of Sun's
source code or binary code materials; and "*Licensor Name
Space*" shall mean the public class or interface declarations
whose names begin with "java", "javax", "com.sun"
or their equivalents in any subsequent naming convention adopted by
Sun through the Java Community Process, or any recognized successors
or replacements thereof.
This Agreement will terminate
immediately without notice from Sun if you fail to comply with any
material provision of or act outside the scope of the licenses
granted above.
**TRADEMARKS**
No right,
title, or interest in or to any trademarks, service marks, or trade
names of Sun or Sun's licensors is granted hereunder. Sun, Sun
Microsystems, the Sun logo, Java,
J2ME, and the Java Coffee Cup logo are trademarks or
registered trademarks of Sun Microsystems, Inc. in the U.S. and other
countries.
**DISCLAIMER OF WARRANTIES**
THE SPECIFICATION IS PROVIDED "AS
IS". SUN MAKES NO REPRESENTATIONS OR WARRANTIES, EITHER
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
NON-INFRINGEMENT, THAT THE CONTENTS OF THE SPECIFICATION ARE SUITABLE
FOR ANY PURPOSE OR THAT ANY PRACTICE OR IMPLEMENTATION OF SUCH
CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADE
SECRETS OR OTHER RIGHTS. This document does not represent any
commitment to release or implement any portion of the Specification
in any product.
THE SPECIFICATION COULD INCLUDE
TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS. CHANGES ARE
PERIODICALLY ADDED TO THE INFORMATION THEREIN; THESE CHANGES WILL BE
INCORPORATED INTO NEW VERSIONS OF THE SPECIFICATION, IF ANY.
SUN MAY MAKE IMPROVEMENTS AND/OR CHANGES TO THE PRODUCT(S) AND/OR THE
PROGRAM(S) DESCRIBED IN THE SPECIFICATION AT ANY TIME. Any use
of such changes in the Specification will be governed by the
then-current license for the applicable version of the Specification.
**LIMITATION OF LIABILITY**
TO THE EXTENT NOT PROHIBITED BY LAW,
IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY DAMAGES,
INCLUDING WITHOUT LIMITATION, LOST REVENUE, PROFITS OR DATA, OR FOR
SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT
OF OR RELATED TO ANY FURNISHING, PRACTICING, MODIFYING OR ANY USE OF
THE SPECIFICATION, EVEN IF SUN AND/OR ITS LICENSORS HAVE BEEN ADVISED
OF THE POSSIBILITY OF SUCH DAMAGES.
You will indemnify, hold harmless,
and defend Sun and its licensors from any claims arising or resulting
from: (i) your use of the Specification; (ii) the use or distribution
of your Java application, applet and/or clean room implementation;
and/or (iii) any claims that later versions or releases of any
Specification furnished to you are incompatible with the
Specification provided to you under this license.
**RESTRICTED RIGHTS LEGEND**
U.S. Government: If this
Specification is being acquired by or on behalf of the U.S.
Government or by a U.S. Government prime contractor or subcontractor
(at any tier), then the Government's rights in the Software and
accompanying documentation shall be only as set forth in this
license; this is in accordance with 48 C.F.R. 227.7201 through
227.7202-4 (for Department of Defense (DoD) acquisitions) and with 48
C.F.R. 2.101 and 12.212 (for non-DoD acquisitions).
**REPORT**
You may wish to report any
ambiguities, inconsistencies or inaccuracies you may find in
connection with your use of the Specification ("Feedback").
To the extent that you provide Sun with any Feedback, you hereby: (i)
agree that such Feedback is provided on a non-proprietary and
non-confidential basis, and (ii) grant Sun a perpetual,
non-exclusive, worldwide, fully paid-up, irrevocable license, with
the right to sublicense through multiple levels of sublicensees, to
incorporate, disclose, and use without limitation the Feedback for
any purpose related to the Specification and future versions,
implementations, and test suites thereof.
*(LFI#119098/Form
ID#011801)*
---
title: "OTA (Over-The-Air) 규격"
---
# Over The Air User Initiated Provisioning 사양
#### MIDP (Mobile Information Device Profile)용
---
## 머리말
*Over The Air User Initiated Provisioning* 문서는 MIDP (Mobile Information Device Profile) 사양 버전 2.0을 위한 것입니다. 원본 JSR과 전문가 그룹 세부 정보는 http://jcp.org/jsr/detail/118.jsp에서 찾을 수 있습니다. 여기서 사용되는 용어는 별도의 지침이 없는 한 MIDP 2.0 사양의 정의 절에 정의되어 있습니다.
### 본 사양의 구성 방법
본 사양의 주제는 다음과 같은 절로 구성되어 있습니다.
- *1절, "Over The Air User Initiated Provisioning"*에서는 MIDP 응용 프로그램을 어떻게 무선 장치에 배포해야 하는지에 대해 정의합니다.
- *2절, "WAP June2000 환경에서의 MIDP 프로비저닝 및 네트워킹"*에서는 프록시 WAP 게이트웨이를 통해 MIDP 응용 프로그램을 배포할 때의 특정 요구 사항에 대해 설명합니다.
### 참조 자료
1. Connected, Limited Device Configuration (CLDC)
http://jcp.org/jsr/detail/30.jsp
2. Mobile Information Device Profile (MIDP 1.0)
http://jcp.org/jsr/detail/37.jsp
3. Mobile Information Device Profile 2.0 (MIDP 2.0)
http://jcp.org/jsr/detail/118.jsp
4. HTTP 1.1 Specification
http://www.ietf.org/rfc/rfc2616.txt
5. HTTP Authentication: Basic and Digest Access Authentication
http://www.ietf.org/rfc/rfc2617.txt
6. Java(tm) Servlet 2.3 Specification
http://jcp.org/jsr/detail/53.jsp
### OTA 권장 방법 이후의 변경 사항
MIDP 1.0 사양이 발행된 후 *Over The Air User Initiated Provisioning Recommended Practice for the Mobile Information Device Profile* 문서가 발행되었습니다. 본 사양은 이 문서를 대신하며, MIDP 2.0에 대해 다음과 같은 사항이 변경되었습니다.
- 쿠키 지원 요구 사항이 제거되었습니다. 일부 네트워크 구조에서 쿠키 정보를 클라이언트에 전송하지 못할 수도 있기 때문에 변경된 사항입니다. 쿠키는 응용 프로그램 설명자, JAR 다운로드 및 Install-Notify 보고서 간에 상태 정보를 유지 관리하는 데 사용됩니다. URL을 다시 쓰는 대안적 방법도 같은 용도로 사용할 수 있습니다. 예를 들어, 응용 프로그램 설명자를 보낼 때 서버에서 특정 다운로드 세션과 연결하는 고유 JAR, MIDlet-Install-Notify 및 MIDlet-Delete-Notify URL을 삽입할 수 있습니다. 다른 옵션을 사용할 수도 있습니다.
## 1절, Over The Air User Initiated Provisioning
### 개요 및 목적
본 문서는 MIDlet Suite를 어떻게 Over-The-Air (OTA)로 배포할 수 있는지, 그리고 이러한 배포를 지원하기 위해 클라이언트 장치에 어떤 요구 사항을 두어야 하는지 설명하기 위해 작성되었습니다. 이러한 권장 사항은 모든 제조업체의 클라이언트와 서버 간에 상호 운용성을 보장하는 데 도움이 되며 MIDP 장치를 배포하는 모바일 네트워크 운영자에게 지침을 제공합니다.
장치는 사용자가 MIDlet Suite를 찾아서 장치에 로드할 수 있도록 하는 기법을 제공해야 합니다. 어떤 경우에는 장치에 있는 브라우저(예: i-mode 또는 WAP)를 통해 MIDlet Suite를 찾습니다. 사용자가 다운로드할 MIDlet Suite를 확인할 수 있도록 특별히 작성된 상주 응용 프로그램이 이러한 기법으로 이용될 수도 있습니다. 본 문서에서는 이 기능을 가진 응용 프로그램을 발견 응용 프로그램, 즉 *DA*라고 합니다.
장치가 다른 설치 기법(예: BluetoothTM 무선 기술, 직렬 케이블, IrDATM 등)을 지원할 수도 있지만 이것은 본 사양의 범위를 벗어납니다.
Application Management Software (AMS)는 MIDlet의 다운로드와 라이프사이클을 관리하는 장치상의 소프트웨어를 설명하는 데 사용되는 일반 용어입니다. 이 용어는 어떠한 특정 구현을 나타내지 않으며 편의상으로만 사용됩니다. 일부 구현에서는 Java Application Manager (JAM)란 용어를 대신 사용합니다.
본 문서에서는 장치 기능에 대한 일반 요구 사항과 MIDlet Suite 라이프사이클을 지원하는 기능에 대해 설명합니다. MIDlet Suite의 라이프사이클은 발견, 설치, 업데이트, 호출 및 제거로 이루어져 있습니다. MIDlet Suite를 제공하는 서버에 장치 유형과 특성을 확인해 주는 기법 및 추가 응용 프로그램 설명자 속성에 대해서도 설명합니다.
### 기능 요구 사항
MIDP 호환 장치는 다음과 같은 기능을 제공해야 합니다.
- 찾아보기 또는 네트워크에서 MIDlet Suite 응용 프로그램 설명자 찾기
- MIDlet Suite 및 관련된 응용 프로그램 설명자를 본 문서에 규정된 대로 HTTP 1.1을 사용하는 서버나 HTTP 1.1 기능(헤더와 엔티티 필드 포함)을 구현하는 세션 프로토콜의 장치로 변환
- 사용자에게 사용자 이름과 암호를 묻고 제공된 인증서를 사용하여 HTTP 요청을 다시 보냄으로써 HTTP 요청에 대한 401(*Unauthorized*) 또는 407(*Proxy Authentication Required*) 응답에 응답. 장치는 최소한 RFC2617 기본 인증 체계를 지원할 수 있어야 합니다.
- 장치에 MIDlet Suite 설치
- MIDlet 호출
- 사용자가 장치에 저장된 MIDlet Suite를 삭제할 수 있도록 허용. MIDlet Suite는 전송 및 설치의 단위가 되기 때문에 단일 MIDlet은 삭제할 수 없습니다.
### MIDlet Suite 발견
응용 프로그램 발견은 사용자가 장치를 사용하여 MIDlet Suite를 찾는 프로세스입니다. 사용자가 시작하는 MIDlet Suite 발견 및 설치를 다음과 같은 고급 방법으로 지원해야 합니다.
- DA를 사용하는 동안 사용자에게 MIDlet Suite나 응용 프로그램 설명자에 대한 링크를 표시합니다.
- 사용자가 설치 프로세스를 시작하는 링크를 선택합니다.
- 사용 가능한 경우, 응용 프로그램 설명자를 먼저 장치로 전송합니다. 이 설명자에는 MIDlet Suite에 대한 정보가 포함되어 있으며 장치의 AMS에서 설치를 시작하기 위해 사용할 수 있습니다.
- 응용 프로그램 설명자를 사용할 수 없거나 AMS가 응용 프로그램을 다운로드하여 설치를 계속하도록 결정한 후 MIDlet Suite JAR 파일 다운로드가 시작됩니다.
DA를 사용하여 네트워크 위치를 액세스할 수 있는 기능과, 선택하면 MIDlet Suite 설치를 시작하는 링크와 함께 MIDlet Suite에 대한 설명을 볼 수 있는 기능을 사용자에게 제공하는 것이 좋습니다. MIDP 사양에 설명된 것처럼 링크가 JAR 파일을 참조하면 설치 프로세스를 시작하기 위해 JAR 파일과 해당 URL이 장치상의 AMS로 전달됩니다. MIDP 사양에 설명된 것처럼 링크가 응용 프로그램 설명자를 참조하는 경우에는 다음과 같습니다.
1. 링크를 선택하면 서버가 이에 대한 응답으로 전송되는 데이터(즉, 응용 프로그램 설명자)에 "*text/vnd.sun.j2me.app-descriptor*"의 MIME 유형이 있음을 표시해야 합니다.
2. 이 전송이 완료되면 설치 프로세스를 시작하기 위해 응용 프로그램 설명자와 해당 URL이 장치상의 AMS로 전달됩니다. AMS는 응용 프로그램 설명자를 사용하여 연결된 MIDlet Suite를 장치에 올바로 설치하여 실행할 수 있는지 확인합니다. 올바로 설치하여 실행할 수 없는 경우에는 사용자에게 설치를 방해하는 요인을 알려야 합니다. 비정상적 상황이 발생하면 시간과 네트워크 대역폭 낭비를 최소화하기 위해 가능하면 일찍 사용자에게 알려주는 것이 좋습니다. 응용 프로그램 설명자를 검색할 때는 장치 식별 및 요청 헤더에 설명된 요청 헤더 속성을 사용하는 것이 좋습니다.
3. 응용 프로그램 설명자를 사용하려면 먼저 전송 형식에서 MIDP 사양에 규정된 유니코드 인코딩으로 변환해야 합니다. MIME 유형 "*text/vnd.sun.j2me.app-descriptor*"에 지정된 기본 문자 집합은 "*UTF-8*"입니다. 장치가 다른 문자 집합을 지원하면 해당 *Accept-Charset* 헤더를 요청에 포함시키고, *Content-Type* 헤더에 있는 반환된 *charset* 속성에 따라 내용을 변환하는 것이 좋습니다. *charset*이 정의되어 있지 않으면 인코딩은 기본적으로 "*UTF-8*"로 지정되며 이에 따라 내용을 변환하는 것이 좋습니다. 설명자의 속성은 MIDP 사양의 구문에 따라 서식을 지정해야 하며, MIDP 사양에서 요구되는 모든 속성이 설명자에 있어야 합니다. 그렇지 않으면 클라이언트가 상태 보고서에 *상태 코드 906*을 반환해야 합니다.
4. 공급업체, 이름, 버전, 크기 속성 등 응용 프로그램 설명자의 정보를 사용하여 사용자에게 MIDlet Suite 설치를 확인할 수 있는 기회를 주는 것이 좋습니다. 이전 버전을 설치하거나 동일한 버전을 설치하려고 시도하는 경우에는 사용자에게 이를 알려주는 것이 좋습니다. MIDlet Suite의 성공적인 설치와 실행을 방해하는 요인을 확인하여 사용자에게 알려주는 것이 좋습니다. 예를 들어, 메모리가 부족하면 소프트웨어는 사용자가 메모리 사용을 확인하여 새로운 MIDlet Suite의 설치 공간을 확보할 수 있도록 지원하는 것이 좋습니다.
### MIDlet Suite 설치
응용 프로그램 설치는 MIDlet Suite를 장치에 다운로드하여 사용자가 이용할 수 있도록 하는 프로세스입니다. 응용 프로그램 설치를 지원해야 합니다. 장치를 지원하는 네트워크와 프로비저닝 중에 사용되는 모든 프록시 및 원본 서버가 이 요구 사항을 지원할 수 있어야 합니다. 사용자가 장치상의 MIDlet Suite가 사용하는 자원을 제어하고, MIDlet Suite를 삭제하거나 설치할 수 있어야 합니다.
장치는 사용자가 MIDlet Suite의 MIDlet을 실행할 수 있도록 해야 합니다. MIDlet Suite에 여러 개의 MIDlet이 포함되어 있으면 사용자가 두 개 이상의 MIDlet이 있다는 것을 알아야 할 수도 있습니다. 장치는 사용자 선택에 따라 MIDlet Suite의 MIDlet을 즉시 실행할 수도 있습니다.
설치 중에 사용자에게 진행 상황을 알려주는 것이 좋으며, 프로세스를 취소할 수 있는 기회를 주어야 합니다. 설치가 중단되면 장치를 설치가 시작되기 전의 상태로 두어야 합니다.
MIDlet Suite가 이미 장치에 설치되어 있으면 업데이트로 처리되는 것이 좋습니다. 업데이트 처리 방법에 대한 자세한 내용은 MIDlet Suite 업데이트를 참조하십시오.
MIDlet Suite를 설치하기 위해 AMS는 다음과 같은 일련의 단계를 수행하며, 진행 상황을 확인하여 사용자에게 피드백을 제공합니다.
1. 장치가 HTTP를 통해 MIDlet Suite의 다운로드를 시작합니다. MIDlet Suite 발견 절에 설명된 것처럼 응용 프로그램 설명자가 먼저 다운로드된 경우에는 MIDlet Suite에 대한 요청이 정확히 설명자에 지정된 URL에 대한 것이어야 합니다. 다른 헤더는 불필요합니다.
2. 서버 또는 프록시가 MIDlet Suite에 대한 요청에 401(*Unauthorized*) 또는 407(*Proxy Authentication Required*)로 응답하면 장치는 RFC2617에 규정된 *Authorization* 또는 *Proxy-Authorization* 헤더 필드의 사용자 제공 인증서를 사용하여 요청을 다시 보내는 것이 좋습니다. 인증서는 사용자가 제공하는 것이 좋습니다. 예를 들어, 일반 기법에서는 사용자 이름과 암호를 입력할 수 있는 대화 상자를 사용자에게 표시합니다. 장치는 최소한 RFC2617에 설명된 기본 인증 체계를 지원할 수 있어야 합니다.
3. MIDlet Suite와 수신된 헤더를 검토하여 검색한 MIDlet Suite가 유효하며 장치에 설치할 수 있는지 확인해야 합니다. 최소한 설치를 방해하는 다음과 같은 문제점을 사용자에게 경고해야 합니다.
- 장치에 MIDlet Suite를 저장할 메모리가 부족하면 장치가 상태 보고서에 *상태 코드 901*을 반환해야 합니다.
- 설명자의 *MIDlet-Jar-URL* 속성에서 JAR을 사용할 수 없으면 장치가 상태 보고서에 *상태 코드 907*을 반환해야 합니다.
- 수신된 JAR 파일 크기가 응용 프로그램 설명자에 지정된 크기와 일치하지 않으면 장치가 상태 보고서에 *상태 코드 904*를 반환해야 합니다.
- 상세 목록이나 다른 파일을 JAR에서 추출할 수 없으면 장치가 상태 보고서에 *상태 코드 907*을 반환해야 합니다.
- JAR 상세 목록의 구문이 잘못되었거나 JAR 상세 목록에 필수 속성이 없으면 장치가 상태 보고서에 *상태 코드 907*을 반환해야 합니다.
- 설명자의 필수 속성인 "*MIDlet-Name*", "*MIDlet-Version*" 및 "*MIDlet-Vendor*"가 JAR 상세 목록의 속성과 일치하지 않으면 장치가 상태 보고서에 *상태 코드 905*를 반환해야 합니다.
- MIDlet Suite를 신뢰할 수 있으면 MIDlet-\* 속성의 응용 프로그램 설명자에 있는 값이 상세 목록에 있는 해당 속성 값과 일치해야 합니다. 그렇지 않으면 장치가 상태 보고서에 *상태 코드 905*를 반환해야 합니다.
- 응용 프로그램 인증에 실패하면 장치가 상태 보고서에 *상태 코드 909*를 반환해야 합니다.
- 응용 프로그램이 동일한 응용 프로그램의 서명된 설치 버전의 서명되지 않은 버전이면 장치가 상태 보고서에 *상태 코드 910*을 반환해야 합니다.
- *MIDlet-Permissions* 속성에 나열된 권한이 응용 프로그램에 부여되지 않으면 장치가 상태 보고서에 *상태 코드 910*을 반환해야 합니다.
- 권한이 부여되지 않았다는 것 이외의 이유로 정적 푸시 등록에 실패하면 장치가 상태 보고서에 *상태 코드 911*을 반환해야 합니다.
- 설치 중에 네트워크 서비스가 끊어진 경우, 가능하면 상태 보고서에 *상태 코드 903*을 사용하는 것이 좋습니다(네트워크 서비스 장애로 인해 상태 보고서를 전송하지 못할 수도 있음).
4. 설치를 방해하는 요인이 하나도 없을 경우 MIDlet Suite에 포함된 MIDlet이 설치되어야 하며 사용자가 장치의 MIDlet 선택 기법을 통해 실행할 수 있어야 합니다.
5. 장치에서 MIDlet Suite을 사용할 수 있게 되거나 복구할 수 없는 오류가 발생하면 설치가 완료됩니다. 두 경우 모두, 설치 상태 보고서에 설명된 것처럼 상태가 보고되어야 합니다.
## MIDlet Suite 업데이트
MIDlet Suite 업데이트는 동일한 MIDlet Suite(동일한 버전 또는 다른 버전)가 이미 장치에 설치되어 있을 때 특정 MIDlet Suite를 설치하는 작업으로 정의됩니다. 장치는 MIDlet Suite의 업데이트를 지원해야 합니다. 사용자에게 도움이 되도록 장치는 사용자가 장치상의 MIDlet Suite에 대한 정보를 보고 어떤 버전의 소프트웨어가 설치되어 있는지 확인할 수 있도록 해야 합니다. 업데이트에 적용되는 속성은 장치 식별 및 요청 헤더를 참조하십시오.
MIDlet Suite 업데이트가 시작되면 장치는 MIDlet Suite가 기존 MIDlet Suite보다 최신 또는 이전 버전인지, 아니면 동일한 버전인지 사용자에게 알려야 하며 계속하기 전에 사용자 확인을 받아야 합니다.
업데이트되는 MIDlet Suite의 RMS 레코드 저장소는 다음과 같이 관리해야 합니다.
- 새로운 MIDlet Suite와 기존 MIDlet Suite의 암호 서명자가 동일하면 RMS 레코드 저장소를 유지하여 새로운 MIDlet Suite가 사용할 수 있도록 해야 합니다.
- 새로운 응용 프로그램 설명자를 다운로드하는 URL의 체계, 호스트 및 경로가 기존 응용 프로그램 설명자를 다운로드한 URL의 체계, 호스트 및 경로와 일치하면 RMS를 유지하여 새로운 MIDlet Suite가 사용할 수 있도록 해야 합니다.
- 새로운 MIDlet Suite를 다운로드하는 URL의 체계, 호스트 및 경로가 기존 MIDlet Suite를 다운로드한 URL의 체계, 호스트 및 경로와 일치하면 RMS를 유지하여 새로운 MIDlet Suite가 사용할 수 있도록 해야 합니다.
- 위의 요구 사항이 충족되지 않으면 장치는 기존 MIDlet Suite의 데이터를 유지하여 새로운 MIDlet Suite가 사용할 수 있도록 할지 여부를 사용자에게 물어야 합니다.
모든 경우에서 서명되지 않은 MIDlet은 서명된 MIDlet Suite를 업데이트할 수 없도록 해야 합니다. 레코드 저장소의 형식, 내용 및 버전은 MIDlet Suite에서 관리합니다. 사용자가 기존 MIDlet Suite에 부여한 권한이 새로운 MIDlet Suite의 보안 도메인에 있으면 새로운 MIDlet Suite에도 부여하는 것이 좋습니다.
## MIDlet Suite 실행
사용자가 실행할 MIDlet을 선택하면 장치는 MIDP 사양에서 요구되는 CLDC 및 MJIDP 클래스를 사용하여 MIDlet을 호출해야 합니다. 여러 개의 MIDlet이 있으면 사용자 인터페이스에서 사용자가 각 MIDlet을 선택하여 실행할 수 있도록 지원해야 합니다.
## MIDlet Suite 제거
장치는 사용자가 MIDlet Suite를 제거할 수 있도록 지원해야 합니다. 장치에서 MIDlet Suite를 제거하는 경우 사용자에게 MIDlet Suite를 제거할 것인지 확인하는 메시지를 표시하는 것이 좋습니다. 장치는 MIDlet Suite를 삭제하는 동안 발생하는 특수 상황에 대해 사용자에게 경고하는 것이 좋습니다. 예를 들어, MIDlet Suite에 여러 개의 MIDlet이 포함되어 있을 수도 있으므로 사용자에게 모든 MIDlet 및 연결된 RMS 레코드 저장소가 제거된다고 알려주는 것이 좋습니다.
응용 프로그램 설명자에 MIDlet-Delete-Confirm 속성이 있으면 프롬프트에 해당 값을 포함시키는 것이 좋습니다. 이렇게 하면 MIDlet Suite 공급자가 MIDlet Suite를 제거할 경우 발생할 수 있는 모든 특정 상황을 강조할 수 있습니다.
## 설치/삭제 상태 보고서
MIDlet Suite를 제공하는 서비스에서 MIDlet Suite의 설치, 업그레이드 또는 삭제 성공 여부는 매우 중요합니다. 서비스는 설치 및 삭제 상태를 보고하는 데 사용해야 하는 URL을 응용 프로그램 설명자에 지정할 수도 있습니다. 자세한 내용은 추가 설명자 속성을 참조하십시오. 장치에서 설치 상태 보고서를 보낼 수 없는 경우에도 요청된 작업을 완료해야 합니다. 예를 들어, 장치가 설치 상태 보고서를 MIDlet-Install-Notify URL로 보낼 수 없어도 MIDlet Suite를 여전히 사용 가능해야 하며 사용자가 MIDlet Suite를 사용할 수 있어야 합니다. 이와 마찬가지로 장치가 삭제 상태 보고서를 MIDlet-Delete-Notify URL로 보낼 수 없는 경우에도 MIDlet Suite를 삭제해야 합니다.
운영자 상태는 HTTP POST를 통해 설치의 경우 *MIDlet-Install-Notify* 속성에 지정된 URL로, 삭제의 경우 *MIDlet-Delete-Notify* 속성에 지정된 URL로 보고됩니다. 유일하게 지원되는 프로토콜은 "*http://*"입니다. 다른 프로토콜은 장치에서 무시할 수도 있습니다.
POST 요청의 본문 내용에서 첫 번째 줄에는 상태 코드와 상태 메시지가 있어야 합니다. 유효한 코드와 상태 메시지 목록은 상태 코드 및 메시지를 참조하십시오.
삭제 상태 보고서의 경우 알림은 MIDlet을 삭제하는 경우에만 전송됩니다. *상태 코드 912*를 보내 삭제가 발생했다고 알려야 합니다.
서버는 상태 보고서에 응답하여 "*200 OK*"로 응답해야 합니다. 어떠한 내용도 장치로 반환하지 않는 것이 좋으며, 전송될 경우 이 내용을 무시해야 합니다. 응답이 수신되면 요청을 다시 시도하지 않는 것이 좋습니다. MIDP 1.0 OTA 권장 방법과 달리, *cookie*를 삭제하도록 요청하기 위해 *Max-Age=0* 속성이 있는 *Set-Cookie* 헤더를 서버에 포함해서는 안 됩니다. 이러한 속성이 수신되면 장치에서 무시해야 합니다. 일례로, 예: HTTP Post 요청을 통한 설치 상태를 참조하십시오.
설치의 경우, 상태 보고서를 보낼 수 없거나 서버 응답이 수신되지 않으면 이 Suite의 MIDlet을 실행하고 장치에 데이터 네트워크 연결이 있을 때마다 위에서 설명한 것처럼 설치 상태 보고서를 다시 보낼 수도 있습니다. 이렇게 하면 상태 보고서를 보내는 데 성공할 가능성이 커집니다. 재시도를 할 때마다 사용자에게 요금이 청구되므로 재시도 횟수는 작게 유지하는 것이 좋습니다. 설치 상태 보고서의 전송 여부와 응답 수신 여부에 관계 없이 MIDlet Suite를 사용할 수 있도록 해야 합니다.
삭제의 경우, 다음에 OTA 설치를 수행하거나 설치 상태 보고서를 전송할 때 상태 보고서를 보내려고 시도해야 합니다. 이렇게 하면 상태 보고서를 보내는 데 성공할 가능성이 커지며, 네트워크 활동을 볼 때의 사용자 혼동을 최소화할 수 있습니다. 상태 보고서를 보낼 수 없거나 서버 응답이 수신되지 않으면 OTA 설치를 수행하거나 설치 상태 보고서를 보낼 때마다 위에서 설명한 것처럼 삭제 상태 보고서를 다시 보낼 수도 있습니다. 재시도를 할 때마다 사용자에게 요금이 청구되므로 재시도 횟수는 작게 유지하는 것이 좋습니다. 설치 상태 보고서의 전송 여부와 응답 수신 여부에 관계 없이 MIDlet Suite를 메모리에서 제거해야 합니다.
**설치 상태 코드 및 메시지**
| 상태 코드 | 상태 메시지 |
| --- | --- |
| 900 | 성공 |
| 901 | 메모리 부족 |
| 902 | 사용자가 취소함 |
| 903 | 서비스가 끊어짐 |
| 904 | JAR 크기가 일치하지 않음 |
| 905 | 속성이 일치하지 않음 |
| 906 | 잘못된 설명자 |
| 907 | 잘못된 JAR |
| 908 | 호환되지 않는 구성 또는 프로필 |
| 909 | 응용 프로그램 인증 실패 |
| 910 | 응용 프로그램 권한 부여 실패 |
| 911 | 푸시 등록 실패 |
| 912 | 삭제 알림 |
## 추가 설명자 속성
응용 프로그램 설명자에는 다음과 같은 추가 속성이 정의되어 있습니다. 각 속성은 설명자에 한 번만 사용할 수 있습니다.
**MIDlet 속성**
| 속성 이름 | 속성 설명 |
| --- | --- |
| MIDlet-Install-Notify | 이 MIDlet Suite의 설치 상태(새 설치 또는 MIDlet Suite 업데이트)를 보고하기 위해 POST 요청을 보내는 대상 URL. 장치는 이 URL을 수정하지 않고 사용해야 합니다. URL은 UTF-8 인코딩 문자로 256자를 넘지 않아야 합니다. UTF-8 인코딩 문자로 256자를 넘는 URL을 받을 경우 장치가 설치를 거부하고 상태 보고서에 *상태 코드 906*을 반환해야 합니다. |
| MIDlet-Delete-Notify | MIDlet Suite의 삭제를 보고하기 위해 POST 요청을 보내는 대상 URL. 장치는 이 URL을 수정하지 않고 사용해야 합니다. URL은 256자의 UTF-8 인코딩 문자를 넘지 않아야 합니다. UTF-8 인코딩 문자로 256자를 넘는 URL을 받을 경우 장치가 설치를 거부하고 상태 보고서에 *상태 코드 906*을 반환해야 합니다. |
| MIDlet-Delete-Confirm | 이 MIDlet Suite의 삭제를 확인하는 메시지를 표시할 때 사용자에게 제공하는 텍스트 메시지 |
## 장치 식별 및 요청 헤더
장치는 자신에 대한 정보를 서버로 보낼 때 DA를 통해 MIDlet Suite를 발견하는 프로세스를 사용자 정의할 수 있습니다. 서버가 장치의 기능을 확인할 수 있도록 DA는 네트워크 서버에 정보(예: 제조업체 및 장치 모델 번호)를 제공해야 합니다. 대부분의 경우 DA는 이미 네트워크 연결 및 표시 언어에 맞는 방법으로 서버에 장치 유형을 확인해 주었을 것입니다.
MIDlet Suite를 다운로드하는 동안 장치는 자신의 특성과 요청되는 내용의 유형을 가능한 한 자세히 서버에 확인해 주는 것이 좋습니다. 내용을 가져오는 데 사용되는 HTTP 요청 헤더에는 *User-Agent, Accept-Language* 및 *Accept*가 있어야 합니다. 서버는 이 추가 정보를 사용하여 장치에 적합한 응용 프로그램 설명자를 선택하는 것이 좋습니다.
### User-Agent 제품 토큰
MIDP 사양은 클라이언트를 서버에 확인해 주는 HTTP *User-Agent* 요청 헤더를 식별합니다. RFC2616은 다음과 같은 제품 토큰의 형식을 규정합니다.
*"User-Agent" ":" 1\*(product | comment)*
장치를 지원 CLDC 및 MIDP로 식별하는 데 사용되는 제품 토큰은 MIDP 사양의 네트워킹 부분에 규정되어 있습니다. RFC2616에서와 마찬가지로 설명 필드는 옵션입니다.
또한, 장치는 RFC2616에서 정의된 것처럼 장치별 제품 토큰을 *User-Agent* 헤더에 추가하여 자신을 식별하는 것이 좋습니다. 장치 식별 토큰을 첫 번째 토큰으로 사용하는 것이 좋습니다. 제품 토큰과 제품 버전 값은 각 장치에 고유하므로 본 사양의 범위에서 벗어납니다.
### Accept-Language 헤더
장치는 RFC2616에 규정된 것처럼 *Accept-Language* 요청 헤더를 제공하여 장치에서 사용하는 언어를 나타낼 수도 있습니다.
### Accept 헤더
*Accept* HTTP 헤더는 요청되는 내용의 유형을 나타내는 데 사용됩니다. MIDlet Suite를 요청할 때 이 헤더에는 *application/java-archive*를 포함시키는 것이 좋습니다. 응용 프로그램 설명자를 검색하는 경우에는 이 헤더에 *text/vnd.sun.j2me.app-descriptor*를 포함시키는 것이 좋습니다.
### 예: 응용 프로그램 설명자에 대한 HTTP 요청
응용 프로그램 설명자의 다운로드를 요청할 때 요청 헤더는 다음과 같이 나타날 수 있습니다.
GET http://host.foo.bar/app-dir/game.jad HTTP/1.1
Host: host.foo.bar
Accept: text/vnd.sun.j2me.app-descriptor
User-Agent: CoolPhone/1.4 Profile/MIDP-2.0 Configuration/CLDC-1.0
Accept-Language: en-US, fi, fr
Accept-Charset: utf-8
서버로부터의 응답 헤더는 다음과 같이 나타날 수 있습니다.
HTTP/1.1 200 OK
Server: CoolServer/1.3.12
Content-Length: 2345
Content-Type: text/vnd.sun.j2me.app-descriptor; charset=utf-8
### 예: MIDlet Suite의 설치/업데이트에 대한 HTTP 요청
MIDlet Suite JAR 파일의 다운로드를 요청할 때 요청 헤더는 다음과 같이 나타날 수 있습니다.
GET http://host.foo.bar/app-dir/game.jar HTTP/1.1
Host: host.foo.bar
Accept: application/java, application/java-archive
서버로부터의 응답 헤더는 다음과 같이 나타날 수 있습니다.
HTTP/1.1 200 OK
Server: CoolServer/1.3.12
Content-Length: 25432
Content-Type: application/java-archive
### 예: HTTP Post 요청을 통한 설치 상태
아래에 지정된 응용 프로그램 설명자를 사용하여 MIDlet Suite를 설치하는 경우를 예로 들 수 있습니다.
...
MIDlet-Install-Notify: http://foo.bar.com/status
...
MIDlet Suite가 설치되면 다음과 같은 내용이 게시됩니다.
POST http://foo.bar.com/status HTTP/1.1
Host: foo.bar.com
Content-Length: 13
900 Success
서버로부터의 응답은 다음과 같이 나타날 수 있습니다.
HTTP/1.1 200 OK
Server: CoolServer/1.3.12
## 2절, WAP June2000 환경에서의 MIDP 프로비저닝 및 네트워킹
### 이 절의 목적
이 절은 WAP June2000 환경에서의 MIDP Over The Air Provisioning 및 MIDlet 네트워킹에 고유한 요구 사항 및 권장 사항을 제공함으로써 OTA 및 MIDP 사양을 보완하기 위해 작성되었습니다. 이후의 WAP 개발에 대해서는 MIDP 이후 버전에서 다루게 될 것입니다. 이러한 권장 사항은 모든 제조업체의 WAP 요소 간에 상호 운용성을 보장하는 데 도움이 될 것입니다. 또한 WAP 프로토콜 스택을 사용하는 브라우저를 통해 프로비저닝을 수행할 때 네트워크 운영자가 MIDP 서비스를 배포하도록 도와줄 뿐만 아니라 MIDlet 개발자가 WSP를 통해 전송할 때 효과적으로 작동하는 MIDlet을 만드는 데에도 도움이 될 것입니다.
### 개요
MIDlet Suite는 HTTP를 사용하여 프로비저닝 서버에서 다운로드됩니다. 중간에 게이트웨이를 사용할 수도 있습니다. 또한 MIDP 라이브러리는 HTTP/1.1 프로토콜의 형식으로 네트워크 액세스를 지원해야 합니다.
최종 사용자 장치와 무선 네트워크에 따라 HTTP 프로토콜 종단 간을 사용하여 최종 사용자 장치와 프로비저닝 서버 간에 통신이 발생할 수 있으며, 또는 최종 사용자 장치가 다른 프로토콜을 사용하고 게이트웨이에서 이 프로토콜을 HTTP로 변환하도록 할 수도 있습니다. 동일한 서비스 공급자가 프로토콜 게이트웨이도 운영해야 할 다른 이유가 없는 한 프로비저닝 서버는 어떤 경우에서도 HTTP만 지원해야 합니다. WAP June2000 환경에서 단말기와 프로비저닝 서버 사이에는 항상 장치와의 통신에 사용되는 WSP 프로토콜과 서버와의 통신에 사용되는 TCP/IP 간에 변환하는 WAP 게이트웨이가 있습니다.
고려해야 할 두 가지 기본 인터페이스가 있습니다.
- 최종 사용자 장치에서 네트워크로의 인터페이스
- 프로비저닝 서버에서 네트워크로의 인터페이스
두 번째 인터페이스는 항상 TCP/IP를 통해 전송되는 HTTP가 사용됩니다.
첫 번째 인터페이스의 경우, 본 문서에서는 다음 두 가지 기본적인 경우 중 하나에 대해 설명합니다.
- 최종 사용자 장치가 WAP 프로토콜 스택을 사용하는 브라우저를 이용하는 경우
- WSP 프로토콜이 단말기와 WAP 게이트웨이 간의 통신에 사용되는 경우
최종 사용자 장치가 WAP 프로토콜 스택을 사용하는 브라우저를 이용하고 WAP 전송 프로토콜이 있는 경우에는 최종 사용자 장치에서 HTTP 대신 WSP를 사용할 수도 있습니다. 연결 지향적인 WSP와 다음과 같은 WAP 프로토콜 스택 구성 및 베어러만 지원됩니다.
- WAP/UDP/IPv4/PPP/CSD
- WAP/UDP/IPv4/GPRS
여기서 WAP는 다음 중 하나일 수 있습니다.
- WSP/WTP/WTLS 또는
- WSP/WTP
([WAP\_WDPS.]에서 SMS 또는 USSD 기반의 베어러와 같은 다른 베어러는 지원되지 않습니다.) 이러한 제한 사항은 WAP 환경의 MIDP 프로비저닝에서 상호 운용성을 최대화하기 위한 것입니다.
무선 네트워크와 최종 사용자 장치의 기능에 따라 IP 연결을 얻기 위해 다른 기법을 사용할 수도 있습니다. 이러한 기법과 각 기법에 요구되는 구성은 본 문서의 범위에서 벗어납니다.
### 단말기 요구 사항 및 권장 사항
이 절에는 WAP 단말기와 관련된 요구 사항 및 권장 사항이 나열되어 있습니다. 단말기와 게이트웨이에 공통된 요구 사항과 권장 사항은 단말기 절과 게이트웨이 절에 모두 나와 있습니다.
WAP 단말기는 WAP June2000 규격이어야 합니다.
*특히 다음과 같은 사항이 중요합니다.*
- 앞의 절에서 설명한 것처럼 JAD 및 JAR MIME 유형을 지원해야 합니다.
- HTTP 인증(서버 응답 401 및 407)을 지원해야 합니다.
- 단말기에서 프로비저닝 서버로의 POST 메시지를 지원해야 합니다.
### WAP 사양에 추가된 요구 사항 및 권장 사항
WSP를 통해 HTTP 연결이 구현되는 경우, HTTP의 시스템 구현은 MIDlet이 HTTP 요청을 할 때 요청 헤더 "*Accept: \*/\**"를 GET 및 POST 요청에 추가해야 합니다. 하지만 MIDlet은 비어 있지 않은 *Accept* 헤더를 요청에 포함시키지 않습니다. 이렇게 하면 WAP 게이트웨이에 항상 명시적 유형 집합이 있게 되며 요청된 데이터를 전달합니다. 이것은 개념적으로 HTTP 요청에 대한 *Accept* 헤더를 제외시키는 것과 같습니다. 어떤 변화도 없습니다(MIDlet의 *게이트웨이의 요구 사항 및 권장 사항)
이 절에서는 WAP 게이트웨이와 관련된 요구 사항 및 권장 사항이 열거되어 있습니다. 이는 WAP 기반의 MIDlet 프로비저닝을 계획할 때 이러한 사항을 고려하도록 하기 위한 것입니다.
WAP 게이트웨이는 WAP
June2000 규격이어야 합니다.
*특히 다음과 같은 사항이 중요합니다.*
- JAD 및 JAR MIME 유형을 지원해야 합니다. WAP 게이트웨이는 이러한 MIME 유형의 HTTP 프록시 규칙(RFC2616)을 준수해야 합니다.
- HTTP 인증(서버 응답 401 및 407)을 지원해야 합니다.
- 단말기 요청에 ">*Accept: \*/\**" 헤더가 포함되어 있으면 모든 종류의 데이터를 단말기로 전달해야 합니다.
- 단말기에서 프로비저닝 서버로의 POST 메시지를 지원해야 합니다.
### MIDlet/MIDlet Suite 권장 사항
MIDlet은 연결 설정이 오래 지연되고 연결을 오래 사용하지 않는 경우에도 제대로 작동하는 것이 좋습니다. 연결 설정이 오래 지연되면 회로 전환 데이터 연결에 영향을 주고, 연결을 오래 사용하지 않으면 GPRS 연결에 영향을 줍니다.
### 참조 자료
1. OTA
Over The Air User Initiated Provisioning for Mobile Information Device Profile
2. MIDP
Mobile Information Device Profile Specification 1.0, http://jcp.org/jsr/detail/37.jsp
3. MIDP 2.0
Mobile Information Device Profile Specification 2.0, http://jcp.org/jsr/detail/118.jsp
4. WAP\_JUNE2000
WAP June2000 Conformance Release, http://www.wapforum.org/what/technical.htm
5. WAP\_WDPS
WAP Wireless Datagram Protocol Specification, http://www.wapforum.org/what/technical.htm
### 용어
- CSD = Circuit Switched Data
- GPRS = General Packet Radio Service
- PPP = Point-to-Point Protocol
- SMS = Short Message Service
- USSD = Unstructured Supplementary Services Data
- WAP = Wireless Application Protocol
- WSP = Wireless Session Protocol*
---
title: "MIDP 2.0 개요"
---
# MIDP(Mobile Information Device Profile), v2.0 (JSR-118)
### JCP 공개 초안 사양
### Java 2 Platform, Micro EditionTM
---
##### *Copyright 2000,2002, Motorola, Inc. and Sun Microsystems, Inc. 모든 권리는 저작권자의 소유입니다.*
**본 문서 및 관련된 모든 문서는 사양 라이센스 조항의 적용을 받습니다.**
---
### 머리말
본 문서는 Java 2 Platform, Micro Edition(J2METM)용 *MIDP (Mobile Information Device Profile) v2.0 사양*을 정의합니다.
J2ME *프로필*은 특정 수직 시장이나 업계의 장치 유형별 API 집합을 정의합니다. 프로필에 대해서는 관련 발행물인 *Configurations and Profiles Architecture Specification*, Sun Microsystems, Inc.에서 보다 정확하게 정의합니다.
### 개정 기록
| 날짜 | 버전 | 설명 |
| --- | --- | --- |
| 2000년 9월 1일 | MIDP 1.0 사양 | 최종 MIDP 1.0 사양 |
| 2001년 10월 23일 | MIDP 2.0, EG 초안 2 | 전문가 그룹에게 발행된 최초의 완전한 초안 |
| 2001년 11월 6일 | MIDP 2.0, EG 초안 3 | 10월 30-31일에 개최된 전문가 그룹 회의에서 확정된 변경 사항 통합 |
| 2001년 11월 20일 | MIDP 2.0, EG 초안 4 | EG 메일링 목록에서 논의된 변경 사항 통합 |
| 2001년 12월 18일 | MIDP 2.0, EG 초안 5 | 12월 5-6일에 개최된 전문가 그룹 회의 및 EG 메일링 목록에서 확정된 변경 사항 통합. 커뮤니티 검토용으로 발행 |
| 2002년 2월 12일 | MIDP 2.0, EG 초안 6 | 커뮤니티 검토 및 내부 EG 메일링 목록에서 확정된 변경 사항 통합 |
| 2002년 3월 12일 | MIDP 2.0, EG 초안 7 | 2월 20-21일에 개최된 전문가 그룹 회의 및 EG 메일링 목록에서 확정된 변경 사항 통합. 공개 검토용으로 발행 |
| 2002년 4월 9일 | MIDP 2.0, EG 초안 8 | 3월 26일에 개최된 전문가 그룹 회의 및 EG 메일링 목록에서 확정된 변경 사항 통합 |
| 2002년 4월 23일 | MIDP 2.0, EG 초안 9 | EG 메일링 목록에서 논의된 변경 사항 통합 |
| 2002년 5월 9일 | MIDP 2.0, EG 초안 10 | EG 메일링 목록에서 논의된 변경 사항 통합 |
| 2002년 5월 29일 | MIDP 2.0, EG 초안 11 | EG 메일링 목록에서 논의된 변경 사항 통합 |
| 2002년 6월 11일 | MIDP 2.0, EG 초안 12 | EG 메일링 목록에서 논의된 변경 사항 통합. 이 초안은 모든 영역의 기능 면에서 최종본으로 간주됩니다. 필요한 경우 추가 설명과 편집 변경을 위해 하나 이상의 개정본을 발행할 수도 있습니다. |
| 2002년 7월 15일 | MIDP 2.0, EG 초안 13 | EG 메일링 목록에서 논의된 편집 변경 및 설명 통합. 최종 초안 후보 1입니다. |
| 2002년 8월 2일 | MIDP 2.0, EG 초안 14 | RI 및 TCK 팀과 EG의 편집 변경과 설명 통합. 이 초안은 제안된 최종 초안으로 PMO에 제출되었습니다. |
| 2002년 9월 4일 | MIDP 2.0, EG 초안 15 | RI 및 TCK 팀과 EG의 사소한 편집 변경 및 설명 통합 |
| 2002년 11월 5일 | MIDP 2.0, 최종 사양 | 보안 정책 부록에 사소한 변경 사항 통합, 잘못된 IETF URL과 MIDlet.platformRequest() 메소드 서명 수정, 저작권 공동 소유권 최종 확정, 최종 사용권 통합 |
### 본 사양의 사용자
본 문서는 다음 사용자를 주요 대상으로 합니다.
- 이 프로필을 정의하는 Java Community Process (JCP) 전문가 그룹
- MIDP 구현자
- MIDP를 대상으로 하는 응용 프로그램 개발자
- MIDP 장치를 지원하는 인프라를 배포하는 네트워크 운영자
### 본 사양의 구성 방법
본 사양은 HTML 파일과 다음 관련 문서에 포함되어 있습니다.
- JavaDoc API 설명서
- OTA User Initiated Provisioning 사양
- MIDlet Suite 보안
- GSM/UMTS 호환 장치에 권장되는 보안 정책
본 문서와 API 설명서에는 요구 사항이 명시되어 있습니다. 서로 충돌하는 항목이 있을 경우 본 문서에 명시된 요구 사항이 API 설명서보다 우선합니다.
### 관련 문서
- *The Java Language Specification, Second Edition* by James Gosling, Bill Joy, and Guy L. Steele. Addison-Wesley, June 2000, ISBN 0-201-31008-2
- *The Java Virtual Machine Specification (Java Series), Second Edition* by Tim Lindholm and Frank Yellin. Addison-Wesley, 1999, ISBN 0-201-43294-3
- Connected, Limited Device Configuration (JSR-30), Sun Microsystems, Inc.
- Mobile, Information Device Profile (JSR-37), Sun Microsystems, Inc.
- Connected, Limited Device Configuration 1.1 (JSR-139), Sun Microsystems, Inc.
### 보고 및 연락처
본 사양에 대한 사용자 의견에 항상 귀를 기울이고 있습니다. 의견이 있으면 다음 전자 우편 주소로 보내 주십시오.
*jsr-118-comments@jcp.org*
### 정의
본 문서에서 사용하는 정의는 RFC 2119에 규정된 정의를 기반으로 합니다.
**사양 용어**
| 용어 | 정의 |
| --- | --- |
| 해야 합니다 | 관련된 정의는 이 사양의 절대 요구 사항입니다. |
| 해서는 안 됩니다 | 이 사양의 절대 금지 사항입니다. |
| 하는 것이 좋습니다 | 권장되는 방법을 나타냅니다. 이 권장 사항을 무시해야 하는 상황과 이유가 있을 수도 있지만 다른 방식을 선택하기 전에 함축된 모든 의미를 이해하고 신중하게 판단해야 합니다. |
| 하지 않는 것이 좋습니다 | 권장되지 않는 방법을 나타냅니다. 특정 동작이 허용되거나 심지어 도움이 되는 상황과 이유가 있을 수도 있지만, 이 용어로 설명된 동작을 구현하려는 경우 먼저 함축된 모든 의미를 이해하고 신중하게 판단해야 합니다. |
| 할 수도 있습니다 | 전적으로 사용자 선택에 따라 결정되는 항목을 나타냅니다. |
### 공헌자
본 사양은 JSR-118 전문가 그룹에 의해 Java Community Process의 일부로 작성되었습니다. 아래에는 전문가 그룹에 속해 있는 회사와 개인이 알파벳 순서로 나열되어 있습니다.
- 회사:
- 4thpass Inc
- AGEA Corporation
- Alcatel
- Aplix Corporation
- AromaSoft Corp
- Baltimore Technologies
- CELLon France
- Distributed Systems Technology Centre
- Elata PLC
- Esmertec
- Espial Group Inc
- France Telecom / Orange
- Fujitsu Limited
- German Aerospace Center (DLR), Institute of Communications and Navigation
- Hitachi Ltd./Digital Media Group
- In Fusio
- J-PhoneEast Co. Ltd
- Logica Mobile Networks
- Mitsubishi Electric Corp
- Mobile Scope AG
- Mobilitec
- Motorola
- NEC Corporation
- Nextel Communications Inc
- Nokia
- NTT DoCoMo, Inc
- Omnitel Pronto Italia S.p.A
- One 2 One
- Openwave Systems, Inc
- Orange (UK)
- Palm
- Philips Consumer Communications
- Philips Semiconductors
- Research In Motion (RIM)
- Samsung Electronics Co., Ltd
- Sharp Labs
- Siemens AG
- Siemens ICM
- Smart Fusion
- Sony Ericsson Mobile Communications
- Sun Microsystems, Inc
- Symbian Ltd
- Telefonica Moviles Espana
- Vaultus, Inc
- Veloxsoft, Inc
- Vodafone Global Platform & Internet Services
- Vodafone Group Services Limited
- Vodafone Multimedia
- Zucotto Wireless
- 개인:
- Fabio Ciucci
- Glen Cordrey
- Jon Eaves
- David Hook
- Myank Jain
- Neil Katin
- Steve Ma
- Ravi Reddy
- Wai Kit Tony Fung
---
### 소개
Java Specification Request (JSR) 118의 결과로 만들어진 본 문서는 Java 2 Platform, Micro Edition(J2METM)용 MIDP (Mobile Information Device Profile) v2.0을 정의합니다. 본 사양은 MID (Mobile Information Device)용 개방형 타사 응용 프로그램 개발 환경을 지원하는 데 필요한 향상된 구조 및 관련 API를 정의하는 것을 목적으로 합니다.
MIDP 2.0 사양은 MIDP 1.0 사양을 기반으로 하며, 이전 버전인 MIDP 1.0과 호환되므로 MIDP 1.0용으로 작성된 MIDlet을 MIDP 2.0 환경에서도 실행할 수 있습니다.
MIDP는 *Connected, Limited Device Configuration (JSR-30)*, Sun Microsystems, Inc.에 설명된 Connected, Limited Device Configuration (CLDC)에서 작동하도록 설계되었습니다. MIDP 2.0 사양은 CLDC 1.0 기능만 가정하여 만들어졌지만 *CLDC 1.1 (JSR-139)* 및 최신 버전에서도 제대로 작동할 것입니다. 대부분의 MIDP 2.0 구현은 CLDC 1.1을 기반으로 할 것으로 예상됩니다.
### 범위
MID (Mobile Information Device)는 광범위한 잠재적 기능 집합을 포괄합니다. MIDP 1.0 (JSR-037) 및 MIDP 2.0 (JSR-118) 전문가 그룹은 이러한 기능을 직접 다루지 않고 지정된 API 집합을 제한하여 광범위한 이식성과 성공적 배포를 위해 반드시 필요한 기능 영역만 다루는 데 동의했습니다. 여기에는 다음과 같은 기능 영역이 포함됩니다.
- 응용 프로그램 전달 및 요금 청구
- 응용 프로그램 라이프사이클(즉, MIDP 응용 프로그램의 의미 체계와 제어 방법 정의)
- 응용 프로그램 서명 모델 및 권한 있는 도메인 보안 모델
- 종단 간 트랜잭션 보안(https)
- MIDlet 푸시 등록(서버 푸시 모델)
- 네트워킹
- 영구 저장소
- 사운드
- 타이머
- 사용자 인터페이스(UI)(디스플레이, 입력, 고유한 게임 요구 사항 포함)
위의 기능에 대해서는 관련 Javadoc에서 자세히 설명합니다.
같은 논리에 의해 일부 기능 영역은 MIDP의 범위에서 벗어난 것으로 간주되었습니다. 여기에는 다음과 같은 기능 영역이 포함됩니다.
- 시스템 수준 API: MIDP API에서는 시스템 프로그래밍이 아닌 응용 프로그램 프로그래머 지원을 강조합니다. 따라서 MID의 전원 관리나 음성 CODEC에 대한 시스템 인터페이스를 지정하는 낮은 수준 API는 본 사양의 범위에서 벗어납니다.
- 낮은 수준의 보안: MIDP는 CLDC에서 제공하는 보안 기능 외에 어떠한 추가적인 낮은 수준의 보안 기능도 규정하지 않습니다.
### 구조
이 절에서는 구현자와 개발자가 MIDP를 구현 및 개발할 때 부딪치게 되는 문제에 대해 설명합니다. 포괄적이지는 않지만 이 장의 내용은 MIDP 전문가 그룹(MIDPEG)의 논의 중에 제기되었던 가장 중요한 문제들을 반영합니다.
앞에서 설명한 것처럼 MIDP는 MID를 위한 개방형 타사 응용 프로그램 개발 환경을 만드는 것을 목적으로 합니다. 이상적이라면 본 사양은 MIDP 사양에서 정의된 기능만 다루면 됩니다. 하지만 실제로 MIDP 사양을 구현하는 대부분의 장치는, 최소한 초기에는 현재 시장에 출시되어 있는 장치가 될 것입니다. 높은 수준의 구조에서는 MIDP가 어떻게 장치에 적용되는지를 높은 수준에서 보여줍니다. 이 그림에 표시된 모든 요소가 MIDP 사양을 구현하는 장치에 반드시 포함되는 것은 아닙니다. 또한 모든 장치가 해당 소프트웨어를 이 그림에 설명된 것처럼 배치하지도 않습니다.
높은 수준의 구조에서 낮은 수준 블록(MID)은 MID 하드웨어를 나타냅니다. 이 하드웨어 위에는 원시 시스템 소프트웨어가 있습니다. 이 계층에는 장치에서 사용하는 운영 체제와 라이브러리가 포함됩니다.
다음 수준부터 시작하여 왼쪽에서 오른쪽으로 소프트웨어의 다음 계층인 CLDC가 있습니다. 이 블록은 CLDC 사양에서 정의된 가상 머신 및 관련 라이브러리를 나타냅니다. 높은 수준의 Java API를 구축할 수 있는 기본 Java 기능을 제공합니다.
###### 높은 수준의 구조 보기

API의 두 범주는 CLDC 위에 표시되어 있습니다.
- MIDP API: 본 사양에서 정의된 API 집합
- OEM별 API: MIDP 영역에 포함된 광범위한 장치를 감안할 때 모든 장치 요구 사항을 완벽하게 다룬다는 것은 불가능합니다. 지정된 장치에 고유한 특정 기능을 액세스하기 위한 이러한 클래스는 OEM이 제공할 수 있으며 이 응용 프로그램은 다른 MID로 이식할 수 없습니다.
이 그림에서 CLDC는 MIDP와 장치별 API의 기반으로 표시되어 있습니다. 그렇다고 해서 API가 원시 기능(즉, 선언된 원시 메소드)을 가질 수 없다는 것은 아닙니다. 오히려 이 그림에서는 MID의 모든 원시 메소드가 실제로 Java 수준의 API를 기본 원시 구현에 매핑하는 가상 머신의 일부라는 것을 보여 주려고 합니다.
위의 그림에서 맨 위에 있는 블록은 MID에서 사용 가능한 응용 프로그램 유형을 나타냅니다. 아래 표에는 각 응용 프로그램 유형에 대한 간략한 설명이 나와 있습니다.
**MID 응용 프로그램 유형**
| 응용 프로그램 유형 | 설명 |
| --- | --- |
| MIDP | MIDP 응용 프로그램, 즉 MIDlet은 MIDP 및 CLDC 사양에서 정의된 API만 사용합니다. 이 응용 프로그램 유형은 MIDP 사양에서 중심을 이루고 있으며, MID에서 가장 일반적인 응용 프로그램 유형이 될 것으로 예상됩니다. |
| OEM 고유 | OEM 고유 응용 프로그램은 MIDP 사양에 속하지 않는 클래스(즉, OEM 고유 클래스)를 사용합니다. 이러한 응용 프로그램은 다른 MID로 이식할 수 없습니다. |
| 원시 | 원시 응용 프로그램은 Java로 작성되지 않고 MID의 기존 원시 시스템 소프트웨어를 바탕으로 구축되는 프로그램입니다. |
OEM 고유 응용 프로그램이나 원시 응용 프로그램을 다루는 것은 본 사양의 범위에서 벗어납니다.
### 장치 요구 사항
이 장에 나열된 요구 사항은 *Connected, Limited Device Configuration (JSR-30 and JSR-139)*, Sun Microsystems, Inc.에 수록된 요구 사항에 대한 추가 사항입니다.
높은 수준의 MIDP 사양은 MID의 처리 능력, 메모리, 연결 및 디스플레이 크기가 제한되어 있다고 가정합니다.
#### 하드웨어
앞에서 설명한 것처럼 MIDP는 MID를 위한 개방형 타사 응용 프로그램 개발 환경을 만드는 것을 목적으로 합니다. 이 목적을 달성하기 위해 MIDPEG는 MID의 최소 요구 사항을 다음과 같이 정의했습니다.
- 디스플레이:
- 화면 크기: 96x54
- 디스플레이 깊이: 1비트
- 픽셀 모양(가로 세로비): 약 1:1
- 입력:
- 사용자 입력 기법(한손 키보드, 양손 키보드 또는 터치 스크린) 중 하나 이상
- 메모리:
- MIDP 구현에 256KB의 비휘발성 메모리(CLDC 요구 사항보다 큼)
- 응용 프로그램에서 작성된 영구 데이터에 8KB의 비휘발성 메모리
- Java 런타임(예: Java 힙)에 128KB의 휘발성 메모리
- 네트워킹:
- 제한된 대역폭을 사용한 단속적(가능한 경우) 양방향 무선
- 사운드:
- 전용 하드웨어나 소프트웨어 알고리즘을 통한 톤 재생 기능
MID의 예로는 휴대폰, 양방향 호출기, 무선 지원 PDA 등이 있습니다.
#### 소프트웨어
앞에서 설명한 하드웨어 특성을 갖춘 장치도 광범위한 시스템 소프트웨어 기능을 제공할 수 있습니다. 지배적인 대규모 시스템 소프트웨어 구조가 있는 소비자 데스크탑 컴퓨터 모델과 달리 MID 영역은 다양한 시스템 소프트웨어를 이용합니다. 예를 들어, 일부 MID는 다중 처리 및 계층 구조적 파일 시스템을 지원하는 완전한 기능의 운영 체제를 이용하지만 파일 시스템 없이 스레드 기반의 작은 운영 체제를 이용하는 MID도 있습니다. 이러한 다양성 때문에 MIDP는 MID의 시스템 소프트웨어에 대한 가정을 최소화합니다. 요구 사항은 다음과 같습니다.
- 기본 하드웨어를 관리하기 위한 최소 커널(즉, 인터럽트, 예외 및 최소 예약 처리). 이 커널은 Java Virtual Machine (JVM)을 실행할, 예약 가능한 엔티티를 최소 하나 이상 제공해야 합니다. 커널에서 별도의 주소 공간(또는 프로세스)을 지원하거나 실시간 예약 또는 대기 시간 동작에 대한 어떠한 보증을 할 필요는 없습니다.
- 영구 저장소에 대한 RMS (Record Management System) API의 요구 사항을 지원하기 위해 비휘발성 메모리에서 읽고 쓰는 기법
- 네트워킹 API를 지원하기 위한, 장치 무선 네트워킹에 대한 읽기 및 쓰기 액세스
- 영구 저장소에 기록된 레코드의 타임 스탬프에 사용할 기본 시간을 제공하고 타이머 API의 기반을 제공하는 기법
- 비트맵 그래픽 디스플레이로 쓰는 최소 기능
- 앞에서 설명한 세 가지 입력 기법 중 하나 이상으로부터 사용자 입력을 캡처하는 기법
- 장치의 응용 프로그램 라이프사이클을 관리하는 기법
### 사양 요구 사항
이 절에는 본 사양의 명시적 요구 사항이 나열되어 있습니다. 다른 요구 사항은 관련 Javadoc에서 찾을 수 있습니다. 여기에 나열된 요구 사항이 본 사양의 다른 부분에 나열된 요구 사항과 다를 경우 이 요구 사항이 우선하며 충돌하는 요구 사항을 대신합니다.
호환되는 MIDP 2.0 구현:
- MIDP 1.0 및 MIDP 2.0 MIDlet과 MIDlet Suite를 지원해야 합니다.
- 본 사양에 설명된 모든 패키지, 클래스 및 인터페이스를 포함해야 합니다.
- OTA User Initiated Provisioning 사양을 구현해야 합니다.
- 푸시를 위해 0개 이상의 지원 프로토콜을 통합할 수도 있습니다.
- 본 사양에 설명된 기법을 사용할 때의 네트워크 사용을 사용자에게 시각적으로 표시해야 합니다.
- CommConnection 인터페이스를 통해 장치에서 사용 가능한 직렬 포트를 액세스할 수 있도록 지원할 수도 있습니다.
- HTTP 1.1 서버 및 서비스를 직접 또는 WAP나 i-mode와 같은 게이트웨이 서비스를 사용하여 액세스할 수 있도록 지원해야 합니다.
- 보안 HTTP 연결을 직접 또는 WAP나 i-mode와 같은 게이트웨이 서비스를 사용하여 지원해야 합니다.
- 데이터그램 연결을 지원하는 것이 좋습니다.
- 서버 소켓 스트림 연결을 지원하는 것이 좋습니다.
- 소켓 스트림 연결을 지원하는 것이 좋습니다.
- 보안 소켓 스트림 연결을 지원하는 것이 좋습니다.
- PNG 이미지 투명성을 지원해야 합니다.
- 다른 이미지 형식을 추가로 지원할 수도 있습니다.
- 미디어 패키지에서 톤 생성을 지원해야 합니다.
- 샘플 사운드가 지원되는 경우 8비트의 8KHz 모노 선형 PCM wav 형식을 지원해야 합니다.
- 다른 샘플 사운드 형식을 추가로 지원할 수도 있습니다.
- 합성 사운드가 지원되는 경우 Scalable Polyphony MIDI(SP-MIDI) 및 SP-MIDI Device 5-to-24 Note Profile을 지원해야 합니다.
- 다른 MIDI 형식을 추가로 지원할 수도 있습니다.
- "신뢰할 수 없는 MIDlet Suite"를 지원하는 데 필요한 기법을 구현해야 합니다.
- 장치 보안 정책에서 신뢰할 수 없는 응용 프로그램을 허용하거나 지원하지 않는 경우 "신뢰할 수 있는 MIDlet Suite 보안"을 구현해야 합니다.
- 장치가 PKI를 사용하여 응용 프로그램을 서명하지 않는 경우 서명된 MIDlet Suite를 신뢰할 수 있는 것으로 인식하도록 "X.509 PKI를 사용한 신뢰할 수 있는 MIDlet Suite"를 구현해야 합니다.
- HTTPS 및 SecureConnections의 인증서 처리를 위한 "MIDP x.509 인증서 프로필"을 구현해야 합니다.
- javax.microedition.io의 패키지 설명서에 규정된 것처럼 미디어 API의 I/O 액세스에 일반 연결 프레임워크의 I/O 액세스와 동일한 보안 요구 사항을 시행해야 합니다.
- 응용 프로그램이 문자 인코딩을 정의할 수 있도록 하는 API에 대해 최소한 UTF-8 문자 인코딩을 지원해야 합니다.
- 다른 문자 인코딩을 지원할 수도 있습니다.
- 장치가 복사 방지 기법을 구현하지 않는 경우 어떠한 MIDle Suite의 복사본도 만들 수 없도록 하는 것이 좋습니다.
##### 참조 자료
1. Scalable Polyphony MIDI Specification Version 1.0, MIDI Manufacturers Association, Los Angeles, CA, USA, February 2002.
2. Scalable Polyphony MIDI Device 5-to-24 Note Profile for 3GPP Version 1.0, RP-35, MIDI Manufacturers Association, Los Angeles, CA, USA, February 2002.
---
title: "권장 보안 정책 — GSM/UMTS"
---
# GSM/UMTS 호환 장치에 권장되는 보안 정책
#### Mobile Information Device Profile 버전 2.0의 부록
---
## 본 문서의 범위
본 부록은 정보를 제공하기 위한 것입니다. 그러나 GSM/UMTS 호환 장치에서의 모든 MIDP 2.0 구현은 본 부록의 내용을 준수합니다.
MIDP 2.0은 MIDlet Suite의 소스를 인증하고, 장치에 대한 보안 정책을 바탕으로 요청된 권한을 부여하여 MIDlet Suite가 보호된 기능을 수행할 수 있도록 인증하는 프레임워크를 정의합니다. 또한, 보안에 취약한 기능을 식별하고 보호된 기능에 대한 사용 권한을 정의합니다. MIDP 2.0은 MIDP와 함께 사용할 수 있지만 MIDP와 별도로 지정되는 API에 대한 일반 규칙도 지정합니다. MIDP 2.0 사양은 단일 신뢰 모델을 규정하는 대신, 모델이 장치 트러스트 정책을 준수할 수 있도록 합니다.
본 부록은 MIDP 2.0에 정의된 기본 MIDlet Suite 보안 프레임워크를 확장하여 다음 영역을 정의하는 것을 목적으로 합니다.
- GSM/UMTS 호환 장치에 요구되는 신뢰 모델
- 장치 보안 정책에 명시된 도메인 번호와 구조
- 장치 외부의 소스로부터 루트 키를 읽는 기법
- MIDP 2.0 및 다른 JSR에 의해 정의된 권한에 따른 MIDlet의 기능
- 로밍 네트워크에서의 MIDlet 동작
- SIM/USIM 변경 시의 MIDlet 동작
- 사용자 권한 유형의 사용
- 사용자 프롬프트 및 알림에 대한 지침
## 본 사양의 구성 방법
본 사양은 다음과 같이 구성되어 있습니다.
2절에서 4절까지는 장치 보안 정책, 다른 보호 도메인 및 스마트 카드의 인증서 저장과 관련된 요구 사항 간의 관계에 대해 규정합니다. 5절에서는 기능 그룹을 지정하고, MIDP 2.0 보안 프레임워크를 사용하여 보호해야 하는 API 및 권한을 식별합니다. 6절과 7절에서는 권한이 부여될 때 준수해야 하는 규칙과 사용자 알림에 대한 요구 사항을 지정합니다. 마지막으로 8절에서는 로밍 중 및 스마트 카드 변경 후의 MIDlet 동작을 지정합니다.
## 참조 자료
1. Connected Limited Device Configuration (CLDC)
http://jcp.org/jsr/detail/30.jsp
2. Mobile Information Device Profile (MIDP) 2.0
http://jcp.org/jsr/detail/118.jsp
3. HTTP 1.1 Specification
http://www.ietf.org/rfc/rfc2616.txt
4. WAP Wireless Identity Module Specification (WIM) WAP-260-WIM-20010712-a
http://www.wapforum.org/what/technical.htm
5. WAP Smart Card Provisioning (SCPROV) WAP-186-ProvSC-20010710-a
http://www.wapforum.org/what/technical.htm
6. PKCS#15 v.1.1
http://www.rsasecurity.com/rsalabs/pkcs/pkcs-15/
7. USIM, 3GPP TS 31.102: "Characteristics of the USIM applications"
http://www.3gpp.org
8. RFC3280
http://www.ietf.org/rfc
## 1 일반 사항
이 권장 보안 정책을 구현하는 GSM/UMTS 호환 장치는 MIDP 2.0에 규정된 보안 프레임워크를 준수해야 합니다. 또한, 신뢰할 수 있는 MIDlet을 지원하는 장치는 MIDP 2.0 사양에 정의된 PKI 기반의 인증 체계를 따라야 합니다.
## 2 장치 보안 정책에서의 보호 도메인
도메인은 MIDlet Suite를 서명한 엔티티에 따라 다운로드한 MIDlet Suite를 구분하고, MIDlet Suite에 특정 권한 집합을 부여하거나 허용하는 방법입니다. 도메인은 보호 도메인 루트 인증서를 특정 권한 집합에 바인드합니다. 권한은 보호 도메인 보안 정책에서 규정되며 장치에서 사용할 수 있는 보호 도메인 개수만큼의 항목이 정책에 포함됩니다. id-kp-codeSigning 확장 키 사용 확장자가 포함된 보호 도메인 루트 인증서가 있어야만 도메인으로 인정됩니다. 신뢰할 수 있는 보호 도메인 루트 인증서를 인증하는 MIDlet Suite는 신뢰할 수 있는 것으로 간주되어 해당 보호 도메인에 할당됩니다. MIDlet Suite는 두 개 이상의 보호 도메인에 속할 수 없습니다. 도메인과 해당 보안 정책을 나타내는 방법은 구현별로 달라집니다.
## 3 보호 도메인 및 권한 프레임워크
본 문서에서는 응용 프로그램이 실행하는 보호 도메인에 따라 MIDP 권한 프레임워크를 어떻게 사용해야 하는지에 관해 두 가지 요구 사항을 규정합니다.
**제조업체 및 운영자 도메인** - MIDlet Suite는 보안에 취약한 API 및 기능에 액세스할 때 사용자로부터 권한을 받는 것이 좋습니다. MIDP 2.0 및 다른 API에 의해 정의된 권한은 어떤 기능이 보안에 취약하며 보호해야 하는지에 대한 지침을 제공합니다. 운영자가 신뢰할 수 있는 MIDlet은 보안상 보호된 이러한 기능에 액세스할 때 필요하면 사용자에게 지속적으로 프롬프트와 알림을 표시합니다.
**타사 및 신뢰할 수 없는 도메인** - 장치 구현 시 본 문서의 표 1 - 표 6에 규정된 보안 정책에 따라 사용자에게 메시지를 표시해야 합니다.
#### 3.1 제조업체 도메인
신뢰할 수 있는 제조업체 보호 도메인 루트 인증서는 제조업체 MIDlet Suite를 확인하는 데 사용됩니다. 제조업체 보호 도메인 루트 인증서는 장치상의 제조업체 도메인 보안 정책에 매핑해야 합니다. 장치는 제조업체 도메인의 보안 정책을 지원해야 합니다.
장치에서 제조업체 보호 도메인 루트 인증서를 사용할 수 없으면 제조업체 도메인을 사용할 수 없게 해야 합니다.
제조업체 보호 도메인 루트 인증서는 해당 제조업체만 삭제 또는 수정할 수 있습니다. 제조업체는 세부 정보가 본 사양의 범위에서 벗어나는 업데이트 기법을 사용할 수도 있습니다. 새로 작성되었거나 업데이트된 제조업체 보호 도메인 루트 인증서는 장치상의 제조업체 도메인 보안 정책에 연결해야 하며, 이전의 제조업체 보호 도메인 루트 인증서로 확인된 MIDlet Suite는 사용할 수 없게 해야 합니다.
제조업체 도메인에서의 권한은 모두 *허용*으로 표시됩니다(정의는 MIDP 2.0 참조). 제조업체 도메인에서 *허용*으로 권한을 부여한 경우 다운로드하여 인증된 제조업체 MIDlet Suite는 사용자 확인이 필요한 이벤트가 발생할 때마다 사용자에게 메시지 표시 및 보안과 관련하여 제조업체에서 미리 설치한 MIDlet Suite와 일관되게 작동합니다. 제조업체 MIDlet은 보안에 취약한 API 및 기능에 액세스할 때 사용자로부터 권한을 받는 것이 좋습니다. MIDP 2.0 및 다른 API에 의해 정의된 권한은 어떤 기능이 보안에 취약하며 보호해야 하는지에 대한 지침을 제공합니다.
MIDlet Suite 설치에서는 제조업체 보호 도메인 루트 인증서의 제목 필드에 *조직* 및 *국가* 필드가 있을 경우 구현 시 사용자에게 *조직* 및 *국가* 필드를 제공해야 합니다. *조직* 및 *국가* 필드가 없으면 구현 시 사용자에게 제목 필드의 다른 해당 정보를 제공해야 합니다. 구현 시 제목 필드에 있는 *조직* 및 *국가* 필드 이외의 추가 정보를 항상 사용자에게 제공할 수도 있습니다. 이 사용자 알림은 응용 프로그램 설치 시 표시되어야 합니다.
제조업체 도메인은 MIDP 2.0 및 다른 JSR에 규정된 기능에 대해 어떤 제한도 두지 않습니다.
#### 3.2 운영자 도메인
신뢰할 수 있는 운영자 보호 도메인 루트 인증서는 운영자 MIDlet Suite를 확인하는 데 사용됩니다. SIM, USIM 또는 WIM의 지정된 위치에서 사용 가능한 신뢰할 수 있는 운영자 보호 도메인 루트 인증서의 수에는 어떠한 명시적 제한도 없습니다. 신뢰할 수 있는 운영자 보호 도메인 루트 인증서는 장치상의 운영자 도메인 보안 정책에 매핑해야 합니다. 장치는 운영자 도메인의 보안 정책을 지원해야 합니다.
SIM, USIM 또는 WIM의 지정된 위치에서 운영자 보호 도메인 루트 인증서를 사용할 수 없으면 운영자 도메인을 사용할 수 없게 해야 합니다.
신뢰할 수 있는 보호 도메인 루트 인증서는 신뢰할 수 있는 인증서 [WIM]의 Certificate Directory File (CDF)에서 읽어옵니다. WIM상의 trustedCertificates 파일에 있는 보호 도메인 루트 인증서는 인증서 [PKCS#15]와 연결된 CommonCertificateAttributes의 trustedUsage 필드에 따라 운영자 도메인이나 신뢰할 수 있는 타사 도메인으로 매핑됩니다.
> trustedUsage 필드가 있으며 키 사용 OID "*iso(1)org(3)dod(6)internet(1)private(4)enterprises(1)sun(42)*
> *products(2)javaXMLsoftware(110)midp(2)spec(2)gsm-policy(2)operator(1)*"가 포함되어 있으면 이 인증서는 운영자 도메인으로 매핑됩니다.
>
> trustedUsage 필드가 없거나 키 사용 "운영자 도메인"의 OID가 포함되어 있지 않으면 인증서는 신뢰할 수 있는 타사 도메인으로 매핑됩니다.
운영자가 신뢰할 수 있는 보호 도메인 루트 인증서는 WIM, SIM 또는 USIM의 trustedCertificates Certificate Directory File (CDF)에 놓일 수 있습니다. 운영자 보호 도메인 루트 인증서가 WIM 응용 프로그램 아래가 아닌 SIM 또는 USIM에 직접 저장되는 경우에는 [SCPROV]에 정의된 것처럼 DF(PKCS#15) 아래에 있는 EF trustedCertificates CDF에 저장될 것입니다. 운영자 보호 도메인 루트 인증서는 신뢰할 수 있는 CDF(카드 소유자는 이 디렉토리를 업데이트할 수 없음)에서만 가져올 수 있으며, 스마트 카드의 다른 디렉토리에서는 운영자 루트 인증서를 가져올 수 없습니다.
신뢰할 수 있는 모든 운영자 보호 도메인 루트 인증서는 장치상의 동일한 운영자 도메인 보안 정책에 매핑해야 합니다. 운영자 도메인은 사용자나 타사에서 삭제 또는 수정할 수 없으며, 장치에 지정된 기능에 의해서만 삭제 또는 수정될 수 있습니다.
MIDlet Suite가 운영자 보호 도메인 루트 인증서로 인증된 경우 서명 및 인증된 MIDlet Suite에는 운영자 도메인에 대한 권한이 부여되어야 합니다. 운영자 루트 공개 키는 현재 삽입되어 사용 가능한 스마트 카드의 신뢰할 수 있는 CDF의 인증서에서 가져와야 하며, 스마트 카드 또는 장치의 다른 위치에서 가져올 수 없습니다. MIDlet Suite 설치에서는 운영자 보호 도메인 루트 인증서의 *제목* 필드에 *조직* 및 *국가* 필드가 있을 경우 구현 시 사용자에게 *조직* 및 *국가* 필드를 제공해야 합니다. *조직* 및 *국가* 필드가 없으면 구현 시 사용자에게 *제목* 필드의 다른 해당 정보를 제공해야 합니다. 구현 시 *제목* 필드에 있는 *조직* 및 *국가* 필드 이외의 추가 정보를 항상 사용자에게 제공할 수도 있습니다. 이 사용자 알림은 응용 프로그램 설치 시 표시되어야 합니다.
운영자 도메인의 보안 정책에는 장치상에 "*허용*"으로 구현된 모든 권한이 포함되어 있어야 합니다. 운영자 도메인에서 *허용*으로 권한을 부여한 경우 다운로드하여 인증된 운영자 MIDlet Suite는 사용자 확인이 필요한 이벤트가 발생할 때마다 사용자에게 메시지 표시 및 보안과 관련하여 운영자가 설치한 다른 MIDlet Suite와 일관되게 작동합니다. 운영자 MIDlet은 보안에 취약한 API 및 기능에 액세스할 때 사용자로부터 권한을 받는 것이 좋습니다. MIDP 2.0 및 다른 API에 의해 정의된 권한은 어떤 API 및 기능이 보안에 취약하며 보호해야 하는지에 대한 지침을 제공합니다. 운영자 도메인은 MIDP 2.0 및 다른 JSR에 규정된 기능에 대해 어떤 제한도 두지 않습니다.
운영자 도메인에 설치된 MIDlet Suite는 응용 프로그램 서명에 사용되는 서명 인증서를 발급하는 보호 도메인 루트 인증서 해시를 응용 프로그램과 함께 저장해야 합니다. 사용되는 해시 알고리즘은 보호 도메인 루트 인증서부터 시작하여 해당 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(태그, 길이 및 사용하지 않은 비트 수 제외)를 계산해야 합니다. 이 방법은 일반적으로 키 식별자를 계산하는 데 사용되며, 특히 신뢰 체인 구축 [RFC3280, §4.2.1.2]를 가속화합니다. 구현 시에는 최적화를 위해 X.509 키 식별자나 PKCS#15 레이블을 올바른 값으로 가정해서는 안 되며 해시 자체를 계산해야 합니다. 장치는 이 해시를 사용하여 8절에 규정된 대로 언제 지정된 MIDlet Suite를 사용할 수 없게 해야 하는지 결정해야 합니다.
#### 3.3 신뢰할 수 있는 타사 도메인
신뢰할 수 있는 타사 보호 도메인 루트 인증서는 타사 MIDlet Suite를 확인하는 데 사용됩니다. 장치상이나 SIM, USIM 또는 WIM의 지정된 위치에서 사용 가능한 신뢰할 수 있는 타사 보호 도메인 루트 인증서의 수에는 어떠한 명시적 제한도 없습니다(3.2절 참조). 신뢰할 수 있는 타사 보호 도메인 루트 인증서는 장치상의 신뢰할 수 있는 타사 도메인 보안 정책에 매핑해야 합니다. 장치는 신뢰할 수 있는 타사 도메인의 보안 정책을 지원해야 합니다. 장치상이나 SIM, USIM 또는 WIM의 지정된 위치에서 신뢰할 수 있는 타사 보호 도메인 루트 인증서를 사용할 수 없으면 신뢰할 수 있는 타사 도메인을 사용할 수 없게 해야 합니다.
장치 제조 후에 다운로드한 타사 보호 도메인 루트 인증서는 MIDlet Suite 인증에 사용해서는 안 됩니다. 그렇다고 해서 SIM, USIM 또는 WIM의 지정된 위치에서 신뢰할 수 있는 타사 보호 도메인 루트 인증서를 가져오는 것이 차단되지는 않습니다.
MIDlet Suite 설치에서는 MIDlet Suite 서명 인증서의 *제목* 필드에 *조직* 및 *국가* 필드가 있을 경우 구현 시 사용자에게 *조직* 및 *국가* 필드를 제공해야 합니다. *조직* 및 *국가* 필드가 없으면 구현 시 사용자에게 *제목* 필드의 다른 해당 정보를 제공해야 합니다. 구현 시 *제목* 필드에 있는 *조직* 및 *국가* 필드 이외의 추가 정보를 항상 사용자에게 제공할 수도 있습니다. 이 사용자 알림은 MIDlet Suite 설치 시 표시되어야 합니다. 응용 프로그램에 권한을 부여하라는 메시지를 사용자에게 표시할 경우 프롬프트는 위에서 설명한 것처럼 서명 인증서의 *제목* 필드에 있는 해당 필드를 사용하여 신뢰할 수 있는 소스를 식별해야 합니다.
사용자는 신뢰할 수 있는 타사 보호 도메인 루트 인증서를 삭제하거나 사용 불가능하게 할 수 있어야 합니다. 구현 시 타사 보호 도메인 루트 인증서를 삭제할 경우의 결과에 대해 사용자에게 경고하는 것이 좋습니다. 사용자는 사용할 수 없는 타사 보호 도메인 루트 인증서를 사용 가능하게 할 수 있어야 합니다. 사용할 수 없는 타사 보호 도메인 루트 인증서를 사용하여 다운로드한 MIDlet Suite를 확인해서는 안 됩니다. 또한, 타사 보호 도메인 루트 인증서가 삭제 또는 사용 불가능하게 된 경우(예: 사용자가 철회, 삭제 또는 사용 불가능하게 한 경우) 타사 도메인이 더 이상 이 보호 도메인 루트 인증서에 연결되어서는 안 됩니다. 사용자가 보호 도메인 루트 인증서를 삭제하거나 사용할 수 없도록 선택하면 구현 시 이 루트 인증서를 인증한 MIDlet Suite를 삭제할 수 있는 옵션을 제공해야 합니다.
신뢰할 수 있는 타사 도메인의 보안 정책에는 장치상에 "*허용*"으로 구현된 권한을 부여해서는 안 됩니다. 타사 도메인에서 부여된 모든 권한은 *사용자* 권한이어야 하므로 권한을 부여하려면 사용자 상호 작용이 필요합니다. 표 1에서는 타사 도메인의 MIDlet Suite에 사용할 수 있는 사용자 권한 유형과 기능 그룹을 규정합니다. 표 2 - 표 6에서는 권한과 API의 다른 기능 그룹으로의 매핑에 대해 지정합니다.
#### 3.4 신뢰할 수 없는 도메인
서명되지 않은 MIDlet Suite는 신뢰할 수 없는 도메인에 속하게 됩니다. 구현 시에는 신뢰할 수 없는 도메인에 새로운 MIDlet Suite가 설치될 때마다 사용자에게 이를 알려야 합니다. 알림은 응용 프로그램이 신뢰할 수 있는 도메인에서 온 것이 아님을 명확히 해야 합니다. 사용자는 응용 프로그램에 권한을 부여하기 전에 사용 가능한 정보에 따라 올바른 결정을 내릴 수 있어야 합니다.
응용 프로그램에 권한을 부여하라는 메시지를 사용자에게 표시할 경우 프롬프트는 응용 프로그램이 신뢰할 수 있는 도메인에서 온 것이 아님을 명확히 해야 합니다.
신뢰할 수 없는 MIDlet Suite는 JSR 075에 정의된 API(5절의 표 1과 표 3 참조)를 통해 PIM 데이터에 대한 읽기 액세스 권한을 직접 부여 받아서는 안 됩니다. 그러나 javax.microedition.lcdui package를 구현하여 신뢰할 수 없는 응용 프로그램과 PIM 데이터 간의 상호 작용을 사용 가능하게 할 수 있습니다. 응용 프로그램 프로그래머가 제약 조건 TextField.PHONENUMBER를 설정하면 TextField 클래스의 구현 시 사용자가 자신의 전화번호부에서 번호를 조회하여 TextField 항목에 복사하도록 제안할 수도 있습니다. 예를 들어, TextField 항목에 입력 포커스가 있으면 사용자는 메뉴를 사용하여 전화번호부에 들어갈 수 있습니다. 사용자가 전화번호부에서 항목을 선택하면 선택한 항목의 내용이 TextField 항목에 "복사"됩니다.
표 1에서는 신뢰할 수 없는 도메인의 MIDlet Suite에 사용할 수 있는 사용자 권한과 기능 그룹을 규정합니다. 표 2 - 표 6에서는 권한과 API의 다른 기능 그룹으로의 매핑에 대해 지정합니다.
## 4 원격 보안 정책
MIDP 2.0 사양은 이동식 미디어에서 읽을 수 있는 정책 파일의 일반 형식을 정의합니다. 첫 단계에서는 GSM/UMTS 호환 장치가 이 정책 파일을 사용하는 것이 아니라 장치에 있는 보안 정책을 사용합니다. 원격 보안 정책 파일의 가능성은 추후에 다시 고려해야 할 사항입니다.
## 5 다운로드한 MIDlet Suite의 권한
#### 5.1 MIDP 2.0 권한의 보호된 도메인 기능 그룹으로의 매핑
작은 디스플레이를 가진 장치는 단일 구성 설정 메뉴를 통해 사용자에게 친숙한 방식으로 모든 권한을 사용자에게 표시하지 못할 수도 있습니다. 따라서 장치는 모든 권한을 표시하여 사용자 확인을 받을 필요가 없습니다. 하지만 보호된 기능에 의해 시작된 고급 수준의 특정 작업은 사용자 승인을 받아야 합니다. 사용자에게 표시되는 고급 기능은 궁극적으로 각 기본 권한의 작업과 결과를 반영합니다. 다음과 같은 기능 그룹이 있습니다.
네트워크/비용 관련 그룹:
**전화 걸기** - 전화 통화를 발생시키는 모든 기능에 대한 권한을 나타냅니다.
**네트 액세스** - 활성 네트워크 데이터 연결을 발생시키는 모든 기능(예: GSM, GPRS, UMTS 등)에 대한 권한을 나타냅니다. 이러한 기능은 이 그룹에 매핑해야 합니다.
**메시징** - 메시지 전송 또는 수신을 허용하는 모든 기능(예: SMS, MMS 등)에 대한 권한을 나타냅니다.
**응용 프로그램 자동 호출** - MIDlet Suite를 자동으로 호출할 수 있도록 하는 모든 기능(예: 푸시, 시간 제한 MIDlet 등)에 대한 권한을 나타냅니다.
**로컬 연결** - 추가 연결을 위해 로컬 포트를 활성화하는 모든 기능(예: COMM 포트, IrDa, Bluetooth 등)에 대한 권한을 나타냅니다.
사용자 프라이버시 관련 그룹:
**멀티미디어 레코딩** - MIDlet Suite에서 스틸 이미지를 캡처하거나 비디오 또는 오디오 클립을 레코딩할 수 있도록 지원하는 모든 기능에 대한 권한을 나타냅니다.
**사용자 데이터 읽기 액세스** - MIDlet Suite에서 사용자의 전화번호부나 파일 또는 디렉토리의 다른 모든 데이터를 읽을 수 있도록 지원하는 모든 기능에 대한 권한을 나타냅니다.
**사용자 데이터 쓰기 액세스** - MIDlet Suite에서 사용자의 전화번호부나 파일 또는 디렉토리의 다른 모든 데이터를 추가하거나 수정할 수 있도록 지원하는 모든 기능에 대한 권한을 나타냅니다.
새로운 기능이 MIDP에 추가되면 해당 기능 그룹에 이 기능을 할당해야 합니다. 또한, 다른 JSR에서 지정되었지만 MIDP 보안 프레임워크를 사용하는 API도 해당 기능 그룹에 할당해야 합니다. 그러나 이 절에 정의된 기능 그룹 중에서 새 기능을 사용자에게 적절하게 표시할 수 있는 그룹이 없으면 본 문서에서 새 기능 그룹을 정의해야 합니다.
새로운 기능 그룹을 추가할 경우 다음을 고려해야 합니다. 이 그룹을 추가함으로써 기존 그룹이 중복되지 않아야 하며, 새 그룹이 다양한 유사 기능을 보호할 수 있어야 합니다. 두 번째 요구 사항은 좁은 범위의 그룹이 생기지 않도록 방지합니다.
사용자에게 메시지를 표시할 때는 개별 권한이 아닌 기능 그룹을 제공해야 합니다. 또한, 지정된 MIDlet Suite의 설정에서 사용자에게 제공해야 하는 것도 기능 그룹입니다.
표 1에는 MIDP 2.0에 정의된 보안 프레임워크를 사용하여 시행해야 하는 정책이 나와 있습니다. 이 표에서는 정의된 각 기능 그룹에 사용할 수 있는 권한 설정을 규정합니다. 처음 MIDlet Suite를 호출할 때 적용되며 사용자가 MIDlet Suite 구성 메뉴에서 변경할 때까지 계속 유효한 설정을 "기본 설정"이라고 합니다. 사용자가 구성 메뉴에서 선택하여 기본 설정을 바꿀 수 있는 설정을 "기타 설정"이라고 합니다. 기본 설정과 기타 설정이 MIDlet Suite에 사용할 수 있는 구성 설정 풀을 형성합니다. 각 기능 그룹과 보호 도메인에 기본 설정과 기타 설정이 제공됩니다. 기능 그룹의 이름은 구현별로 다르지만 본 문서에 정의된 기능 그룹 이름에 대한 지침과 이러한 그룹 정의를 따라야 합니다.
표 2 - 표 5에서는 MIDP 2.0과 다른 JSR에 정의된 각 권한을 보여주며 이 절에 지정된 기능 그룹에 매핑합니다. 각 권한은 한 개의 기능 그룹에만 사용되어야 합니다.
제조업체 및 운영자가 신뢰할 수 있는 MIDlet Suite는 표에 정의된 권한 지침을 준수하고, 보안상 보호된 기능을 식별할 수 있도록 사용자에게 적절한 프롬프트를 제공하는 것이 좋습니다.
표 1: 기능 그룹 및 사용자 설정| **기능 그룹** | **신뢰할 수 있는 타사 도메인** | | **신뢰할 수 없는 도메인** | |
| 전화 걸기 | 기본 설정 | 원샷 | 기본 설정 | 원샷 |
| 기타 설정 | 권한 없음 | 기타 설정 | 권한 없음 |
| 네트 액세스 | 기본 설정 | 세션 | 기본 설정 | 원샷 |
| 기타 설정 | 원샷, 블랭킷, 권한 없음 | 기타 설정 | 세션, 권한 없음 |
| 메시징 | 기본 설정 | 원샷 | 기본 설정 | 원샷 |
| 기타 설정 | 권한 없음 | 기타 설정 | 권한 없음 |
| 응용 프로그램 자동 호출 | 기본 설정 | 세션 | 기본 설정 | 세션 |
| 기타 설정 | 원샷, 세션, 블랭킷, 권한 없음 | 기타 설정 | 원샷, 권한 없음 |
| 로컬 연결 | 기본 설정 | 세션 | 기본 설정 | 세션 |
| 기타 설정 | 블랭킷, 권한 없음 | 기타 설정 | 블랭킷, 권한 없음 |
| 멀티미디어 레코딩 | 기본 설정 | 세션 | 기본 설정 | 원샷 |
| 기타 설정 | 블랭킷, 권한 없음 | 기타 설정 | 세션, 권한 없음 |
| 사용자 데이터 읽기 액세스 | 기본 설정 | 원샷 | 기본 설정 | 권한 없음 |
| 기타 설정 | 세션, 블랭킷, 권한 없음 | 기타 설정 | 권한 없음 |
| 사용자 데이터 쓰기 액세스 | 기본 설정 | 원샷 | 기본 설정 | 원샷 |
| 기타 설정 | 세션, 블랭킷, 권한 없음 | 기타 설정 | 권한 없음 |
장치는 단일 구성 설정 집합(기본 설정 또는 기타 설정)을 단일 MIDlet Suite는 물론 지정된 서명자의 모든 MIDlet Suite에 적용함으로써 사용자 환경을 향상시키고 단순화할 수 있습니다. 이 옵션으로 인해 표 1에 정의된 기능 그룹과 사용 가능한 설정이 손상되어서는 안 됩니다. 이러한 옵션이 있을 경우 사용자는 설정을 저장하여 나중에 동일한 소스의 MIDlet Suite에 다시 사용하라는 메시지를 받게 됩니다. 이러한 기능은 사용자에게 지정된 소스가 이미 승인되었으며 저장된 구성 설정에 대한 별칭이 있다는 것을 알려줄 수도 있습니다. 신뢰할 수 있거나 신뢰할 수 없는 각 응용 프로그램에 대해 구현 시 MIDlet-Permissions 및 MIDlet-PermissionsOpt 속성에서 요청된 권한을 읽고, 응용 프로그램에 필요한 기능을 사용자에게 알려주며, 사용자에게 응용 프로그램 설치를 승인 또는 거부하라는 메시지를 표시할 수 있습니다.
일부 기능 그룹 조합에 블랭킷 권한을 부여할 경우 사용자에게 더 큰 위험을 초래할 수 있습니다. 타사 도메인에 있는 MIDlet Suite의 경우 사용자에게 위험이 크다는 것을 알려야 하며, 사용자가 이러한 조합을 설정하기 위해 위험을 감수하겠다고 승인해야 합니다. 이러한 경우에 해당하는 기능 그룹의 블랭킷 권한 조합은 다음과 같습니다.
- 네트 액세스, 메시징 또는 로컬 연결 중 하나가 블랭킷으로 설정되어 있으며, 멀티미디어 레코딩 또는 사용자 데이터 읽기 액세스가 블랭킷으로 설정되어 있는 조합
신뢰할 수 없는 도메인에는 이러한 조합이 표 1에 따라 금지되기 때문에 이 제한이 적용되지 않습니다.
또한, 응용 프로그램 자동 호출의 블랭킷 설정과 네트 액세스의 블랭킷 설정은 상호 배타적입니다. 이 제약 조건은 MIDlet Suite가 자신을 자동 호출한 다음, 보호 하에 있어야 할 네트워크를 사용자도 모르게 액세스할 수 없도록 차단합니다. 사용자가 응용 프로그램 자동 호출이나 네트워크 기능 그룹 중 하나가 이미 "블랭킷" 모드로 설정되어 있을 때 다른 하나를 "블랭킷"으로 설정하려고 시도하면 어떤 기능 그룹에 "블랭킷"을 부여하고 어떤 기능 그룹에 "세션"을 부여할지에 관해 사용자에게 메시지를 표시해야 합니다.
전화 걸기 및 메시징 작업의 경우 구현 시 사용자가 작업을 승인하기 전에 사용자에게 대상 전화 번호를 표시해야 합니다. 메시징 그룹의 경우, 구현 시 단일 API 호출을 두 개 이상의 메시지에 매핑하면(즉, 구현 시 역어셈블리/재어셈블리를 지원하면) 실제로 전송되는 메시지 수를 사용자에게 표시해야 합니다. 이 요구 사항은 어떤 API 호출이 관련되어 있든 간에 사용자가 항상 프로그램 실행을 위한 네트워크 비용을 이해할 수 있도록 하기 위한 것입니다.
표 2: 기능 그룹에 MIDP 2.0에 규정된 권한 할당| **MIDP 2.0** -**JSR 118** | | |
| **권한** | **프로토콜** | **기능 그룹** |
| javax.microedition.io.Connector.http | http | 네트 액세스 |
| javax.microedition.io.Connector.https | https | 네트 액세스 |
| javax.microedition.io.Connector.datagram | 데이터그램 | 네트 액세스 |
| javax.microedition.io.Connector.datagramreceiver | 데이터그램 서버(호스트 없음) | 네트 액세스 |
| javax.microedition.io.Connector.socket | 소켓 | 네트 액세스 |
| javax.microedition.io.Connector.serversocket | 서버 소켓(호스트 없음) | 네트 액세스 |
| javax.microedition.io.Connector.ssl | ssl | 네트 액세스 |
| javax.microedition.io.Connector.comm | comm | 로컬 연결 |
| javax.microedition.io.PushRegistry | 모두 | 응용 프로그램 자동 호출 |
표 3: 기능 그룹에 PDA 프로필의 개인 정보 관리 패키지에 규정된 API 호출 및 제안된 권한 할당| **PDAP PIM 패키지 API (JSR75)** | | |
| **보안 정책 식별자(제안된 권한)** | **허용되는 Java API 호출** | **기능 그룹** |
| javax.microedition.pim.PIM. contact.readonly | PIM.listContactLists() PIM.openContactList(READ\_ONLY) PIM.openContactList(READ\_ONLY, listName) | 사용자 데이터 읽기 액세스 |
| javax.microedition.pim.PIM. contact.readwrite | PIM.listContactLists() PIM.openContactList(READ\_ONLY) PIM.openContactList(READ\_WRITE) PIM.openContactList(READ\_ONLY, listName) PIM.openContactList(READ\_WRITE, listName) | 사용자 데이터 쓰기 액세스 |
| javax.microedition.pim.PIM. event.readonly | PIM.listEventLists() PIM.openEventList(READ\_ONLY) PIM.openEventList(READ\_ONLY, listName) | 사용자 데이터 읽기 액세스 |
| javax.microedition.pim.PIM. event.readwrite | PIM.listEventLists() PIM.openEventList(READ\_ONLY) PIM.openEventList(READ\_WRITE) PIM.openEventList(READ\_ONLY, listName) PIM.openEventList(READ\_WRITE, listName) | 사용자 데이터 쓰기 액세스 |
| javax.microedition.pim.PIM. todo.readonly | PIM.listToDoLists() PIM.openToDoList(READ\_ONLY) PIM.openToDoList(READ\_ONLY, listName) | 사용자 데이터 읽기 액세스 |
| javax.microedition.pim.PIM. todo.readwrite | PIM.listToDoLists() PIM.openToDoList(READ\_ONLY) PIM.openToDoList(READ\_WRITE) PIM.openToDoList(READ\_ONLY, listName) PIM.openToDoList(READ\_WRITE, listName) | 사용자 데이터 쓰기 액세스 |
표 3 편집자 주: PIM 패키지에서는 PIM API를 보호하는 데 필요한 권한을 규정하지 않습니다. 이러한 변경 사항이 PIM API 패키지에 통합되면 이 표의 내용도 업데이트될 것입니다.
구현 시에는 이러한 기능에 대한 응용 프로그램 액세스를 허용하기 전에 응용 프로그램이 액세스할 수 있는 사용자 데이터의 속성(예: 이벤트 또는 할 일 목록)을 사용자에게 알려줘야 합니다. MIDlet이 원샷 권한 유형의 PIM 항목을 추가, 삭제 또는 업데이트할 때마다 이를 표시하여 사용자 확인을 받아야 합니다.
표 4: 기능 그룹에 Bluetooth API에 규정된 API 호출 및 제안된 권한 할당| **Bluetooth API**-**JSR 82** | | |
| **보안 정책 식별자(제안된 권한)** | **허용되는 API 호출** | **기능 그룹** |
| javax.microedition.io.Connector.bluetooth.client | Connector.open(“btspp://…”) Connector.open(“btl2cap://…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.client | Connector.open(“btgoep://…”) Connector.open(“irdaobex://discover…”) Connector.open(“irdaobex://addr…”) Connector.open(“irdaobex://conn…”) Connector.open(“irdaobex://name…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.client.tcp | Connector.open(“tcpobex://…”) | 네트 액세스 |
| javax.microedition.io.Connector.bluetooth.server | Connector.open(“btspp://localhost:…”) Connector.open(“btl2cap://localhost:…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.server | Connector.open(“btgoep://localhost:…”) Connector.open(“irdaobex://localhost:…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.server.tcp | Connector.open(“tcpobex://:”) Connector.open(“tcpobex://”) | 네트 액세스 |
표 4 편집자 주: Bluetooth API에 제안된 권한은 아직 JSR82에 정의되어 있지 않습니다.
표 5: 기능 그룹에 무선 메시징 API에 규정된 API 호출 및 제안된 권한 할당| **무선 메시징 API** -**JSR 120** | | |
| **보안 정책 식별자(제안된 권한)** | **허용되는 API 호출** | **기능 그룹** |
| javax.microedition.io.Connector.sms.send | Connector.open("sms://…", WRITE) Connector.open("sms://…", WRITE, Bool) | 메시징 |
| javax.microedition.io.Connector.sms.receive | Connector.open("sms://…", READ) Connector.open("sms://…", READ, Bool) | 메시징 |
| javax.microedition.io.Connector.sms | Connector.open("sms://…") Connector.open("sms://…", READ) Connector.open("sms://…", READ, Bool) Connector.open("sms://…", WRITE) Connector.open("sms://…", WRITE, Bool) Connector.open("sms://…", READ\_WRITE) Connector.open("sms://…", READ\_WRITE, Bool) | 메시징 |
| javax.microedition.io.Connector.cbs.receive | Connector.open("cbs://…") Connector.open("cbs://…", READ) Connector.open("cbs://…", READ, Bool) | 메시징 |
표 5 편집자 주: 무선 메시징 API에 제안된 권한은 아직 JSR120에 정의되어 있지 않습니다.
표 6: 기능 그룹에 모바일 미디어 API에 규정된 API 호출 및 제안된 권한 할당| **모바일 미디어 API**-**JSR 135** | | |
| **보안 정책 식별자(제안된 권한)** | **허용되는 API 호출** | **기능 그룹** |
| javax.microedition.media.RecordControl.startRecord | RecordControl.startRecord ( ) | 멀티미디어 레코딩 |
| javax.microedition.media.VideoControl.getSnapshot | VideoControl.getSnapshot (…) | 멀티미디어 레코딩 |
표 6 편집자 주: 모바일 미디어 API에 제안된 권한은 아직 JSR135에 정의되어 있지 않습니다.
구현 시 모바일 미디어 API에서의 I/O 액세스가 javax.microedition.io의 패키지 설명서에 명시된 것처럼 일반 연결 프레임워크와 동일한 보안 요구 사항을 따라야 합니다. 예를 들어, javax.microedition.media.Player.start, javax.microedition.media.Player.prefetch 등의 메소드가 있습니다. 이러한 메소드를 사용하여 HTTP 연결을 통해 플레이어의 컨텐트를 가져올 경우에는 구현 시 HTTP에 대해 규정된 보안 요구 사항을 시행해야 합니다.
#### 5.2 구현 시 참고 사항:
사용자가 기능 그룹에 권한을 부여하면 이 기능 그룹 하의 모든 개별 권한에 대한 액세스가 부여됩니다.
구현 시에는 호출자에게 적절한 보안 권한이 없을 경우 보안 예외를 발생시키도록 해야 합니다.
메시징 그룹에 원샷 권한을 부여하면 javax.microedition.io.Connector.sms 및 javax.microedition.io.Connector.cbs의 블랭킷 권한과 메시지 수신을 사용 가능하게 하는 권한으로 변환됩니다. 하지만 메시지 전송 권한은 여전히 원샷입니다. 즉, 사용자는 열려 있는 연결 내에서 MIDlet Suite가 전송하는 각 메시지에 권한을 부여합니다. 세션 권한의 경우도 마찬가지입니다. 메시지 전송과 관련된 기능에는 세션 권한이 부여되지만 다른 기능은 블랭킷 권한을 부여 받습니다. 메시징 그룹에 블랭킷 권한과 권한 없음을 부여할 경우 이 그룹 하의 모든 개별 권한에 적용됩니다.
MIDlet이 MIDP 및 다른 API에 정의된 기능을 사용할 경우 다음 규칙을 적용해야 합니다.
- MIDP 2.0 보안 프레임워크에서 보호해야 하는 모든 외부 API 함수는 후속 JSR에 권한이 정의되어 있어야 하며 MIDP 2.0 사양인 "Security for MIDP Applications"에 규정된 이름 지정 규칙을 따라야 합니다.
- 사양에서 보안상 보호해야 하는 기능으로 분류되지 않은 기능은 일반 MIDP 보안 규칙에 따라 신뢰할 수 있는 MIDlet Suite와 신뢰할 수 없는 MIDlet Suite가 모두 명시적으로 액세스할 수 있습니다.
- API 사양이 MIDP 2.0보다 이전에 출시되어 외부 API에 보안상 보호된 기능에 대한 권한이 정의되어 있지 않은 경우에도 네트워크 액세스와 관련된 모든 기능에 장치에서 구현된 사용자 프롬프트가 있어야 합니다.
- 장치는 적절한 사용자 알림 없이 네트워크에 액세스할 수 없습니다.
- 모든 개방형 클래스는 본 문서에 정의된 권한 프레임워크를 준수해야 합니다.
## 6 권한 부여 기법에 의해 MIDlet Suite에 부여된 권한
MIDP 2.0 사양의 "Security for MIDP Applications" 절에 정의된 것처럼 MIDlet Suite 권한은 실제로 JSR 상세 목록에 있는 도메인 권한 Midlet-Permission과 Midlet-Permission-Opt의 교집합입니다. 부여된 MIDlet Suite의 권한을 사용자에게 제공하는 방법은 구현별로 다르지만 다음 규칙을 적용해야 합니다.
- 5절의 표에 규정된 사용자 권한 유형의 기본 집합과 사용 가능한 집합을 바탕으로, 사용자는 기본 권한 설정(5.2절의 구현 시 참고 사항을 따르는 경우)을 지정된 MIDlet Suite 권한에 사용 가능한 어떤 설정으로든 변경할 수 있어야 합니다. 이러한 유연성을 통해 사용자는 필요에 따라 기본 권한을 상향 조정하거나 하향 조정할 수 있습니다.
- MIDlet 권한이 해당 기능에 따라 그룹화되어 있으면 MIDlet Suite에 부여된 권한은 기능 그룹으로 구성되어 사용자에게 표시됩니다. 기능 그룹을 사용할 경우 그룹 하의 모든 권한 그룹에 기본 권한이 적용됩니다. 사용 가능한 사용자 권한 유형 집합도 마찬가지입니다. 기본 권한을 변경하면 그룹 하의 개별 권한이 아닌 전체 그룹에 변경 사항이 동시에 적용됩니다.
- 기능 그룹은 다른 기본 설정과 기타 설정을 조합하여 사용할 수 없습니다. 따라서 5절의 표는 단일 기능 그룹의 모든 권한에 동일한 기본 설정과 사용 가능한 설정을 사용하는 규칙을 따르고 있습니다. 새 권한과 정책을 설계할 경우 이 규칙을 고려해야 합니다.
장치는 MIDlet Suite 이름, 버전 번호 등의 일반 MIDlet Suite 정보 외에도 설치된 각 MIDlet Suite의 보안 관련 데이터를 유지 관리해야 합니다. 이 데이터에는 최소한 다음과 같은 정보가 포함되어야 합니다.
- MIDlet Suite의 서명자, 즉 MIDlet Suite가 서명된 경우 서명 인증서의 *제목* 필드. 최소한 MIDlet-Vendor는 설치된 MIDlet Suite와 함께 저장해야 합니다.
- 서명된 MIDlet을 인증한 보호 도메인 루트 인증서와 관련된 데이터(최소한 보호 도메인 루트 인증서의 제목 필드 포함)
- MIDlet Suite를 서명한 서명자 인증서와 관련된 데이터(최소한 인증서의 제목, 발급자 및 일련 번호 필드 포함). 또는 장치에서 MIDlet 설명자 파일과 함께 제공된 전체 인증서 체인을 저장할 수도 있습니다.
- MIDlet Suite에 부여된 권한 목록
장치는 응용 프로그램 서명자와 관련된 정보를 사용자에게 친숙한 방법으로 제공할 수 있어야 합니다.
## 7 사용자 프롬프트 및 알림
사용자가 충분한 정보를 받은 후에 MIDlet 작업에 동의할 수 있도록 하려면 다음 규칙을 따라야 합니다.
- 보호되어야 할 이벤트가 타사 도메인 및 신뢰할 수 없는 도메인의 MIDlet에서 생성되는 경우 미리 사용자 권한 설정에 따른 사용자 알림을 표시해야 합니다. 예를 들어, MIDlet이 전화를 거는 전화 번호, 연결하는 URL 또는 SMS의 수신자 등을 표시해야 합니다.
- 보호되어야 할 이벤트를 진행 중인 경우(예: 사용자에게 책임이 있는 피어-투-피어 연결) 사용자에게 모두 표시해야 합니다.
- MIDlet은 정책의 사용자 권한 설정에 따라 사용자 승인을 받은 후 네트워크에 연결해야 합니다.
- 모든 MIDlet 권한을 직관적이고 사용자에게 친숙한 방식으로 사용자에게 표시해야 합니다.
- MIDlet은 시스템 또는 가상 머신에서 생성된 보안 프롬프트와 사용자 알림을 무시할 수 없어야 합니다.
- MIDlet은 사용자의 오해를 불러일으키는 보안 경고를 시뮬레이트할 수 없어야 합니다.
- MIDlet은 사용자의 오해를 불러일으키는 키 누름 이벤트를 시뮬레이트할 수 없어야 합니다.
## 8 로밍 중 및 스마트 카드 변경 후의 MIDlet 다운로드 및 실행
이전에 권한이 부여되어 설치된 모든 MIDlet Suite는 장치가 로밍 중이거나 장치 스마트 카드를 변경할 때 장치 정책에 따라 작동해야 합니다. 새로 다운로드한 MIDlet Suite는 현재 장치(타사 응용 프로그램에만 해당)나 SIM, USIM 또는 WIM의 지정된 위치(운영자 및 타사 응용 프로그램에 해당)에서 사용할 수 있는 보호 도메인 루트 인증서와 장치 정책에 따라 인증됩니다.
장치 로밍 또는 스마트 카드 변경으로 인해 MIDlet이 이전에 액세스할 수 있었던 네트워크 자원에 대한 액세스에 실패한 경우에는 구현 시 SecurityException을 발생시키지 않아야 합니다. 이 실패는 MIDlet Suite 권한 부여로 인한 것이 아니므로 구현 시 IOException을 발생시켜야 합니다.
제조업체, 신뢰할 수 있는 타사 및 신뢰할 수 없는 도메인에 설치된 MIDlet Suite에 할당된 권한은 (U)ICC [(U)ICC]를 변경해도 영향을 받지 않지만, 운영자 도메인에 설치된 MIDlet Suite는 스마트 카드 변경 후 SIM에 MIDlet Suite를 운영자 도메인에 인증할 때 사용된 운영자 루트 공개 키가 포함된 인증서가 없을 경우 실행되지 않아야 합니다(3.2절 "운영자 도메인" 참조).
운영자 도메인의 MIDlet Suite 실행 가능 여부는 보호 도메인 루트 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(태그, 길이 및 사용하지 않은 비트 수 제외)로 계산된 "루트 키 해시" 값 비교에 따라 결정됩니다. 결정 프로세스에서는 다음 기법을 따라야 합니다.
- 운영자 도메인에 설치된 MIDlet은 인증서 체인이 스마트 카드의 운영자 도메인 키 사용 필드에 저장된 인증 보호 도메인 루트 인증서로 끝나는 인증서로 서명됩니다. 보호 도메인 루트 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(태그, 길이 및 사용하지 않은 비트 수 제외)는 MIDlet의 "인증 루트 키 해시"라고 하며 3.2절에 규정된 것처럼 MIDlet과 함께 장치에 저장됩니다.
- 스마트 카드를 변경할 때마다 운영자 도메인의 MIDlet을 실행하기 전에 새로운 스마트 카드의 운영자 도메인 키 사용 필드에 저장된 각 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(운영자 도메인 루트 키 해시)가 계산 및 저장됩니다.
- 운영자 도메인의 MIDlet은 해당 인증 루트 키 해시가 스마트 카드 변경 후에 생성된 새로운 운영자 도메인 루트 키 해시 중 하나에 일치하지 않을 경우 사용할 수 없게 됩니다.
주: 이 기법에서 장치는 스마트 카드 변경 후 다음 두 단계를 수행합니다.
1. 새로운 운영자 도메인 루트 키 해시 계산
2. 운영자 도메인의 각 MIDlet Suite에 대해 인증 루트 키 해시가 새로운 운영자 도메인 루트 키 해시 중 하나와 일치하는지 여부 확인
인증 루트 키 해시가 새로운 운영자 도메인 루트 키 해시 중 하나에 일치하지 않으면 스마트 카드 변경 후 어떠한 운영자 MIDlet Suite도 실행되지 않을 경우, 구현 시 언제든지 이러한 두 단계를 수행할 수 있습니다. 1단계 후에 바로 2단계를 수행할 수도 있습니다. 또는 1단계와 2단계에 시간 차를 둘 수 있으며, 이 경우에는 구현 시 1단계 결과를 안전하게 저장하여 나중에 2단계에서 사용할 수 있도록 하는 것이 좋습니다.
지정된 위치에 운영자 보호 도메인 루트 인증서가 없을 경우 인증 보호 도메인 루트 인증서가 없으면 응용 프로그램을 실행할 수 없다는 것을 사용자에게 알려야 합니다. 또한 장치는 응용 프로그램을 운영자 도메인에 인증할 때 사용된 보호 도메인 루트 인증서의 정보를 가져올 수 있는 옵션을 사용자에게 제공하는 것이 좋습니다. 이 정보에는 루트 인증서의 *제목* 필드를 포함시키는 것이 좋습니다.
스마트 카드 변경 시 인증 루트가 여전히 스마트 카드에 있는지 여부를 확인하는 것만 요구되긴 하지만 구현 시 다른 경우에도 확인하여 그 결과에 따라 위에서 지정된 대로 운영자 도메인의 MIDlet Suite를 사용할 수 없게 할 수도 있습니다. 인증 운영자 보호 도메인 루트 인증서가 없어 MIDlet Suite를 실행할 수 없는 경우 장치에서 MIDlet Suite를 삭제해서는 안 됩니다. 장치는 적절한 기법을 통해 MIDlet Suite의 실행 가능 여부를 미리 사용자에게 알려줄 수도 있습니다. 예를 들어, 디스플레이에 "사용 불가" 상태를 표시할 수 있습니다. 그러나 사용자는 이러한 사용 불가 MIDlet Suite를 삭제할 수 없어야 합니다.
---
title: "권장 보안 정책 — RP"
---
## GSM/UMTS 호환 장치에 권장되는 보안 정책
#### Mobile Information Device Profile 버전 2.0의 부록
---
##### *Copyright 2002, Sun Microsystems, Inc. 모든 권리는 저작권자의 소유입니다.*
---
## 머리말
*GSM/UMTS 호환 장치에 권장되는 보안 정책* 문서는 JavaTM 2 Platform, Micro Edition(J2METM)용 Mobile Information Device Profile(MIDP) 버전 2.0의 부록입니다.
여기서 사용되는 용어는 별도의 지침이 없는 한 해당 사양에 의해 정의됩니다.
## 본 문서의 사용자
본 문서의 주 사용자는 MIDP를 정의한 Java Community Process (JCP) 전문가 그룹, MIDP 구현자, MIDP를 사용하는 응용 프로그램 개발자, MIDP 응용 프로그램을 배포하는 서비스 공급자, MIDP 서비스를 지원하는 인프라를 배포하는 무선 운영자입니다. 특히 본 문서는 네트워크 운영자, 제조업체, GSM 및 UMTS 네트워크용 서비스 및 응용 프로그램 공급자를 대상으로 합니다.
## 본 문서의 범위
본 부록은 정보를 제공하기 위한 것입니다. 그러나 GSM/UMTS 호환 장치에서의 모든 MIDP 2.0 구현은 본 부록의 내용을 준수합니다.
MIDP 2.0은 MIDlet Suite의 소스를 인증하고, 장치에 대한 보안 정책을 바탕으로 요청된 권한을 부여하여 MIDlet Suite가 보호된 기능을 수행할 수 있도록 인증하는 프레임워크를 정의합니다. 또한, 보안에 취약한 기능을 식별하고 보호된 기능에 대한 사용 권한을 정의합니다. MIDP 2.0은 MIDP와 함께 사용할 수 있지만 MIDP와 별도로 지정되는 API에 대한 일반 규칙도 지정합니다. MIDP 2.0 사양은 단일 신뢰 모델을 규정하는 대신, 모델이 장치 트러스트 정책을 준수할 수 있도록 합니다.
본 부록은 MIDP 2.0에 정의된 기본 MIDlet Suite 보안 프레임워크를 확장하여 다음 영역을 정의하는 것을 목적으로 합니다.
- GSM/UMTS 호환 장치에 요구되는 신뢰 모델
- 정책 파일에 명시된 도메인 번호와 구조
- 장치 외부의 소스로부터 루트 키를 읽는 기법
- MIDP 2.0 및 다른 JSR에 의해 정의된 권한에 따른 응용 프로그램의 기능
- 로밍 네트워크에서의 응용 프로그램 동작
- SIM/USIM 변경 시의 응용 프로그램 동작
- 사용자 권한 유형의 사용
- 사용자 프롬프트 및 알림에 대한 지침
## 본 사양의 구성 방법
본 사양은 다음과 같이 구성되어 있습니다.
2절에서 4절까지는 정책 파일, 다른 보안 도메인 및 스마트 카드의 인증서 저장과 관련된 요구 사항 간의 관계에 대해 규정합니다. 5절에서는 기능 그룹을 지정하고, MIDP 2.0 보안 프레임워크를 사용하여 보호해야 하는 API 및 권한을 식별합니다. 6절과 7절에서는 권한이 부여될 때 준수해야 하는 규칙과 사용자 알림에 대한 요구 사항을 지정합니다. 마지막으로 8절에서는 로밍 중 및 스마트 카드 변경 후의 MIDlet 동작을 지정합니다.
## 참조 자료
1. Connected Limited Device Configuration (CLDC)
http://jcp.org/jsr/detail/30.jsp
2. Mobile Information Device Profile (MIDP) 2.0
http://jcp.org/jsr/detail/118.jsp
3. HTTP 1.1 Specification
http://www.ietf.org/rfc/rfc2616.txt
4. WAP Wireless Identity Module Specification (WIM) WAP-260-WIM-20010712-a
http://www.wapforum.org/what/technical.htm
5. WAP Smart Card Provisioning (SCPROV) WAP-186-ProvSC-20010710-a
http://www.wapforum.org/what/technical.htm
6. PKCS#15 v.1.1
http://www.rsasecurity.com/rsalabs/pkcs/pkcs-15/
7. USIM, 3GPP TS 31.102: "Characteristics of the USIM applications"
http://www.3gpp.org
8. RFC3280
http://www.ietf.org/rfc
## 1 일반 사항
GSM/UMTS 호환 장치는 MIDP 2.0에 규정된 보안 프레임워크를 준수해야 합니다. 또한, 신뢰할 수 있는 응용 프로그램을 지원하는 장치는 MIDP 2.0 사양에 정의된 PKI 기반의 인증 체계를 따라야 합니다.
## 2 정책 파일에서의 도메인
도메인은 다운로드한 MIDlet을 출처에 따라 구분하고, MIDlet Suite에 특정 권한 집합을 부여하거나 허용하는 방법입니다. 도메인은 루트 인증서를 특정 권한 집합에 바인드하며, 권한은 도메인 정책에서 지정됩니다. 정책 파일이나 정책에는 장치에서 사용할 수 있는 도메인 개수만큼의 항목이 포함됩니다. `id-kp-codeSigning` 확장 키 사용 확장자가 포함된 루트 인증서가 있어야만 도메인으로 인정됩니다.
신뢰할 수 있는 루트 키를 인증하는 응용 프로그램은 신뢰할 수 있는 것으로 간주되어 해당 보호 도메인에 할당됩니다. 각 응용 프로그램을 한 개의 보호 도메인에만 할당해야 합니다. MIDlet 규트는 두 개 이상의 보호 도메인에 속할 수 없습니다.
장치에서 도메인을 나타내는 방법은 구현별로 달라집니다.
## 3 보안 도메인 및 권한 프레임워크
본 문서에서는 응용 프로그램이 실행하는 보안 도메인에 따라 MIDP 권한 프레임워크를 어떻게 사용해야 하는지에 관해 두 가지 요구 사항을 규정합니다.
**제조업체 및 운영자 도메인** - 사용자가 본 문서의 표 2 - 표 6에 해당 보안 정책이 규정되어 있는 기능을 액세스할 경우 응용 프로그램은 MIDP 2.0 권한 프레임워크를 사용하여 사용자에게 메시지를 표시해야 합니다.
**타사 및 신뢰할 수 없는 도메인** - 장치 구현 시 본 문서의 표 1 - 표 5에 규정된 보안 정책에 따라 사용자에게 메시지를 표시해야 합니다.
#### 3.1 제조업체 도메인
장치 제조업체의 신뢰할 수 있는 루트 인증서는 제조업체 응용 프로그램에 연결되며 정책 파일에 도메인이 식별되어 있어야 합니다. 지정된 장치에 제조업체 도메인은 없지만 제조업체에서 서명한 응용 프로그램을 인증할 수 있는 경우(즉, 제조업체 루트 인증서가 설치되어 있는 경우)에는 신뢰할 수 없는 장치로서만 권한이 부여되며 신뢰할 수 없는 도메인에 속하게 됩니다.
제조업체 도메인은 사용자나 타사에서 삭제 또는 수정할 수 없으며, 장치에 지정된 기능에 의해서만 삭제 또는 수정될 수 있습니다. 제조업체 루트 인증서를 업데이트한 경우 동일한 제조업체-도메인 정책 파일에 매핑해야 합니다. 제조업체 루트 인증서가 장치에 없으면 장치에 지정된 기능에 의해 제조업체 도메인이 제거될 수도 있습니다.
제조업체 도메인에서의 권한은 모두 *허용*으로 표시됩니다(정의는 MIDP 2.0 참조). 제조업체 도메인에서 *허용*으로 권한을 부여한 경우 다운로드하여 인증된 제조업체 응용 프로그램은 사용자 확인이 필요한 이벤트가 발생할 때마다 사용자에게 메시지 표시 및 보안과 관련하여 제조업체에서 미리 설치한 응용 프로그램과 일관되게 작동합니다. 제조업체 응용 프로그램은 보안에 취약한 API 및 기능에 액세스할 때 사용자로부터 권한을 받는 것이 좋습니다. MIDP 2.0 및 다른 API에 의해 정의된 권한은 어떤 기능이 보안에 취약하며 보호해야 하는지에 대한 지침을 제공합니다. 제조업체 응용 프로그램은 보안상 보호된 이러한 기능과 관련하여 사용자에게 지속적으로 프롬프트와 알림을 표시합니다. 구현 시에는 제조업체 도메인에 새로운 응용 프로그램이 설치될 때마다 제조업체 루트 공개 키가 포함된 루트 인증서의 *제목* 필드를 사용자에게 제공해야 합니다. 이 사용자 알림은 응용 프로그램 설치 시 표시되어야 합니다.
제조업체 도메인은 MIDP 2.0 및 다른 JSR에 규정된 기능에 대해 어떤 제한도 두지 않습니다.
#### 3.2 운영자 도메인
신뢰할 수 있는 운영자 루트 인증서는 장치상의 운영자 도메인을 설명하는 정책 파일에 매핑해야 합니다. 장치는 운영자 도메인을 설명하는 정책 파일을 지원해야 합니다.
지정된 장치에 운영자 도메인은 없지만 운영자가 서명한 응용 프로그램을 인증할 수 있는 경우(즉, 스마트 카드에서 운영자 루트 인증서를 가져올 수 있는 경우)에는 신뢰할 수 없는 장치로서만 권한이 부여되며 신뢰할 수 없는 도메인에 속하게 됩니다.
신뢰할 수 있는 루트 인증서는 신뢰할 수 있는 인증서 [WIM]의 Certificate Directory File (CDF)에서 읽어옵니다. WIM상의 trustedCertificates 파일에 있는 루트 인증서는 인증서 [PKCS15]와 연결된 CommonCertificateAttributes의 trustedUsage 필드에 따라 운영자 도메인이나 신뢰할 수 있는 타사 도메인으로 매핑됩니다.
> trustedUsage 필드가 있으며 키 사용 "운영자 도메인"의 OID(아직 정의되지 않았음)가 포함되어 있으면 인증서는 운영자 도메인으로 매핑됩니다.
>
> trustedUsage 필드가 없거나 키 사용 "운영자 도메인"의 OID가 포함되어 있지 않으면 인증서는 신뢰할 수 있는 타사 도메인으로 매핑됩니다.
운영자가 신뢰할 수 있는 루트 인증서는 WIM, SIM 또는 USIM의 trustedCertificates Certificate Directory File(CDF)에 놓일 수 있습니다. 운영자 루트 인증서가 WIM 응용 프로그램 아래가 아닌 SIM 또는 USIM에 직접 저장되는 경우에는 [SCPROV]에 정의된 것처럼 DF(PKCS#15) 아래에 있는 EF trustedCertificates CDF에 저장될 것입니다. 운영자 루트 인증서는 신뢰할 수 있는 CDF 또는 이와 동등한 디렉토리(카드 소유자는 이 디렉토리를 업데이트할 수 없음)에서만 가져올 수 있으며, 스마트 카드의 다른 디렉토리에서는 운영자 루트 인증서를 가져올 수 없습니다.
운영자 루트 인증서는 장치 외부에 있으며, 스마트 카드 변경 시에는 다운로드한 운영자 응용 프로그램 인증에 사용할 수 있는 루트 인증서를 미리 알 수 없습니다. 운영자 루트 인증서의 운영자 도메인으로의 매핑은 구현별로 달라집니다. 그러나 모든 운영자 루트 인증서는 운영자 도메인의 동일한 *허용* 권한 집합으로 매핑되어야 합니다. 운영자 도메인은 사용자나 타사에서 삭제 또는 수정할 수 없으며, 장치에 지정된 기능에 의해서만 삭제 또는 수정될 수 있습니다.
응용 프로그램이 운영자 루트 공개 키로 인증된 경우 서명 및 인증된 응용 프로그램에는 운영자 도메인에 대한 권한이 부여되어야 합니다. 운영자 루트 공개 키는 현재 삽입되어 사용 가능한 스마트 카드의 신뢰할 수 있는 CDF에서 가져와야 하며, 스마트 카드 또는 장치의 다른 위치에서 가져올 수 없습니다. 구현 시에는 운영자 도메인에 새로운 응용 프로그램이 설치될 때마다 운영자 루트 공개 키가 포함된 루트 인증서의 제목 필드를 사용자에게 제공해야 합니다. 이 사용자 알림은 응용 프로그램 설치 시 표시되어야 합니다.
운영자 도메인에서의 권한은 모두 *허용됨*으로 표시됩니다(정의는 MIDP 2.0 참조). 운영자 도메인에서 *허용*으로 권한을 부여한 경우 다운로드하여 인증된 운영자 응용 프로그램은 사용자 확인이 필요한 이벤트가 발생할 때마다 사용자에게 메시지 표시 및 보안과 관련하여 운영자가 설치한 다른 응용 프로그램과 일관되게 작동합니다. 운영자 응용 프로그램은 보안에 취약한 API 및 기능에 액세스할 때 사용자로부터 권한을 받는 것이 좋습니다. MIDP 2.0 및 다른 API에 의해 정의된 권한은 어떤 기능이 보안에 취약하며 보호해야 하는지에 대한 지침을 제공합니다. 운영자가 신뢰할 수 있는 응용 프로그램은 보안상 보호된 이러한 기능에 액세스할 때 사용자에게 지속적으로 프롬프트와 알림을 표시합니다.
운영자 도메인은 달리 명시되지 않는 한 MIDP 2.0 및 다른 API에 규정된 기능에 대해 어떤 제한도 두지 않습니다.
운영자 도메인에 설치된 MIDlet은 응용 프로그램 서명에 사용되는 서명 인증서를 발급하는 루트 인증서 공개 키 해시를 응용 프로그램과 함께 저장해야 합니다. 사용할 해시 알고리즘은 루트 인증서부터 시작하여 해당 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(태그, 길이 및 사용하지 않은 비트 수 제외)를 계산해야 합니다. 이 방법은 일반적으로 키 식별자를 계산하는 데 사용되며, 특히 신뢰 체인 구축 [RFC3280, §4.2.1.2]를 가속화합니다. 구현 시에는 최적화를 위해 X.509 키 식별자나 PKCS#15 레이블을 올바른 값으로 가정해서는 안 되며 해시 자체를 계산해야 합니다. 장치는 이 해시를 사용하여 8절에 규정된 대로 언제 지정된 프로그램을 사용할 수 없게 해야 하는지 결정해야 합니다.
#### 3.3 신뢰할 수 있는 타사 도메인
지정된 장치에서 사용할 수 있는 도메인 수에는 어떠한 명시적 제한도 없습니다. 신뢰할 수 있는 타사 루트 인증서를 인증하는 응용 프로그램은 타사 도메인에 속해야 합니다. 지정된 장치의 정책 파일에 타사 도메인이 없는 경우 신뢰할 수 없는 응용 프로그램으로만 타사 응용 프로그램에 권한을 부여하고 설치해야 하며, 신뢰할 수 없는 도메인에 속해야 합니다.
장치 제조 후에 다운로드한 타사 루트 인증서는 MIDlet 인증에 사용해서는 안 됩니다.
구현 시에는 새로운 MIDlet이 타사 도메인에 설치될 때마다 MIDlet 서명 인증서의 *제목* 필드를 사용자에게 제공해야 합니다. 이 사용자 알림은 MIDlet 설치 시 표시되어야 합니다. 응용 프로그램에 권한을 부여하라는 메시지를 사용자에게 표시할 경우 프롬프트는 서명 인증서의 *제목* 필드를 사용하여 신뢰할 수 있는 소스를 식별해야 합니다.
사용자는 신뢰할 수 있는 타사 인증서를 삭제 또는 사용 불가능하게 할 수 있어야 합니다. 구현 시 타사 루트 인증서를 삭제할 경우의 결과에 대해 사용자에게 경고하는 것이 좋습니다. 사용자는 사용 불가능한 타사 루트 인증서를 사용 가능하게 할 수 있어야 합니다. 사용 불가능한 타사 루트 인증서를 사용하여 다운로드한 MIDlet을 확인해서는 안 됩니다. 또한, 타사 루트 인증서가 삭제 또는 사용 불가능한 경우(예: 사용자가 철회, 삭제 또는 사용 불가능한 경우) 타사 도메인이 더 이상 이 루트 인증서에 연결되어서는 안 됩니다. 사용자가 루트 인증서 삭제를 선택하면 구현 시 이 루트 인증서를 인증한 응용 프로그램을 삭제할 수 있는 옵션을 제공해야 합니다.
신뢰할 수 있는 타사 응용 프로그램에는 타사 도메인에서 *허용된* 권한이 하나도 부여되지 않습니다. 타사 도메인에서 부여된 모든 권한은 *사용자* 권한으로, 권한을 부여하려면 사용자 상호 작용이 필요합니다. 표 1에서는 타사 도메인의 응용 프로그램에 사용할 수 있는 사용자 권한 유형과 기능 그룹을 규정합니다. 표 2 - 표 6에서는 권한과 API의 다른 기능 그룹으로의 매핑에 대해 지정합니다.
#### 3.4 신뢰할 수 없는 도메인
**서명되지 않은 MIDlet은 신뢰할 수 없는 도메인에 속하게 됩니다.**
구현 시에는 신뢰할 수 없는 도메인에 새로운 MIDlet이 설치될 때마다 사용자에게 이를 알려야 합니다. 알림은 응용 프로그램이 신뢰할 수 있는 도메인에서 온 것이 아님을 명확히 해야 합니다. 사용자는 응용 프로그램에 권한을 부여하기 전에 사용 가능한 정보에 따라 올바른 결정을 내릴 수 있어야 합니다.
응용 프로그램에 권한을 부여하라는 메시지를 사용자에게 표시할 경우 프롬프트는 응용 프로그램이 신뢰할 수 있는 도메인에서 온 것이 아님을 명확히 해야 합니다.
신뢰할 수 없는 응용 프로그램은 JSR 75에 정의된 API(5절의 표 1 참조)를 통해 PIM 데이터에 대한 읽기 액세스 권한을 직접 부여 받아서는 안 됩니다. 그러나 javax.microedition.lcdui package를 구현하여 신뢰할 수 없는 응용 프로그램과 PIM 데이터 간의 상호 작용을 사용 가능하게 할 수 있습니다. 응용 프로그램 프로그래머가 제약 조건 TextField.PHONENUMBER를 설정하면 TextField 클래스의 구현 시 사용자가 자신의 전화번호부에서 번호를 조회하여 TextField 항목에 복사하도록 제안할 수도 있습니다. 예를 들어, TextField 항목에 입력 포커스가 있으면 사용자는 메뉴를 사용하여 전화번호부에 들어갈 수 있습니다. 사용자가 전화번호부에서 항목을 선택하면 선택한 항목의 내용이 TextField 항목에 "복사"됩니다.
표 1에서는 신뢰할 수 없는 도메인의 응용 프로그램에 사용할 수 있는 사용자 권한과 기능 그룹을 규정합니다. 표 2 - 표 6에서는 권한과 API의 다른 기능 그룹으로의 매핑에 대해 지정합니다.
## 4 원격 정책 파일
MIDP 2.0 사양은 이동식 미디어에서 읽을 수 있는 정책 파일의 일반 형식을 정의합니다. 첫 단계에서는 GSM/UMTS 호환 장치가 이 정책 파일을 사용하는 것이 아니라 장치에 있는 단일 정책 파일을 사용합니다. 원격 정책 파일의 가능성은 추후에 다시 고려해야 할 사항입니다.
## 5 다운로드한 MIDlet Suite의 권한
**MIDP 2.0 권한의 보호된 도메인 기능 그룹으로의 매핑**
작은 디스플레이를 가진 장치는 단일 구성 설정 메뉴를 통해 사용자에게 친숙한 방식으로 모든 권한을 사용자에게 표시하지 못할 수도 있습니다. 따라서 장치는 모든 권한을 표시하여 사용자 확인을 받을 필요가 없습니다. 하지만 보호된 기능에 의해 시작된 높은 수준의 특정 작업은 사용자 승인을 받아야 합니다. 사용자에게 표시되는 고급 기능은 궁극적으로 각 기본 권한의 작업과 결과를 반영합니다. 다음과 같은 기능 그룹이 있습니다.
네트워크/비용 관련 그룹:
**전화 걸기** - 전화 통화를 발생시키는 모든 기능에 대한 권한을 나타냅니다.
**네트 액세스** - 활성 네트워크 데이터 연결을 발생시키는 모든 기능(예: GSM, GPRS, UMTS 등)에 대한 권한을 나타냅니다. 이러한 기능은 이 그룹에 매핑해야 합니다.
**메시징** - 메시지 전송 또는 수신을 허용하는 모든 기능(예: SMS, MMS 등)에 대한 권한을 나타냅니다.
**응용 프로그램 자동 호출** - MIDlet을 자동으로 호출할 수 있도록 하는 모든 기능(예: 푸시, 시간 제한 MIDlet 등)에 대한 권한을 나타냅니다.
**로컬 연결** - 추가 연결을 위해 로컬 포트를 활성화하는 모든 기능(예: COMM 포트, IrDa, Bluetooth 등)에 대한 권한을 나타냅니다.
사용자 프라이버시 관련 그룹:
**멀티미디어 레코딩** - MIDlet에서 스틸 이미지를 캡처하거나 비디오 또는 오디오 클립을 레코딩할 수 있도록 지원하는 모든 기능에 대한 권한을 나타냅니다.
**사용자 데이터 읽기 액세스** - MIDlet에서 사용자의 전화번호부나 파일 또는 디렉토리의 다른 모든 데이터를 읽을 수 있도록 지원하는 모든 기능에 대한 권한을 나타냅니다.
**사용자 데이터 쓰기 액세스** - MIDlet에서 사용자의 전화번호부나 파일 또는 디렉토리의 다른 모든 데이터를 추가하거나 수정할 수 있도록 지원하는 모든 기능에 대한 권한을 나타냅니다.
새로운 기능이 MIDP에 추가되면 해당 기능 그룹에 이 기능을 할당해야 합니다. 또한, 다른 JSR에서 지정되었지만 MIDP 보안 프레임워크를 사용하는 API도 해당 기능 그룹에 할당해야 합니다. 그러나 이 절에 정의된 기능 그룹 중에서 새 기능을 사용자에게 적절하게 표시할 수 있는 그룹이 없으면 본 문서에서 새 기능 그룹을 정의해야 합니다.
새로운 기능 그룹을 추가할 경우 다음을 고려해야 합니다. 이 그룹을 추가함으로써 기존 그룹이 중복되지 않아야 하며, 새 그룹이 다양한 유사 기능을 보호할 수 있어야 합니다. 두 번째 요구 사항은 좁은 범위의 그룹이 생기지 않도록 방지합니다.
사용자에게 메시지를 표시할 때는 개별 권한이 아닌 기능 그룹을 제공해야 합니다. 또한, 지정된 MIDlet Suite의 설정에서 사용자에게 제공해야 하는 것도 기능 그룹입니다.
표 1에는 MIDP 2.0에 정의된 보안 프레임워크를 사용하여 시행해야 하는 정책이 나와 있습니다. 이 표에서는 정의된 각 기능 그룹에 사용할 수 있는 권한 설정을 규정합니다. 처음 MIDlet을 호출할 때 적용되며 사용자가 MIDlet 구성 메뉴에서 변경할 때까지 계속 유효한 설정을 "기본 설정"이라고 합니다. 사용자가 구성 메뉴에서 선택하여 기본 설정을 바꿀 수 있는 설정을 "기타 설정"이라고 합니다. 기본 설정과 기타 설정이 MIDlet에 사용할 수 있는 구성 설정 풀을 형성합니다. 각 기능 그룹과 보호 도메인에 기본 설정과 기타 설정이 제공됩니다. 기능 그룹의 이름은 구현별로 다르지만 본 문서에 정의된 기능 그룹 이름에 대한 지침과 이러한 그룹 정의를 따라야 합니다.
표 2 - 표 5에서는 MIDP 2.0과 다른 JSR에 정의된 각 권한을 보여주며 이 절에 지정된 기능 그룹에 매핑합니다. 각 권한은 한 개의 기능 그룹에만 사용되어야 합니다.
응용 프로그램 자체에서 필요한 사용자 프롬프트를 제공해야 하기 때문에 제조업체 및 운영자가 신뢰할 수 있는 응용 프로그램은 다음 표에 정의된 설정을 준수하지 않아도 됩니다. 제조업체 및 운영자가 신뢰할 수 있는 응용 프로그램은 표에 정의된 권한 지침을 준수하고, 보안상 보호된 기능을 식별할 수 있도록 사용자에게 적절한 프롬프트를 제공하는 것이 좋습니다.
표 1: 기능 그룹 및 사용자 설정
| | | | | |
| --- | --- | --- | --- | --- |
| **기능 그룹** | **신뢰할 수 있는 타사 도메인** | | **신뢰할 수 없는 도메인** | |
| 전화 걸기 | 기본 설정 | 원샷 | 기본 설정 | 원샷 |
| 기타 설정 | 권한 없음 | 기타 설정 | 권한 없음 |
| 네트 액세스 | 기본 설정 | 세션 | 기본 설정 | 세션 |
| 기타 설정 | 블랭킷, 권한 없음 | 기타 설정 | 권한 없음 |
| 메시징 | 기본 설정 | 원샷 | 기본 설정 | 원샷 |
| 기타 설정 | 권한 없음 | 기타 설정 | 권한 없음 |
| 응용 프로그램 자동 호출 | 기본 설정 | 원샷 | 기본 설정 | 원샷 |
| 기타 설정 | 블랭킷, 권한 없음 | 기타 설정 | 권한 없음 |
| 로컬 연결 | 기본 설정 | 세션 | 기본 설정 | 세션 |
| 기타 설정 | 블랭킷, 권한 없음 | 기타 설정 | 블랭킷, 권한 없음 |
| 멀티미디어 레코딩 | 기본 설정 | 세션 | 기본 설정 | 원샷 |
| 기타 설정 | 블랭킷, 권한 없음 | 기타 설정 | 세션, 권한 없음 |
| 사용자 데이터 읽기 액세스 | 기본 설정 | 원샷 | 기본 설정 | 권한 없음 |
| 기타 설정 | 세션, 블랭킷, 권한 없음 | 기타 설정 | 권한 없음 |
| 사용자 데이터 쓰기 액세스 | 기본 설정 | 원샷 | 기본 설정 | 원샷 |
| 기타 설정 | 세션, 블랭킷, 권한 없음 | 기타 설정 | 권한 없음 |
장치는 단일 구성 설정 집합(기본 설정 또는 기타 설정)을 단일 MIDlet은 물론 지정된 서명자의 모든 MIDlet에 적용함으로써 사용자 경험을 향상시키고 단순화할 수 있습니다. 이 옵션으로 인해 표 1에 정의된 기능 그룹과 사용 가능한 설정이 손상되어서는 안 됩니다. 이러한 옵션이 있을 경우 사용자는 설정을 저장하여 나중에 동일한 소스의 응용 프로그램에 다시 사용하라는 메시지를 받게 됩니다. 이러한 기능은 사용자에게 지정된 소스가 이미 승인되었으며 저장된 구성 설정에 대한 별칭이 있다는 것을 알려줄 수도 있습니다.
신뢰할 수 있거나 신뢰할 수 없는 각 응용 프로그램에 대해 구현 시 MIDlet-Permissions 및 MIDlet-PermissionsOpt 속성에서 요청된 권한을 읽고, 응용 프로그램에 필요한 기능을 사용자에게 알려주며, 사용자에게 응용 프로그램 설치를 승인 또는 거부하라는 메시지를 표시할 수 있습니다.
주: 타사 도메인 또는 신뢰할 수 없는 도메인의 응용 프로그램의 경우 네트 액세스, 메시징 및 로컬 연결에 블랭킷 권한이 있으면 멀티미디어 레코딩이나 사용자 데이터 읽기 액세스는 블랭킷 권한을 가질 수 없으며 그 반대의 경우도 마찬가지입니다. 이 제한은 MIDlet이 사용자 동의 없이 네트워크 연결과 사용자 프라이버시와 관련된 기능을 동시에 활성화할 수 없도록 하기 위한 것입니다.
이와 마찬가지로, 응용 프로그램 자동 호출의 블랭킷 설정과 네트 액세스의 블랭킷 설정도 동시에 사용할 수 없습니다. 이 제약 조건은 응용 프로그램이 자신을 자동 호출한 다음, 보호하에 있어야 할 네트워크를 사용자도 모르게 액세스할 수 없도록 차단합니다.
이러한 권한 조합 중 하나로 네트 액세스에 블랭킷 권한이 부여될 경우 세션 권한으로 하향 조정해야 합니다.
전화 걸기 및 메시징 작업의 경우 구현 시 사용자가 작업을 승인하기 전에 사용자에게 대상 전화 번호를 표시해야 합니다. 메시징 그룹의 경우, 구현 시 단일 API 호출을 두 개 이상의 메시지에 매핑하면(즉, 구현 시 역어셈블리/재어셈블리를 지원하면) 실제로 전송되는 메시지 수를 사용자에게 표시해야 합니다. 이 요구 사항은 어떤 API 호출이 관련되어 있든 간에 사용자가 항상 프로그램 실행을 위한 네트워크 비용을 이해할 수 있도록 하기 위한 것입니다.
표 2: 기능 그룹에 MIDP 2.0에 규정된 권한 할당
| | | |
| --- | --- | --- |
| **MIDP 2.0** -**JSR 118** | | |
| **권한** | **프로토콜** | **기능 그룹** |
| javax.microedition.io.Connector.http | http | 네트 액세스 |
| javax.microedition.io.Connector.https | https | 네트 액세스 |
| javax.microedition.io.Connector.datagram | 데이터그램 | 네트 액세스 |
| javax.microedition.io.Connector.datagramreceiver | 데이터그램 서버(호스트 없음) | 네트 액세스 |
| javax.microedition.io.Connector.socket | 소켓 | 네트 액세스 |
| javax.microedition.io.Connector.serversocket | 서버 소켓(호스트 없음) | 네트 액세스 |
| javax.microedition.io.Connector.ssl | ssl | 네트 액세스 |
| javax.microedition.io.Connector.comm | comm | 로컬 연결 |
표 3: 기능 그룹에 PDA 프로필의 개인 정보 관리 패키지에 규정된 API 호출 및 제안된 권한 할당
편집자 주: 현재의 PIM API 패키지는 쓰기 전용 API를 규정하지 않습니다. PIM 패키지에서는 PIM API를 보호하는 데 필요한 권한도 규정하지 않습니다. 이러한 변경 사항이 PIM API 패키지에 통합되면 이 표의 내용도 업데이트될 것입니다.
| | | |
| --- | --- | --- |
| **PDAP PIM 패키지 API (JSR75)** | | |
| **정책 파일 식별자** | **허용되는 Java API 호출** | **기능 그룹** |
| javax.microedition.pim.PIM. contact.readonly | PIM.listContactLists() PIM.openContactList(READ\_ONLY) PIM.openContactList(READ\_ONLY, listName) | 사용자 데이터 읽기 액세스 |
| javax.microedition.pim.PIM. contact.readwrite | PIM.listContactLists() PIM.openContactList(READ\_ONLY) PIM.openContactList(READ\_WRITE) PIM.openContactList(READ\_ONLY, listName) PIM.openContactList(READ\_WRITE, listName) | 사용자 데이터 쓰기 액세스 |
| javax.microedition.pim.PIM. event.readonly | PIM.listEventLists() PIM.openEventList(READ\_ONLY) PIM.openEventList(READ\_ONLY, listName) | 사용자 데이터 읽기 액세스 |
| javax.microedition.pim.PIM. event.readwrite | PIM.listEventLists() PIM.openEventList(READ\_ONLY) PIM.openEventList(READ\_WRITE) PIM.openEventList(READ\_ONLY, listName) PIM.openEventList(READ\_WRITE, listName) | 사용자 데이터 쓰기 액세스 |
| javax.microedition.pim.PIM. todo.readonly | PIM.listToDoLists() PIM.openToDoList(READ\_ONLY) PIM.openToDoList(READ\_ONLY, listName) | 사용자 데이터 읽기 액세스 |
| javax.microedition.pim.PIM. todo.readwrite | PIM.listToDoLists() PIM.openToDoList(READ\_ONLY) PIM.openToDoList(READ\_WRITE) PIM.openToDoList(READ\_ONLY, listName) PIM.openToDoList(READ\_WRITE, listName) | 사용자 데이터 쓰기 액세스 |
구현 시에는 이러한 기능에 대한 응용 프로그램 액세스를 허용하기 전에 응용 프로그램이 액세스할 수 있는 사용자 데이터의 속성(예: 이벤트 또는 할 일 목록)을 사용자에게 알려줘야 합니다. MIDlet이 새로운 PIM 항목을 추가할 때마다 이를 표시하여 사용자 확인을 받아야 합니다.
표 4: 기능 그룹에 Bluetooth API에 규정된 API 호출 및 제안된 권한 할당
| | | |
| --- | --- | --- |
| **Bluetooth API**-**JSR 82** | | |
| **정책 파일 식별자(제안된 권한)** | **허용되는 API 호출** | **기능 그룹** |
| javax.microedition.io.Connector.bluetooth.client | Connector.open(“btspp://…”) Connector.open(“btl2cap://…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.client | Connector.open(“btgoep://…”) Connector.open(“irdaobex://discover…”) Connector.open(“irdaobex://addr…”) Connector.open(“irdaobex://conn…”) Connector.open(“irdaobex://name…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.client.tcp | Connector.open(“tcpobex://…”) | 네트 액세스 |
| javax.microedition.io.Connector.bluetooth.server | Connector.open(“btspp://localhost:…”) Connector.open(“btl2cap://localhost:…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.server | Connector.open(“btgoep://localhost:…”) Connector.open(“irdaobex://localhost:…”) | 로컬 연결 |
| javax.microedition.io.Connector.obex.server.tcp > | Connector.open(“tcpobex://:”) Connector.open(“tcpobex://”) | 네트 액세스 |
| javax.microedition.io.PushRegistry.bluetooth.server | PushRegistry.registerConnection(“btspp://:”) PushRegistry.registerConnection(“btl2cap://:”) | 응용 프로그램 자동 호출 |
| javax.microedition.io.PushRegistry.obex.server | PushRegistry.registerConnection(“btgoep://:”) PushRegistry.registerConnection(“irdaobex://???…”) | 응용 프로그램 자동 호출 |
| javax.microedition.io.PushRegistry.obex.server.tcp | PushRegistry.registerConnection(“tcpobex://:”) | 응용 프로그램 자동 호출 |
주: Bluetooth API에 제안된 권한은 아직 JSR82에 정의되어 있지 않습니다.
표 5: 기능 그룹에 무선 메시징 API에 규정된 API 호출 및 제안된 권한 할당
| | | |
| --- | --- | --- |
| **무선 메시징 API** -**JSR 120** | | |
| **정책 파일 식별자(제안된 권한)** | **허용되는 API 호출** | **기능 그룹** |
| javax.microedition.io.Connector.sms.send | Connector.open("sms://…", WRITE) Connector.open("sms://…", WRITE, Bool) | 메시징 |
| javax.microedition.io.Connector.sms.receive | Connector.open("sms://…", READ) Connector.open("sms://…", READ, Bool) | 메시징 |
| javax.microedition.io.Connector.sms | Connector.open("sms://…") Connector.open("sms://…", READ) Connector.open("sms://…", READ, Bool) Connector.open("sms://…", WRITE) Connector.open("sms://…", WRITE, Bool) Connector.open("sms://…", READ\_WRITE) Connector.open("sms://…", READ\_WRITE, Bool) | 메시징 |
| javax.microedition.io.Connector.cbs.receive | Connector.open("cbs://…") Connector.open("cbs://…", READ) Connector.open("cbs://…", READ, Bool) | 메시징 |
주: 무선 메시징 API에 제안된 권한은 아직 JSR120에 정의되어 있지 않습니다.
표 6: 기능 그룹에 모바일 미디어 API에 규정된 API 호출 및 제안된 권한 할당
| | | |
| --- | --- | --- |
| **모바일 미디어 API**-**JSR 135** | | |
| **정책 파일 식별자(제안된 권한)** | **허용되는 API 호출** | **기능 그룹** |
| javax.microedition.media.RecordControl.startRecord | RecordControl.startRecord ( ) | 멀티미디어 레코딩 |
| javax.microedition.media.VideoControl.getSnapshot | VideoControl.getSnapshot (…) | 멀티미디어 레코딩 |
주: 모바일 미디어 API에 제안된 권한은 아직 JSR135에 정의되어 있지 않습니다.
구현 시에는 모바일 미디어 API의 I/O 액세스가 javax.microedition.io의 패키지 설명서에 규정된 일반 연결 프레임워크와 동일한 보안 요구 사항을 따라야 합니다. 예를 들어, javax.microedition.media.Player.start, javax.microedition.media.Player.prefetch 등의 메소드가 있습니다. 이러한 메소드를 사용하여 HTTP 연결을 통해 플레이어의 컨텐트를 가져올 경우에는 구현 시 HTTP에 대해 규정된 보안 요구 사항을 시행해야 합니다.
사용자가 기능 그룹에 권한을 부여하면 MIDlet에 권한이 부여된 이 기능 그룹 하의 모든 개별 권한에 대한 액세스가 부여됩니다. 그룹의 모든 개별 권한을 포함해서는 안 됩니다. 예를 들어, MIDlet이 HTTP 연결을 구성할 수 있는 권한은 있지만 네트 액세스 그룹의 다른 보호된 기능을 액세스할 수 있는 권한이 없을 경우 네트 액세스에 블랭킷 권한을 부여하면 HTTP 연결만 사용할 수 있습니다. 기능 그룹은 사용자 표시용으로만 사용되기 때문에 MIDP 권한 부여 프레임워크에서 MIDlet에 부여하지 않은 개별 권한은 사용자가 네트 액세스를 허용해도 부여되지 않습니다.
구현 시 참고 사항:
1. 구현 시에는 호출자에게 적절한 보안 권한이 없을 경우 보안 예외를 발생시키도록 해야 합니다.
2. 메시징 그룹에 원샷 권한을 부여하면 javax.microedition.io.Connector.sms 및 javax.microedition.io.Connector.cbs의 블랭킷 권한과 메시지 수신을 사용 가능하게 하는 권한으로 변환됩니다. 하지만 메시지 전송 권한은 여전히 원샷입니다. 즉, 사용자는 열려 있는 연결 내에서 MIDlet 이 전송하는 각 메시지에 권한을 부여합니다. 세션 권한의 경우도 마찬가지입니다. 메시지 전송과 관련된 기능에는 세션 권한이 부여되지만 다른 기능은 블랭킷 권한을 부여 받습니다. 메시징 그룹에 블랭킷 권한과 권한 없음을 부여할 경우 이 그룹 하의 모든 개별 권한에 적용됩니다.
MIDlet이 MIDP 및 다른 API에 정의된 기능을 사용할 경우 다음 규칙을 적용해야 합니다.
- MIDP 2.0 보안 프레임워크에서 보호해야 하는 모든 외부 API 함수는 후속 JSR에 권한이 정의되어 있어야 하며 MIDP 2.0 사양인 "Security for MIDP Applications"에 규정된 이름 지정 규칙을 따라야 합니다.
- 사양에서 보안상 보호해야 하는 기능으로 분류되지 않은 기능은 일반 MIDP 보안 규칙에 따라 신뢰할 수 있는 MIDlet과 신뢰할 수 없는 MIDlet이 모두 명시적으로 액세스할 수 있습니다.
- API 사양이 MIDP 2.0보다 이전에 출시되어 외부 API에 보안상 보호된 기능에 대한 권한이 정의되어 있지 않은 경우에도 네트워크 액세스와 관련된 모든 기능에 장치에서 구현된 사용자 프롬프트가 있어야 합니다.
- 장치는 적절한 사용자 알림 없이 네트워크에 액세스할 수 없습니다.
- 모든 개방형 클래스는 본 문서에 정의된 권한 프레임워크를 준수해야 합니다.
## 6 권한 부여 기법에 의해 MIDlet Suite에 부여된 권한
MIDP 2.0 사양의 "Security for MIDP Applications" 절에 정의된 것처럼 MIDlet Suite 권한은 실제로 JSR 상세 목록에 있는 도메인 권한 Midlet-Permission과 Midlet-Permission-Opt의 교집합입니다. 부여된 MIDlet의 권한을 사용자에게 제공하는 방법은 구현별로 다르지만 다음 규칙을 적용해야 합니다.
- 5절의 표에 규정된 사용자 권한 유형의 기본 집합과 사용 가능한 집합을 바탕으로, 사용자는 기본 설정을 지정된 MIDlet 권한에 사용 가능한 어떤 설정으로든 변경할 수 있어야 합니다. 이러한 유연성을 통해 사용자는 필요에 따라 기본 권한을 상향 조정하거나 하향 조정할 수 있습니다.
- MIDlet 권한이 해당 기능에 따라 그룹화되어 있으면 MIDlet Suite에 부여된 권한은 기능 그룹으로 구성되어 사용자에게 표시됩니다. 기능 그룹을 사용할 경우 그룹 하의 모든 권한 그룹에 기본 권한이 적용됩니다. 사용 가능한 사용자 권한 유형 집합도 마찬가지입니다. 기본 권한을 변경하면 그룹 하의 개별 권한이 아닌 전체 그룹에 변경 사항이 동시에 적용됩니다.
- 기능 그룹은 다른 기본 설정과 기타 설정을 조합하여 사용할 수 없습니다. 따라서 5절의 표는 단일 기능 그룹의 모든 권한에 동일한 기본 설정과 사용 가능한 설정을 사용하는 규칙을 따르고 있습니다. 새 권한과 정책을 설계할 경우 이 규칙을 고려해야 합니다.
장치는 MIDlet 이름, 버전 번호 등의 일반 MIDlet 정보 외에도 설치된 각 MIDlet의 보안 관련 데이터를 유지 관리해야 합니다. 이 데이터에는 최소한 다음과 같은 정보가 포함되어야 합니다.
- MIDlet 소스(응용 프로그램이 서명된 경우). 최소한 MIDlet-Vendor는 설치된 MIDlet과 함께 저장해야 합니다.
- 서명된 MIDlet을 인증한 루트 인증서와 관련된 데이터(최소한 루트 인증서의 제목 필드 포함)
- MIDlet을 서명한 서명자 인증서와 관련된 데이터(최소한 인증서의 제목, 발급자 및 일련 번호필드 포함) 또는 장치에서 MIDlet 설명자 파일과 함께 제공된 전체 인증서 체인을 저장할 수도 있습니다.
- MIDlet에 부여된 권한 목록
장치는 응용 프로그램 서명자와 관련된 정보를 사용자에게 친숙한 방법으로 제공할 수 있어야 합니다.
## 7 사용자 프롬프트 및 알림
사용자가 충분한 정보를 받은 후에 MIDlet 작업에 동의할 수 있도록 하려면 다음 규칙을 따라야 합니다.
- 보호되어야 할 이벤트가 MIDlet에서 생성되는 경우 미리 사용자 알림을 표시해야 합니다. 예를 들어, MIDlet이 전화를 거는 전화 번호, 연결하는 URL 또는 SMS의 수신자 등을 표시해야 합니다.
- 보호되어야 할 이벤트를 진행 중인 경우(예: 사용자에게 책임이 있는 피어-투-피어 연결) 사용자에게 모두 표시해야 합니다.
- MIDlet은 정책의 사용자 권한 설정에 따라 사용자 승인을 받은 후 네트워크에 연결해야 합니다.
- 모든 MIDlet 권한을 직관적이고 사용자에게 친숙한 방식으로 사용자에게 표시해야 합니다.
- MIDlet은 시스템 또는 가상 머신에서 생성된 보안 프롬프트와 사용자 알림을 무시할 수 없어야 합니다.
- MIDlet은 사용자의 오해를 불러일으키는 보안 경고를 시뮬레이트할 수 없어야 합니다.
- MIDlet은 사용자의 오해를 불러일으키는 키 누름 이벤트를 시뮬레이트할 수 없어야 합니다.
## 8 로밍 중 및 스마트 카드 변경 후의 MIDlet 다운로드 및 실행
이전에 권한이 부여되어 설치된 모든 MIDlet은 장치가 로밍 중이거나 장치 스마트 카드를 변경할 때 장치 정책에 따라 작동해야 합니다. 새로 다운로드한 MIDlet은 인증서 저장소에서 현재 사용 가능한 루트 인증서에 대해 인증되며 장치 정책에 따라 권한이 부여됩니다.
장치 로밍 또는 스마트 카드 변경으로 인해 MIDlet이 이전에 액세스할 수 있었던 네트워크 자원에 대한 액세스에 실패한 경우에는 구현 시 SecurityException을 발생시키지 않아야 합니다. 이 실패는 MIDlet 권한 부여로 인한 것이 아니므로 구현 시 IOException을 발생시켜야 합니다.
제조업체, 신뢰할 수 있는 타사 및 신뢰할 수 없는 도메인에 설치된 MIDlet에 할당된 권한은 (U)ICC [(U)ICC]를 변경해도 영향을 받지 않지만, 운영자 도메인에 설치된 MIDlet은 스마트 카드 변경 후 SIM에 MIDlet을 운영자 도메인에 인증할 때 사용된 운영자 루트 공개 키가 포함된 인증서("인증 루트", 3.2절 "운영자 도메인" 참조)가 없을 경우 실행되지 않아야 합니다.
- 운영자 도메인에 설치된 MIDlet은 인증서 체인이 스마트 카드의 운영자 도메인 키 사용 필드에 저장된 인증 루트 인증서로 끝나는 인증서로 서명됩니다. 루트 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(태그, 길이 및 사용하지 않은 비트 수 제외)는 MIDlet의 "인증 루트 키 해시"라고 하며 3.2절에 규정된 것처럼 MIDlet과 함께 장치에 저장됩니다.
- 스마트 카드를 변경할 때마다 운영자 도메인의 MIDlet을 실행하기 전에 새로운 스마트 카드의 운영자 도메인 키 사용 필드에 저장된 각 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(운영자 도메인 루트 키 해시)가 계산 및 저장됩니다.
- 운영자 도메인의 MIDlet은 해당 인증 루트 키 해시가 스마트 카드 변경 후에 생성된 새로운 운영자 도메인 루트 키 해시 중 하나에 일치하지 않을 경우 사용할 수 없게 됩니다.
운영자 도메인의 MIDlet 실행 가능 여부는 루트 인증서의 BIT STRING subjectPublicKey 값의 20바이트 SHA-1 해시(태그, 길이 및 사용하지 않은 비트 수 제외)로 계산된 "루트 키 해시" 값 비교에 따라 결정됩니다. 결정 프로세스에서는 다음 기법을 따르는 것이 좋습니다.
- 운영자 도메인에 설치된 MIDlet은 인증서 체인이 스마트 카드의 운영자 도메인 키 사용 필드에 저장된 인증 루트 인증서로 끝나는 인증서로 서명됩니다. 해당 인증서의 subjectPublicKey 해시 값은 MIDlet의 "인증 루트 키 해시"라고 하며 3.2절에 규정된 것처럼 MIDlet과 함께 장치에 저장됩니다.
- 스마트 카드를 변경할 때마다 운영자 도메인의 MIDlet을 실행하기 전에 새로운 스마트 카드에 저장된 각 인증서의 "운영자 도메인 루트 키 해시"가 계산 및 저장됩니다.
- 운영자 도메인의 MIDlet은 해당 인증 루트 키 해시가 스마트 카드 변경 후에 생성된 새로운 운영자 도메인 루트 키 해시 중 하나에 일치하지 않을 경우 사용할 수 없게 됩니다.
- 운영자 도메인에 설치된 MIDlet은 인증서 체인이 인증 루트 인증서로 끝나는 인증서로 서명됩니다. 해당 인증서의 subjectPublicKey 해시 값은 MIDlet의 "인증 루트 키 해시"라고 하며 3.2절에 규정된 것처럼 MIDlet과 함께 장치에 저장됩니다.
- 스마트 카드를 변경할 때마다 운영자 도메인의 MIDlet을 실행하기 전에 새로운 스마트 카드에 저장된 각 인증서의 루트 키 해시가 계산 및 저장됩니다.
- 운영자 도메인의 MIDlet은 해당 인증 루트 키 해시가 스마트 카드 변경 후에 생성된 새로운 운영자 도메인 루트 키 해시 중 하나에 일치하지 않을 경우 사용할 수 없게 됩니다.
주: 이 기법에서 장치는 스마트 카드 변경 후 1) 새로운 운영자 도메인 루트 키 해시 계산 2) 운영자 도메인의 각 MIDlet에 대해 해당 인증 루트 키 해시가 새로운 운영자 도메인 루트 키 해시 집합에 속하는지 확인의 두 단계를 수행합니다. 인증 루트 키 해시가 새로운 운영자 도메인 루트 키 해시 중 하나에 일치하지 않으면 스마트 카드 변경 후 어떠한 운영자 MIDlet도 실행되지 않을 경우, 구현 시 언제든지 이러한 두 단계를 수행할 수 있습니다. 1단계 후에 바로 2단계를 수행할 수 있습니다. 또는 1단계와 2단계에 시간 차를 둘 수 있으며, 이 경우에는 구현 시 1단계 결과를 안전하게 저장하여 2단계에서 사용할 수 있도록 하는 것이 좋습니다.
지정된 위치에 운영자 도메인 루트 인증서가 없을 경우 인증 루트 인증서가 없으면 응용 프로그램을 실행할 수 없다는 것을 사용자에게 알려야 합니다. 또한 장치는 응용 프로그램을 운영자 도메인에 인증할 때 사용된 루트 인증서의 정보를 가져올 수 있는 옵션을 사용자에게 제공하는 것이 좋습니다. 이 정보에는 루트 인증서의 *제목* 필드가 포함되는 것이 좋습니다.
스마트 카드 변경 시 인증 루트가 여전히 스마트 카드에 있는지 여부를 확인하는 것만 요구되긴 하지만 구현 시 다른 경우에도 확인하여 그 결과에 따라 지정된 대로 운영자 도메인의 응용 프로그램을 사용할 수 없게 할 수도 있습니다.
인증 운영자 루트 공개 키가 없어 MIDlet을 실행할 수 없는 경우 장치에서 응용 프로그램을 삭제해서는 안 됩니다. 장치는 적절한 기법을 통해 응용 프로그램의 실행 가능 여부를 미리 사용자에게 알려줄 수도 있습니다. 예를 들어, 디스플레이에 "사용 불가" 상태를 표시할 수 있습니다. 그러나 사용자는 이러한 사용 불가 응용 프로그램을 삭제할 수 없어야 합니다.
---
title: "2. 개념적 구조"
---
본 규격에서 정의하는 모바일 표준 플랫폼은 개념적으로 그림 1과 같은 구조를 갖는 다. 단말기 기본 S/W는 통신 기본 기능과 각종 디바이스 드라이버가 포함된다. 그림 1에서 Extended API는 선택 사양이다.
Application Programs Basic API (MSF/MSP/WIPI-C) Extended API (CLDC Core API/MIDP)
```text
┌─────────────────────────────────────────────────────┐
│ Application Programs │
├─────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────┐ │
│ │ Basic API (MSF/MSP/WIPI-C) │ │
│ │ Extended API (CLDC Core API/MIDP) │ │
│ ├─────────────────────────────────────────────────┤ │
│ │ 모바일 표준 플랫폼 │ │
│ ├─────────────────────────────────────────────────┤ │
│ │ HAL (Handset Adaptation Layer) │ │
│ └─────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────┤
│ 단말기 기본 소프트웨어 │
├─────────────────────────────────────────────────────┤
│ Handset Hardware │
└─────────────────────────────────────────────────────┘
그림 1 개념적 구조도
```
- HAL (Handset Adaptation Layer)
플랫폼 이식에 있어서 하드웨어 독립성을 지원하기 위한 계층이다. 이를 통해 단말기 에 대한 추상화가 이루어지고, 하드웨어 독립적으로 플랫폼이 구성된다.
- 기본 API (BASIC API)
응용프로그램 개발자가 사용하는 플랫폼에서 지원하는 기본 API 모음이다. C 및 자바 API를 제시한다.
---
title: "개요"
---
WIPI 1.2.1 규격 1~3장. 플랫폼이 무엇이고, 어떤 구조이고, 단말기가 어느 정도 사양을
요구하는지를 정리합니다.
- [1. 서론](introduction.md) — 규격의 목적, 범위, 용어 정의
- [2. 개념적 구조](architecture.md) — Application / Basic API / HAL / 단말기 SW 계층 모델
- [3. 주요 기능 규격](platform.md) — 주요 기능, 보안, 응용프로그램 관리, 권장 사양
---
title: "1. 서론"
---
## 1.1. 규격의 목적
본 문서는 이동 통신 단말기(이하 단말기)에 탑재되어 응용 프로그램을 수행할 수 있는 환경을 제공하는 모바일 표준 플랫폼 규격(이하 플랫폼 규격)을 정의 한다.
본 규격을 만족하는 모바일 플랫폼(이하 플랫폼)은 단말기용 응용 프로그램 개발 자에게는 플랫폼간 컨텐츠 호환성을 보장하고, 단말기 개발자에게는 플랫폼의 이 식의 용이성을 제공하며, 일반 이용자에게 다양하고 풍부한 컨텐츠 서비스의 제공 을 목적으로 한다.
## 1.2. 규격의 범위
본 문서는 플랫폼 표준 규격으로써 다음과 같은 내용을 기술한다.
- 본 문서의 목적, 범위, 요구사항 및 용어를 정의한다.
- 본 문서에서 정의하는 플랫폼의 개념적인 구조 및 모바일 환경에서 동작하는
단말기의 타 모듈과의 인터페이스를 추후 정의한다.
- 플랫폼 이식에 있어서 하드웨어 독립성을 지원하기 위한 추상화 계층인
HAL(Handset Adaptation Layer) 규격을 정의한다.
- 플랫폼의 응용 프로그래밍 인터페이스(Application Programming Interface, 이
하 API) 규격을 정의한다. 본 규격은 자바 언어와 C 언어를 지원한다.
- 차세대 모바일 자바 API는 추후 정의 할 수 있다.
- 플랫폼의 주요 기능 규격을 정의한다.
## 1.3. 용어정의
### 1.3.1. 모바일 플랫폼
실행 환경(Runtime Execution Environment)을 모바일 플랫폼이라 하며, 이 플랫폼은 응용프로그램 관리와 API 관리 기능을 포함해야 한다.
### 1.3.2. Clet
응용프로그램 생명주기를 따라야 한다.
### 1.3.3. Jlet
램은 MSP의 응용프로그램 생명주기를 따라야 한다.
### 1.3.4. 단말기 기본 소프트웨어
플랫폼이 탑재되는 기반 소프트웨어이다. HAL 은 하단의 단말기 기본 소프트웨어 와 플랫폼을 연결 해 주는 역할을 한다.
### 1.3.5. 태스크
단말기 기본 소프트웨어 상에서 정의 되는 우선순위를 가지고 수행되는 단위이다.
### 1.3.6. 다중 응용프로그램 수행(멀티 태스킹)
Clet 혹은 Jlet 이 모바일 표준 플랫폼 위에서 서로 독립된 메모리 공간을 가지 고 동시에 (concurrently) 수행되는 것을 말한다.
### 1.3.7. ATOC (Ahead-Of0Time Compiler)
자바를 컴파일하여 생성되는 중간코드(bytecode)를 팰랫폼으로 다운로드되기 이전 에 코드로 변환배주는 컴파일러이다.
### 1.3.8. MSF(Mobile Standard Foundation)
Mobile 용 디바이스을 위한 기반이 되는 API 이다. 입출력 기능, 네트워크, 보안, 국제화등을 지원한다.
### 1.3.9. MSP (Mobile Standard Profile)
MSF기반의 Mobile Device를 위한 Profile이다.
### 1.3.10. CLDC (Connection Oriented Device
Configuration) Connected, Limited Device Configuration 의 약자로 버추얼머신 기반의 Mobile 용 디바이스을 위한 Configuration 이다. CLDC 는 버추얼머신과 Core API 로 이루 어져 있고, 입출력 기능, 네트워크, 보안, 국제화등을 지원한다.
### 1.3.11. MIDP (Mobile Information Device Profile)
CLDC기반의 Mobile Device 을 위한 Profile 이다.
### 1.3.12. MIDlet
MIDP 규격에 따라 작성된 자바 언어 응용프로그램이다. 이 응용프로그램은 MIDP 의 응용프로그램 생명주기를 따라야 한다.
## 1.4. 표현
본 문서에서 사용하는 용어의 정의는 한글로 명확히 정의한다.
- 필수 사항 : ~야 한다. (사용 예문 : ~해야 한다. / ~어야 한다. / ~라야 한다.
/ ~아야 한다. / ~ 져야 한다.)
- 선택 사항 : ~할 수 있다.
## 1.5. 단말기 최소 권장 사양
본 규격에서 정의하는 플랫폼이 탑재되는 단말기에 대하여 다음과 같은 사양 이상을 권장 한다.
### 가 디스플레이
- 스크린 크기: 96x54 이상
- 색 상: 회색조 4가지 이상 또는 천연색 256가지 이상
### 나 입출력 장치
- 입력 장치: 키패드
- 사운드 장치: 진동 및 비프음
- 네트워크: 무선 및 시리얼을 통한 전송
### 다 비휘발성(Non-Volatile) 메모리
- 플랫폼 라이브러리가 사용할 수 있는 비휘발성 메모리 600KB 이상
- CLDC/MIDP 채택시 플랫폼 라이브러리가 사용할 수 있는 비휘발성 메모리 1MB 이상
- 응용프로그램 관리자 및 기본 응용프로그램에서 사용할 수 있는 비휘발성 메모리를 400KB 이상
- 응용프로그램이 사용 가능한 파일 시스템 공간으로 500KB 이상
### 라 휘발성(Volatile) 메모리
- 응용프로그램에서 사용 가능한 HEAP 영역으로 300KB 이상
- 플랫폼 라이브러리에서 사용 가능한 영역으로 20KB 이상
---
title: "3. 주요 기능 규격"
---
이 장에서는 표준 플랫폼의 주요 기능 규격을 정의한다.
## 3.1. 응용프로그램 머신 코드 규격
플랫폼은 머신 코드 형태의 응용프로그램을 다운로드 받아 수행해야 한다. 자바 응용 프로그램의 경우에는 자바 중간코드를 AOTC를 통해 머신 코드를 생성할 수 있다.
세부 머신 코드 규격은 추후 정의 할 수 있다.
## 3.2. 다중 응용프로그램 수행
플랫폼은 동시에 여러 개의 응용프로그램이 메모리에 적재되어 수행 될 수 있는 환경 을 지원해야 한다. 또한, 플랫폼은 여러 개의 응용프로그램을 동시에 실행할 수 있어 야 한다. 플랫폼은 여러 개의 응용프로그램 간 실행 우선 순위를 두고 매 순간 실행 가능한 가장 높은 우선 순위의 응용프로그램을 실행해야 한다.
여러 응용프로그램을 수행 할 경우 각 응용프로그램은 독립적으로 수행 되어야 한다.
독립적인 응용프로그램간 통신을 지원하기 위하여 공유 메모리와 이벤트를 전달 할 수 있는 방법을 제공해야 한다.
플랫폼은 플랫폼이 지원하는 프로그래밍 언어로 작성된 응용프로그램의 생명주기를 관 리할 수 있어야 한다.
## 3.3. 지원 프로그래밍 언어
플랫폼은 응용 프로그램 개발자가 자바나 C 언어로 플랫폼의 기본 API(Basic API) 를 사용하여 응용 프로그램을 작성할 수 있도록 지원해야 한다. 단, CLDC/MIDP 채택시에 는 Extended API를 사용하여 응용 프로그램을 작성할 수 있도록 지원해야 한다.
### 3.3.1. C 언어 지원
플랫폼은 기본 API에 정의된 C 언어용 API와 C 언어 문맥(Semantic)을 지원해야 한 다.
### 3.3.2. 자바 언어 지원
플랫폼은 기본 API에 정의된 자바 언어용 API와 자바 언어 문맥(Semantic)을 지원해 야 한다. 단, CLDC/MIDP 채택시에는 Extended API도 지원해야 한다.
## 3.4. 플랫폼 보안
플랫폼은 다음의 세가지 보안수준을 정의 한다. 플랫폼은 보안수준에 따라 API와 디렉 토리에 대한 접근을 제한해야 한다.
- PUBLIC 수준 가장
낮은 수준의 보안 레벨로, 보통 신뢰할 수 없는 일반 개발자가 제공하는 응용프 로그램에 적용된다. 따라서, 이 수준에서는 단말기에 영향을 미치거나, 개인 정보 등에 접근을 막아야 한다.
- CP(Contents Provider) 수준
이미 알려진 CP 들은 어느 정도 신뢰 할 수 있다고 보고, 단말기에 심각한 영향을 미 치지 않는 범위 내에서 접근을 허용해야 한다.
- 시스템(System) 수준
완전히 신뢰할 수 있는 것으로 보고, 모든 접근을 허용해야 한다.
### 3.4.1. API 보안
API별 보안 지원을 위해서 특정 API 그룹을 보안 대상 그룹으로 구분하여 해당 그룹 별로 보안 수준을 지정해야 한다. 플랫폼은 이때 각 그룹에 대해서 다음의 접근 수준 을 지정해야 한다.
- NO ACCESS : 허용하지 않음.
- READ ONLY : 읽기만 허용함.
- WRITE ONLY : 쓰기만 허용함.
- READ/WRITE : 읽기, 쓰기 모두 허용함.
API 그룹의 접근 수준과 보안 수준 설정에 대한 정책은 플랫폼 이식 시점에 결정되어 적용 된다.
### 3.4.2. 디렉토리 보안
플랫폼은 다음의 세가지 디렉토리 접근 방식을 지원해야 한다,
- 개인 디렉토리(Private Directory)
응용프로그램 관리자를 제외하고는 해당 응용프로그램 자신만이 접근할 수 있는 디렉토리이다.
- 응용프로그램 공유 디렉토리(Application Shared Directory)
이미 서로 합의된 응용프로그램들 간에 공유하기 위한 디렉토리이다.
- 시스템 공유 디렉토리(System Shared Directory)
응용프로그램에 관계없이 공유 되는 디렉토리이다.
## 3.5. API 추가/갱신 지원
플랫폼은 API 를 무선망을 통해서 추가/갱신할 수 있다. 추가/갱신 된 API는 지속적으로 유지 되어야 한다. 이를 지원하기 위하여 플랫폼은 API 추가/갱신에 따른 버전 관 리 및 설치/삭제 기능을 가져야 한다.
플랫폼이 무선망을 통한 API 추가/갱신이 가능하도록 지원하는 경우 부속서 7.2에 명시한 API 규격에 따라 지원하여야 한다.
플랫폼은 추가/갱신된 API에 대해서도 API 보안수준 정책을 동일하게 적용해야 한다.
## 3.6. 메모리 관리
플랫폼은 응용프로그램이 사용하는 HEAP 메모리를 다음과 같이 관리해야 한다.
- 자동 메모리 해제
하나의 응용프로그램이 종료되면, 해당 프로그램과 관련된 모든 메모리는 플랫폼에 반 환해야 한다. 따라서, 이벤트 등 각종 동적으로 사용된 메모리는 자동으로 모두 반환 해야 한다.
- 메모리 컴팩션(Compaction)
플랫폼에서 동적으로 사용하는 메모리를 할당/해제 할 때 메모리 단편화 (fragmentation)를 줄이기 위해 메모리 컴팩션을 할 수 있다.
- 자바 가비지 컬렉션(Garbage Collection)
플랫폼은 자바 언어 문맥에 따라 가비지 컬렉션을 지원해야 한다.
- 자바 스택(Stack)
플랫폼은 자바 응용프로그램 별로 스택을 할당/해제 할 수 있어야 하며, 각 응용프로그램별 스택의 크기를 동적으로 변화시킬 수 있다. 자바 응용프로그램이 메모리 한계 를 넘는 스택 할당 요청을 했을 경우 플랫폼은 예외 상황(exception)을 응용프로그램 에 전달 해야 하며, 예외상황 발생 후 플랫폼은 정상 동작해야 한다.
- 공유 메모리 지원
응용프로그램들이 사용하는 메모리는 서로 독립적이어야 하고, 플랫폼은 응용프로그램 간에 공유할 수 있는 메모리를 지원해야 한다. 단, C 언어는 언어적 특성을 따른다.
이때 플랫폼은 공유하는 모든 응용프로그램이 종료될 경우 자동으로 공유 메모리를 해 제 해야 한다.
## 3.7. 응용프로그램 관리
플랫폼은 다음의 기능을 제공해야 한다.
### 3.7.1. 관리 기능
- 응용프로그램 수행 시 날짜 제한, 회수 제한 설정에 따라 기동 여부를 판단해야 한다.
- 응용프로그램 설치/삭제 기능을 제공해야 한다.
- 응용프로그램 정지 기능을 제공 할 수 있다. 정지 기능은 실행 프로그램만 삭
제하고 관련 데이터 파일을 남겨 두어 추후 다시 프로그램을 설치하면 이전 데이터를 활용 할 수 있도록 하는 기능이다.
- API 추가/갱신 기능을 제공할 수 있다.
- 응용프로그램 강제 종료 기능을 제공해야 한다.
### 3.7.2. 응용프로그램 다운로드 기능
플랫폼은 응용프로그램을 다운로드 받는 기능을 지원 하고, 다운로드 중 오류가 발생 할 경우 초기 상태로 복구해야 한다.
무선망 뿐만 아니라 시리얼 인터페이스를 통한 다운로드 기능이 지원되어야 한다.
## 3.8. 다국어 지원
### 3.8.1. 유니코드 지원
플랫폼은 자바 응용프로그램을 위해 유니코드를 지원해야 하며,. 입출력 시 문자열은 지역 특성에 맞게 해당되는 문자 코드로 변환해야 한다.
한국의 경우는 유니코드 문자열과 EUC_KR 문자셋(Character Set) 문자열로 상호 변환 해야 한다.
### 3.8.2. 로케일 지원
플랫폼은 C 응용프로그램에대해 지역정보 (locale) 에 따라 참조하여 지원하는 문자셋 으로 인식해야 한다. 한국의 경우는 EUC_KR 문자셋을 이용해야 한다.
### 3.8.3. 확장 유니코드
EUC_KR 문자셋에는 유니코드에 대응되지 않는 그래픽 문자가 있으며, 이를 지원하기 위해서 유니코드 사양에서 Private Use(0xE000-0xF8FFF)영역을 사용하는 확장된 유 니코드를 사용 할 수 있다. 이에 대한 상세 내역은 부속서 7.2를 참조한다.
## 3.9. CLDC/MIDP 지원
본 규격에서 플랫폼은 CLDC/MIDP 를 지원할 수 있으나, 2003년 12월 31일 이후에는 필수적으로 CLDC/MIDP를 지원해야 한다. CLDC/MIDP를 지원하고자 할 경우 아래 소 절을 준수해야 하며. CLDC와 MIDP는 반드시 함께 지원되어야 한다.
CLDC/MIDP가 선택 규격일 경우에는 3장의 주요 기능 규격을 선택적으로 만족할 수 있지만, CLDC/MIDP가 필수 규격으로 제정될 경우에는 3장의 주요 기능 규격을 반드 시 충족시켜야 한다.
### 3.9.1. CLDC 지원
CLDC 규격은 Sun Microsystems 사의 [CLDC 규격 1.1](../cldc/index.md) (JSR-139)을 기준으로 해야 하며, 플랫폼은 바이너리 코드의 실행을 기반으로 하고 있으므로, CLDC 규격에서 정의하는 버추얼머신의 기능은 플랫폼 엔진에서 수용해야 한다. 단, CLDC 규격에서 바이트코드와 코드 Verrification 처리는 플랫폼의 의미를 AOTC를 포함하는 것으로 해 석하여 처리하기로 규정한다. (이와 관련하여 CLDC 규격서 5.2.1.1 Verification process의 Phase 2: In -device verification에서 “In-device”의 정의를 플랫폼과 AOTC를 포함하는 것으로 한다.) CLDC를 지원할 경우 규격서 “5.2.1 Core System (java.lang)”, “5.2.2 High Level IO (java.io)”, “5.2.3 Utilities (java.util)”은 CLDC Core API와 호환되도록 대체한다.
### 3.9.2. MIDP 지원
MIDP 규격은 Sun Microsystems 사의 [MIDP 규격 2.0](../midp/index.md) (JSR-118)을 기준으로 해야한다.
### 3.9.3. Extended API
본 규격에서 CLDC/MIDP 의 API를 Extended API로 정의하며, 필수 규격화 될 경우에 는 Basic API로 편입히기로 한다.
### 3.9.4. Basic API와의 상호운용성
Basic API와의 상호운용성 확보는 CLDC/MIDP가 추후 필수 규격화 되는 시점에서 만 들어질 규격에서 구체적인 방안을 제시하도록 한다.