[Java] 7. 자바의 패키지(1)

PYOUNANI·2022년 10월 1일
0

Java

목록 보기
7/14
post-thumbnail

7. 자바의 패키지

7-1. 자바 패키지와 모듈의 개념

자바 패키지의 개념과 모듈에 대해서 배워보자


7-1-1. 패키지의 개념과 필요성

패키지라는 것은 서로 연관된 코드들의 묶음이다.

프로젝트를 만들다 보면 다른 사람들이 작성한 클래스들을 이용할 때나 여러 사람들이 나눠서 작성할 때 클래스의 이름들이 겹치는 경우가 있다.

자바 패키지는 서로 같은 이름의 클래스를 가질 수 있게 한다. 자바의 패키지들은 클래스들을 서로 다른 물리적인 경로에 저장을 시켜줌으로서 각 패키지에 포함된 클래스들을 구분하게 된다. 이름은 같아도 경로명이 다르기 때문에 서로 다른 클래스로 취급을 한다.

따라서 자바 패키지들은 서로 연관된 클래스나 인터페이스들을 계층적으로 묶어놓은 디렉터리이다. 각 계층들은 도트로 구분하게 된다.

Java.util.Scanner

Java 패키지 안에 util 패키지 안에 있는 Scanner 객체를 .로 구분해놓은 것이다.

만약에 내가 Scanner 라는 객체를 만든다고 하여도 util 패키지 속하지 않게 경로를 지정한다면 엄격하게 분리해서 사용할 수 있게 한다.
보통 두단계 이상 계층으로 구분해서 사용하게 된다.

7-1-2. 자바 모듈

기본적으로 자바에서 제공해주는 패키지들을 자바 표준 패키지라고 한다. 자바 표준 패키지는 모듈로 구분화해서 구분하게 되어집니다.

자바 모듈이라는 것은 내부에 연관된 패키지와 자원들을 모아놓은 묶음에 해당한다. 그전에는 API에 하나의 파일에 존재하였는데 이제는 연관된 것들끼리 묶어서 존재한다.

사용자 응용 프로그램도 여러 개의 모듈을 분할하여 만들 수 있기는 하다. 하지만 개발할 때 모듈 적용하는 것이 필수는 아니다.

모듈을 적용하면 메모리를 좀 더 효율적으로 사용가능해지게 된다.

예전에는 내가 하나의 패키지가 필요했어도 패키지A, 패키지B, 패키지C들이 다 메모리에 탑재가 되어졌다. 메모리가 비효율적으로 사용된 모습이다.

하지만 이제는 패키지A가 필요한 상황에서 모듈 N만 메모리에 탑재함으로 좀 더 메모리를 효율적으로 사용하는 것이 가능해졌다.

자바가 설치된 경로에 jmods 디렉터리로 가면 자바 API의 모듈 파일들을 확인할 수 있다. 거기에는 다수의 모듈이 있고 그 안에는 여러 패키지가 압축된 파일의 형태로 존재하고 있다.

주요 패키지들

  • java.base
    java.lang 패키지명 없이 사용할 수 있다.
    java.util 나머지는 모듈은 없이 패키지들로 접근하여 사용한다. ??????
  • java.desktop
    java.awt
    java.swing
    윈도우를 작성할 때 사용하는 패키지들이다. swing은 awt의 단점을 보완해서 나온 패키지이다.

자바 버전이 업데이트가 되어지게 때문에 패키지, 모듈에 대한 내용들이 방대하다. Java SE DEVELOPment Kit DOcumentation를 통해 더 많은 모듈들을 볼 수 있다. 들어가서 Specifications 밑에 API Documentation 에 들어가서 각 모듈을 살펴 볼 수 있다.

새로운 클래스를 만날 때마다 들어가서 한번 쭉 읽어보는 것을 추천한다.

7-1-3. 패키지 구성과 사용

특정 패키지를 사용하기 위해서는 class만 달랑 사용해서는 안된다. 다음 두 방법 중 사용해야 한다.

클래스에 대한 모든 패키지들을 적어주면 된다.

java.util.Scanner s;

뿐만 아니라 참조변수에다가 클래스를 할당한다 할 때에도 모든 패키지들을 적어줘야 합니다.

s = new java.util.Scanner(System.in);

당연히 그 이후에 메서드를 사용할 때에는 필요가 없다.

s.next();

앞서 소개한 방법은 귀찮은 방법일 수 있습니다. 따라서 이를 보완하기 위해 상단에 import를 이용해서 패키지를 사용해볼 수 있다.

import <패키지경로.클래스명>;
import java.util.Scanner;

내가 직접 적어줘도 되지만 오류난 객체에 마우스 위에 올려놓고 저 구문을선택하면 자동으로 적어준다. 또는 ctrl + shift + o를 눌러줘도 된다.

java.util에 있는 모든 패키지를 사용하기 위해서는 * 을 이용하면 된다.

import <패키지경로.*>;
import java.util.*;

하지만 내가 사용하고자하는 패키지가 잘못 사용될 수도 있기에 하나하나 작성하는 것을 추천한다.

7-1-4. 패키지 선언

제공하는 패키지말고 자신이 패키지를 만들고 싶을 땐 소스 코드 맨 앞에 package 패키지명; 을 적어준다. myPackage이름을 가진 package를 생성해보자.

굳이 따로 적지 않아도 디폴트 패키지가 자동적으로 지원하기에 편하게 코드를 작성하는 것이 가능하다. 이 디폴트 패키지는 기본적으로 현재 디렉터리에 위치하는 형태로 지원한다.

내가 새로운 패키지를 만들기 위해서는 물리적인 경로 만들고 package도 선언하고 해야하는데 통합개발환경인 이클립스에서는 간단하게 만들 수 있다.

경로를 다르게 지정을 해야 제대로 작동이 되기에 경로를 생각을 안 할 수가 없다.
하지만 이클립스에서 우리가 직접 경로를 지정해서 생각해줄 필요없고 package explorer 를 통해 옮겨주기만 하면 된다.

default package에다가 넣고서 내 패키지에 옮기면 자동으로 생성이 된다.

클래스는 public으안 하면로 같은 패키지 안에서만 작동하기 때문에 다른 패키지에 존재하기 때문에 오류가 남

0개의 댓글