プロパティとは
呼び出す側は直接フィールドを変更しているように見えますが、実際はgetterやsetterを通して行われる仕組みを指します。
public class Product{
private String name;
private String id;
private int price;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
}
上記の仕組みにより、フィールドを自由にいじることができ、修正が発生しても簡単に実行できるようになります。
インスタンスとは
コンストラクタを説明する前にインスタンスについて整理することにより、コンストラクタとの違いがわかり、理解しやすいと考えインスタンスをまず書いていきたいです。
インスタンスとは、データを格納できる箱のような存在です。名前や価格を箱に詰めていくことで、独自の箱になることができます。
下記にコードで書いてみました。
public class Product{
String name;
String id;
int price;
}
}
productクラスを呼び出し、製品名を設定していきます。
Product product1 = new Product();
product1.name = "冷蔵庫";
product1.id = "1234";
product1.price = 300000;
上記のやり方でインスタンスという箱に様々なデータを与えていきます。
しかし、いくつかの課題があるように感じます。
①毎回、インスタンス生成時にフィールド初期値を設定しないといけない。
②フィールド初期値を設定するのを忘れてしまう
①②の課題を解決する方法がコンストラクタというメソッドになります。
コンストラクタとは
インスタンス生成時に自動実行されるメソッドです。
public class Product{
private String name;
String id;
int price;
}
public Product(){
this.price = 300000;
}
Productインスタンスが生成時に価格が自動的に設定されます。
余談 インスタンスについて
クラス型を宣言した際、メモリにインスタンスのための領域①が確保されます。その後、newを使ってインスタンスを生成されたとき、メモリにインスタンスのフィールドを設定するための領域②が確保されます。フィールドに値が設定されると、領域①が領域②のフィールドを見にいく仕組みになっています。
ここで私が注目したのは、ムダにnewをしてインスタンスを生成してしまうとパフォーマンスが落ちることです。仮に下記のようなやり方だとパフォーマンスがおちないのではないかと考えています。
Product p1;
p1 = SQLxxx01.sqlxxx01();
上記のやり方では、newをせずにp1へ情報を渡しているのでメモリ領域をムダに取らずに処理を実行できるのではないかと思っています。