Main Content

MATLAB에서 클래스의 역할

클래스

MATLAB® 언어에서 각각의 값은 클래스에 속하게 됩니다. 예를 들어, 대입문을 사용하여 변수를 생성하면 적합한 클래스의 변수가 생성됩니다.

a = 7;
b = 'some text';
s.Name = 'Nancy';
s.Age = 64;
whos
whos
  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double
  b         1x9                18  char
  s         1x1               370  struct 

whos와 같은 기본 명령은 작업 공간의 각 값에 대한 클래스를 표시합니다. 이 정보로 MATLAB 사용자는 어떤 값은 문자이며 텍스트로 표시된다는 것, 그리고 또 어떤 값은 배정밀도 숫자라는 것 등의 사실을 파악할 수 있습니다. 구조체처럼 또다른 클래스의 값을 가지는 변수도 있습니다.

미리 정의된 클래스

MATLAB은 MATLAB 언어에서 사용하는 기본 유형을 구성하는 기본 클래스를 정의합니다. 이러한 클래스에는 숫자형, logical형, char형, cell형, struct형 및 함수 핸들이 있습니다.

사용자 정의 클래스

MATLAB 클래스를 사용자가 직접 생성할 수도 있습니다. 예를 들어, 다항식을 나타내기 위해 클래스를 정의할 수도 있습니다. 이 클래스는 덧셈, 뺄셈, 인덱싱, 명령 창에 표시 등과 같이 통상적으로 MATLAB 클래스와 연관된 연산을 정의할 수 있습니다. 이러한 연산은 다항식 덧셈, 다항식 뺄셈 등에 상응하는 연산을 수행해야 합니다. 예를 들어, 다음과 같이 두 개의 다항식 객체를 더하는 경우

p1 + p2

다항식 클래스가 이 연산을 정의하기 때문에 plus 연산이 다항식 객체를 더할 수 있어야 합니다.

클래스를 정의할 때 특수 MATLAB 함수(예: 더하기 연산자의 경우 plus.m)를 오버로드할 수 있습니다. 사용자가 이러한 연산을 클래스의 객체에 적용하면 MATLAB이 이 메서드를 호출합니다.

이러한 클래스를 생성하는 예제는 Representing Polynomials with Classes 항목을 참조하십시오.

MATLAB 클래스 — 주요 용어

MATLAB 클래스는 다음 단어를 사용하여 클래스 정의의 여러 부분과 관련 개념을 설명합니다.

  • 클래스 정의 — 클래스의 모든 인스턴스에 공통인 항목에 대한 설명입니다.

  • 속성 — 클래스 인스턴스에 대한 데이터 저장소입니다.

  • 메서드 — 일반적으로 클래스의 인스턴스에만 수행되는 연산을 구현하는 특수 함수입니다.

  • 이벤트 — 특정 동작이 발생할 경우 클래스에 의해 정의되고 클래스 인스턴스에 의해 브로드캐스트되는 메시지입니다.

  • 특성 — 속성, 메서드, 이벤트, 클래스의 동작을 수정하는 값입니다.

  • 리스너 — 이벤트 알림이 브로드캐스트될 때 콜백 함수를 실행하여 특정 이벤트에 응답하는 객체입니다.

  • 객체 — 객체의 속성에 저장된 실제 데이터 값을 포함하는 클래스의 인스턴스입니다.

  • 서브클래스 — 다른 클래스에서 파생되고 이 클래스의 메서드, 속성, 이벤트를 상속하는 클래스입니다. 서브클래스를 사용하면 파생된 원래 슈퍼클래스에 정의된 코드를 원활하게 재활용할 수 있습니다.

  • 슈퍼클래스 — 더 구체적으로 정의된 클래스(즉, 서브클래스)를 생성하기 위한 기반으로 사용되는 클래스입니다.

  • 네임스페이스 — 클래스 및 함수 명명의 범위를 정의하는 폴더입니다.

기본 관계

이 섹션에서는 MATLAB 클래스에서 사용되는 기본 개념 몇 가지를 설명합니다.

클래스

클래스는 클래스의 모든 인스턴스가 공유하는 특정한 특징을 지정하는 정의입니다. 이러한 특징은 클래스를 정의하는 속성, 메서드, 이벤트와 이러한 클래스 컴포넌트 각각의 동작을 수정하는 특성 값에 의해 결정됩니다. 클래스 정의는 어떻게 클래스의 객체가 생성되고 소멸되는지, 객체가 어떤 데이터를 포함하는지, 그리고 이 데이터를 어떻게 조작할 수 있는지를 설명해 줍니다.

클래스 계층 구조

기존 클래스를 기반으로 새로운 클래스를 정의하는 것이 적합한 경우가 있습니다. 이 접근 방식을 사용하면 유사한 개체를 나타내는 새로운 클래스에 설계와 기법을 재사용할 수 있습니다. 이러한 재사용은 서브클래스 생성을 통해 수행됩니다. 서브클래스는 슈퍼클래스로 정의된 객체의 일부인 객체를 정의합니다. 서브클래스는 슈퍼클래스보다 더 구체적이며 슈퍼클래스에서 상속된 컴포넌트에 새로운 속성, 메서드, 이벤트를 추가할 수 있습니다.

수학적 집합은 클래스 간 관계를 나타내는 데 도움이 될 수 있습니다. 다음 도식에서 양의 정수의 집합은 정수의 부분 집합이자 양수의 부분 집합입니다. 세 집합 모두 실수의 부분 집합이고, 모든 숫자의 부분 집합입니다.

양의 정수를 정의하려면 집합의 구성원이 0보다 커야 함을 추가로 지정해야 합니다. 양의 정수는 정수의 정의와 양수의 정의 모두가 결합된 형태입니다. 결과로 생성되는 부분 집합은 상위 집합보다 더 구체적이고 더 좁게 정의되어 있지만, 상위 집합을 정의하는 모든 특징은 여전히 공유합니다.

Venn diagram showing relationships between sets of numbers

“is a” 관계는 기존의 상위 집합의 측면에서 특정 부분 집합을 정의하는 것이 적합한지를 결정할 수 있는 좋은 방법입니다. 예를 들어, 다음 각각은 타당한 명제입니다.

  • 양의 정수는 정수이다.

  • 양의 정수는 양수이다.

“is a” 관계가 성립되면 더욱 일반적인 사례를 나타내는 클래스에서 새로운 클래스를 정의할 수 있는 가능성이 커집니다.

해 재사용하기

클래스는 일반적으로 코드 재사용이 용이하도록 분류 체계를 통해 구조화됩니다. 예를 들어 컴퓨터의 직렬 포트에 대한 인터페이스를 구현하는 클래스를 정의하는 경우, 아마도 이 클래스는 병렬 포트에 대한 인터페이스를 구현하도록 설계된 클래스와 유사할 것입니다. 코드를 재사용하려면 두 유형의 포트에 공통된 모든 내용을 포함하는 슈퍼클래스를 정의한 후 이 슈퍼클래스에서 각 특정 포트에 고유한 항목만 구현하는 서브클래스를 파생하면 됩니다. 그러면 서브클래스가 공통된 모든 기능을 슈퍼클래스에서 상속하게 됩니다.

객체

클래스는 해당 클래스의 특정 인스턴스를 생성하는 형판과도 같습니다. 이러한 인스턴스나 객체는 클래스로 나타나는 특정 개체에 대한 실제 데이터를 포함합니다. 예를 들어, 은행 계좌 클래스의 인스턴스는 실제 계좌 번호와 실제 잔고를 갖는 특정 은행 계좌를 나타내는 객체입니다. 이 객체에는 계좌 잔고에 대한 입금 및 출금과 같이 클래스에 의해 정의된 연산을 수행할 수 있는 기능이 내장되어 있습니다.

객체는 단순히 수동적인 데이터 컨테이너가 아닙니다. 객체는 특정 연산만 수행되도록 허용하고, 퍼블릭이 아니어야 하는 데이터를 숨기고, 외부 클라이언트가 객체에 대해 설계되지 않은 연산을 수행하여 데이터를 잘못 사용하지 않도록 방지하는 등의 방법으로 포함된 데이터를 능동적으로 관리합니다. 객체는 객체가 소멸될 때 어떠한 동작이 발생하는지도 제어합니다.

정보 캡슐화하기

객체의 중요한 특징은 사용자는 정보가 어떻게 저장되는지, 심지어 정보가 쿼리될 때 이 정보가 저장되는지 또는 계산되는지조차 파악할 필요 없이 해당 속성과 메서드를 통해 객체에 저장된 정보에 액세스하는 소프트웨어를 작성할 수 있다는 점입니다. 객체는 객체에 액세스하는 코드를 메서드와 속성의 내부 구현과 분리합니다. 사용자는 클래스에 속하지 않는 메서드로부터 데이터와 연산 모두를 은닉하는 클래스를 정의할 수 있습니다. 그런 다음 원하는 용도에 가장 적합한 인터페이스를 구현할 수 있습니다.

참고 문헌

[1] Shalloway, A., J. R. Trott, Design Patterns Explained A New Perspective on Object-Oriented Design.. Boston, MA: Addison-Wesley 2002.

[2] Gamma, E., R. Helm, R. Johnson, J. Vlissides, Design Patterns Elements of Reusable Object-Oriented Software. Boston, MA: Addison-Wesley 1995.

[3] Freeman, E., Bert Bates, Kathy Sierra, Elisabeth Robson, Head First Design Patterns. O'Reilly Media, 2004.

관련 항목