티스토리 뷰

Java

[Java] 7.패키지

nohriter 2022. 8. 31. 17:13

자바의 패키지에 대해 알아보겠습니다.

 

 

 

 

1. 패키지 키워드


패키지(package)란, 관련 된 클래스(인터페이스 포함)들의 묶음이다. 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. (접근 보호와 네임 스페이스 관리) 같은 이름의 클래스일 지라도 서로 다른 패키지에 존재하는 것이 가능해서, 다른 개발자가 개발한 클래스 라이브러리의 클래스 이름과 충돌하는 것을 피할 수 있다.

 

클래스가 물리적으로 하나의 클래스파일(*.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다.

 

예를 들어, java.lang.String 클래스는 디렉토리 java의 서브 디렉토리인 lang에 속한 String.class 파일이다.

 

1. 하나의 소스파일에는 첫 번째 문장으로 단 한번의 패키지 선언만을 허용한다.
2. 모든 클래스는 반드시 하나의 패키지에 속해야한다.
3. 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
4. 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.

 

패키지의 선언

클래스나 인터페이스의 소스파일(.java)의 맨 위에 다음과 같이 한 줄만 적어주면 된다.

package 패키지명;

클래스명과 쉽게 구분하기 위해서 대문자도 허용하지만, 소문자로 하는 것을 원칙으로 하고 있다.

모든 클래스는 반드시 하나의 패키지에 포함되어야하며, 소스파일에 자신이 속할 패키지를 지정하지 않는 모든 클래스는 자동적으로 자바에서 기본적으로 제공하는 '이름없는 패키지(unnamed package 또는 default package)'에 속하게 된다.

 

 

2. import


import는 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공한다.

import의 선언

모든 소스파일(*.java)에서 import 문은 package 문 다음에, 그리고 클래스 선언문 이전에 위치해야한다.
import문은 package 문과 달리 한 소스파일에 여러 번 선언할 수 있다.

import 패키지명.클래스명;
or
import 패키지명.*; // 지정된 패키지에 속하는 모든 클래스를 패키지명 없이 사용할 수 있다.

 

static import

import 문을 사용하면 클래스의 패키지명을 생략할 수 잇는 것과 같이 static import 문을 사용하면 static 멤버를 호출할 떄 클래스 이름을 생략할 수 있다.

import static java.lang.Integer.*;
import static java.lang.Math.random;
import static java.lang.System.out;

out.println(random());
// System.out.println(Math.random());

 

 

3. 클래스패스


클래스패스란 말 그대로 클래스를 찾기위한 경로이다. 자바에서 클래스패스의 의미도 똑같다. 즉, JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파일 경로를 말하는 것이다. 소스 코드(.java 파일)를 컴파일하면 소스 코드가 “바이트 코드”(바이너리 형태의 .class 파일)로 변환된다. java runtime(java 또는 jre)으로 이 .class 파일에 포함된 명령을 실행하려면, 먼저 이 파일을 찾을 수 있어야 한다. 이때 .class 파일을 찾기 위해 classpath에 지정된 경로를 사용한다. classpath는 .class 파일이 포함된 디렉토리와 파일을 콜론으로 구분한 목록이다. java runtime은 이 classpath에 지정된 경로를 모두 검색해서 특정 클래스에 대한 코드가 포함된 .class 파일을 찾는다. 찾으려는 클래스 코드가 포함된 .class 파일을 찾으면 첫 번째로 찾은 파일을 사용한다.

 

 

4. 접근제어자


객체 지향에는 대표적인 4대 특성이 있는데 바로 추상화, 상속, 다형성, 캡슐화이다. 이 중 캡슐화는 정보 은닉이라고도 하는데, 서로 관련 있는 속성과 메서드를 클래스에 하나로 묶고 사용자가 필요로 하는 인터페이스만 제공하고, 나머지 내부적으로 구현된 내용은 외부로부터 감추는 것을 의미한다.

 

이덕에 사용자 입장에서는 별도로 복잡한 코드를 실행하지 않고(사용자의 실수 방지) 특정 인터페이스만 호출함으로써 원하는 결과를 얻을 수 있게 하며, 객체 입장에서는 클래스 내부에 선언된 데이터를 보호(수정 방지)할 수 있게 된다. 아울러 외부에 공개되지 않은 멤버의 경우 해당 클래스 외부로의 파급 효과가 없으므로 수정이 용이하다는 장점도 있다.

 

이때 자바에서 구현 내용을 내부에 감추는 방법으로 접근 제어자(private, default, protected, public)를 사용할 수 있다.

자바에서 제공하는 접근 제어자로는 private, default, protected, public이 있으며 각각의 접근 제어자별 특징은 다음과 같다.

 

구분 public protected default private
동일 클래스 O O O O
동일 패키지 + 상속 O O O X
동일 패키지 O O O X
다른 패키지 + 상속 O O X X
다른 패키지 O X X X

접근 제어자를 사용하면 멤버(속성, 메서드, 생성자) 또는 클래스에 대한 외부의 접근 권한을 지정할 수 있다. 

 

참고로 접근 제어자를 생략할 경우 default인 것으로 간주하며 접근 제어자 private의 경우 같은 클래스의 인스턴스끼리는 서로 접근 가능하다. 또한 접근 제어자 protected의 경우 자신(슈퍼 클래스)과 상속 관계에 있는 서브 클래스에서 접근 가능하지만 같은 패키지 내의 클래스에서도 접근이 가능하므로 접근 제어자 default와 잘 구별하여 사용하여야 한다.

 

 

 

 

출처

 

캡슐화(정보 은닉)를 위한 Java의 접근 제어자 이해하기

캡슐화란? 객체 지향에는 대표적인 4대 특성이 있는데 바로 추상화, 상속, 다형성, 캡슐화이다. 이 중 캡슐화는 정보 은닉이라고도 하는데, 서로 관련 있는 속성과 메서드를 클래스에 하나로 묶

ikjo.tistory.com

 

백기선님 온라인 스터디 7주차 - 패키지

패키지에 대해서 정리합니다.

velog.io

 

[JAVA] 패키지란? (package, import, classpath...)

🎁 패키지 패키지(package)란, 클래스 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할

doozi0316.tistory.com

 

'Java' 카테고리의 다른 글

[Java] 8.인터페이스  (0) 2022.09.07
[Java] static 키워드  (1) 2022.09.01
[Java] 오버라이딩(Overriding)  (1) 2022.08.24
[Java] 자바는 왜 다중상속을 지원하지 않을까?  (0) 2022.08.24
[Java] 6.상속  (0) 2022.08.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함