View
Type Class
: Apex class에 해당하는 Apex type을 가져오고 새 type을 인스턴스화하는 메소드를 포함한다
Namespace
System
사용법
forName 메소드를 사용하여 기본 제공 클래스 또는 사용자 정의 클래스일 수 있는 Apex 클래스의 type을 검색.
위의 메소드를 사용하여 public&global class를 검색 O, context 사용자에게 액세스 권한이 있더라도 private class는 X
newInstance 메소드를 사용하여 인터페이스를 구현하는 Type을 인스턴스화 하고, package subscriber와 같은 다른 사용자가 메소드의 구현을 제공하도록 허용하려면서 해당 메소드를 호출 O
예시 : Name을 기반으로 Type 인스턴스화
시나리오
Type 메소드를 사용하여 이름에 따라 Type을 인스턴스화 하는 방법의 예시
package subscriber가 설치된 패키지의 일부인 인터페이스의 custom implementation을 제공하는 경우
package는 subscriber의 org 내 custom setting을 통해 인터페이스를 구현하는 클래스의 이름을 가져올 수 있음
그 후 패키지는 이 클래스 이름에 해당하는 Type을 인스턴스화하고 subscriber가 구현한 메소드를 호출 할 수 있음
Vehicle interface
global interface Vehicle {
Long getMaxSpeed();
String getType();
}
Vehicle interface 구현
global class VehicleImpl implements Vehicle {
global Long getMaxSpeed() { return 100; }
global String getType() { return 'Sedan'; }
}
CustomerImplInvocationClass
이 클래스의 메소드는 custom 설정 값을 통해 Vehicle 인터페이스를 구현하는 클래스의 이름을 가져옴
그 후 newInstance 메소드를 호출하여 이 클래스를 인스턴스화 함
그 다음 VehicleImpl 에 구현된 메소드를 호출함
이 샘플에서는 className 텍스트 필드를 사용해 CustomImplement라는 public list custom setting을 만들어야 함
Vehicle의 데이터 세트 이름과 VehicleImpl의 클래스 이름 값을 사용하여 이 custom 설정에 대한 하나의 레코드를 만듦
public class CustomerImplInvocationClass {
public class void invokeCustomImpl() {
//클래스 이름 custom setting에서 가져오기
//이 클래스는 Vechile interface를 implement 함
CustomImplementation__c cs = CustomImplementation__c.getInstance('Vehicle');
//클래스 이름에 해당하는 Type 가져오기
Type t = Type.forName(cs.className__c);
//type 인스턴스화
//인스턴스화된 object의 type은 인터페이스
Vehicle v = (Vehicle)t.newInstance();
//custom implementation을 가지는 메소드 호출
System.debug('Max speed : ' + v.getMaxSpeed());
System.debug('Vehicle type : ' + v.getType());
}
}
Class Property
class property는 호출된 type의 System.Type 을 반환
forName 메소드 대신 사용 O
System.Type t = Integer.class;
JSON.deserialize, deserializeStrict, JSONParser.readValueAs, readValueAsStrict 메소드의 2번째 인수에 사용하여 역직렬화 할 object type을 가져올 수 있음
Decimal n = (Decimal)JSON.deserialize('100.1', Decimal.class);
※ 출처 : Apex Reference Guide
'Apex > Apex Basic' 카테고리의 다른 글
Apex basic 04_Trigger (0) | 2021.12.30 |
---|---|
Apex basic 03_Apex&.Net (0) | 2021.12.29 |
Apex basic 02_Classes (0) | 2021.12.16 |
Apex basic 01 (0) | 2021.12.16 |