들어가기 전
해당 내용은 자바의 신 3판을 읽고 내용 정리 및 공부한 내용을 정리한 글입니다!
자바의 신 Vol 1: 기초 문법편 | 이상민 - 교보문고
자바의 신 Vol 1: 기초 문법편 | 현장 전문가가 쓴 자바 기초 입문서다. NAVER, NHN, SKPlanet 등에서 성능 전문가의 풍부한 경험을 바탕으로 자바를 실무에 맞게 제대로 쓸 줄 알게 해주는 입문서를 목
product.kyobobook.co.kr
9장. 자바를 배우면 패키지와 접근 제어자는 꼭 알아야 해요
1. 패키지
클래스들을 구분 짓는 폴더와 비슷한 개념이다. 자바 애플리케이션을 개발할 때 클래스들을 분류하지 않으면 이름이 중복되거나, 어떤 클래스가 어떤 일을 하는지 혼동되는 일이 발생한다. 그래서 존재하는 것이 바로 "패키지" 이다.
package c.javapackage;
public class Package {
public static void main(String[] args) {
System.out.println("Package class.");
}
}
package 라는 예약어를 쓰고 c/javapackage라는 폴더 안에 있다는 것을 점(.) 으로 구분해서 작성하면 된다.
(1) 패키지 작성 제약사항
- 소스의 가장 첫 줄에 있어야한다.
만약 package 선언 위에 주석이나 공백이 있어도 상관은 없지만 다른 자바 문장이 하나라도 있으면
컴파일이 제대로 되지 않는다. - 패키지 선언은 소스 하나에는 하나만 있어야한다.
한 소스 파일이 두개의 폴더에 한번에 존재할 수 없기 때문에 당연하다. - 패키지 이름과 위치한 폴더 이름이 같아야만 한다.
만약 다를 경우는 파일을 찾지 못해 컴파일 되지 않는다. - 패키지 이름이 java로 시작하면 안된다.
(2) 패키지 이름 지정 규칙
패키지 시작 이름 | 내용 |
java | 자바 기본 패키지 (Java 벤더에서 개발) |
javax | 자바 확장 패키지 (Java 벤더에서 개발) |
org | 일반적으로 비 영리단체(오픈 소스)의 패키지 |
com | 일반적으로 영리단체(회사)의 패키지 |
가장 대표적인 오픈소스 그룹인 아파치의 코드들은 모두 org.apache로 시작한다.
- 패키지 이름은 모두 소문자로 작성해야한다. (반드시는 아니지만 약속이다.)
- 자바의 예약어를 절대 사용하면 안된다.
2. import
자바에서 패키지가 있을 때, 같은 패키지에 있는 클래스들과 java.lang 패키지에 있는 클래스만 찾을 수 있다.
만약 다른 패키지에 있는 클래스를 접근할 때 import를 사용할 수 있다.
// c\javapackage\sub 폴더
package c.javapackage.sub;
public class Sub {
public Sub() {}
public void subClassMethod() {
}
}
// c\javapackage 폴더
package c.javapackage;
import c.javapackage.sub.Sub;
public class Package {
public static void main(String[] args) {
Sub sub=new Sub();
sub.subClassMethod();
}
}
import 단어 뒤에 "패키지이름. 클래스이름"을 명시해 주면 그 패키지에 있는 클래스를 사용하겠다는 것을 컴파일러에게 알려준다. 그러면 컴파일러는 Sub라는 클래스가 c.javapackage.sub에 있다는 것을 알고 컴파일을 해준다.
(1) import *
만약 import 하고자 하는 클래스가 100개 일 경우 100개의 import 를 해야 하는 암울한 경우가 발생할 수 있으니
그 경우를 대비하기 위해서 import * 을 이용하면된다.
(2) import static
JDK 5부터는 import static이 추가 되었는데
import static은 static한 변수(클래스 변수)와 static 메소드를 사용하고자 할 때 용이하다.
import static c.javapackage.sub.SubStatic(클래스명).StaticMethod(메소드명);
import static c.javapackage.sub.SubStatic(클래스명).Static.CLASS_NAME(static 변수명);
public static void main(String[] args) {
StaticMethod(메소드명)();
System.out.println(CLASS_NAME(static 변수명));
}
만약 여러줄 쓰기 귀찮으면 *을 이용해서 아래와 같이 작성해도 된다.
import static c.javapackage.sub.SubStatic(클래스명).*;
이때 static 메소드나 변수가 중복되는 상황에서는 클래스에 있는 static 변수나 메소드가 import static으로 가져온 것보다 우선이다.
import를 하지 않아도 되는 패키지
- java.lang 패키지
- 같은 패키지
3. 접근 제어자
자바의 접근 제어자에는 4개가 있다. 이 접근 제어자는 클래스, 메소드. 인스턴스 및 클래스 변수를 선언할 때 사용된다.
다른 사람들이 그 메소드나 변수를 마음대로 호출하거나 변경하지 못하도록 할때 사용한다.
해당클래스 | 같은패키지 | 상속 받은 클래스 | import 한 클래스 | |
public | O | O | O | O |
protected | O | O | O | X |
package-private | O | O | X | X |
private | O | X | X | x |
좀 더 쉽게 예시를 들어보면 아래와 같이 작성할 수 있다.
- public : 은행창구
- protected : 은행 창구의 직원자리
- package-private : 지점장실
- private : 금고
정리해보자.
책에 있는 질문에 대한 나의 정답을 적은 것이다.
'ON > 개발지식' 카테고리의 다른 글
[책리뷰] 자바의 신 3판 - 10장. 자바는 상속이라는 것이 있어요 (0) | 2023.12.14 |
---|---|
[책리뷰] 자바의 신 3판 - 8장. 참조 자료형에 대해서 더 자세히 알아봅시다. (0) | 2023.12.11 |
[책리뷰] 자바의 신 3판 - 7장. 여러 데이터를 하나에 넣을 수는 없을까요? (0) | 2023.12.08 |
[책리뷰] 자바의 신 3판 - 6장. 제가 조건을 좀 따져요 (1) | 2023.12.07 |
[책리뷰] 자바의 신 3판 - 5장.계산을 하고 싶어요 (1) | 2023.12.05 |