학습 노트 - MATLAB 의 핸들 류 와 실체 값 류

본 시 리 즈 는 'MATLAB 대상 프로 그래 밍 - 입문 부터 디자인 모델 까지' 학습 노트 입 니 다. 이에 대해 설명 합 니 다.
Value 클래스 와 Handle 클래스
MATLAB 대상 프로 그래 밍 에는 두 가지 종류 가 있 습 니 다. 하 나 는 Value 클래스 (Value Class), 즉 수치 클래스 라 고 합 니 다.다른 하 나 는 Handle 클래스 (Handle Class) 라 고도 부 르 고 문형 류 나 인용 류 라 고도 부른다.
두 가지 차이 점: 정 의 된 클래스 가 MATLAB 내부 에서 제공 하 는 Handle 기본 클래스 를 계승 하 는 지 여부 입 니 다.
%Value  
classdef SomeValue
    properties
        valValue
    end
    methods
        function obj = SomeValue(N)
            obj.valValue = N;
        end
    end
end

%Handle  
classdef SomeHandle < handle  %  
    properties
        ValHandle
    end
    methods 
        function obj = SomeHandle(N)
            obj.ValHandle = N;
    end
end

Value 클래스 대상 과 Handle 클래스 대상 의 차이
복제 시 구별
clear all;clc;

mValue = SomeValue(10);
mHandle = SomeHandle(10);

%  
nValue = mValue;
nHandle mHandle;

MATLAB 는 Value 류 대상 에 대해 메모리 에 완전한 복 사 를 했 고 딥 복사 라 고도 합 니 다.
반면, Handle 클래스 대상 에 대해 MATLAB 는 Handle 클래스 대상 자체 만 복사 하고, 구문 대상 이 실제 데 이 터 를 가리 키 지 않 는 다.Handle 클래스 대상 의 복 제 는 완전한 복사 가 아니 라 딥 복사 (Deep Copy) 가 아 닌 얕 은 복사 (Shallow Copy) 입 니 다. Handle 클래스 가 가리 키 는 데이터 에 깊이 들 어가 실제 데 이 터 를 복사 하지 않 았 기 때 문 입 니 다.
Value 클래스 대상 과 Handle 클래스 대상 이 함수 매개 변수 일 때 차이 점
Value 클래스 대상 에 대해 매개 변 수 는 함수 작업 공간 에 필요 한 정 보 를 복사 하 는 방식 입 니 다. MATLAB 에서 이 함수 가 들 어 오 는 매개 변 수 를 수정 한 것 을 발 견 했 고 이 매개 변 수 는 Value 클래스 대상 일 때 MATLAB 는 부분 복사 본 을 구성 합 니 다.
Handle 클래스 대상, 매개 변수 전달 방식 도 할당 부분 대상 이지 만 함수 내부 에서 함수 가 Handle 클래스 대상 이 가리 키 는 데이터 가 아니 므 로 MATLAB 내부 에서 추가 적 인 처 리 를 할 필요 가 없 으 며 이 함 수 는 Handle 클래스 대상 이 가리 키 는 데 이 터 를 성공 적 으로 수정 하 였 습 니 다.
다시 말 하면 Handle 클래스 대상 은 함수 에서 전 달 된 인 자 를 수정 하 는 데 사용 할 수 있다.
MATLAB 의 매개 변수 처리 방식: 함수 내 에서 매개 변 수 를 수정 하려 면 Handle 클래스 대상 을 전달 해 야 합 니 다.그렇지 않 으 면 Value 류 를 사용 하고 수 정 된 대상 을 결과 로 되 돌려 야 합 니 다.
Value 클래스 나 Handle 클래스 를 사용 하 는 경우
Value 류 는 비교적 간단 한 데이터 에 적합 하 다. 그 행 위 는 MATLAB 의 일반 변수, matrix, struct, cell 과 대체적으로 일치 하고 그들 은 그 에 포 함 된 데이터 값 류 에 의 해 정의 된다.복사 본 이 존재 하 는 것 을 개의 치 않 고 실행 대상 의 복사 할 때마다 독립 된 복사 본 을 얻 기 를 원한 다 면 Value 류 를 사용 하기에 적합 합 니 다.만약 하나의 데이터 가 다른 여러 곳 에 복사 본 이 있 고 그 중의 복사 본 을 수정 하고 자 할 때 다른 모든 복사 본 이 영향 을 받 고 수정 되 기 를 원한 다 면 Handle 류 를 사용 합 니 다.
Handle 클래스 대상 은 실제 데이터 에 대한 접근 경 로 를 제공 하 는데 실 용적 인 계산의 측면 에서 볼 때 만약 에 데이터 의 부피 가 비교적 크 고 이런 데이터 가 각 방법, 함수 간 에 신속 하 게 전달 되 기 를 원 하 며 국부 적 으로 복제 되 지 않 아 도 Handle 클래스 로 이 데 이 터 를 포장 할 수 있다.
물리 적 인 측면 에서 볼 때 만약 에 클래스 의 대상 이 하나의 구체 적 인 물리 적 대상, 예 를 들 어 하나의 직렬 포트, 하나의 창 등 과 대응 하면 이 를 Handle 류 로 설계 해 야 한다. 왜냐하면 이런 대상 을 복사 하 는 것 은 그들의 한 경로 에 만 접근 하 는 것 이기 때문이다.
기능 적 인 측면 에서 볼 때 Value 클래스 는 내 장 된 방법 을 제공 하지 않 았 고, Handle 기본 클래스 는 delete 방법 을 제공 하여 events 와 addlistener 방법 등 을 정의 하여 Handle 클래스 의 기능 을 더욱 강하 게 만 들 었 다.
성능 측면 에서 볼 때 Handle 클래스 대상 은 사실 내부 데이터 의 전권 에이전트 이기 때문에 Handle 클래스 속성 에 대한 접근 은 중간 계층 의 대 리 를 거 쳤 기 때문에 Handle 클래스 대상 속성의 접근 속 도 는 Value 클래스 대상 속성 보다 약간 느리다.
 
클래스 의 분석 함수 (Destructor)
대상 의 생존 주기
MATLAB 에 서 는 대상 이 든 일반 변수 든 메모 리 를 사용 합 니 다. 필요 하지 않 을 때 사용 할 메모리 자원 을 방출 합 니 다.
대상 의 생존 주기 란 대상 이 생기 고 방출 되 는 과정 을 말한다.
분석 함수
분석 함 수 는 대상 이 역할 영역 에서 벗 어 나 거나 소 각 될 때 파일 핸들 을 닫 거나 데이터 가 차지 하 는 메모리 공간 을 방출 하 는 등 마무리 작업 을 합 니 다.MATLAB 는 이러한 작업 을 수행 하 는 클래스 방법 을 delete 라 고 명명 하도록 규정 하고 있 습 니 다.
Value 클래스 든 Handle 클래스 든 대상 을 제거 하 는 과정 에서 사용 하 는 시스템 자원 을 방출 하 는 것 과 관련 이 있다 면 delete 함 수 를 스스로 정의 해 야 합 니 다.
Value 클래스 자체 에 기본 delete 방법 이 존재 하지 않 기 때문에 delete 방법 을 정의 하지 않 으 면 delete 방법 을 사용 할 수 없습니다.
Handle 클래스 는 Handle 의 기본 클래스 를 계승 해 야 합 니 다. 이 기본 클래스 에 서 는 delete 방법 이 정의 되 어 있 으 며, Handle 클래스 대상 에 게 delete 방법 을 직접 사용 할 수 있 습 니 다.Handle 클래스 대상 에 delete 를 사용 하면 이 Handle 이 가리 키 는 데 이 터 를 방출 합 니 다.
MATLAB 는 Handle 클래스 대상 이 실제 데 이 터 를 가리 키 는 지 확인 하기 위해 isvalid 함 수 를 제공 합 니 다.이 함 수 는 실 효 된 Handle 클래스 대상 을 false 로 되 돌려 줍 니 다.
 
사용자 정의 delete 방법 이 필요 한 경우
클래스 의 대상 이 일부 시스템 자원 을 점용 하여 자동 으로 방출 할 수 없 을 때, 이 시스템 자원 을 방출 하기 위해 delete 방법 을 자동 으로 다시 불 러 와 야 합 니 다.예 를 들 어 Value 클래스 나 Handle 클래스 에서 구조 함수 가 파일 핸들 을 열 었 으 면 delete 방법 에서 이 파일 핸들 을 닫 아야 합 니 다.
%Value 
classdef AVal 
    properties
        fid = fopen('file.txt');
    end
    methods
        function delete(obj)
            fclose(obj.fid);
        end
    end
end

%Handle 
classdef BVal < handle
    properties
        fid = fopen('file.txt');
    end
    methods
        function delete(obj)
            fclose(obj.fid);
        end
    end
end

일반적인 속성 에 대해 MATLAB 는 대상 을 삭제 할 때 이 속성 이 사용 하 는 메모 리 를 자동 으로 방출 합 니 다. 대상 의 속성 을 삭제 하기 위해 delete 방법 을 특별히 정의 할 필요 가 없습니다.
Value 클래스 는 분석 함수 가 없습니다.
Value 류 의 경우 Value 류 의 delete 방법 은 사용자 정의 방법 일 뿐 MATLAB 가 인정 하 는 합 법 적 인 분석 함수 가 아니 기 때문에 이 함수 의 이름 은 임의로 명명 할 수 있 습 니 다.이 방법의 존 재 는 자원 방출 을 잊 지 말 라 는 것 이다. delete 방법 은 분석 함수 가 아니 기 때문에 MATLAB 는 자동 으로 호출 되 지 않 고 명시 적 으로 호출 해 야 한다.
MATLAB 는 Handle 클래스 대상 의 분석 함 수 를 자동 으로 호출 합 니 다.
Handle 클래스 의 경우 MATLAB Handle 기본 클래스 는 기본 적 인 delete 방법의 실현 방법 을 제공 하 였 으 며, 추가 적 인 필요 가 있 으 면 하위 클래스 에서 이 delete 방법 을 다시 불 러 와 야 합 니 다.

좋은 웹페이지 즐겨찾기