*JAVA-パッケージ


アクセス制御プログラムによるカプセル化

  • クラスまたはメンバー(主にメンバー)がアクセス制御者を使用する理由は、クラス内で宣言されたデータを保護するためです.
  • のデータが有効な値を保持しているか、パスワードなどの外部でのデータの勝手な変更を防止するためには、外部からのアクセスを制限する必要があります.
  • これは、
  • クラス内でのみ使用される内部操作に一時的に使用されるメンバー変数や部分操作を処理する方法などのメンバーをクラス内に隠すためである.
  • アクセス制御プログラムを使用する理由
  • 外部からデータを保護
  • 不要な内部で使用する部分を隠すために使用され、
  • .
    public class Time{
    	public int hour;
        public int minute;
        public int second;
    }
    クラスのインスタンスを作成し、メンバー変数に直接アクセスして値を変更できます.
    	Time t = new Time();
        t.hour = 25;
    メンバー変数の時間は0以上24未満でなければなりませんが、上記のコードのように誤った値を指定しても、これを阻止することはできません.
    この場合、privateまたはprotectedに制限し、メンバー変数の値を読み取りおよび変更する共通の方法を提供し、メンバー変数の値を間接的に処理することが望ましい.
    public class Time{
    	private int hour;		//접근제어자를 private 로 하여
        private int minute;		//외부에서 직접 접근하지 못하도록 한다.
        private int second;
    
    	public int getHour(){ return hour; }
        public void setHour(int hour)
        {
        	if (hour < 0 \\ hour > 23) return;
            this.hour = hour;
        }
        public int getMinute(){ return minute; }
        public void setMinute(int minute)
        {
        	if(minute < 0 \\ minute > 59) return;
            this.minute = minute;
        }
        public int getSecond(){ return second; }
        public void setSecond(int second)
        {
        	if(second < 0 \\ second > 59) return;
            this.second = second;
        }
    }
    getメソッド:メンバー変数の値を返す
    setメソッド:パラメータに格納されている値をチェックして初期化する
    public class TimeTest{
    	public static void main(String args[])
        {
        	Time t = new Time(12, 35, 30);
            System.out.println(t);
            t.hour = 13;	//에러! 변수 hour의 접근제어자가 private임으로 접근 불가능
            t.setHour(t.getHour()+1);	//현재시간보다 1시간 이후로 변경
            System.out.println(t);		//System.out.println(t.toString());과 같음
        }
    }
    
    class Time{
    	private int hour, minute, second;
        
        Time(int hour, int minute, int second){
        	setHour(hour);
            setMinute(minute);
            setSecond(second);
        }
        
        public int getHour(){ return hour;}
        public void setHour(int hour)
        {
        	if (hour < 0 \\ hour > 23) return;
            this.hour = hour;
        }
        public int getMinute(){ return minute; }
        public void setMinute(int minute)
        {
        	if(minute < 0 \\ minute > 59) return;
            this.minute = minute;
        }
        public int getSecond(){ return second; }
        public void setSecond(int second)
        {
        	if(second < 0 \\ second > 59) return;
            this.second = second;
        }
        
        public String toString()
        {
        	return hour + ":" + minute + ":" + second; 
        }
    }
    
    실행결과 
    
    12:35:30
    13:35:30
    したがって、メンバー変数への直接アクセスは許可されません.メソッドによるアクセスのみが許可されます.

    作成者のアクセス制御者


    作成者でアクセス制御者を使用することで、インスタンスの作成を制限できます.通常、作成者のアクセス制御者はクラスのアクセス制御者と同じですが、異なるアクセス制御者を指定することもできます.
    作成者のアクセス制御者をprivateと指定した場合、外部から作成者にアクセスできないため、インスタンスは作成できません.それでもクラス内にインスタンスを作成できます.
    class Singleton{
    	private Singleton(){
        
        }
    }
    逆に、これらのクラスとインスタンスを外部で使用するために、インスタンスを作成することで、返す共通の方法を提供できます.この方法は共通であり,同時に静的であるべきである.
    	class Singleton{
        	// getinstance()에서 사용될 수 있도록 인스턴스가
            // 미리 생성되어야 하므로 static이어야 한다.
            private static Singleton s = new Singleton();
            
            private Singleton(){
            
            {
            
    		//인스턴스를 생성하지 않고도 호출할 수 있어야 하므로 static이어야 한다.
            public static Singleton()
            {
            	return s;
            }
        }
  • は、ジェネレータを介してインスタンスを直接作成したり、共通の方法でインスタンスにアクセスしたりすることを禁止することによって、使用可能なインスタンスの数を制限することができる.
  • によって生成されたpivateのクラスは、他のクラスの祖先として使用できません.
  • したがって,クラスの前にfinalを追加し,クラスが継承できないクラスであることを知らせることが望ましい.