staticかインスタンス化か【Salesforce Apex】

By | October 5, 2021

前書き

任意のメソッドを呼び出す方法として、①staticなメソッドを呼び出す ②クラスをインスタンス化した上で、インスタンスメソッドを利用する という二つの方法が挙げられるかと思います。

Salesforce開発では、大抵の場面においてどちらを利用しても実現したい機能を実装すすことが可能ですが、本記事では改めてそれぞれの特徴と選択の基準についてまとめてみたいと思います。

ApexTriggerでのインスタンスメソッドの呼び出しの例

Trigger

trigger OpportunityLineItemTrigger on OpportunityLineItem (after insert) {  
OpportunityLineItemTriggerHandler handler = new OpportunityLineItemTriggerHandler();
    if (Trigger.isAfter) {
        if (Trigger.isInsert) {
            //商談商品作成時に、商談の見積備考を更新
            handler.updateOpportunity(Trigger.new);
        }
    }
}

Class

public class OpportunityLineItemTriggerHandler {
    public OpportunityLineItemTriggerHandler() {    
    }    
    
    //商談商品作成時に、商談の見積備考を更新
    public void updateOpportunity(List<OpportunityLineItem> oppLineItemList) {       
    //任意の処理    
    }    
}

ApexTriggerでのstaticメソッドの呼び出しの例

Trigger

trigger OpportunityLineItemTrigger on OpportunityLineItem (after insert) {  
    if (Trigger.isAfter) {
        if (Trigger.isInsert) {
            //商談商品作成時に、商談の見積備考を更新
            OpportunityLineItemTriggerHandler.updateOpportunity();
        }
    }
}

Class

public class OpportunityLineItemTriggerHandler {  
    //商談商品作成時に、商談の見積備考を更新
    public static void updateOpportunity(List<OpportunityLineItem> Trigger.new) {        
    //任意の処理    
    }   
}

staticメソッドの特徴と選択の基準

・クラスをインスタンス化しなくてもメソッドを実行できる

・クラスに関連付けられる

・インスタンス生成の時間とメモリが不要なため、相対的にパフォーマンスが高い

・utilityクラスのように、処理がインスタンスの状態に依存しない場合(=オブジェクト単位での状態管理が不要な場合)はstaticメソッドを利用することが適切である。

インスタンスメソッドの特徴と選択の基準

・クラスをインスタンス化した上で、メソッドを実行する

・特定のオブジェクト(=クラスのインスタンス)に関連付けられる

・インスタンス生成の時間とメモリが必要なため、相対的にパフォーマンスが低い

処理がインスタンスの状態に依存する場合(=オブジェクト単位での状態管理を必要とする場合)はインスタンスメソッドを利用することが適切である。

結論

staticメソッドとインスタンスメソッドのどちらを利用するのが適切かは、オブジェクト(=インスタンス)単位での状態管理が必要かどうかで決まる。