LoginSignup
2
1

More than 3 years have passed since last update.

【Java 初心者】「newするタイミングは使う時だよ」の理解が少し深まったのでメモ

Last updated at Posted at 2020-05-09

Javaのソースを読んでいると
User user = new User();
という記述を誰でも見る事がある。そう、インスタンスの生成である。

これ自体は理解出来るようになったが、実際にプログラムに触れていくと、下記の様な記述に出会い混乱してしまった。

check.java

public boolean userExists(String userId) {

    //User型変数を使用
    User user = select.selectOne(userId);

    if (user == null) {
        return false;
    }

    return true;
}

なんとそこには、newもせずにUser userといきなり記述されていた。
「他のクラスを使用する時はnewするんだ」と漠然と思い込んでいた私からすると、訳が分からなくなってしまった。

だがそれは、単純に私の勘違いであった。

上記のselect.selectOne(userId);というメソッドの中身を見てみると

select.java
public User selectOne(String userId) {

    //データを1件取得
    Map<String, Object> map = jdbc.queryForMap("SELECT * FROM m_user "
        + "WHERE user_id = ?"
        , userId);

    //結果返却用の変数
    User user = new User();

    //取得したデータをuserにセットしていく
    user.setUserId((String) map.get("user_id"));        //ユーザID
    user.setUserName((String) map.get("user_name"));    //ユーザ名

    //userインスタンスを返却
    return user;
}

となっている。
そう、しっかりとUser user = new User();とnewを行って、そのuserインスタンスを戻り値として返却しているのだ。
つまり、既にUserインスタンスが生成されているから、最初のcheck.javaクラスでは新たにnewする必要がなかったのである。

言われてみれば、その都度インスタンスを新しく生成していたらよく分からない事になってしまうなと。。

そういう訳で、「newするタイミングは使う時(だけ)だよ」という言葉の理解が少し深まったのでした。たぶん。

※追記
@shiracamus 様よりアドバイス頂きました。上記に限らず、Commandパターンなるものが存在するようです。

Commandパターンでは、事前にコマンドを作っておいて、必要になったときに作っておいたコマンドを実行します。
Linuxなどで事前にコマンドをインストール(準備)しておいて、必要になったときにコマンド実行するのと同じように。

ご指摘誠にありがとうございます。まだまだJavaは奥が深いのですね。
Commandパターンというのは初耳だったので調べてみたのですが、さらっと見ただけではまだ分かりませんでした。
デザインパターンについても今後勉強させて頂きます。良いきっかけをどうもありがとうございます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1