Java 메서드에 데이터 전달하기
MATLAB 데이터형과 Java 데이터형 간 매핑
MATLAB® 데이터를 Java® 메서드에 인수로 전달할 경우 MATLAB은 이 데이터를 Java 언어에서 가장 잘 나타낼 수 있는 유형으로 변환합니다. 데이터를 java.lang
유형의 인수로 전달할 때 유형 매핑에 대한 자세한 내용은 Java 객체 전달하기 항목을 참조하십시오.
다음 표의 각 행에는 MATLAB 데이터형과 함께, 그에 상응하는 Java 인수가 왼쪽부터 오른쪽으로 근사한 정도 순으로 나와 있습니다. MATLAB 데이터형(셀형 배열 제외)은 스칼라(1×1) 배열 또는 행렬일 수 있습니다. Java 데이터형은 스칼라 값 또는 배열일 수 있습니다.
MATLAB 인수 | Java 파라미터 유형(스칼라 또는 배열) 가장 가까운 유형 <———————————————————————> 가장 거리가 먼 유형 | ||||||
---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||
|
|
|
|
|
|
| |
|
|
|
|
|
| ||
|
|
|
|
| |||
|
|
|
| ||||
|
| ||||||
|
| ||||||
|
|
| |||||
객체로 구성된 셀형 배열 |
| ||||||
MATLAB 객체 | 지원 안 됨 |
배열 차원이 변환에 미치는 영향
차원이라는 용어는 배열의 요소를 지칭하는 데 필요한 첨자 개수를 의미합니다. 예를 들어, 5×1 배열의 경우 하나의 배열 첨자를 사용하여 개별 요소를 참조하므로 1차원입니다.
MATLAB 배열을 Java 배열로 변환할 때, MATLAB은 특수한 방식으로 차원을 처리합니다. MATLAB 배열에서, 차원은 배열의 비한원소 차원 개수입니다. 예를 들어, 10×1 배열의 차원은 1입니다. 반면, 1×1 배열의 차원은 0입니다. 스칼라 값의 요소는 참조할 수 없기 때문입니다. Java 코드에서는 중첩 배열의 수에 따라 차원이 결정됩니다. 예를 들어, double[][]
의 차원은 2이고 double
의 차원은 0입니다.
Java 배열의 차원 수가 MATLAB 배열의 차원 수 n
과 일치하는 경우, 변환된 Java 배열은 n
차원을 가집니다. Java 배열의 차원 수가 n
보다 더 적을 경우, 변환 과정에서 첫 번째 차원부터 시작하여 한원소 차원을 삭제합니다. 남은 차원의 수가 Java 배열의 차원 수와 일치하면 변환이 중지됩니다. Java 배열의 차원 수가 n보다 더 많을 경우, MATLAB은 후행 한원소 차원을 추가합니다.
숫자를 정수 인수로 변환하기
Java 정수 파라미터를 받는 Java 메서드에 정수형을 전달할 때 MATLAB 변환은 Java에서의 정수형 간 변환과 동일합니다. 특히, 정수가 범위를 벗어나는 경우 이 정수는 파라미터 유형의 비트 수에 맞지 않습니다. 범위를 벗어난 정수에 대해 MATLAB은 가장 낮은 n
개 비트를 모두 버립니다. 값 n
은 파라미터 유형의 비트 수입니다. 이 변환은 범위를 벗어난 정수가 대상 유형으로 표현되는 최댓값이나 최솟값으로 변환되는 MATLAB 정수형 간 변환과는 다릅니다.
인수가 부동소수점 숫자인 경우 MATLAB은 Java와 같은 방식으로 이 인수를 정수로 변환하지 않습니다. MATLAB은 먼저 부동소수점 숫자를 부호 있는 64비트 정수로 변환합니다(소수부는 잘림). 그러면 이 숫자는 int64
형 인수인 것처럼 처리됩니다.
부동소수점 숫자가 -263에서 263 사이 범위를 벗어나면 너무 커서 64비트 정수로 표현할 수 없습니다. 이 경우 MATLAB은 다음과 같은 변환을 사용합니다.
int
,short
및byte
파라미터 값은0
으로 변환.long
파라미터 값은java.lang.Long.MIN_VALUE
로 변환.Inf
값과-Inf
값은-1
로 변환.NaN
값은0
으로 변환.
string형 인수 전달하기
java.lang.String
으로 정의된 인수를 갖는 Java 메서드를 호출하려면 MATLAB string형 또는 문자형 벡터를 전달하십시오. MATLAB은 이 인수를 Java String
객체로 변환합니다. Java 메서드에 의해 반환된 String
객체를 전달할 수도 있습니다.
메서드 인수가 String
유형으로 구성된 배열인 경우에는 string형 배열이나 문자형 벡터로 구성된 셀형 배열을 전달하십시오. MATLAB은 이 입력값을 배열 차원이 변환에 미치는 영향에 설명된 대로 차원을 조정하여 String
객체로 구성된 Java 배열로 변환합니다.
Java 객체 전달하기
java.lang.Object
이외의 Java 클래스에 속한 인수를 갖는 메서드를 호출하려면 해당 클래스의 인스턴스인 Java 객체를 전달해야 합니다. MATLAB은 MATLAB 유형을 Java Object
유형으로 자동 변환하는 Java 오토박싱(Autoboxing)을 지원하지 않습니다. 예를 들어, MATLAB은 Double
유형의 파라미터에 대해 double
을 java.lang.Double
로 변환하지 않습니다.
java.lang.Object
전달하기
메서드가 java.lang.Object
클래스의 인수를 받는 특수한 경우가 있습니다. 이 클래스는 Java 클래스 계층 구조의 루트이므로, 어떤 클래스의 객체든지 인수로 전달할 수 있습니다. MATLAB은 자동으로 인수를 가장 가까운 Java Object
유형으로 변환합니다. 이때 Java 스타일 오토박싱이 발생할 수 있습니다. 다음 표에는 이 변환이 나와 있습니다.
MATLAB 인수 | 패키지 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Java 객체 | 인수가 변경되지 않음 |
셀형 배열 |
|
MATLAB 객체 | 지원 안 됨 |
객체로 구성된 배열 전달하기
java.lang.Object
또는 java.lang.Object
의 배열로 정의된 인수를 갖는 메서드를 호출하려면 Java 배열이나 MATLAB 셀형 배열을 전달하십시오. MATLAB은 java.lang.Object 전달하기 표에 설명된 대로 셀형 배열 요소를 그에 상응하는 Java 유형으로 자동으로 변환합니다. Java 배열은 Java 생성자에서 반환되는 배열입니다. javaArray
함수를 사용하여 MATLAB에서 Java 배열을 생성할 수도 있습니다.
Java 객체로 구성된 셀형 배열 전달하기
Java 객체로 구성된 셀형 배열을 만들려면 MATLAB 구문 {a1,a2,...}
를 사용하십시오. 구문 a{m,n,...}
을 사용하여 일반적인 방식으로, Java 객체로 구성된 셀형 배열의 요소를 참조합니다. 예를 들어, 다음과 같이 셀형 배열 A
를 만들어 보십시오.
a1 = java.lang.Double(100); a2 = java.lang.Float(200); A = {a1,a2}
A = 1×2 cell array [1×1 java.lang.Double] [1×1 java.lang.Float]
빈 행렬, null, 누락값 전달하기
MATLAB은 빈 행렬을 다음과 같이 변환합니다.
인수가 빈 문자형 벡터이고 파라미터가
String
으로 선언된 경우, MATLAB은null
이 아니라 빈 JavaString
객체를 전달합니다.그 외의 경우, MATLAB은 빈 배열을 Java
null
로 변환합니다.
빈(길이 0
) Java 배열은 변경되지 않은 상태로 유지됩니다.
MATLAB은 string형 내의 <missing>
값을 null
로 변환합니다.
오버로드된 메서드
Java 객체에서 오버로드된 메서드를 호출할 경우 MATLAB은 사용자가 전달하는 인수와 메서드에 대해 정의된 인수를 비교합니다. 이 맥락에서 메서드라는 용어는 생성자를 포함합니다. MATLAB은 호출할 메서드를 결정하고 Java 변환 규칙에 따라 인수를 Java 유형으로 변환합니다. 자세한 내용은 객체로 구성된 배열 전달하기 항목을 참조하십시오.
Java 메서드를 호출할 경우 MATLAB은 다음 사항을 확인합니다.
객체 또는 클래스(정적 메서드의 경우)에 해당 이름의 메서드가 있는지 확인합니다.
호출 시 해당 이름을 가진 하나 이상의 메서드의 인수를 같은 수만큼 전달하는지 확인합니다.
전달된 각 인수가 메서드에 대해 정의된 Java 유형으로 변환되는지 확인합니다.
이러한 조건이 모두 충족될 경우 MATLAB은 메서드를 호출합니다.
오버로드된 메서드를 호출할 때, 둘 이상의 후보가 있을 경우 MATLAB은 호출하는 인수와 가장 잘 맞는 인수를 갖는 메서드를 선택합니다. 먼저, MATLAB은 전달된 인수와 호환되지 않는 인수 유형을 갖는 메서드는 기각합니다. 예를 들어, 메서드가 double
형 인수를 갖는 경우 char
형 인수는 호환되지 않습니다.
그런 다음, MATLAB은 모든 인수의 적합도 값의 합인, 가장 높은 적합도 값을 갖는 메서드를 선택합니다. 각 인수의 적합도 값은 기본 유형의 적합도에서 MATLAB 배열 차원과 Java 배열 차원 사이의 차이를 뺀 값입니다. 배열 차원 수에 대한 자세한 내용은 배열 차원이 변환에 미치는 영향 항목을 참조하십시오. 두 메서드의 적합도가 같을 경우에는 Java 클래스에 먼저 정의된 메서드가 선택됩니다.