JavaのクラシックChapter 07オブジェクト向けプログラミングII-03.パッケージとインポート編


3.パッケージとimport


3.1パッケージ(パッケージ)


パッケージはクラスの集合です.
パッケージには、クラスまたはインタフェースを含めることができます.
相互に関連付けられたクラスをグループ単位でグループ化することで、クラスを効率的に管理できます.
同じ名前のクラスが異なるパッケージに存在する可能性があります.
独自のパッケージアーキテクチャを維持することで、他の開発者は
開発したクラスライブラリのクラス名と競合することを防止できます.
これまではクラス名のみを用いて分類してきた.
実際、クラスの実際の名前(full name)にはパッケージ名が含まれています.
たとえば、Stringクラスの実際の名前はjavaです.Stringです.
java.これはlang packageに属するString Classを意味する.
したがって,同名のクラスであっても,異なるパッケージに属する場合はパッケージ名で区別することができる.
クラスは物理的にクラスファイル(.class)です.
パッケージは物理的にディレクトリです.
したがって、パッケージに属するクラスは、そのディレクトリに存在するクラスファイル(.class)である必要があります.
たとえばjavaです.lang.Stringクラス
Stringは、物理的にjavaに属するサブディレクトリlangです.classファイルです.
また、私たちがよく使うシステムクラスもjavaです.langパッケージに属し、langディレクトリに含まれます.
ディレクトリにサブディレクトリがあるように.
パッケージには、サブパッケージ、ポイント"を持つこともできます.区別する.
たとえばjavaです.langパッケージとlangパッケージはjavaパッケージのサブパッケージです.
  • ソースファイルでは、最初の文としてパケット宣言が1回のみ許可されます.
  • すべてのクラスが1つのパッケージに属している必要があります.
  • パッケージはポイント(.)階層に分割できます.
  • パッケージは、物理的にクラスファイル(.class)を含むディレクトリです.
  • 3.2パッケージ宣言


    パッケージを宣言します.
    クラスまたはインタフェースのソースファイル(.java)の上部に1行だけ書きます.
    package 패키지명;
    上記のパッケージ宣言は、ソースファイルのコメントとスペース以外の最初の文に書き込む必要があります.
    1つのソースファイルで1回しか宣言できません.
    ソースファイルに含まれるすべてのクラスまたはインタフェースは、宣言されたパッケージに属します.
    パッケージ名は、すべての大文字と小文字を許可します.
    類名と区別しやすいように、原則として小文字を原則としています.
    すべてのクラスを1つのパッケージに含める必要があります.
    ソースファイルを作成するときにパッケージを宣言しないと問題がないのはなぜですか?
    これはjavaがデフォルトで提供する「名前のないパッケージ」のためです.
    ソースファイルに自分の属するパッケージが指定されていないクラスは自動的に
    「無名コース」です.
    最終的には、指定されていないすべてのクラスが同じパッケージに属します.
    簡単なプログラムでは、パッケージを指定する必要はありません.
    大規模なプロジェクトやJava APIなどのクラスライブラリを作成している場合は、クラスライブラリを事前に構成して適用する必要があります.
    package com.codechobo.book;
    class PackageTest {
    	public static void main(String[] args) {
        	System.out.println("Hello World!");
        }
    }

    3.3 import文


    ソースコードを記述するときに他のパッケージのクラスを使用するには、パッケージ名を含むクラス名を使用する必要があります.
    しかし、その都度パッケージ名が付けられていて不便でした.
    クラスのコードを記述する前に、
    クラスのパッケージを事前に宣言する場合は、ソースコードで使用されるクラス名のパッケージ名を省略できます.
    import文の役割は、コンパイラにソースファイルで使用されるクラスのパッケージに関する情報を提供することです.
    コンパイル時に、コンパイラはimport文を使用してソースファイルで使用されるクラスのファイルパッケージを検索します.
    すべてのクラス名の前にパッケージ名を付けます.
    このクリップは、ショートカットキー「ctrl+shift+o」を押すことでimport文を自動的に追加します.
    ! import文はプログラムのパフォーマンスに全く影響しません.
    ただし、多く使用するとコンパイル時間が多くなります.

    3.4輸入声明


    すべてのソースファイル(.java)では、import文はpackage文の後にあります.
    また、クラス宣言の前にある必要があります.
    パッケージ文とは異なり、import文は1つのソースファイルで複数回宣言できます.
    一般的なソースファイル(*.java)の構成は次のとおりです.
    1.ドアを包む
    2.文のインポート
    3.クラス宣言
    import文を宣言します.
    import 패키지명.클래스명;
    	or
    import 패키지명.*;
    キーワードimportとパッケージ名を省略したいクラスの名前をパッケージ名と一緒に書けばいいです.
    同じパッケージで複数のクラスを使用する場合は、import文を複数回使用しないでください.
    「パッケージ名.*」指定したパッケージ内のすべてのクラスを使用して、パッケージ名を必要としません.
    クラス名ではなく「*」を使用します.
    コンパイラは、これらのパッケージでクラス名を検索する必要がある場合があります.
    それでも運転時の性能に差はないので安心しましょう.
    import java.util.Calendar;
    import java.util.Date;
    import java.util.ArrayList;
    このようにimport文を複数回使用するには、次のような文で処理するだけです.
    import java.util.*;
    1つのパッケージで複数のクラスを使用する場合は、各クラスの名前を指定するよりもパッケージです.使い勝手がよい.
    ただし,インポートされたパケット数が多い場合,どのクラスがどのパケットに属するかを区別することは困難である.
    また、import文でクラス名ではなく「」を使用すると、サブパッケージ内のクラスは含まれません.
    import java.util.*;
    import java.text.*;
    だから上のコードは下のコードで代用できません.
    import java.*;
    ex)現在の日付と時刻を指定形式で出力
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    class ImportTest {
    	public static void main(String[] args){
        	Date today = new Date();
            
            SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd");
            SimpleDateFormat time = new SimpleDateFormat("hh:mm:ss a");
            
            System.out.println("오늘 날짜는"+date.format(today));
            System.out.println("현재 시간은"+time.format(today));
        }
    }
    実行結果:本日の日付は2021年12月19日/現在は16:29:43午後
    単純なDataFormatクラスとDateクラス
    他のパケットに属するクラスなので、import文でどのパケットに属するクラスかを指定します.
    したがって,ソース内のクラス名の前にパケット名を省略することができる.
    import文が指定されていない場合は、次のようにクラス名にパッケージ名を含める必要があります.
    java.util.Date today = new java.util.Date();
    java.text.SimpleDateFormat date
    			= new java.text.SimpleDateFormat("yyyy/MM/dd");
    java.text.SimpleDateFormat time
    		    = new java.text.SimpleDateFormat("hh:mm:ss a");
    import文を使用してパッケージを指定しない場合は、上記のコードに示すように、すべてのクラス名の前にパッケージ名を付ける必要があります.
    ただし、import文を指定することなく、同じパケット内のクラスはパケット名を省略できます.
    これまで、SystemやStringのようなjava.langパッケージのクラスにはパッケージ名がありません
    すべてのソースファイルがデフォルトで次のimport文を宣言しているためです.
    import java.lang.*;
    java.langパッケージは、非常に頻繁に使用される重要なクラスが属するパッケージです.
    つまり、import文として別途指定する必要はありません.

    3.5静的インポート文


    import文を使用すると、クラス内のパッケージ名を省略できます.
    static import文を使用すると、staticメンバーを呼び出すときにクラス名を省略できます.
    特定のクラスの静的メンバーを頻繁に使用する場合に便利で、コードも簡潔です.
    import static java.lang.Integer.*; // Integer 클래스의 모든 static 메서드
    import static java.lang.Math.random; // Math.random()만 . 괄호 안붙임.
    import static java.lang.System.out; // System.out을 out만으로 참조 가능
    上記のコードのようにstatic import文が宣言されている場合は、次のコードを簡略化できます.
    System.out.println(Math.random();
    =>
    out.println(random());