1. 패키지
일반적인 Java 프로그램에는 엄청난 수의 클래스가 포함됩니다. 얼마나? 수천, 수만. 또한 프로그램이 다른 프로그래머가 작성한 클래스가 포함된 다양한 라이브러리를 사용한다는 사실을 고려한다면 클래스 수는 쉽게 수백만 단위로 측정될 수 있습니다!
이 수백만 또는 수천 개의 클래스 모두에 고유한 이름을 제시하는 것은 거의 불가능합니다.
물론 A123
및 와 같은 이름을 상상할 수 B345
있지만 클래스를 이해하기 쉽게 만드는 좋은 클래스 이름을 선택하는 경우(예: String
문자열) 천 개의 고유한 이름을 생성하는 것조차 많은 일입니다. 일의.
이것이 Java에서 package 키워드를 사용하여 클래스를 패키지로 그룹화하는 것이 관례적인 이유입니다.
Java 클래스 및 해당 패키지는 컴퓨터의 파일 및 폴더와 매우 유사합니다.
예를 들어 컴퓨터에 10개의 문서를 저장해야 하는 경우 하나의 폴더에 보관할 수 있습니다. 그러나 수천 개의 문서(예: 모든 회사 문서의 저장소)가 있는 경우에는 어떻게 해야 합니까?
수천 개의 문서를 저장할 때 한 가지 해결책은 설명이 포함된 이름을 가진 여러 수준의 폴더를 만드는 것입니다. 그런 다음 맨 마지막 수준의 폴더에 해당 특정 폴더와 관련된 문서를 저장합니다. 문서를 잘 설명하는 이름도 나쁘지 않습니다.
사실, 우리는 Java의 클래스에 대해 이 모든 작업을 수행합니다.
클래스를 포함하는 파일은 다른 디렉토리(폴더)에 저장되며 모든 하위 폴더가 포함된 클래스 폴더의 전체 이름은 패키지 이름입니다. 예:
파일 경로 | 패키지 이름 | 클래스 이름 |
---|---|---|
|
|
|
|
|
|
|
|
|
폴더 이름과 달리 패키지 이름은 마침표를 구분 기호로 사용합니다. 즉, 폴더는 패키지 \com\codegym\tasks\
에 해당합니다 com.codegym.tasks
.
2. src
폴더
Java에서는 프로그램의 모든 클래스를 단일 폴더(및 하위 폴더)에 저장하는 것이 일반적입니다. 이 폴더는 일반적으로 호출됩니다 src
( source 의 줄임말 ).
이 폴더를 프로젝트 루트(또는 소스 루트 )라고 하며 모든 패키지 경로는 이에 상대적입니다. 예:
폴더 | 패키지 이름 |
---|---|
|
|
|
|
my
이 상황에서 프로그래머는 "폴더 에 있는 이름의 프로젝트가 있습니다 " 또는 "폴더 에 있는 c:\projects\data
이름의 프로젝트가 있습니다 " 와 같은 말을 합니다.project
d:\files\git\data
루트 폴더( )에 직접 넣지 말고 항상 패키지에 클래스를 넣는 것이 가장 좋습니다 src
. 클래스가 몇 개만 있으면 문제가 되지 않습니다. 그러나 클래스가 많으면 혼동하기 쉽습니다. 그래서 , 항상 패키지에서만 클래스를 생성하십시오.
Java에서는 클래스 및 패키지에 의미 있는 이름을 지정하는 것이 일반적입니다. 많은 회사에서 자체 라이브러리(클래스 집합)를 출시하고 혼동을 피하기 위해 회사/웹 사이트/프로젝트 이름을 패키지 이름에 통합합니다.
패키지 이름 | 회사/프로젝트 이름 |
---|---|
|
아파치 프로젝트 |
|
오라클 회사 |
|
Oracle사, Java 프로젝트 |
|
IBM 회사, WebSphere 프로젝트 |
|
제이보스 프로젝트 |
3. 파일 내용
Java 언어 표준에 따라 클래스 이름 및 해당 패키지 이름에 대한 정보가 코드와 함께 파일에 포함되어야 합니다. 일반적인 형식은 다음과 같습니다.
package package-name;
public class ClassName
{
}
패키지 이름은 폴더 이름과 일치해야 하며 파일 이름은 공개 클래스 이름과 일치해야 합니다.
파일이 있으면 다음을 포함해야 합니다....\src\com\project\Service.java
package com.project;
public class Service
{
}
4. 클래스 가져오기
클래스 이름 과 패키지 이름은 클래스의 정규화된 이름을 형성합니다 .
예:
정규화된 이름 | 패키지 이름 | 클래스 이름 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
없음 |
|
좋은 뉴스:
완전한 클래스 이름은 프로젝트 내에서 항상 고유합니다. 결국 하나의 폴더에 같은 이름을 가진 두 개의 파일을 만들 수 없습니다.
나쁜 소식:
정규화된 클래스 이름은 일반적으로 길거나 매우 깁니다. 코드에서 매번 긴 이름(예: java.util.ArrayList)을 작성하는 것은 매우 불편합니다.
이것이 Java가 클래스를 가져오는 기능을 추가한 이유입니다 .
코드에서 클래스의 짧은 이름을 사용할 수 있지만 먼저 컴파일러가 짧은 이름에 해당하는 정규화된 클래스 이름을 알려야 합니다 . 이제 프로젝트에 같은 이름을 가진 여러 클래스가 있다면 어떻게 될까요? 또는 원래 1개가 있었지만 15개가 더 추가되었습니다...
코드에서 짧은 클래스 이름을 사용하려면 다음 구문을 추가해야 합니다.
import fully-qualified-class-name;
이 선언은 선언 직후 클래스의 맨 처음에 추가해야 합니다 package
.
예:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
두 개의 클래스( 및 )를 가져왔 으므로 코드에서 짧은 이름을 사용할 수 있습니다. 그리고 컴파일러는 사용할 클래스를 알 것입니다.java.util.Scanner
com.test.helper.special.ArrayList
다음은 사용하지 않은 경우 동일한 코드의 모습입니다 import
.
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
그런데 프로젝트에 라는 두 개의 클래스가 있는 경우 Scanner
둘 다 같은 파일로 가져올 수 없습니다. 둘 중 하나에 대해 긴 이름을 사용해야 합니다 .
팀에 Jen이 있다고 가정해 보겠습니다. 모두가 그녀가 누구인지 알고 있기 때문에 의사 소통 문제가 없습니다. 그러나 세 개의 Jens가 있는 경우 이들을 구별하기 위해 정규화된 이름을 사용해야 합니다.
그건 그렇고, 클래스에 많은 import 문을 추가하기에는 너무 게으른 경우 특정 클래스 이름 대신 별표를 넣어 지연 버전을 사용할 수 있습니다.
import package-name.*;
이렇게 하면 패키지에 있는 모든 클래스 의 짧은 이름을 사용할 수 있습니다 .
패키지 의 모든 클래스는 자동으로 가져오므로 이에 대한 설명을 java.lang
작성할 필요가 없습니다 . import
다음 클래스 중 하나를 이미 알고 있을 것입니다 java.lang.String
. 예, 맞습니다. String
문자열 작업에 사용한 클래스 입니다 .