検索

キーワード


【Java】パッケージとは?ドメインとの関係とアクセス制限の範囲

  • 公開日:2020-08-05 15:27:50
  • 最終更新日:2021-01-25 17:26:25
【Java】パッケージとは?ドメインとの関係とアクセス制限の範囲

こんにちは、駆け出しプログラマーの若江です!

ここでは初学者として学習を終えた私が、アウトプットの意味も込めてパッケージについて紹介させていただきます。

できる限り初学者が理解しやすい内容として紹介させていただくので、参考となれば幸いです!


関連記事リンク:命名規則とは? / クラスの役割を知る / アクセス修飾子の種類と役割を紹介

パッケージとドメインの関係とアクセス制限

パッケージは複数の設計図(クラスやインターフェースなど)を1つのファイルにまとめておく役割をします。

開発するプロジェクトの中身をきれいに整理整頓する他にも、設計図の置き場所を詳しく示す目印にもなったりと、

プロジェクト開発に欠かせない基礎知識です。

ここではパッケージの役割やルールについて紹介させていただきます。


パッケージが担当する役割

先ほど紹介した通りパッケージにはプロジェクトの部品設計図となる

「クラス」や「インターフェース」というものをまとめ置く役割があります。

Javaでは通常、クラスやインターフェースに同じ名前を付けて保存しておくことができないですが、

新たに別のパッケージを作ることによって、

同名のクラスやインターフェースを別パッケージ内に用意することも可能となります。


 例) パッケージA{ クラス1、クラス2、クラス3 }

    パッケージB{ クラス1、クラス2、クラス3 }

    パッケージAとパッケージBのクラスは同名ですが別物の扱いになります


このようにパッケージによってクラスを分類することができるため、

「パッケージAにあるクラス1」 といったようにクラスの置き場所を正確に特定することができます。


またパッケージはプロジェクトの「動作指示機能」や「データ保持機能」「データ登録機能」など機能ごとでわけられます。


 例) パッケージA は動作指示機能:クラス1(エンジン動作)、クラス2(車輪動作)

    パッケージB はデータ保持機能:クラス1(スピードデータの保持)、クラス2(車輪の回転数データ保持)

    パッケージC はデータ登録機能:クラス1(今日の平均速度を登録)、クラス2(今日の走行距離を登録)




パッケージの管理方法

機能が書かれたクラスやインターフェースの一番上には、

そのクラス・インターフェースがどのパッケージに入っているかが記され管理されます。

記述の方法は、「package」の宣言と「クラス・インターフェースを除く全ての階層名」で書かれ、

階層名はインターネットのドメイン名を逆順にした名前を使います。


・階層とは、入れ子構造のファイルです。

 ロシアのマトリョーシカをイメージするとわかりやすいかもしれませんね。

・ドメインとは、インターネット上でそのプロジェクトへアクセスする「住所」のような役割をしています。

 「xxx.com」や「ooo.co.jp」などを見ると馴染みがあるかと思います。

 ドメイン名でパッケージ宣言をしておくことでそのパッケージを一般に公開、配布できるようになります。

・パッケージの宣言: package com.xxx.ooo;

 「com」から順番に階層1、「xxx」が階層2、「ooo」が階層3となっていきます。

 この場合「com」ファイルの中の「xxx」ファイルの中の「ooo」に入っているクラス・インターフェースとなります。

 また階層の区切りは「ピリオド( . )」で区切ります。


◆パッケージ宣言例

// com 階層にある test の階層にある controller の中のクラス・インターフェース
package com.test.controller;


ちなみにパッケージ名はプログラマー自身で名付けます。

名付け方にはルールがあるため、名付け方がわからないという方は、

関連記事リンクよりルールの確認をしてみてください。



パッケージのアクセス制約

パッケージは基本的に同パッケージ内にあるクラスやインターフェース同士のみ

アクセスすることが許可されています。


 例) パッケージA { クラス1, クラス2, クラス3 }

     ➡クラス1の一部機能をクラス2で使用可能◎

    パッケージB { クラス1, クラス2, クラス3 }

     ➡パッケージBのクラス1でパッケージAのクラス2は使用できない×


ただし実際の開発となると、他(外部)パッケージに入っているクラスやインターフェースの機能を使いたい状況が生まれます。

その際は他パッケージの公開が許可されているクラス・インターフェースを「import」宣言することでアクセス可能となります。

反対にパッケージ内の特定のクラス・インターフェースを非公開にしてアクセス不可にすることもできます。

このアクセス可能/不可を制御する機能を「アクセス修飾子」と呼びます。

※「import」するクラスの名前が重複する場合はコンパイルエラーとなるので注意してください。

※「import」「アクセス修飾子」に関してはそれぞれ別記事で紹介させていただきます。


このようにパッケージの仕組みを使うことでクラスやインターフェースのアクセスを管理することができるようになります。



まとめ

パッケージはクラスやインターフェースを1つのグループとしてまとめることができます。

パッケージの宣言をドメイン名で命名することで、

誰でも公開されたクラスやインターフェースへアクセスすることができるようになります。

import宣言をすることで外部パッケージへアクセスすることが可能となります。


関連記事リンク

命名規則とは? / クラスの役割を知る / アクセス修飾子の種類と役割を紹介


【著者】

若江

30代で異業種となるIT業界へ転職した駆け出しのプログラマです。これまで主に Java や Ruby、HTML/CSS を使って学習を目的としたショップサイトや掲示板サイトの作成を行いました。プログラマとしての経験が浅いからこそ、未経験者の目線に近い形で基礎の紹介をしていきたいと思います。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様