こんにちは、月子です。
「月子の勉強」略して「つきべん」
第三回です。
今回は、「パッケージ」と「インポート」です。
勉強する前の私に聞いてみましょう。

パッケージ?
クラスを分類して管理するものっしょ

インポート?
えーと、他のパッケージのものを使いたいときに
宣言して使えるようになるもの。
まぁeclipseが勝手にインポートしてくれるけど
こんな風なことを体裁整えて答えたら、めちゃめちゃ上司から怒られました。
まとめると「本質的理解ができていない」と叱られたのですが、
ぐうの音も出なかったですね!!
いわゆる上っ面だけで知った気分になっているのです。

カレー?あーなんか辛い食べ物
これくらいざっくりしているのです、私の覚え方は。
上司に叱られて目が覚めた私は、基礎から再度学ぶと決意しました。
駆け出しプログラマーさんの参考になれば嬉しいです!
Javaのパッケージとは
複数のメソッドをまとめるクラス…
最初の練習くらいだったら、クラスの数はそこまで増えません。
しかし現場だと、何百というクラスが出てきます。
それらを分かりやすく分類・管理するのがパッケージです!

ここまでは理解してるんだけどナ
もう少し詳しく見ていきます。
今から4つのパッケージを作ります。
②ご飯朝ごはんパッケージ
③ご飯昼ごはんパッケージ
④ご飯夜ご飯パッケージ
eclipseで見るとこんな感じです。
まさか、こんなアホみたいなパッケージを作ると思っていませんでした。
パッケージの中には、様々なご飯のクラスがあります。
例えば「ご飯朝ごはん」パッケージを見てみましょう。
「白米」
「焼き鮭」
「味噌汁」
「ヨーグルト」
和食な朝ごはんが好きみたいですね。
さらにクラスの中には、いろいろなメソッドが入っています。
例えば「白米」
『白米にマヨネーズを入れて炊く』というメソッドがあります。
え?白米にマヨネーズ入れて炊くとツヤが出るんですよ???
ちなみに、蜂蜜を入れると白米の甘みが引き立ちます(なんの話だ)
こんな風にメソッドで料理をして、クラスで料理名を決めました。
これでご飯朝ごはんクラスは完成だ!
public class Hakumai { public static void taku(String name) { System.out.println(name + "でご飯を炊きます"); } }
…では、ありません。
ここで必要なのが「クラスがどのパッケージに所属しているか宣言すること」
このままだと、「夜ごはんパッケージ」「昼ごはんパッケージ」など
どこに所属させればいいのか、パソコンには分からないんですね。
美味しい白米を食べるためにも、きちんと宣言しましょう!
package + パッケージ名;
package gohan_AsaGohan; public class Hakumai { //渡ってきた材料で白米を炊く public static void taku(String name) { System.out.println(name + "でご飯を炊きます"); } }
まぁeclipseだと自動で挿入していただいてるのですが…
インポートとは
インポートの方法を覚える前に、
「パッケージはそれぞれ独立している」という前提条件をお話しします。
パッケージ自体はそれぞれ独立している
「朝ごはん」「昼ごはん」「夜ご飯」ろパッケージを分けているので、人間の目から見ると

関連性があるんだな…
そう思うかもしれません。
しかし、それぞれのパッケージに親子関係や階層関係はありません。
ここを覚えておかないと、

何で夜ご飯クラスに、朝ごはんクラスが呼び出せないの?!
朝の残り物を使いたいのに〜〜〜!!
と、泣きをみることになりました。
というか、私がなりました。
人間の目から見たら関連性がありそうでも、
パソコンから見たらパッケージは独立している!
ここをよく覚えておきましょう。
インポートする方法
さて、本題です。
あなたは、ご飯メインパッケージの中で、
朝ごはんを食べたいと思っています。
そのため、こんなコードを書きます。
package gohan_main; public class Main { public static void main(String[] args) { //マヨネーズでご飯炊くよ〜〜 Hakumai.taku("マヨネーズ"); } }
しかしエラーが返されてしまいます。
パッケージの独立性が働いているからです。

え?ご飯炊いてよ!!

「Hakumai」クラスとかどこにあるねん…
パソコンに「白米」クラスがどこにあるか教えてあげないといけません。
パッケージ名+クラス名+メソッド名
package gohan_main; public class Main { public static void main(String[] args) { //マヨネーズでご飯を炊くよ〜 gohan_AsaGohan.Hakumai.taku("マヨネーズ"); } }
この長ったらしい文を、完全限定クラス名、略してFQCN(full qualified class name)と呼びます。
ただ、この長い文をいくつも使っていたら、
メインクラスが「白米」だらけになってしまうかもしれません。
そこで使うのがインポート文です。
import + パッケージ名 + クラス名 + メソッド名
*朝ごはんクラスの白米メソッドだけを使いたい場合
package gohan_main; import gohan_AsaGohan.Hakumai; public class Main { public static void main(String[] args) { //マヨネーズでご飯を炊くよ〜 Hakumai.taku("マヨネーズ"); } }
*朝ごはんクラスの全てのメソッドを使いたい場合
package gohan_main; import gohan_AsaGohan.*; public class Main { public static void main(String[] args) { //マヨネーズでご飯を炊くよ〜 Hakumai.taku("マヨネーズ"); } }
これで、メインメソッドで白米を炊くことができました!
パッケージのメリットとは
パッケージやインポートについてわかったところで、
パッケージのメリットについて話したいと思います。
もちろん「たくさん作られたクラスを分類・管理できる」のもメリットの1つです。
ただ、もう1つメリットがあります。
「パッケージが違えば、同じクラス名を使ってもいい」
例えば、朝ごはん、昼ごはん、夜ごはん、
すべて「ご飯」というパッケージにしたとしましょう。

朝ごはんで「Hakumai」クラスを作って、
昼ごはんでも食べたいから「Hakumai」クラスを…
あれ、エラーが出た…!
そうです、同じパッケージ内で、同じクラス名はつけられません。
今はふざけたご飯の話だからいいですが、
仕事場だとめっちゃ困りますよね?

俺の方が先輩なんだから、
「Human」クラスという名前は俺のものだ!
こんな人が出るかもしれません()
そこでパッケージのメリットが活きてきます。
今回は「朝ごはん」「昼ごはん」「夜ごはん」とパッケージを分けたため、
「朝ごはん」「昼ごはん」パッケージそれぞれで
「Hakumai」クラスを使ってもエラーが出ることはありません。
推奨されるパッケージ名
パッケージについて、もう少し深く見ていきましょう。
今回のご飯パッケージは、あくまで私個人の話なので、どんな名前でも大丈夫でした。
しかし現場に出ると、1つのシステムを、複数の会社で開発することになります。
そこで何が起こるでしょう?
そうです、名前かぶり問題です。
みんなが好きなようにパッケージ名、クラス名をつけていたら、
偶然にも「パッケージ」「クラス」「メソッド」全て名前が被ってしまうこともあり得ます。
するとコンピューターは、

このパッケージ名、2つあるよ〜〜〜
どっち使えばいいの〜〜わからん!!
そしてエラーを出しています。
そのためJavaは「自社が保有するインターネットドメインを反対から使うこと」を推奨しています。
例えば、このブログ
「https://tuma-no-trdr.com/」というURLです。
その場合は、「com.tuma-no-trdr」というパッケージ名を使えばOKです。なんか恥ずかしいですが…この名前…
パッケージとインポートまとめ
・クラスを利用する際は、パッケージ名を宣言する
・パッケージはそれぞれ独立している
・違うパッケージを使用する場合、インポートする
・違うパッケージだったら同じクラス名を使っていい
これまでは、eclipseが自動でパッケージやインポート文を書いてくれました。
そのため、特に意識せずコードを書いていました。
しかし、今回きちんと学ぶことによって、
パッケージのメリットや、インポートの重要性が分かりました。
何より自動で宣言してくれてありがとう!と感謝を捧げたくなりました。
まだまだ続く「月子の勉強日記」
お付き合いいただけると幸いです♬
マジで参考にさせていただきました!敬礼!↓
\ いろいろやってるよ! /
よわよわエンジニアのブログ:月子.log
雑多な発信をしてるツイッター:@moon_trdr
ゆるーーーい絵日記:@tuki__tukiko
欲しいものリスト 公開しています🌸
「鈴木 月子」宛に届けていただけると泣いて喜びます!
(送っていただいた方の名前・住所は匿名で送られますのでご安心ください♪)
***
派遣から正社員として、内定をもらいました!
【未経験からエンジニアになりたい人、おすすめのプログラミングスクール】
(コロナの影響で、オンラインでの無料説明会で案内しています)
1、GEEK JOB
私が通っていたプログラミングスクールです!
1番のメリットは、
無料の転職サポート&プログラミング教育を受けられることです!
私もGEEKJOBで転職サービスを受けて、入社しましたが、
最初から最後まで完全に無料でした。
プログラミングできるかな・・・と不安な方は、
最初は無料の説明会と体験会もあるので、
お試しで行くのも1つの手ですよ♩
「有料でもいいから手厚いサポートを受けたい」という方は、
私も大好きなマコなり社長が経営しているTECH::EXPERTをおすすめします!
なんと、質問し放題の環境が整っています。
未経験エンジニアとしての経験談なのですが、
質問できる環境ってありがたいですし、なにより成長ができます!
相談会や説明会は無料です。
DMMが開催しているプログラミングスクールです。
こちらは有料ですが、条件を満たすことで
支払った教育訓練経費の最大70%が教育訓練給付金として支給されます。
こちらも相談は無料です。
無料・有料どちらがいいかは体感だと、
有料の方がサポートが手厚い傾向です(当たり前ですよねw)
しかし無料だから適当というわけではないですし、
私のように転職を繰り返してお金がない人からしたら、
無料スクールはすごくありがたい存在でした🎵
無料スクール→自主的に勉強できる人・お金がない人
自分にあった方を選んでくださいね^ ^
コメント