Main Content

클래스 정의를 포함하는 폴더

MATLAB®에서는 다양한 유형의 폴더를 사용하여 클래스를 정의하고 구성할 수 있습니다.

  • 경로 폴더 — 이 유형의 폴더는 MATLAB 경로에 위치하며, 폴더 이름이 + 또는 @ 문자로 시작하지 않습니다. 하나의 폴더 내에 여러 클래스와 함수를 포함하려면 이 유형의 폴더를 사용하십시오. 경로 폴더에서, 각 클래스 정의가 하나의 파일에 포함되어야 합니다.

  • 클래스 폴더 — 폴더 이름이 @ 문자로 시작하고, 그 뒤에 클래스 이름이 옵니다. 이 유형의 폴더는 MATLAB 경로에 위치하지 않지만, 해당 폴더의 부모 폴더가 이 경로에 위치합니다. 하나의 클래스 정의에 여러 개의 파일을 사용할 때는 이 유형의 폴더를 사용하십시오.

  • 네임스페이스 폴더 — 폴더 이름이 + 문자로 시작하고, 그 뒤에 클래스 이름이 옵니다. 네임스페이스는 클래스 폴더, 클래스 정의 파일, 함수 파일 및 기타 네임스페이스(내부 네임스페이스라고 함)를 포함할 수 있는 특수 폴더입니다. 폴더 이름이 클래스 이름의 일부가 되므로, 네임스페이스는 그 안에 포함된 항목에 대해 보다 강력한 이름을 생성합니다.

여기에서는 경로 폴더와 클래스 폴더 사용에 대해 다룹니다. 네임스페이스에 대한 자세한 내용은 Create Namespaces 항목을 참조하십시오.

경로 폴더 사용하기

경로 폴더는 MATLAB 경로에 위치하기 때문에, 경로 폴더에 있는 클래스 정의는 우선 순위와 관련하여 일반 함수처럼 동작합니다. MATLAB 경로에서 첫 번째로 나타나는 이름이 이후에 나타나는 모든 동일한 이름보다 우선합니다.

각 클래스 정의 파일의 이름은 classdef 키워드에 지정된 클래스의 이름과 일치해야 합니다. 여러 개의 클래스를 동일한 경로 폴더에 정의할 수 있지만, 각 클래스 정의는 모든 메서드까지 포함하여 하나의 파일 내에 들어 있어야 합니다.

세 개의 클래스가 하나의 폴더에 정의되어 있다고 가정하겠습니다.

.../path_folder/MyClass1.m
.../path_folder/MyClass2.m
.../path_folder/MyClass3.m

이러한 클래스를 사용하려면 path_folder를 MATLAB 경로에 추가하십시오.

addpath path_folder

클래스 폴더 사용하기

클래스 폴더 이름은 항상 @ 문자로 시작하고, 그 뒤에 폴더에 포함된 클래스 이름이 옵니다. 클래스 폴더는 반드시 경로 폴더에 포함되어야 합니다. 클래스 폴더 내에 클래스 정의 파일을 둡니다. 이 폴더는 별도의 메서드 파일들을 포함할 수도 있습니다. 예를 들어 @MyClass 폴더 내에 MyClass와 해당 2개의 메서드가 정의되어 있습니다.

.../parent_folder/@MyClass/MyClass.m
.../parent_folder/@MyClass/myMethod1.m
.../parent_folder/@MyClass/myMethod2.m

이러한 클래스를 사용하려면 path_folder를 MATLAB 경로에 추가하십시오.

클래스 정의에 둘 이상의 파일을 사용하려면 클래스 폴더를 사용하십시오. 하나의 클래스 폴더당 하나의 클래스만 정의하십시오. 클래스 폴더에 함수 파일이 들어 있으면 MATLAB은 그러한 함수 파일을 클래스의 메서드로 처리합니다. 클래스 정의 파일은 .m 또는 .p 확장자를 가질 수 있습니다. 함수 파일은 MATLAB 코드(.m), 라이브 코드(.mlx), MEX 함수(플랫폼별 확장자) 및 P 코드(.p)일 수 있습니다.

클래스 폴더 내 프라이빗 폴더에 포함된 함수

프라이빗 폴더에 포함된 함수는 private 폴더 바로 위에 있는 폴더에 정의된 함수에서만 액세스할 수 있습니다. 클래스 폴더 내 private 폴더에 정의된 함수는 클래스 메서드에서만 호출할 수 있습니다. 함수는 클래스의 프라이빗 멤버에 액세스할 수 있지만 그 자체가 메서드는 아닙니다. 함수는 입력값으로 전달될 객체가 필요하지 않고 함수 표기법을 사용해서만 호출될 수 있습니다. 클래스의 여러 메서드에서 호출할 수 있는 헬퍼 함수가 필요하면 private 폴더의 함수를 사용하십시오.

클래스 폴더가 private 폴더를 포함하는 경우 이 클래스 폴더에 정의된 클래스만 private 폴더에 정의된 함수에 액세스할 수 있습니다. 서브클래스는 슈퍼클래스 프라이빗 함수에 액세스할 수 없습니다. 프라이빗 폴더에 대한 자세한 내용은 프라이빗 함수 항목을 참조하십시오.

서브클래스가 슈퍼클래스의 프라이빗 함수에 액세스할 수 있도록 하려면 함수를 슈퍼클래스의 보호 메서드로 정의하십시오. Access 특성을 protected로 설정하여 메서드를 지정하십시오.

프라이빗 폴더의 메서드에 디스패치하기

클래스가 클래스 폴더 내의 private 폴더에 함수를 정의한 경우 MATLAB은 다음과 같은 우선 순위 규칙에 따라 프라이빗 함수와 classdef 파일의 메서드 중 우선하는 쪽에 디스패치합니다.

  • 점 표기법(obj.methodName)을 사용하는 경우 classdef 파일에 정의된 메서드가 private 폴더에 있는 동일한 이름의 함수보다 우선합니다.

  • 함수 표기법(methodName(obj))을 사용하는 경우 private 폴더의 함수가 classdef 파일에 정의된 동일한 이름의 메서드보다 우선합니다.

참고

프라이빗 폴더 내에는 클래스 정의를 넣을 수 없습니다.

클래스 우선 순위 및 MATLAB 경로

동일한 이름을 갖는 클래스 정의가 여러 개 있는 경우 MATLAB 경로의 파일 위치에 따라 우선 순위가 결정됩니다. MATLAB 경로에서 가장 먼저 나오는 폴더에 있는 클래스 정의가 경로에서 나중에 나오는 모든 클래스보다 우선합니다.

경로 폴더의 클래스와 같은 이름을 가진 함수는 함수가 경로에서 더 먼저 나오는 폴더에 포함된 경우 클래스보다 우선합니다. 하지만, 클래스 폴더(@-폴더)에 정의된 클래스는 함수가 경로에서 더 먼저 나오는 폴더에 정의되어 있더라도 같은 이름의 함수보다 우선합니다.

예를 들어, 다음 경로에는 이름이 동일한 함수와 클래스가 있습니다. fldr1에 있는 함수 Foo는 경로에서 더 먼저 나오지만, fldr2에 있는 클래스 Foo가 클래스 폴더 안에 정의되어 있으므로 우선합니다.

경로 내 순서폴더 및 파일파일이 정의하는 항목

1

fldr1/Foo.m

함수 Foo

2

fldr2/@Foo/Foo.m

Foo 클래스

@-폴더에 정의된 클래스가 동일한 이름의 함수보다 우선한다는 규칙은 향후 릴리스에서 제거될 예정임

클래스 폴더(@-폴더)에 정의된 클래스가 경로의 위치와 관계없이 동일한 이름의 함수보다 우선한다는 규칙은 향후 릴리스에서 제거될 예정입니다. R2024a부터 다음과 같은 3가지 조건이 충족될 경우 MATLAB에서 경고가 발생합니다.

  • 클래스 폴더 안에 클래스가 정의되어 있고 경로에 이름이 동일한 함수가 있음.

  • 함수의 경로 순서가 클래스보다 먼저임.

  • 사용자가 이러한 함수와 클래스의 이름을 사용함.

규칙이 변경된 후에도 클래스를 우선시하고 경고가 발생하는 것을 방지하려면 다음 옵션 중 하나를 사용하십시오.

  • 함수의 경로 순서보다 클래스의 경로 순서가 먼저 오도록 경로 구성을 업데이트합니다. 경로를 변경하는 방법에 대한 자세한 내용은 MATLAB 검색 경로란? 항목을 참조하십시오.

  • 경로에서 함수를 제거합니다.

  • 함수의 이름을 바꿉니다.

함수에 영구적으로 우선 순위를 부여하고 경고가 발생하는 것을 방지하려면 다음 옵션 중 하나를 사용하십시오.

  • 경로에서 클래스를 제거합니다.

  • 클래스의 이름을 바꿉니다.

경로를 변경하여 클래스 정의 업데이트하기

MATLAB은 클래스 정의 중 하나만 현재 정의로 인식할 수 있습니다. MATLAB 경로를 변경하면 클래스에 대한 정의 파일이 바뀔 수 있습니다(path 참조). 경로 변경 후 MATLAB은 다음과 같은 클래스 정의 업데이트 규칙을 따릅니다.

  • 클래스 정의가 경로에서 제거된 경우, 해당 클래스의 기존 인스턴스가 작업 공간에 있지 않으면 MATLAB은 이 클래스 정의를 지웁니다.

  • 새 클래스 정의가 경로에 추가되었고 이 클래스 정의가 동일한 이름의 이전 정의보다 우선할 경우, MATLAB은 이 새로운 정의를 사용합니다. MATLAB은 다음에 해당 클래스의 기존 인스턴스에 액세스될 때 이 인스턴스를 업데이트합니다.

  • 스크립트 또는 함수 중간에 경로가 변경되었고 이 변경이 이루어지는 동안 클래스가 업데이트된 경우, MATLAB은 스크립트 또는 함수의 실행이 끝날 때까지 클래스 정의를 업데이트하거나 지우지 않습니다.

참고

현재 폴더를 변경하는 것도 경로 변경에 해당하며, 현재 폴더의 클래스 정의가 항상 경로의 정의보다 우선합니다.

R2024b 이전: 클래스 정의가 포함된 폴더 유형은 경로 변경 후 MATLAB이 클래스 정의를 업데이트하는 방식에 영향을 줍니다. 새 정의가 클래스 폴더(@-폴더)에 있으면 MATLAB은 즉시 클래스 정의를 업데이트합니다. 하지만 경로 폴더에 정의되어 있는 클래스의 경우에는 MATLAB이 새로운 정의를 인식하기 전에 사용자가 이전 정의를 지워야 합니다.

관련 항목