IntelliJ 화면이다.
위에서 폴더로 보이는 class1
은 java에서 패키지라고 부른다.
그 아래 class 들이 속해있다.
패키지 단위
로 클래스를 관리한다.이해가 쉽게 예시를 살펴보자.
project-root/
└─ src/
├─ com/ ← com 패키지
│ └─ example/ ← com.example 패키지
│ └─ utils/ ← com.example.utils 패키지
│ └─ Helper.java // package com.example.utils;
└─ app/ ← app 패키지
└─ Main.java // package app;
여기서 “소스”라는 건 우리가 작성하는 .java 파일이다.
.java
파일이 위치한 곳을 package
키워드로 선언한다.예)
Helper.java
최상단에 선언해야할 것
파일 경로
: src/com/example/utils/Helper.java
선언 문구
: package com.example.utils;
[ 기본 구조 ]
package com.example; // 1) 패키지 선언
import java.util.List; // 2) 다른 패키지 클래스 임포트
public class MyClass { // 3) 클래스 선언 ‼️이 부분이 “이 파일의 하나뿐인 public 클래스‼️
// 이 클래스 이름(MyClass)과 파일 이름(MyClass.java)이 반드시 같아야 한다.
private int value;
public MyClass(int value) { // 생성자
this.value = value;
}
public void doSomething() { // 메서드
System.out.println("Value = " + value);
}
public static void main(String[] args) { // 메서드
MyClass obj = new MyClass(42);
obj.doSomething();
}
}
public을 한번만 선언할 수 있다고 했는데, 왜 여러개일까?
Class 내부에 선언되는 것들은 클래스 멤버(member) 라고 부르며,
메서드/생성자/필드라고 한다.
이들에 대해서는 여러 개의public
을 지정할 수 있다.
클래스와 그 안의 요소(필드·생성자·메서드)에 붙여서 어디까지 공개할지 정하는 키워드이다.
키워드 | 같은 클래스 | 같은 패키지 | 하위 클래스 | 모두 접근 |
---|---|---|---|---|
public | ○ | ○ | ○ | ○ |
(default) | ○ | ○ | × | × |
protected | ○ | ○ | ○ | × |
private | ○ | × | × | × |
public
: 완전 공개default
: 패키지 내부에서만(키워드를 쓰지 않으면 기본)protected
: 같은 패키지 + 자식 클래스에서만private
: 같은 클래스 내부에서만project-root/
└─ src/
├─ com/
│ └─ example/
│ ├─ App.java // package com.example;
│ └─ model/
│ └─ User.java // package com.example.model;
└─ util/
└─ StringUtils.java // package util;
App.java
는 com.example
패키지에 속해 있다.User.java
는 com.example.model
패키지에 속해 있다.Java에서는 서브패키지(com.example.model)도 별도의 패키지로 취급한다.
따라서 App.java에서 User를 쓰려면 아래처럼 반드시 import 문을 써야 한다.
import com.example.model.User; // User.java가 속한 패키지
import util.StringUtils; // util 패키지의 클래스