プログラミングにはある程度慣れてきたんだけど、よく目にするデザインパターンってのがよく分からないなぁ。。。
こんにちはJun(@JunNomad)です。
プログラミング学習を勧めていると必ず「デザインパターン」という言葉を耳にするようになります。
しかし、言葉自体は知っていても具体的な内容については知らないといったプログラマーも実務経験豊富な方でも意外と多いのが事実です。
そこで今回は、オブジェクト指向開発では欠かせない考え方である「デザインパターン」の基本について、ご紹介していきたいと思います。
オブジェクト指向のデザインパターンって何?
オブジェクト指向のデザインパターンが何かというと、プログラマーが直面する共通の問題に対する解決法を再利用できるようにパターン化した手法のことを指します。
デザインパターンの例
デザインパターンにはそれぞれ名前がついています。
有名なデザインパターンとしては下記のようなものが挙げられます。
- Singleton
- AbstractFactory/li>
- Adaptor
- Proxy
- Interpretor
- State
デザインパターンには「GoFの23パターン」と呼ばれる手法が一般的に浸透しており、日本語訳もされた大ヒット書籍となっています。
デザインパターンの概要
デザインパターンは大きく「オブジェクトの生成」「プログラムの構造」「オブジェクトの振る舞い」の3つにカテゴリ分けすることが可能です。
上述した例でいうと、オブジェクトの生成が「Singleton」「AbstractFactory」、プログラムの構造が「Adaptor」「Proxy」、オブジェクトの振る舞いが「Interpretor」「State」というように振り分けられます。
詳細についてはこの記事では解説しませんが、興味のある方はそれぞれのデザインパターンの使い方で調べてみてください。
デザインパターン(ソフトウェア) – Wikipedia
なぜデザインパターンを知っておくべきなのか?
デザインパターンの名前は知っているけど学習したことがないという方は、学習することによるメリットをイマイチ把握出来ていないということが挙げられます。
※デザインパターンが概念的なものであるため学習が難しいということも大きな要因ですが。。。
問題解決のテンプレートだから
デザインパターンは先人プログラマー達がぶつかってきた様々な問題を解決するための概念設計として作成されています。
そのため、問題解決においてまず検討すべきテンプレートと言える存在だからです。
車輪の再発明をすべきでないというのはプログラマーの方であれば聞いたことがあるかと思いますが、同じ原理で位置から問題解決方法を探すのではなく、既存のテンプレートを使いましょうということに繋がります。
メンテナンスがしやすいから
デザインパターンに沿って作成されたプログラムは、コンセプトがはっきりとしているのでメンテナンスがしやすく、改変も楽に行うことが可能です。
それぞれのプログラマーが好き勝手に作ったコードでは、あとからプログラムを変更したい人はどこを触ったら良いのか分からないですよね。
プログラマー間の共通認識という意味でも、デザインパターンを使うことでプログラムのメンテナンス性があがります。
開発効率が上がるから
上述したメンテナンス性の向上とも関係しますが、デザインパターンを利用することで開発効率を上げることが期待出来ます。
デザインパターンを用いれば、システムという未知のものを制作する過程の共通コンセプトとしてプログラマー間で共有することが可能となります。
また、あとから入って来るプログラマーにとっても、このシステムはこのデザインパターンが使われていると認識できることにより、プログラムの理解スピードがあがることも期待出来ます。
有名ライブラリやフレームワークで利用されているから
有名ライブラリやフレームワークにも多くの場合、デザインパターンが利用されています。
そのままライブラリやフレームワークを利用するだけならデザインパターンの存在は気にならないかもしれませんが、自分でカスタマイズしたいときにはどこを変更すべきか理解しやすいですよね。
特に規模の大きなライブラリやフレームワークを利用するとなると、コード量も膨大なため、どこにどんな影響が出るのかを判断することは難しくなります。
しかしデザインパターンに従っていれば、基本的には製作者と同じコンセプトの元カスタマイズが出来るため、自身のカスタマイズしたい部分だけを的確に改修することが可能となるでしょう。
デザインパターンを利用する際に意識すべき点
デザインパターンを利用する際、意識しておきたいポイントとして使い所をきちんと把握することがあります。
デザインパターンに慣れていない頃は、デザインパターンこそが正義として、何でもかんでもパターン通りにプログラムを組もうとしてしまうことも少なくありません。
しかし、実際にはデザインパターンを使わない方がシンプルで誰でも理解しやすいようなプログラムになることもあることは考慮しておきましょう。
また、デザインパターンの組み合わせにも気をつける必要があります。
デザインパターンは1つ1つのパターンが完成された概念であり、複数のデザインパターンを組み合わせていくと最終的に何がしたいのか分からないようなプログラムとなってしまうことにも繋がりかねません。
適材適所の使い方というのがありますので、デザインパターンを必ず使わないといけないと固執してしまわないように気をつけましょう。
さいごに:オブジェクト指向のデザインパターンを知って一段上のプログラマーを目指そう!
本記事では、オブジェクト指向のデザインパターンについて基本的な概要をご紹介してきました。
今回は詳細な内容については触れていませんが、興味のある方は一度それぞれのデザインパターンの手法について調べてみてください。
また本文中にも紹介した「GoFのデザインパターン」の書籍については、プログラマーであれば一度は読んでおきたい必読書です。
ぜひこの機会に概要だけでも把握しておくことをおすすめします。