[자바 라이브 스터디] 7주차 - 패키지
•
목표) 자바의 패키지에 대해 학습하세요.
1. package 키워드
•
정의) 서로 관련된 클래스들을 그룹 단위로 묶어 놓는 폴더 개념
◦
물리적으론 클래스 파일을 포함하는 하나의 디렉토리
•
특징)
◦
클래스 또는 인터페이스를 포함시킬 수 있음
◦
같은 이름의 클래스 일지라도 서로 다른 패키지에 존재 가능함
▪
클래스의 실제 이름(full name)은 패키지명을 포함한 것이기 때문
▪
예시) String클래스의 FQCN → java.lang.String
◦
하나의 소스파일은 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용함
▪
예시) package java.lang;
▪
패키지를 선언하지 않으면 이름 없는 패키지에 속하게 됨
◦
java 언어 자체의 패키지는 java. 혹은 javax. 로 시작함
◦
패키지명은 대소문자 모두 허용하지만, 클래스명과 쉽게 구분하기 위해 소문자로 하는 것을 원칙으로 함
◦
일반적으로 회사들은 패키지 이름 시작하기 위해 반전된 도메인 이름을 사용함
▪
이때, 도메인 이름이 유효한 패키지 이름이 아니라면 언더바(_)를 사용하는 게 관례임
▪
예시)
도메인 이름 | 패키지 이름 |
example.com | com.example |
hyphenated-name.example.org | org.example.hyphenated_name |
example.int | int_.example |
123name.example.com | com.example._123name |
2. import 키워드
•
정의) 다른 패키지의 클래스 사용할 때 사용
•
특징)
◦
컴파일러가 import문을 통해 소스파일에 사용된 클래스들의 패키지 알아내고 패키지명을 클래스 이름 앞에 붙여줌
◦
package문과 클래스 선언 사이에 위치함
▪
import 패키지명.클래스명;
▪
import 패키지명.*;
•
패키지에 속하는 모든 클래스 import
•
하위 패키지의 클래스는 포함x
◦
import문 vs static import문
▪
import문 → 클래스의 패키지명 생략 가능
▪
static import문 → static 멤버변수/함수의 클래스명 생략 가능
•
import static 패키지명.클래스명.멤버변수/함수명;
•
import static 패키지명.클래스명.*;
•
예시) QueryDSL 사용 시 QClass import할 때
◦
import문 사용 시
import com.sptp.backend.member.repository.QMember;
...
@Override
public List<Member> findPreferredArtist(Long memberId) {
return queryFactory
.select(QMember.member)
.from(QMember.member, preferredArtist)
.where(QMember.member.id.eq(preferredArtist.artist.id), preferredArtist.member.id.eq(memberId))
.fetch();
}
Java
복사
다른 방법
◦
static import문 사용 시
import static com.sptp.backend.member.repository.QMember.*;
...
@Override
public List<Member> findPreferredArtist(Long memberId) {
return queryFactory
.select(member)
.from(member, memberPreferredArtist)
.where(member.id.eq(memberPreferredArtist.artist.id), memberPreferredArtist.member.id.eq(memberId))
.fetch();
}
Java
복사
◦
import java.lang.*; 는 모든 소스파일에 묵시적으로 선언되어 있음
3. 클래스패스
•
정의) 컴파일러(javac.exe)나 JVM 등이 클래스의 위치를 찾는데 사용되는 경로
•
특징)
◦
‘;’ 구분자로 여러 개 경로 지정 가능
•
방식)
◦
CLASSPATH 환경변수 사용
▪
컴퓨터 시스템 변수 설정을 통해 지정해서 사용 가능
•
이 방식으로 클래스패스를 따로 지정해줄 땐 더 이상 현재 디렉토리가 자동으로 클래스패스로 지정되지 않기 때문에 별도로 추가해줘야 함.
◦
실행 시에 -classpath(-cp) 옵션 사용
▪
java -classpath C:\Java\hi com.example.test 와 같이 사용 가능
4. 접근지시자
•
정의) 멤버 또는 클래스에 사용해, 외부에서 이들에 접근하지 못하도록 제한
•
특징)
◦
사용 범위
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
public | o | o | o | o |
protected | o | o | o | x |
(default) | o | o | x | x |
private | o | x | x | x |
◦
사용 대상
대상 | 사용 가능한 접근 제어자 |
클래스 | public, (default) |
메서드, 멤버변수 | public, protected, (default), private |
지역변수 | x |
•
참고
◦
자바의 정석 (남궁성 지음)