プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

Java

IntelliJ IDEA + JUnit5のTDD環境セットアップ

IDEを起動してから最低限のTDD環境を整えるまでの手順を記します。 IntelliJ IDEAとJUnit5が前提です。 (久々にJavaを触ったら色々と忘れてたので備忘録として残しておきます) 手順 IntelliJ IDEAでプロジェクトを作成 テストクラスを新規作成 空のテスト…

Javaでprivateなフィールドやメソッドを使う

Javaで単体試験を書いているとPrivateなフィールドやメソッドにアクセスしたくなることがあります。 そんなときはコソッと修飾子をprivateからpackage privateやprotectedに変更したくなりますが絶対にやってはいけません。 危険なだけでなく、アクセス修飾…

Beans、DTO、Entityの違い

Beans、Data Transfer Object、Entity。 いずれもJavaにおいてデータを保持するためのクラスだ。 あまり深く考えず雰囲気で使い分けていた。 ビジネスを表現するデータは「Entity」、 その中でも小粒なものは「VO」。 それ以外でアプリケーションが処理しや…

Javaとスレッドセーフ

前回、メモリリークについて取り上げました。 メモリリークはプログラマ個々人の意識と技量に依存した扱いが難しい問題であることについて触れました。 メモリリークと同様に難しいのがスレッドセーフです。 スレッドセーフを試験で確認するのはメモリリーク…

Javaとメモリリーク

メモリリークは検出するのが難しい問題です。 プロファイラなどの助けを借りることも大事ですが、最大の防御線はプログラマ個々人の意識です。 今回はJavaのメモリリークについては取り上げます。 Javaとメモリ管理 Javaは基本的にメモリを意識しなくてよい…

TDDで役立つIntelliJ IDEA機能

cleancodersの動画を見ていて気がついた、TDDに便利なIntelliJ IDEAの機能を5つご紹介します。 1. Live Template TDDでは沢山のテストメソッドを書きます。毎回、「public void test ...」なんてタイプするのは面倒です。 そんなときに便利なのがLive Templ…

cleancodersのStack Kataを見て感じたことのまとめ

前回、cleancodersのStack Kataのビデオに個人的な解説を付けました。 architecting.hateblo.jp しかし35分のビデオに詳細な解説を付けたので長文になってしまい要点が読み取れません。 そこでこの記事では要点のみをまとめます。 私の個人的な理解なので合…

cleancodersのStack Kataに解説を付けた

cleancoders.comというサイトのプログラミング動画を見て勉強しています。 その中で「Stack Kata」という、StackクラスをTDDで作成するビデオがあります。このビデオは無料で公開されています。 https://cleancoders.com/episode/clean-code-episode-4-sc-1-…

cleancodersのJava Case Studyの(私的)UML図を作った

cleancoders.comというサイトのプログラミング動画を見て勉強しています。 英語で、日本語字幕はなく、高価ですがシニアクラスのプログラマーから直接、教えを受ける機会がない自分には貴重な教材です。 Java Case StudyというシリーズではWebサービスをスク…

Mapの繰り返し処理基本3パターン

拡張for文を用いたListの繰り返し処理は初学者でも覚えやすいですね。 for (String item : list) { System.out.println(item); } 一方でMapの繰り返し処理が分かりづくてMapを避ける初学者がいます。 Mapはとても便利なので避けてよいことはありません。基本…

JavaでLogging

「素人コードにこれをパパッと加えればたちまちお店の味に」というソフトウェア業界の「味の素」がLoggerだと思います。Loggerは加えておいて損はありません。 逆に素人感満載になるのが「System.out.println」です。使い所次第ですが、多くの場合はBad Prac…

アノテーションインジェクションによるDI

どんなときに使うの? リソースの作成、後処理をクライアントコードに任せずに基盤コード側で実行、制御したいとき。 他のインジェクション方式との比較 コンストラクタインジェクションやセッターインジェクションではリソースの作成、後処理がクライアント…

参照いろいろ

参照とは Hoge hoge = new Hoge() 上記の例において変数hogeはHogeクラスのインスタンスへの参照を持っている。これが強参照。 強参照がなくなるとインスタンスはGarbage Collectionの回収対象になる。例えば上記の例では変数hogeにnullを代入したり、スコー…

クラスローダを自作する

なぜ自前のクラスローダが必要なのか? クラスローダによって検索するディレクトリと名前空間を分けることができる。よってクラスローダを分ける以下の2点を実現できる。 利用可能なクラスを制限する サービスAからはサービスBのクラスを利用できないように…

Singletonとスタティックの違い

1つしかないものを表現するときSingletonでもスタティックなフィールドとして表現するのも同じ気がする。なにが違うのか調べてみた。 継承の可否 スタティックなものは継承できない。 Singletonは継承できる。 継承できる方が将来の拡張性が高い。 保証/強…

スタティック変数の使い所

個人ではなく全体に属するものはstatic変数。 例えば人間クラスがあったとする。名前フィールドは当然、鈴木さんと佐藤さんとボブさんで値が異なるからインスタンス変数になる。一方で人口フィールドは鈴木さんと佐藤さんとボブさんなど特定の個人に属さない…

スタティックメソッドの使い所

注 筆者の雑感です。思いついたことを書いてます。いずれちゃんと調査、考察、推敲を行ってちゃんとした記事にしたいと思います。 はじめに ある製品のコードを読んでいたらスタティックメソッドが結構、出てくる。メソッドをStaticにする基準を考えたり、調…

Javaのメソッドのアクセス修飾子の使い分け

注 本稿は筆者の雑感です。思いついたことを書いてます。いずれちゃんと調査、考察を行ってちゃんとした記事にしたいと思います。 はじめに ある製品のJavaコードを読んでいてメソッドのアクセス修飾子の使い方が気にった。「修飾子の選択には設計者の明確な…

EclipseでJUnitを利用する

1. JUnitのJARをライブラリ追加 ビルドパス→ビルドパスの構成→ライブラリ追加→JUnit→JUnit4→完了 2. testフォルダ作成 ビルドパス→新規ソースフォルダ→「test」 3. テストコード作成 プロダクションコード→新規→JUNITテストケース ソースフォルダをtestに変…

Javaクラスファイルのデコンパイル

ダウンロードしてきたライブラリのソースを読もうとしたらソースが含まれていませんでした。デコンパイルしてソースを読みたいと思います。 デコンパイルするにはjadを使います。jadはhomebrewを利用してインストールしました。 フォルダ内のclassファイルを…

Intellij IDEAでソースを開いたらCannot find declaration to go toが出る

ダウンロードしてきたライブラリのソースを読みたくてIntellij IDEAで開いてみました。 コマンド+Bで宣言箇所を表示しようとしたところ、宣言が同じソースファイル中にある場合はジャンプできました。しかし宣言が他ファイルにある場合は以下のようなメッセ…