Spring 5でできることは?4からの変更点や互換性について解説
この記事は「Javaで学習するSpringによるWebアプリ開発」というトレノキャンプのeラーニング講座を基に解説した記事です。
本記事では、Springの学習前に押さえておきたいJavaの基本文法の中でも、メソッドと引数について、問題を解く形式で解説していきます。
今回考えていく問題では、前回の記事で解説・実装した「Serviceクラス」、「インターフェース」を使用しています。興味のある方は合わせて参照してみてください。
1. メソッドと引数・問題
前回の記事ではServiceクラスの実装を行いました。今回はこれを利用した問題を解きながら、メソッドと引数の使い方を解説していきます。
問題: MemberServiceImplクラスに、int型引数xおよびyを取り、xからyまでの範囲内の整数をすべて足し合わせたint値を返すsumOf(int x, int y)メソッドを定義してください。ただし、x<yとします。
上記の例として、sumOf(3, 5)を実行した場合は、3 + 4 + 5で12が返されることになります。
実際に問題に取り組む前に、前回の内容を思い出してください。Serviceクラスは、インターフェースとセットになっていました。つまり、今回のようにMemberServiceImplクラスにメソッドを追加する際は、先にMemberServiceインターフェースにメソッドの概要を定義してください。
記述ができたら、mainメソッドから呼び出して一緒に動作を確認していきます。
それでは、まずは自分の力で問題に取り組んでみましょう。
2.メソッドと引数・解答
ここからは問題の解答になります。
※以下の解答で使用している「MemberServiceインターフェース」、「MemberServiceImplクラス」は、同シリーズの前回の記事で実装したものです。
① インターフェースを書き換える
まずは、先ほども説明した通り、実装クラスの前にインターフェースを書き換える必要がありますので、MemberServiceインターフェースを開いてください。
インターフェースに課題のメソッドsumOf(int x, int y)を定義します。
package service;
import java.util.ArrayList; //自動的にインポートされる
import entity.Member; //自動的にインポートされる
public interface MemberService {
String greet(int i); //挨拶を返す
ArrayList<Member> getAll(); //全てのMemberを返す
int sumOf(int x, int y); //xからyまでの整数の合計値を返す
}
インターフェースはあくまでも機能の概要にすぎませんから、具体的な処理は持ちません。
ここまで書けたら、保存をかけておいてください。
② 実装クラスを書き換える
それでは次にMemberServiceImplクラスを開いていきます。
すると、MemberServiceインターフェースを書き換えたことによって、クラス名の記述部分にエラーを表す赤い波線が表示されています。
これは、「MemberServiceインターフェースに新たに定義されたsumOfメソッドがMemberServiceImplクラスでオーバーライドされていない」という内容のエラーになりますので、早速sumOfメソッドをオーバーライドしましょう。
エラーが表示されている行の左側、行番号の隣に表示されている電球アイコンをクリックしてください。
エラーの修正方法が一覧で表示されるので、今回は「実装されていないメソッドの追加」を選択しましょう。
package service;
import java.util.ArrayList;
import entity.Member;
public class MemberServiceImpl implements MemberService {
@Override //アノテーション
public String greet(int i) {
String[] greetings = {"Good Morning", "Hello", "Good Evening"};
return greetings[i];
}
@Override //アノテーション
public ArrayList<Member> getAll() {
ArrayList<Member> list = new ArrayList<>();
Member mem1 = new Member(1, "Linda", "linda@example.com");
Member mem2 = new Member(2, "James", "james@example.com");
list.add(mem1);
list.add(mem2);
return list;
}
@Override
public int sumOf(int x, int y) {
// TODO 自動生成されたメソッド・スタブ
return 0;
}
}
すると、このようにsumOfメソッドが自動生成されます。
メソッド内のコメントとreturn文は削除しておいてください。
それでは、こちらの中身を記述していきます。
@Override
public int sumOf(int x, int y) {
int sum = 0;
for(int i = x; i<=y; i++) {
sum += i;
}
return sum;
}
sumOfメソッドは引数xからyまでの範囲内の整数をすべて足し合わせた値を返すので、まずは合計値を保持するためのint型変数sumを定義し、0で初期化しておきます。
続いて、sumに値を足していくためにはfor文を用います。
初期化式では変数iに引数xを代入しています。
その後、インクリメントしながらsumにiを足し合わせていき、iの値がyを超えた時点で繰り返しを終了します。
for文を抜けたら、最後returnで合計値sumを返しています。
以上が問題の解答例です。
記述ができたらファイルを保存してください。
③ 出力を確認
最後に、mainメソッドからsumOfメソッドを呼び出すよう修正します。
Mainクラスを開いてください。
package demo;
import java.util.ArrayList;
import entity.Member;
import service.MemberServiceImpl;
public class Main {
public static void main(String[] args) {
MemberServiceImpl service = new MemberServiceImpl();
System.out.println(service.greet(2));
System.out.println(service.getAll()); //ArrayListを直接出力する
ArrayList<Member> list = service.getAll();
for(Member mem : list) { //拡張for文でlistの中身を一つずつ出力する
System.out.println(mem.getId() + "," + mem.getName() + "," + mem.getEmail());
}
System.out.println(service.sumOf(3, 5));
}
}
mainメソッドの末尾でsumOf(3, 5)を呼び出し、System.out.println()で結果をコンソールに出力しています。
この場合は3 + 4 + 5で、12と表示されれば成功となります。
それでは保存をして実行してみましょう。
検証ポイントです。Main.javaを右クリックして、「実行」から「Java アプリケーション」を選択してください。
12と表示され、きちんと動いていることが確認できました。
ここで表示が誤っていた場合は、上記の解答例を参考にしながらぜひ間違いを探してみてください。
Serviceクラスとインターフェースに書き足しながら、メソッドと引数の定義方法を解説しました。
お疲れさまでした。
第1章 Springを扱うためのJava知識
Springを学ぶ前に知っておくべきJavaの知識について紹介します。
オブジェクト(Entity)の構成や、Entityクラスの実装方法を学びましょう。
Serviceクラス、インターフェースがどんなものなのか、またその実装方法を見てみましょう。
Javaのメモリ「ヒープ領域」と「スタック領域」についても解説します。
メソッドと引数について、問題に取り組みながら学びます。
作成したインターフェースとServiceクラスを使用して、メソッドの追加を行ってみましょう。
「シングルトン」とは何なのか、インスタンスの化の仕組みについて掘り下げながら紹介します。
実装方法も確認しましょう。