🐵

🐵「publicってなんや?」【Apex学習】

2024/10/06に公開

最初の疑問

🐵「最近コードを書けるようになってきたわ!勉強した甲斐があったで!」
🐵「今日も書くか! public class...」カタカタッ
🐵「・・・そういうえばなんでpublicから書き始めなあかんのや?これどういう意味なんや?」
🐵「ChatGPT!教えてくれや!」カタカタ…ッツパーーン!

回答

🤖「publicはアクセス修飾子の1つです。Apexにおけるアクセス修飾子(private、protected、public、global)は、クラスやメソッド、プロパティなどのアクセス範囲を制御するために使用されます。各アクセス修飾子は、どこからそのクラスやメソッド、変数にアクセスできるかを決定します。」

🐵「なるほど、全然わからん!もっとわかりやすく教えてや!」

1.private

説明: private は、同じクラス内でのみアクセス可能なメンバー(変数、メソッド、クラス)に使用します。
使用範囲: 同じクラス内。クラス外や継承したクラスからはアクセスできない。

public class MyClass {
    private Integer privateVariable = 10;
    
    private void privateMethod() {
        System.debug('This is a private method');
    }
    
    public void publicMethod() {
        // 同じクラス内でのアクセスは可能
        System.debug('Accessing private variable: ' + privateVariable);
        privateMethod();
    }
}

2.protected

説明: protected は、定義されたクラスと、そのクラスを継承した子クラスからアクセス可能であることを示します。これにより、親クラスのメンバーに対して、継承したクラス内でアクセスが可能となります。
使用範囲: 同じクラス、またはそのクラスを継承したサブクラス内でアクセス可能。ただし、外部のクラスからは直接アクセスできない。
例:

public class ParentClass {
    protected Integer protectedVariable = 30;
    
    protected void protectedMethod() {
        System.debug('This is a protected method');
    }
}

public class ChildClass extends ParentClass {
    public void accessProtected() {
        // 子クラスからprotectedなメンバーにアクセス可能
        System.debug('Accessing protected variable: ' + protectedVariable);
        protectedMethod();
    }
}

3.public

説明: public は、そのクラスがどこからでもアクセス可能であることを示す。public 修飾子を付けたメソッドや変数は、クラスがどこにあってもアクセスできる。
使用範囲: 同じ名前空間(つまり、同じパッケージ内)でアクセス可能。異なるパッケージからはアクセスできない。

public class MyClass {
    public Integer publicVariable = 20;
    
    public void publicMethod() {
        System.debug('This is a public method');
    }
}

他のクラスから以下のようにアクセス可能。

MyClass obj = new MyClass();
System.debug(obj.publicVariable);  // publicな変数にアクセス
obj.publicMethod();  // publicなメソッドにアクセス

4.global

説明: global は、Apexクラス、メソッド、変数が他の組織(Org)やマネージドパッケージからもアクセス可能であることを示す。通常、global はマネージドパッケージで提供されるクラスやAPIに対して使用され、非常に広範なアクセス権を与える。
使用範囲: 組織全体、および他のパッケージからもアクセス可能。これは非常に広範囲なアクセス権で、通常はマネージドパッケージの公開APIに使用される。

global class GlobalClass {
    global Integer globalVariable = 40;
    
    global void globalMethod() {
        System.debug('This is a global method');
    }
}

他の組織やマネージドパッケージからもアクセス可能。

まとめ

🐵「なるほど、つまり1が最もアクセス制限が厳しく、4が最も制限が緩いということやな!」

🤖「はい、その通りです。ほかのクラスからの利用を想定しない場合はprivateを使用してください」

🐵「ワイ何も考えずにpublicにしてたわ。大丈夫か・・・?」

🐵「・・・」

🐵「まぁ、大丈夫やわ!ガハハ」

🤖「(大丈夫ちゃうわ、ボケ)」

アクセス修飾子 アクセスできる範囲
private 同じクラス内のみ
protected 同じクラスおよびそのクラスを継承した子クラス内。名前空間に関係なくアクセス可能。
public 同じ名前空間(パッケージ)内でアクセス可能。異なるパッケージではアクセス不可。
global 組織全体、他のマネージドパッケージ、他の組織からもアクセス可能。

公式ドキュメント: https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_access_modifiers.htm

Discussion