第十章.パッヶージ


パッヶージ
これまでのコースでは,クラスとインスタンスの手法を用いて現実世界をオブジェクト向けのプログラムに開発できるようになった.
人為的なエラーを解消するには、アトリビュートを誤って上書きしたり、操作エラーを誤って上書きしたりするなど、「カプセル化」方法を使用します.
簡単に言えば、重要なデータを変えるのは容易ではありません.
  • 情報の非表示
    外部から特定のオブジェクトに直接アクセスするデータや関数をブロックすることで、変更を防止し、メンテナンスや拡張時に発生するエラーを最小限に抑えることができます.
    オブジェクト内の情報の破損や誤用を防止し、操作方法が変更されても使用方法自体が変更されず、データの変更が他のオブジェクトに影響を与えないため、独立性が優れています.
  • アクセスフラグ
    private:自分のクラスでしか使用できません
    private int hp;  // 모든 변수는 private 접근 지정자를 우선적으로 사용해준다음 
    // 필요시에 풀어주는 방식으로 사용한다.
    public:すべてのクラスで使用可能
    public class Cleric {}  // 모든 클래스는 기본적으로 public 접근 지정자를 사용해준다음
    // 필요시에 풀어주는 방식을 사용하지만 클래스를 만드는 목적이 다른곳에서 사용하기 위해서
    // 만들어주는것이기에 풀어주는 경우는 거의 없다고 볼 수 있다.
    package private:同じパッケージに属するクラス
    protected:同じパッケージに属するか、独自のサブクラスを継承します.
    Getter
    通常、クラス内のメンバー変数は、getterを使用してメンバー変数の値を変更または呼び出すプライベートアクセス指定子を使用します.
    Setter
    これにより、すべての変数でprivateを使用する欠点は、コードが増加することです.
    使いやすいようにtoolがサポートしています.
    Tip)Generate-選択ウィンドウを右クリックし、
    あるいは、私のintellijについて、Alt+insertをクリックするとgenerateウィンドウが表示されます.

    ウィンドウで必要なコンテンツを選択した場合(GetterやSetterなど)

    ウィンドウが開いたら、「OK」をクリックして、選択したセクションに対してGetterとSetterが生成されることを確認します.
    <例getter&setter>
    public class Student {
    
        private String name;
        private int age;
    
        public String getName() {  // getter
            return name;
        }
    
        public void setName(String name) {  // setter
            this.name = name;
        }
    
        public int getAge() {  // getter
            return age;
        }
    
        public void setAge(int age) { //setter
            this.age = age;
        }
    }
    public class SchoolMain {
        public static void main(String[] args) {
            Student student = new Student();
            student.setName("한동윤");  //setter을 이용한 이름 재설정
            student.setAge(27);  // setter을 이용한 나이 재설정
    
            String name = student.getName();  // getter을 이용한 이름 나타내기
            System.out.println("이름 : " + name);
            int age = student.getAge();  // getter을 이용한 나이 나타내기
            System.out.println("나이 : " + age);
        }
    }