본문 바로가기
Language/Java

JAVA 7주차 : 패키지

by CleanCoder 2021. 2. 14.

 

목표

자바의 패키지에 대해 학습하세요.

학습할 것 (필수)

  • package 키워드
  • import 키워드
  • 클래스패스
  • CLASSPATH 환경변수
  • -classpath 옵션
  • 접근지시자

1. package 키워드

 

 패키지란 많은 클래스들을 체계적으로 관리하기 위해 존재한다.

 

  • 클래스를 구분 짓는 폴더의 역할로 클래스들을 통괄하는 이름으로 지어주는 것이 좋다.
  • 패키지는 클래스를 유일하게 만들어주는 "식별자" 역할을 한다.
  • 클래스의 전체 이름은 "패키지 + 클래스명" 이다.
  • 패키지가 상, 하위로 구분되어 있다면 도트(.)를 사용해서 표현한다.

자바는 패키지의 가장 상위 디렉터리(root)에서 실행해야 한다는 약속이 있기 때문에 해당 패키지로 가서 컴파일하지 않는다.

 

상위패키지.하위패키지.클래스

ex) Car 클래스가 com.ssonsh 패키지에 속해있다면,

  • Car 클래스의 전체 이름은 : "com.ssonsh.Car"
  • 실제 파일 시스템 : com\ssonsh\Car.class

FQCN (Fully Qualified Class Name)

 

 모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다.

이 둘을 합쳐야 완전하게 한 클래스를 표현할 수 있으며 FQCN(Fully Qualified Class Name)이라 한다.

ex) String 클래스의 패키지는 "java.lang" 이며 FQCN은 "java.lang.String"이 된다.

 

패키지 선언

 

 패키지는 클래스를 컴파일하는 과정에서 자동적으로 생성되는 폴더이다.

컴파일러는 클래스에 포함되어 있는 패키지 선언을 보고, 파일 시스템의 폴더로 자동 생성시킨다.

package 상위패키지.하위패키지;

public class ClassName{ ... }

 

패키지 명명 규칙

  • 숫자로 시작해서 안된다.

  • _, $ 를 제외한 특수문자를 사용해서는 안된다.

  • java로 시작하는 패키지는 자바 표준 api 에서만 사용하므로 사용해서는 안된다.

  • 모두 소문자로 작성하는 것이 관례이다.

패키지가 서로 중복되지 않도록 회사의 도메인 이름으로 패키지를 만든다.

 

도메인 이름으로 패키지 이름을 만들 경우에는 포괄적인 이름이 상위 패키지가 되도록 하기 위해서 도메인 이름 역순으로 패키지 이름을 지어준다.

 

마지막에는 프로젝트 이름을 붙여주는 것이 관례이다.

com.samsung.projectname

com.hyundai.proejctname

com.lg.projectname

 

 

빌트-인 패키지(Built-in Package)

 

https://ahnyezi.github.io/java/javastudy-7-package/

자바는 개발자들이 사용할 수 있도록 여러 많은 패키지 및 클래스를 제공한다.

가장 많이 사용되는 패키지로는 java.lang과 java.util이 있다.

자바에서 java.lang 패키지는 따로 import로 불러오지 않아도 자바가 알아서 java.lang의 클래스를 불러온다.

 

예) String, System

import java.lang.String;
import java.lang.System;

public class Main{
	public static void main(String[] args){
		String str = "this is from java.lang.String";
		System.out.println(str);
	}
}

 

  • java.lang : language support 클래스들을 포함하는 패키지
    • 프리미티브 타입이나 수학 연산이 정의되어 있는 클래스들
    • 자동적으로 import 되기 때문에 해당 패키지의 클래스를 바로 사용할 수 있다.
    • EX
      • java.lang의 String 클래스
        • String s = new String(); // java.lang 생략
      • java.lang의 System 클래스
        • System.out.println(); // java.lang 생략
  • java.io : 입출력 기능을 지원하는 클래스들을 포함하는 패키지
  • java.util : 자료 구조 구현을 위한 유틸리티 클래스를 포함하는 패키지
    • Linked List, Dictionary…
    • Date, Time도 지원
  • java.applet : Applets을 생성하기 위한 클래스들을 포함하는 패키지
  • java.awt : GUI 컴포넌트를 구현하기 위한 클래스들을 포함하는 패키지
  • java.net : 네트워킹 기능을 지원하기 위한 클래스를 포함하는 패키지

 

2. import 키워드

 

다른 패키지에 속하는 클래스를 사용하려면 두 가지 방법을 사용한다.

 

첫 번째

  • 패키지와 클래스 모두 기술 (패키지에 소속된 클래스를 이용하여 필드를 선언하고 객체 생성)
package com.taein;

public class Person{
	com.person.Taein taein = new com.person.Taein();	// 객체 생성
}

 

두 번째

  • import문 작성
package com.taein;

import com.person.Taein;
//또는
import com.person.*;

public class Person{
	Taein taein = new Taein();
}

 

import 문의 위치는 패키지 선언과 클래스 선언 사이다.

하나의 패키지의 다수의 클래스를 사용하기 위해서 *을 이용하여 import를 하면 된다.

 

주의할 점은 import문으로 지정된 패키지의 하위 패키지는 import 대상이 아니기에 아래와 같이 작성해주어야 한다.

import com.person.*;
import com.person.taein.*;

 

자바 클래스의 static 메서드는 클래스에 대한 인스턴스의 생성 없이 메서드를 사용할 수 있다.

JDK 1.5부터는 이러한 정적(static) 메소드를 더욱 쉽게 사용하기 위해서 static import 를 지원한다.

 

예로 절댓값을 구하는 java.lang.Math 클래스의 abs() 메서드는 다음과 같이 클래스명.메서드로 바로 사용하다.

import static java.lang.Math.abs;

int i = abs(-1);

 

import 를 하지 않아도 되는 패키지

  • java.lang 패키지 ( 예:: System.out.println("--static case--");, String )
  • 같은 패키지

 

3. 클래스패스

 

  • 컴파일러나 JVM이 클래스의 위치를 찾을 때 사용하는 경로 (미지정 시 현재 디렉터리)
  • 세미콜론(;)을 구분자로 여러 개의 경로 지정

 

4. CLASSPATH 환경변수

 

 시스템에서 어디서든 참조할 수 있게 환경변수로 설정

 

 

5. -classpath 옵션

 

 cmd에서 자바 컴파일 또는 실행 시 명령어를 통해 임시로 지정

명령어 -classpath 클래스패스 경로
명령어 -cp 클래스패스 경로

javac -classpath D:\taein\java\jdk1.8.0 Taein.java

 

 

6. 접근지시자

 

접근 지시자는 멤버 변수나 메서드들의 접근 범위를 정의하기 위해 사용

  • public : 접근을 제한하지 않아 어디서든 접근 가능
  • private : 클래스 내부에서만 접근 가능
  • protected : 클래스 내부, 동일 패키지, 상속받은 클래스에서만 접근 가능
  • default(명시하지 않음) : 클래스 내부와 동일 패키지에서만 접근 가능
지시자 클래스 내부 동일 패키지 상속받은 클래스 이외
private O X X X
default O O X X
protected O O O X
public O O O O

 

참고 : 이것이 자바다

'Language > Java' 카테고리의 다른 글

자바 9주차 : 예외 처리  (0) 2021.02.14
JAVA 8주차 : 인터페이스  (0) 2021.02.14
JAVA 6주차 : 상속  (0) 2021.02.13
JAVA 5주차 : 클래스  (0) 2021.02.12
JAVA 4주차 : 제어문  (0) 2021.02.12

댓글