[Java]package(패키지)

hwarye·2022년 11월 7일
0

패키지

특정한 목적을 공유하는 클래스와 인터페이스의 묶음
상위 클래스의 멤버(필드,메서드,이너 클래스)를 하위 클래스와 공유하는 것.

물리적인 하나의 디렉토리(directory).
하나의 패키지에 속한 클래스나 인터페이스 파일은 모두 해당 패키지에 속해있다.

패키지의 장점

1) 클래스들을 그룹 단위로 묶어 효과적으로 관리 (목적)
2) 클래스의 충돌 방지 기능.
같은 이름의 클래스가 존재하더라도 서로 다른 패키지에 존재하면 이름 충돌 발생 X.

계층 구조 가지고 있다.
계층 구조 간 구분 : . (점)
ex) package parcticepack.test;
패키지가 있는 경우 소스 코드의 첫번째 줄에 반드시 package 패키지명 이 표시되어야 한다.
패키지 이름은 패키지의 경로까지 포함한 풀 네임을 명시해야 한다.
자바의 모든 클래스는 반드시 하나 이상의 패키지에 속해야 한다.
때문에, 패키지 선언이 없으면 이름없는 패키지(unnamed package)에 속하게 되고, 패키지를 명시하지 않은 모든 클래스와 인터페이스는 모두 같은 패키지에 포함되게 된다.

패키지의 대표적인 예
java.lang, java.util, java.io, java.nio ,,,


패키지 분류 법칙

👉🏻 루트 패키지는 a.b.c의 형식으로 구성한다.

ex) 
	import org.apache.taglibs.*
    import net.sf.cglib.*
    import com.sum.accessibility.*

1) org, com으로 시작하는 가장 높은 부모패키지
: 프로젝트를 이끄는 그룹의 성격을 결정
(org - organization, com - company 약자)

2) 두번째 패키지명
: 자사의 그룹 또는 사명을 정해주는 구간
: 회사라면 사명,그룹이라면 그룹명이 들어가는게 일반적이다.
ex)apache,sf,sun

3) 세번째 패키지명
: 실제 이 프로젝트의 artifact(소프트웨어 개발 프로젝트를 진행하면서 생성하는 다양한 산출물) 구조
: 위의 두 단계에서 프로젝트 그룹의 성격과 그룹명을 정했다면 이 단계에서는 실질적인 소스의 역할 또는 프로젝트명이 들어간다.

cf)
.jar 확장자를 갖는 자바 라이브러리도 아티팩트의 일종이다.

👉🏻 기능별로 구분한다.

위에서의 프로젝트를 a.b.c 형식으로 구분한 artifact 구조 다음에 나오르 패키지 분류는 기능별로 구분하는 것이 좋다.
여기서 기능별로 구분이란 구분 지어질 수 있는 가장 큰 성격을 뜻하는데 구체적으로 DB테이블이라고 할 수 있다.

테이블은 하나의 기능에 대하여 필요한 정보를 칼럼으로 묶는 식의 설계일 것이며 테이블은 한가지 기능에 대해 세부 데이터를 세팅하여 갖게된다.

👉🏻 계층별로 분류한다.

계층별로 분류하는 것은 기능별로 분류하는 것보다 더욱 중요하다고 할 수 있다.
계층별 분류를 티어(tier, tiered) 또는 레이어(Layer)라고 부르기도 한다.
계층별 분류는 사용자가 어떤 디자인 모델을 차용해서 제작하느냐에 따라 갈리므로 작성자가 먼저 어떤 구조로 설계하는지 결정하는게 가장 중요하다.

기본적인 웹 계층은 MVC 구조로 많이 제작되는데 View는 JSP, Controller는 서블릿 또는 스프링, 스트럿츠 같은 프레임워크가 관리하는 형태로 대부분 제작된다.
우리가 클래스로 묶어서 배포할 부분은 모델 부분에 해당되는데 모델은 직접 DB에 접근하여 데이터를 가져오고 연산하여 컨트롤러에 넘겨주는 주된 역할을 담당한다.

모델은 DAO(Data Access Object, DB에 접속하여 데이터를 가져오는 클래스) 계층, 자바빈과 같이 테이블의 컬럼을 오브젝트로 변환시키는 domain 계층, domain과 dao계층을 활용하여 직접적인 기능을 구현하는 service 계층 등이 있다.

cf)
MVC (model, view, controller)
MVC 패턴은 하나의 어플리케이션, 프로젝트를 구성할때 그 구성요소를 세가지의 역할로 구분한 디자인 패턴이다.

import문

다른 패키지 내의 클래스를 사용하기 위해 사용.
일반적으로 패키지 구문과 클래스문 사이에 작성한다.

형식
import 패키지명.클래스명; 또는 import 패키지명.*;

* : 모두 의 의미
-> 같은 패키지 내에서 여러 클래스가 사용될 때는 여러번 작성하지 않고, import 패키지명.*; 을 작성하여 간단하게 표현한다.

import문을 사용하지 않을 경우, 다른 패키지 클래스 사용 방법

package practicepack.test2; 
// 같은 패키지 내의 test 클래스의 ExampleImport 클래스를 사용하려 할 때

public class PackageImp {
		public static void main(String[] args) {
			practicepack.test.ExampleImport example 
            	= new practicepack.test.ExampleImport();
		}
}

cf)
https://lovecode.tistory.com/43
https://12bme.tistory.com/271
https://www.lesstif.com/1stb/%EC%95%84%ED%8B%B0%ED%8C%A9%ED%8A%B8-%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A1%9C-%EC%82%AC%EC%9A%A9-18219542.html

profile
례코드

0개의 댓글