Java #1. クラス(1)


1.オブジェクト向けプログラミング


オブジェクトを一つ一つプログラム化する方法をオブジェクト向けプログラミング(OOP:Object-Oriented Programming)と呼ぶ.
客体とは、物理的に存在したり抽象的に考えられたりするものの中で、自分の属性も認識できるものを指す.
  • オブジェクト:属性と動作を含む
  • フィールド:属性
  • 方法:動作
  • 各オブジェクトは独立して存在し、他のオブジェクトとインタラクティブに動作します.
    オブジェクト間のインタラクション手段はメソッドであり,オブジェクトが他のオブジェクトの機能を利用することがメソッド呼び出しである.
    int result = Calculator.add(10, 20);
    // 리턴한 값을 int 변수에 저장

    1-1.) オブジェクトとクラス


    Javaの設計図をクラスと呼び、クラスにはオブジェクトを作成するためのフィールドとメソッドが定義されています.クラスで作成されたオブジェクトをクラスのインスタンスと呼びます.
    ソースファイルを作成したら、ソースファイルを開き、クラスを宣言します.
    public class 클래스이름 {
    
    }
    生成されたクラスからオブジェクトを生成するには、new演算子を使用します.
    new 클래스(); 
    new演算子はhip領域にオブジェクトを作成した後、オブジェクトの番号付けアドレスを返します.
    この番号付けアドレスを参照タイプのクラス変数に保存すると、変数でオブジェクトを使用できます.
    클래스 변수 = new 클래스();
    <StudentExample.class>
    
    public class Student {
    }
    
    public class StudentExample {
    	pulic static void main(String[] args) {
        	Student s1 = new Student();
            Student s2 = new Student();
        }
    }
  • Studioクラスは1つしかありませんが、new演算子が使用されているため、オブジェクトはメモリに格納されます.
  • s 1およびs 2で参照されるstudentオブジェクトは、完全に独立した異なるオブジェクトです.
  • 1-2.) クラスの構成メンバー

    public class ClassName {
        // 필드
        int fieldname;
        
        // 생성자
        ClassName() { ... }
        
        // 메소드
        void method() { ... } 
    }
  • フィールド
  • フィールドは、オブジェクト固有のデータ、部品オブジェクト、およびステータス情報を格納するために使用される.
  • 宣言形式は、変数またはフィールドを変数と呼ばない.
  • フィールドは、コンストラクション関数およびメソッド全体で使用され、オブジェクトが消えない限り、オブジェクトとともに存在します.
  • ジェネレータ
  • オブジェクトの作成時に初期化を担当します.
  • フィールドまたは呼び出しメソッドを初期化して使用オブジェクトを準備します.
  • メソッド
  • オブジェクト間でデータを転送する手段.
  • 外部から各値を受信して実行し、実行後に結果を外部に返します.
  • 2.フィールド


    フィールドには、オブジェクトの一意のデータ、オブジェクトが持つべきコンポーネント、およびオブジェクトの現在のステータスデータが格納されます.

    2-1.) フィールド宣言


    フィールドは、ブロック{}の任意の場所に存在します.
    타입 필드 [ = 초기값 ];
    선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지는 않는다.

    2-2.) フィールドの使用


    フィールドの使用は、フィールド値の読み取りと変更を行う操作です.
  • クラス内部使用
  • フィールド名を読み込み、変更します.
  • クラス外部使用
  • まずクラスからオブジェクトを作成し、フィールドを使用します.(参照変数を使用)
  • フィールドはオブジェクトに属するデータであり、オブジェクトが存在しない場合はフィールドも存在しない.
  • // 클래스 외부에서 필드 사용하기
    <Car.class>
    public class Car() {
    	int speed;
    }
    <CarExample.class>
    public class CarExample {
    	public static void main(String[] args) {
        	Car myCar = new Car(); // 객체 생성 
            System.out.println("속도 : " + myCar.speed); // 필드 값 읽기
            
            myCar.speed = 60; // 필드값 변경 
            System.out.println("수정된 속도 : " + myCar.speed);

    3.作成者


    new演算子を使用してクラスからオブジェクトを作成すると、オブジェクトの初期化を担当するジェネレータが呼び出されます.
  • オブジェクト初期化とは、フィールドを初期化するか、メソッドを呼び出してオブジェクトを使用する準備をすることです.
  • new演算子によって正常に実行された場合、「heap」領域にオブジェクトが作成され、オブジェクトの番号が返されます.
  • 3-1.) デフォルト作成者


    クラスでコンストラクション関数の宣言が省略されている場合、コンパイラはブロックの内容が空の基本コンストラクション関数をバイトコードに自動的に追加します.
    [public] 클래스 {}
  • ジェネレータを宣言しなくても、新しい演算子の後にデフォルトジェネレータを呼び出すことでオブジェクトを作成できます.
  • Car myCar = new Car();

    3-2.) 作成者の宣言

    <생성자 블록>
    클래스( 매개변수 선언, ... ) {
    	// 객체 초기화 코드
    }
  • ジェネレータブロック内にオブジェクト初期化コードが記述され、通常、オブジェクトを使用する前に必要な準備をするために、フィールドに初期値または呼び出し方法が格納される.
  • public clas Car {
    	// 생성자
        Car(String model, String color, int maxSpeed) { *** }
    }
    クラスに作成者が明示的に宣言されている場合は、宣言の作成者を呼び出してオブジェクトを作成する必要があります.

    3-3.) 初期化フィールド

  • クラスからオブジェクトを作成すると、フィールドは自動的にデフォルトの初期値に設定されます.
  • を異なる値で初期化するには、次の2つの方法があります.
  • フィールドをフィルタするときに初期値を与える方法.
  • 生成者の初期値をどのように与えるか.
  • オブジェクトの作成時に外部から提供された異なる値を使用して初期化する必要がある場合は、ジェネレータで初期化する必要があります.
    public class Korean {
        // 필드
        String nation = "대한민국";
        String name;
        String ssn;
        
        // 생성자 
        public Korean(String n, String s) {
            name = n;
            ssn = s;
        }
    }
    

    3-4.) ジェネレータ過負荷


    ジェネレータオーバーロードとは、複数のパラメータが異なることを宣言するジェネレータです.
  • ジェネレータを使用してオーバーロードするのは、外部から提供される各種データを使用してオブジェクトを初期化し、ジェネレータを多様化する必要があるからです.
  • // 생성자 오버로딩
    public class Car {
    Car() { ... }
    Car(String model) { ... }
    Car(String model, String color) { ... }
    Car(String model, String color, int maxSpeed) { ... }
    }
    次の場合はジェネレータのオーバーロードではありません.
    // 생성자 오버로딩
    Car(String model, String color) { ... }
    Car(String color, String model) { ... }
    

    3-5.) 他のジェネレータを呼び出す:this()


    this()は、コンストラクション関数から他のコンストラクション関数を呼び出すために使用されます.
    클래스( [매개변수, ...] ) {
        this( 매개변수, ... , 값, ... ); // 클래스의 다른 생성자 호출 
        실행문;
    }
  • this()は、自分の他のジェネレータを呼び出すコードであり、ジェネレータの最初の行で許可される必要があります.
  • 4.方法


    メソッド宣言は、宣言子と実行ブロックから構成されます.メソッド宣言子はメソッドフラグと呼ばれ、宣言子と実行ブロックには次の要素が含まれます.
  • 戻りタイプ:メソッドが返す結果を表すタイプ.
  • メソッド名:識別子ルールに従って名前を付け、メソッドの機能を表示します.
  • パラメータ宣言:メソッドの実行時に必要なデータを受信するために使用される変数を宣言します.
  • メソッド実行ブロック:実行するコードを記述します.
  • 리턴타입 메소드이름( [매개변수선언, ...] ) {
        실행할 코드를 작성하는 곳 // 메소드 실행 블록 
    }

    4-1.) メソッド宣言

  • 戻りタイプ
  • 戻りタイプとは、戻り値のタイプです.
  • の戻り値はないかもしれませんが、戻り値がある場合は、戻りタイプを宣言に明記する必要があります.
  • void powerOn() { ... }
    double divide(int x, int y) { ... }
    値を返さないメソッドは、戻りタイプでvoidで記述され、divide()メソッドの結果が2値である場合は、戻りタイプを使用してdoubleを記述する必要があります.
    戻り値があるかどうかによって、呼び出し方法が異なります.次の2つの方法で呼び出すことができます.
    powerOn();
    double result = divide(10, 20);
  • パラメータ宣言
  • パラメータは、メソッドの実行時に必要なデータを外部から取得するために使用される.
  • パラメータが必要な場合もあれば、必要ない場合もあります.
  • パラメータ付きdivide()メソッドの宣言例を次に示します.
    double divide(int x, int y) { ... }
    このように宣言されたdivide()メソッドを呼び出す場合は、int値を2つ指定する必要があります.
    double result = divide(10, 20);
  • パラメータの個数を知らない
  • の解決策は、パラメータをアレイタイプとして宣言することである.
  • int sum1(int[] value) { ... } 
    配列内のアイテム数は呼び出し関数によって決まります.

    4-2.) メソッド呼び出し

  • クラスの他のメソッドを呼び出す場合は、->メソッド名呼び出し
  • クラス外呼び出し->クラスにオブジェクトを作成し、参照変数呼び出しメソッド
  • を使用します.
    클래스 참조변수 = new 클래스(매개값, ...);
    オブジェクトが作成されている場合は、ポイント(.)演算子を使用してメソッドを呼び出すことができます.
    点(.)演算子は、オブジェクトが所有するフィールドまたはメソッドにアクセスするオブジェクトアクセス演算子です.
    참조변수.메소드(매개값, ...); // 리턴값이 없거나, 있어도 리턴값을 받지 않을 경우
    타입 변수 = 참조변수.메소드(매개값, ...); // 리턴값이 있고, 리턴값을 받고 싶을 경우 

    4-3.) メソッドオーバーロード


    クラスに複数の同じ名前のメソッドを宣言します.
    メソッドのオーバーロードの条件は、パラメータのタイプ、数、順序とは異なる必要があります.

    メソッドのオーバーロードが必要なのは、各値が受け入れられ、処理されるためです.
    メソッドのリロード時に注意しなければならない点は、パラメータのタイプ、数、順序が同じである場合、パラメータ名が異なる場合、メソッドのリロードとは呼ばれません.
    また、戻りタイプが異なり、パラメータが同じ場合にのみ過負荷ではありません.
    // 컴파일 에러 발생 
    int divide(int x, int y) { ... }
    double divide(int boonja, int boonma) { ... }