본문 바로가기
Programming

JAVA 패키지와 접근제한자

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 11. 16.
반응형

📘 패키지와 접근제한자

자바의 패키지(Package)는 클래스 파일을 논리적으로 정리해 주는 디렉터리 구조입니다. 또한, 클래스 간 접근을 제어하는 접근제한자 개념도 함께 익혀봅시다. 이 두 가지는 자바 프로젝트를 구조화하고, 보안을 유지하며, 모듈화 된 코드를 작성할 때 매우 중요합니다.


📌 목차

  1. 패키지란?
  2. 패키지 생성 및 사용법
  3. import로 클래스 불러오기
  4. 접근제한자 종류와 차이점
  5. 접근제한자 적용 예제

🔹 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