📘 패키지와 접근제한자
자바의 패키지(Package)는 클래스 파일을 논리적으로 정리해 주는 디렉터리 구조입니다. 또한, 클래스 간 접근을 제어하는 접근제한자 개념도 함께 익혀봅시다. 이 두 가지는 자바 프로젝트를 구조화하고, 보안을 유지하며, 모듈화 된 코드를 작성할 때 매우 중요합니다.
📌 목차
- 패키지란?
- 패키지 생성 및 사용법
- import로 클래스 불러오기
- 접근제한자 종류와 차이점
- 접근제한자 적용 예제
🔹 1. 패키지란?
패키지는 클래스들을 폴더처럼 구조화하여 정리할 수 있도록 도와주는 기능입니다. 예를 들어 회사 도메인이 example.com이라면, 이를 역순으로 구성하여 com.example 패키지를 만들 수 있습니다.
이렇게 구성하면 클래스가 많아져도 중복을 방지하고, 유지 보수를 쉽게 할 수 있습니다. 특히, 대규모 프로젝트에서는 필수적입니다.
🔹 2. 패키지 생성 및 사용법
패키지를 만들려면, 클래스의 첫 줄에 package 키워드를 사용하여 명시합니다. 파일 위치도 해당 패키지 구조를 따라야 합니다.
// 파일 경로: src/com/example/MyClass.java
package com.example;
public class MyClass {
public void hello() {
System.out.println("Hello from MyClass!");
}
}
위의 예시는 com.example 패키지에 있는 MyClass라는 클래스를 정의한 것입니다. 프로젝트 폴더 구조는 실제로 src/com/example/ 경로로 되어 있어야 하며, 그렇지 않으면 컴파일 오류가 발생할 수 있습니다.
🔹 3. import로 클래스 불러오기
import 키워드를 사용하면 다른 패키지의 클래스를 손쉽게 사용할 수 있습니다.
import com.example.MyClass;
public class Main {
public static void main(String[] args) {
MyClass mc = new MyClass();
mc.hello();
}
}
다른 패키지에 정의된 클래스를 사용하려면 반드시 import 해야 합니다. 같은 패키지에 있다면 import 없이도 사용할 수 있지만, 다른 패키지의 클래스라면 import는 필수입니다.
🔹 4. 접근제한자 종류와 차이점
접근제한자는 클래스, 필드, 메서드에 대해 외부 접근 가능 여부를 설정하는 키워드입니다. 아래 표는 네 가지 접근 제한자의 특성을 비교한 것입니다.
| 제한자 | 동일 클래스 | 동일 패키지 | 하위 클래스 | 다른 패키지 |
|---|---|---|---|---|
public |
✔ | ✔ | ✔ | ✔ |
protected |
✔ | ✔ | ✔ | ✘ (단, 상속 관계에서는 ✔) |
default (package-private) |
✔ | ✔ | ✘ | ✘ |
private |
✔ | ✘ | ✘ | ✘ |
접근제한자를 제대로 사용하는 것은 클래스의 은닉성(encapsulation)을 유지하는 데 핵심적인 역할을 합니다. 외부에서 직접 접근이 필요한 경우에는 public을, 내부에서만 사용하는 데이터는 private으로 지정하는 것이 좋습니다.
🔹 5. 예제: 접근제한자 적용
다음은 접근 제한자의 효과를 보여주는 간단한 예제입니다.
package zoo;
public class Animal {
public String name = "Tiger";
private int age = 5;
public void speak() {
System.out.println("Roar!");
}
private void secret() {
System.out.println("This is private");
}
}
위의 클래스에서 name은 public, age는 private으로 설정되어 있습니다. 이제 이 클래스를 다른 파일에서 사용해보겠습니다.
import zoo.Animal;
public class ZooKeeper {
public static void main(String[] args) {
Animal tiger = new Animal();
System.out.println(tiger.name); // O: public 필드 접근 가능
// System.out.println(tiger.age); // X: private 필드 접근 불가
tiger.speak(); // O: public 메서드 호출 가능
// tiger.secret(); // X: private 메서드 호출 불가
}
}
이처럼 private 접근자는 외부 클래스에서 접근할 수 없으며, 같은 클래스 내부에서만 사용할 수 있습니다. 반면 public은 어디서든 접근이 가능합니다. 실무에서는 private으로 필드를 감추고 getter/setter를 통해 접근을 제어하는 것이 일반적입니다.
✅ 마무리
패키지는 프로젝트를 논리적으로 구성하는 데 필수적인 도구이며, 접근제한자는 클래스의 보안을 유지하고 외부와의 인터페이스를 관리하는 데 매우 중요합니다. 이 두 개념을 잘 이해하고 활용하면 유지보수가 쉬운 고품질의 자바 애플리케이션을 만들 수 있습니다.
다음 강의에서는 getter와 setter, 캡슐화(encapsulation) 개념을 다뤄보겠습니다!
'Programming' 카테고리의 다른 글
| JAVA 예외 처리 (59) | 2025.11.18 |
|---|---|
| JAVA 객체지향 프로그래밍 (OOP) (60) | 2025.11.17 |
| JAVA 클래스와 객체 (45) | 2025.11.15 |
| JAVA 메서드와 매개변수 (43) | 2025.11.14 |
| JAVA 배열과 컬렉션 기초 (55) | 2025.11.13 |