간단한 클래스 생성하기
클래스 설계하기
클래스의 기본 목적은 데이터와 그 데이터에 대해 수행되는 연산을 캡슐화하는 객체를 정의하는 것입니다. 예를 들어, BasicClass
는 하나의 속성과 이 속성의 데이터에 대해 연산을 수행하는 두 메서드를 정의합니다.
Value
— 클래스의 객체에 저장된 숫자형 데이터를 포함하는 속성roundOff
— 속성값을 소수점 이하 두 자리수로 반올림하는 메서드multiplyBy
— 속성값을 지정된 숫자와 곱하는 메서드
classdef
블록으로 클래스 정의를 시작한 후 해당 블록 내에 클래스 속성과 메서드를 정의합니다. 다음은 ClassName
...endBasicClass
의 정의입니다.
classdef BasicClass properties Value {mustBeNumeric} end methods function r = roundOff(obj) r = round([obj.Value],2); end function r = multiplyBy(obj,n) r = [obj.Value]*n; end end end
클래스 구문에 대한 요약을 보려면 classdef
를 참조하십시오.
클래스를 사용하려면 다음을 수행하십시오.
클래스와 동일한 이름을 갖는
.m
파일에 클래스 정의를 저장합니다.클래스의 객체를 생성합니다.
속성에 액세스하여 데이터를 할당합니다.
메서드를 호출하여 데이터에 대한 연산을 수행합니다.
객체 생성
클래스 이름을 사용하여 클래스의 객체를 생성할 수 있습니다.
a = BasicClass
a = BasicClass with properties: Value: []
처음에는 속성값이 비어 있습니다.
속성에 액세스하기
속성 이름 앞에 객체 변수와 점을 사용하여 Value
속성에 값을 할당할 수 있습니다.
a.Value = pi/3;
속성값을 반환하려면 값을 할당하지 않고 점 표기법을 사용하십시오.
a.Value
ans = 1.0472
클래스 속성에 대한 자세한 내용은 속성 구문 항목을 참조하십시오.
메서드 호출하기
객체 a
에 대해 roundOff
메서드를 호출해 보겠습니다.
roundOff(a)
ans = 1.0500
이 객체를 여러 개의 인수를 받는 메서드에 대한 첫 번째 인수로 전달합니다. 아래 multiplyBy
메서드처럼 호출할 수 있습니다.
multiplyBy(a,3)
ans = 3.1416
점 표기법을 사용하여 메서드를 호출할 수도 있습니다.
a.multiplyBy(3)
점 표기법을 사용할 때는 객체를 명시적 인수로 전달할 필요가 없습니다. 이 표기법에서는 점의 왼쪽에 객체를 사용합니다.
클래스 메서드에 대한 자세한 내용은 메서드 구문 항목을 참조하십시오.
생성자 추가하기
클래스는 생성자라고 하는 특수 메서드를 정의하여 클래스의 객체를 생성할 수 있습니다. 생성자 메서드를 사용하면 생성자에 인수를 전달할 수 있으며 이를 속성값으로 할당할 수 있습니다. BasicClass
의 Value
속성은 mustBeNumeric
함수를 사용하여 가능한 값을 제한합니다.
다음은 BasicClass
클래스에 대한 생성자입니다. 입력 인수를 사용하여 생성자를 호출하면 Value
속성에 할당됩니다. 입력 인수 없이 생성자를 호출하면 Value
속성은 디폴트 값인 빈 상태([]
)가 됩니다.
methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; end end end
이 생성자를 클래스 정의에 추가하면 객체 생성과 속성값 설정을 한 번에 수행할 수 있습니다.
a = BasicClass(pi/3)
a = BasicClass with properties: Value: 1.0472
생성자는 클래스의 객체 생성과 관련된 다른 작업을 수행할 수 있습니다.
생성자에 대한 자세한 내용은 클래스 생성자 메서드 항목을 참조하십시오.
메서드 벡터화하기
MATLAB®에서는 연산을 벡터화할 수 있습니다. 예를 들어, 벡터에 숫자를 더할 수 있습니다.
[1 2 3] + 2
ans = 3 4 5
MATLAB이 숫자 2
를 배열 [1 2 3]
내 각 요소에 더합니다. 산술 연산자 메서드를 벡터화하려면 obj.Value
속성 참조를 대괄호로 묶으십시오.
[obj.Value] + 2
이 구문을 사용하면 객체로 구성된 배열에 메서드를 사용할 수 있습니다. 예를 들어, 인덱스 참조 값 할당을 사용하여 객체 배열을 만들어 보겠습니다.
obj(1) = BasicClass(2.7984); obj(2) = BasicClass(sin(pi/3)); obj(3) = BasicClass(7);
다음 두 표현식은 동일합니다.
[obj.Value] + 2 [obj(1).Value obj(2).Value obj(3).Value] + 2
속성 참조가 대괄호로 묶여 있기 때문에 roundOff
메서드가 벡터화되었습니다.
r = round([obj.Value],2);
roundOff
가 벡터화되었기 때문에 배열에 대해 연산을 수행할 수 있습니다.roundOff(obj)
ans = 2.8000 0.8700 7.0000
함수 오버로드하기
클래스는 기존 MATLAB 함수와 동일한 이름을 갖는 메서드를 정의하여 더하기와 같은 기존 기능을 구현할 수 있습니다. 예를 들어, 두 개의 BasicClass
객체를 더한다고 가정하겠습니다. 그렇다면 각 객체의 Value
속성값도 더해지는 것이 자연스럽습니다.
다음은 MATLAB plus
함수의 오버로드된 버전입니다. 속성값을 더해서 BasicClass
클래스의 더하기를 정의하고 있습니다.
methods function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end
plus
메서드를 구현하면 BasicClass
의 객체에 “+
” 연산자를 사용할 수 있습니다.
a = BasicClass(pi/3); b = BasicClass(pi/4); a + b
ans = 1.8326
plus 메서드를 벡터화하여 객체 배열에 대해 연산을 수행할 수 있습니다.
a = BasicClass(pi/3); b = BasicClass(pi/4); c = BasicClass(pi/2); ar = [a b]; ar + c
ans = 2.6180 2.3562
관련 정보
함수 오버로드에 대한 자세한 내용은 클래스 정의에서 함수 오버로드하기 항목을 참조하십시오.
연산자를 오버로드하는 방법에 대한 자세한 내용은 연산자 오버로드 항목을 참조하십시오.
BasicClass
코드 목록
다음은 이 항목에 설명된 특징을 추가한 후의 BasicClass
정의입니다.
classdef BasicClass properties Value {mustBeNumeric} end methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; end end function r = roundOff(obj) r = round([obj.Value],2); end function r = multiplyBy(obj,n) r = [obj.Value] * n; end function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end end