Main Content

Java 메서드에 데이터 전달하기

MATLAB 데이터형과 Java 데이터형 간 매핑

MATLAB® 데이터를 Java® 메서드에 인수로 전달할 경우 MATLAB은 이 데이터를 Java 언어에서 가장 잘 나타낼 수 있는 유형으로 변환합니다. 데이터를 java.lang 유형의 인수로 전달할 때 유형 매핑에 대한 자세한 내용은 Java 객체 전달하기 항목을 참조하십시오.

다음 표의 각 행에는 MATLAB 데이터형과 함께, 그에 상응하는 Java 인수가 왼쪽부터 오른쪽으로 근사한 정도 순으로 나와 있습니다. MATLAB 데이터형(셀형 배열 제외)은 스칼라(1×1) 배열 또는 행렬일 수 있습니다. Java 데이터형은 스칼라 값 또는 배열일 수 있습니다.

MATLAB 인수

Java 파라미터 유형(스칼라 또는 배열)
객체 이외의 유형

가장 가까운 유형 <———————————————————————> 가장 거리가 먼 유형

logical

boolean

byte

short

int

long

float

double

double

double

float

long

int

short

byte

boolean

single

float

double

     

uint8
int8

byte

short

int

long

float

double

 

uint16
int16

short

int

long

float

double

  

uint32
int32

int

long

float

double

   

uint64
int64

long

float

double

    

string형 스칼라,
문자형 벡터,
char형 스칼라

String

      

string형 배열,
문자형 벡터로 구성된 셀형 배열
string형 인수 전달하기 참조.

String[]

      

jClass 유형의 Java 객체

jClass 유형의 Java Object

jClass의 모든 슈퍼클래스

     

객체로 구성된 셀형 배열

Object[]

      

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, shortbyte 파라미터 값은 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 유형의 파라미터에 대해 doublejava.lang.Double로 변환하지 않습니다.

java.lang.Object 전달하기

메서드가 java.lang.Object 클래스의 인수를 받는 특수한 경우가 있습니다. 이 클래스는 Java 클래스 계층 구조의 루트이므로, 어떤 클래스의 객체든지 인수로 전달할 수 있습니다. MATLAB은 자동으로 인수를 가장 가까운 Java Object 유형으로 변환합니다. 이때 Java 스타일 오토박싱이 발생할 수 있습니다. 다음 표에는 이 변환이 나와 있습니다.

MATLAB 인수

패키지 java.lang의 Java Object

logical

Boolean

double

Double

single

Float

char형 스칼라

Character

string형 스칼라
비어 있지 않은 char형 벡터

String

uint8
int8

Byte

uint16
int16

Short

uint32
int32

Integer

uint64
int64

Long

string형 배열(비 스칼라)
문자형 벡터로 구성된 셀형 배열

String[]

Java 객체

인수가 변경되지 않음

셀형 배열

Object[]

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이 아니라 빈 Java String 객체를 전달합니다.

  • 그 외의 경우, MATLAB은 빈 배열을 Java null로 변환합니다.

빈(길이 0) Java 배열은 변경되지 않은 상태로 유지됩니다.

MATLAB은 string형 내의 <missing> 값을 null로 변환합니다.

오버로드된 메서드

Java 객체에서 오버로드된 메서드를 호출할 경우 MATLAB은 사용자가 전달하는 인수와 메서드에 대해 정의된 인수를 비교합니다. 이 맥락에서 메서드라는 용어는 생성자를 포함합니다. MATLAB은 호출할 메서드를 결정하고 Java 변환 규칙에 따라 인수를 Java 유형으로 변환합니다. 자세한 내용은 객체로 구성된 배열 전달하기 항목을 참조하십시오.

Java 메서드를 호출할 경우 MATLAB은 다음 사항을 확인합니다.

  1. 객체 또는 클래스(정적 메서드의 경우)에 해당 이름의 메서드가 있는지 확인합니다.

  2. 호출 시 해당 이름을 가진 하나 이상의 메서드의 인수를 같은 수만큼 전달하는지 확인합니다.

  3. 전달된 각 인수가 메서드에 대해 정의된 Java 유형으로 변환되는지 확인합니다.

이러한 조건이 모두 충족될 경우 MATLAB은 메서드를 호출합니다.

오버로드된 메서드를 호출할 때, 둘 이상의 후보가 있을 경우 MATLAB은 호출하는 인수와 가장 잘 맞는 인수를 갖는 메서드를 선택합니다. 먼저, MATLAB은 전달된 인수와 호환되지 않는 인수 유형을 갖는 메서드는 기각합니다. 예를 들어, 메서드가 double형 인수를 갖는 경우 char형 인수는 호환되지 않습니다.

그런 다음, MATLAB은 모든 인수의 적합도 값의 합인, 가장 높은 적합도 값을 갖는 메서드를 선택합니다. 각 인수의 적합도 값은 기본 유형의 적합도에서 MATLAB 배열 차원과 Java 배열 차원 사이의 차이를 뺀 값입니다. 배열 차원 수에 대한 자세한 내용은 배열 차원이 변환에 미치는 영향 항목을 참조하십시오. 두 메서드의 적합도가 같을 경우에는 Java 클래스에 먼저 정의된 메서드가 선택됩니다.

관련 항목