プログラミング自主学習 40日目 Class
Class
Classはオブジェクトを作成する設計図である。
Classより生成されたオブジェクトをインスタンスという。
また、Class名はパスカルケースで表記する。(変数はキャメルケース)
Class宣言
public class ClassName{
}
一つのソースファイルで複数のClassファイルを生成することもできる。
しかし、ソースファイルと同じClass名のみpublicで生成できるため、
Tireをpublicにしたい場合は、別のClassとして作成するしかない。
package ch06.sec03;
public class Sportscar{
}
class Tire{
}
オブジェクト生成
new Classname() new演算子 + コンストラクタ
Classname classVariable = new Classname();
これにより、Classnameのインスタンスが生成され、classVariableにClassnameのインスタンスのメモリアドレスを代入する。
package ch06.sec04;
public class Student {
}
package ch06.sec04;
public class StudentExample {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println("s1 변수가 Student 객체를 참조합니다.");
Student s2 = new Student();
System.out.println("s2 변수가 또 다른 student 객체를 참조합니다.");
}
}
Classは、実行クラスとライブラリ用のクラスがある。
実行クラス
: mainメソッドを持って、実行可能なクラス
ライブラリ用クラス
: 実行でじず、他のクラスより利用するクラス
Classのメンバー
public class ClassName{
}
Classを宣言してみた。
しかし、このClassはあくまで、Classを宣言したものにすぎず、実際の値(フィールド)もしくはメソッドはもっていない。
1 ) フィールド
オブジェクトに込めるデーター(値)を保存する。
2) コンストラクタ
Classを作成する理由は、Classを具現するオブジェクト(インスタンス)を作るためだ。ですので、まずはコンストラクタが必要だ。リターン値がない。
例)Classname();
3 ) メソッド
オブジェクトがする動作(メソッド)を保存する。
オブジェクト間の相互作用のため、呼び出される。
フィールド宣言
フィールドはオブジェクトのデーターを保存する。
フィールドのデーターには、固有データー、現状、部品がある。
<オブジェクトモデリング>
自動車オブジェクト ➡ Class Car
public class Car{
//固有データーを保存するフィールド宣言。
【固有データー】
制作会社 String company;
モデル String model;
色相 String color;
最高速度 int maxSpeed;
【状態】
現在速度 int speed;
エンジン回転数 int rpm;
【部品】
車体 Body body;
エンジン Engine engine;
タイヤ Tire tire;
package ch06.sec06.exam1;
public class Car {
//declare field
String model;
boolean start;
int speed;
}
package ch06.sec06.exam1;
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
System.out.println("모델명: " + myCar.model );
System.out.println("시동여부: " + myCar.speed );
System.out.println("현재속도: " + myCar.start );
}
}
<RESULT>
모델명: null
시동여부: 0
현재속도: false
Classにオブジェクトのフィールドを宣言したが、値を持ってないため、オブジェクトは初期値をもつ。
フィールド使用
オブジェクト内部のフィールド値を読み、変更することをフィールドを使用するという。
package ch06.sec06.exam2;\
public class Car {
String company = "현대자동차";
String model = "그랜저";
String color = "검정";
int maxSpeed = 350;
int speed;
}
package ch06.sec06.exam2;
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
System.out.println("제작회사: " + myCar.company);
System.out.println("모델명: " + myCar.model);
System.out.println("색깔: " + myCar.color);
System.out.println("최고속도: " + myCar.maxSpeed);
System.out.println("현재속도: " + myCar.speed);
myCar.speed = 60;
System.out.println("수정된 속도:" + myCar.speed);
}
}
コンストラクタ宣言と呼び出し
Class 変数 = new Class();
new演算子を通して、Classのオブジェクト(インスタンス)を生成し、Class()というコンストラクタを呼び出すことで、Classのオブジェクト(インスタンス)を初期化する。
全てのクラスはコンストラクタが存在している。クラスの中で、コンストラクタを宣言しなくても、コンパイラが基本的にbytefileにコンストラクタを追加する。
基本コンストラクタ
[public] class() { }
public class Car {
public Car(){}
} } ```
しかし、プログラマーが名刺的に宣言したコンストラクタがあれば、オブジェクトを生成する際に、多様なパータンで初期化することができる。
コンストラクタ宣言
Class(parameter){ <ー コンストラクタブロック
//Objectの初期化コード
}
コンストラクタはメソッドと似ている形だ。しかし、リターン値がなく、Class名と同じ名前だ。
パラメーターはnew演算子でコンストラクタを呼び出す際に、パラメーターに受けた値(実引数、argument)をコンストラクタブロックに渡す。Carのコンストラクタを呼び出す際に、3つの値をコンストラクタブロックに渡すと仮定する。
Car car = new Car ("그랜저", "검정", 300);
3つの値を順番に代入するためにはこのようにコンストコンストラクタを宣言する必要がある。
public class Car {
//コンストラクタ宣言
Car(String model, String color, int maxSpeed) {.....}
}
フィールド初期化フィールドを初期化する方法が二つある。
1)Class
上術したように、Classで特定な値をフィールドとして宣言することもできる。
Classのオブジェクトが同じ値を持たせたい場合、Classよりフィールドを宣言した方がよい。
固有フィールドを活用したい際にはClassより初期化した方が効率が上がる。
2)コンストラクタ
オブジェクト同士に違う値を持たせたい場合はコンストラクタで初期化した方がいい。
package ch06.sec07.exam02;
public class Korean {
//필드 선언
String nation = "대한민국";
String name;
String ssn;
public Korean(String n, String s) {
name=n;
ssn=s;
}
}
package ch06.sec07.exam02;
public class KoreanExample {
public static void main(String[] args) {
Korean k1 = new Korean("박자바","011225-1234567");
System.out.println("k1.nation : " + k1.nation);
System.out.println("k1.name : " + k1.name);
System.out.println("k1.ssn : " + k1.ssn);
System.out.println();
Korean k2 = new Korean("김자바","930215-0654321");
System.out.println("k2.nation : " + k2.nation);
System.out.println("k2.name : " + k2.name);
System.out.println("k2.ssn : " + k2.ssn);
}
}
<result>
k1.nation : 대한민국
k1.name : 박자바
k1.ssn : 011225-1234567
k2.nation : 대한민국
k2.name : 김자바
k2.ssn : 930215-0654321
パラメターを初期化するフィールド名と同じ名前に指定した方がよい。
<BEFORE>
public Korean(String n, String s) {
name=n;
ssn=s;
}
<AFTER>
public Korean(String name, String ssn) {
this.name = name;
this.ssn = ssn;
}
Discussion