Java
IDEを起動してから最低限のTDD環境を整えるまでの手順を記します。 IntelliJ IDEAとJUnit5が前提です。 (久々にJavaを触ったら色々と忘れてたので備忘録として残しておきます) 手順 IntelliJ IDEAでプロジェクトを作成 テストクラスを新規作成 空のテスト…
Javaで単体試験を書いているとPrivateなフィールドやメソッドにアクセスしたくなることがあります。 そんなときはコソッと修飾子をprivateからpackage privateやprotectedに変更したくなりますが絶対にやってはいけません。 危険なだけでなく、アクセス修飾…
Beans、Data Transfer Object、Entity。 いずれもJavaにおいてデータを保持するためのクラスだ。 あまり深く考えず雰囲気で使い分けていた。 ビジネスを表現するデータは「Entity」、 その中でも小粒なものは「VO」。 それ以外でアプリケーションが処理しや…
前回、メモリリークについて取り上げました。 メモリリークはプログラマ個々人の意識と技量に依存した扱いが難しい問題であることについて触れました。 メモリリークと同様に難しいのがスレッドセーフです。 スレッドセーフを試験で確認するのはメモリリーク…
メモリリークは検出するのが難しい問題です。 プロファイラなどの助けを借りることも大事ですが、最大の防御線はプログラマ個々人の意識です。 今回はJavaのメモリリークについては取り上げます。 Javaとメモリ管理 Javaは基本的にメモリを意識しなくてよい…
cleancodersの動画を見ていて気がついた、TDDに便利なIntelliJ IDEAの機能を5つご紹介します。 1. Live Template TDDでは沢山のテストメソッドを書きます。毎回、「public void test ...」なんてタイプするのは面倒です。 そんなときに便利なのがLive Templ…
前回、cleancodersのStack Kataのビデオに個人的な解説を付けました。 architecting.hateblo.jp しかし35分のビデオに詳細な解説を付けたので長文になってしまい要点が読み取れません。 そこでこの記事では要点のみをまとめます。 私の個人的な理解なので合…
cleancoders.comというサイトのプログラミング動画を見て勉強しています。 その中で「Stack Kata」という、StackクラスをTDDで作成するビデオがあります。このビデオは無料で公開されています。 https://cleancoders.com/episode/clean-code-episode-4-sc-1-…
cleancoders.comというサイトのプログラミング動画を見て勉強しています。 英語で、日本語字幕はなく、高価ですがシニアクラスのプログラマーから直接、教えを受ける機会がない自分には貴重な教材です。 Java Case StudyというシリーズではWebサービスをスク…
拡張for文を用いたListの繰り返し処理は初学者でも覚えやすいですね。 for (String item : list) { System.out.println(item); } 一方でMapの繰り返し処理が分かりづくてMapを避ける初学者がいます。 Mapはとても便利なので避けてよいことはありません。基本…
「素人コードにこれをパパッと加えればたちまちお店の味に」というソフトウェア業界の「味の素」がLoggerだと思います。Loggerは加えておいて損はありません。 逆に素人感満載になるのが「System.out.println」です。使い所次第ですが、多くの場合はBad Prac…
どんなときに使うの? リソースの作成、後処理をクライアントコードに任せずに基盤コード側で実行、制御したいとき。 他のインジェクション方式との比較 コンストラクタインジェクションやセッターインジェクションではリソースの作成、後処理がクライアント…
参照とは Hoge hoge = new Hoge() 上記の例において変数hogeはHogeクラスのインスタンスへの参照を持っている。これが強参照。 強参照がなくなるとインスタンスはGarbage Collectionの回収対象になる。例えば上記の例では変数hogeにnullを代入したり、スコー…
なぜ自前のクラスローダが必要なのか? クラスローダによって検索するディレクトリと名前空間を分けることができる。よってクラスローダを分ける以下の2点を実現できる。 利用可能なクラスを制限する サービスAからはサービスBのクラスを利用できないように…
1つしかないものを表現するときSingletonでもスタティックなフィールドとして表現するのも同じ気がする。なにが違うのか調べてみた。 継承の可否 スタティックなものは継承できない。 Singletonは継承できる。 継承できる方が将来の拡張性が高い。 保証/強…
個人ではなく全体に属するものはstatic変数。 例えば人間クラスがあったとする。名前フィールドは当然、鈴木さんと佐藤さんとボブさんで値が異なるからインスタンス変数になる。一方で人口フィールドは鈴木さんと佐藤さんとボブさんなど特定の個人に属さない…
注 筆者の雑感です。思いついたことを書いてます。いずれちゃんと調査、考察、推敲を行ってちゃんとした記事にしたいと思います。 はじめに ある製品のコードを読んでいたらスタティックメソッドが結構、出てくる。メソッドをStaticにする基準を考えたり、調…
注 本稿は筆者の雑感です。思いついたことを書いてます。いずれちゃんと調査、考察を行ってちゃんとした記事にしたいと思います。 はじめに ある製品のJavaコードを読んでいてメソッドのアクセス修飾子の使い方が気にった。「修飾子の選択には設計者の明確な…
1. JUnitのJARをライブラリ追加 ビルドパス→ビルドパスの構成→ライブラリ追加→JUnit→JUnit4→完了 2. testフォルダ作成 ビルドパス→新規ソースフォルダ→「test」 3. テストコード作成 プロダクションコード→新規→JUNITテストケース ソースフォルダをtestに変…
ダウンロードしてきたライブラリのソースを読もうとしたらソースが含まれていませんでした。デコンパイルしてソースを読みたいと思います。 デコンパイルするにはjadを使います。jadはhomebrewを利用してインストールしました。 フォルダ内のclassファイルを…
ダウンロードしてきたライブラリのソースを読みたくてIntellij IDEAで開いてみました。 コマンド+Bで宣言箇所を表示しようとしたところ、宣言が同じソースファイル中にある場合はジャンプできました。しかし宣言が他ファイルにある場合は以下のようなメッセ…