質問: ### 前提・実現したいこと インナークラスの使用は避けるべきでしょうか。 いままで参考にしてきたサイトでは「クラスを簡潔にし1つの役割だけを持たせるべきだ」と書いてありました。 クラスの中にクラスを定義することは外側のクラスを複雑にしてしまう気がします。 そもそも、インナークラスとして1つにまとめることができるのなら外にだしてしまっていい気がするのですがどうなのでしょう?(特にstaticなしのインナークラス) ご意見が聞きたいです。 ### 補足情報(言語/FW/ツール等のバージョンなど) Java,Eclipse
回答: yoshi777さんの回答に賛同します。 インナークラスの使用は多用・乱用は避けるべきですが、避けなければならないものではありません。 *仕事でルールがある場合はそれに従うべきです。ルールがない場合は使用前に確認した方が良いでしょう。 (.classファイルが$に連番になるため、ソースとの紐づけが不明確になる運用面のデメリットあり) 「インナークラスとして1つにまとめることができるのなら外にだしてしまっていい気がする」という疑問についてですが、「クラスを簡潔にし1つの役割だけを持たせるべきだ」にある「役割」について考えると良いと思います。インナークラスとして作ることが適切であれば、外出しをする必要性を感じないはずです。外出しを考えたとすると、それは共通処理をまとめたユーティリティクラスを作ろうという行為になっている可能性があります。 外出しの方法にはパッケージを分けるもありますね。サブパッケージを作り外出しにしたクラスを配置する方法です。けれどこの場合でもインナークラスとして作ることが適切ならば外出しすることに意味は感じないと思います。 例えば、自分が仕事をする時にメモを取りながら行うとします。この"メモ"はインナークラスになり得ます。メモには、自分の仕事をするために必要な情報を記録しておくという役割しかありません。この場合、メモを外出しにすることに意味は感じないのではないでしょうか。 他人のメモは見えるべきと考えるなら、インナークラスではなく外出しすべきとなります。 この例は、どのような役割がインナークラスになり得るのかという例の一つです。