backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  • 패키지 (Package)
  • 1. 패키지란?
  • 2. 패키지의 특징
  • 3. Import 키워드
  • 5. 패키지 설계 시 주의점
  1. 자바
  2. 06 클래스 기초

패키지 보충자료

패키지 (Package)

1. 패키지란?

  • 디렉토리(폴더) 개념:

    • 클래스 파일을 디렉토리 구조로 그룹화하여 관리하는 방식입니다.

    • 대규모 프로젝트에서 클래스를 체계적으로 관리하기 위해 사용됩니다.

  • 패키지 선언:

    • 패키지를 사용하려면 코드의 첫 줄에 반드시 package 패키지명;을 선언해야 합니다.

2. 패키지의 특징

  1. 계층 구조:

    • 패키지는 디렉토리 구조를 기반으로 계층적으로 구성됩니다.

    • 하위 디렉토리에서 추가적인 클래스를 정의할 수 있습니다.

  2. 클래스 이름 충돌 방지:

    • 동일한 클래스 이름이 존재하더라도, 각 패키지가 서로 다른 네임스페이스로 구분되어 충돌을 방지합니다.

  3. 클래스 경로:

    • 패키지에 포함된 클래스는 **풀 네임(Fully Qualified Name)**으로 접근할 수 있습니다.

      • 예: com.example.myapp.ClassName

  4. 같은 패키지 내 접근:

    • 동일한 패키지에 속한 클래스는 import 없이 서로를 사용할 수 있습니다.

  5. 패키지 이름 작성 규칙:

    • 소문자로 작성합니다.

    • 회사 도메인을 거꾸로 작성한 뒤, 프로젝트와 관련된 이름을 덧붙입니다.

      • 예: com.example.myapp

  6. 계층 구조 규칙:

    • 모든 패키지는 서로 다른 계층 구조를 가져야 합니다.

      • com.example.app1과 com.example.app2는 서로 다른 패키지입니다.

3. Import 키워드

  1. 사용 목적:

    • 다른 패키지에 있는 클래스를 사용하기 위해 선언합니다.

  2. 사용법:

    • 특정 클래스만 가져오기: import 패키지명.클래스명;

    • 패키지의 모든 클래스 가져오기: import 패키지명.*;

  3. 주의사항:

    • 애스터리스크(*)로 가져오면 코드 가독성이 떨어질 수 있으니 필요한 클래스만 명시적으로 가져오는 것이 권장됩니다.

(1) 패키지 선언 및 계층 구조

디렉토리 구조

src/
  └ com/
      └ example/
          ├ MainApp.java
          └ util/
              └ Utility.java

MainApp.java

package com.example;

import com.example.util.Utility; // 다른 패키지의 클래스 import

public class MainApp {
    public static void main(String[] args) {
        Utility util = new Utility();
        util.printMessage("Hello, Package!");
    }
}

Utility.java

package com.example.util; // 패키지 선언

public class Utility {
    public void printMessage(String message) {
        System.out.println("Message: " + message);
    }
}

(2) Fully Qualified Name으로 접근

import를 사용하지 않고, 풀 네임을 이용해 클래스에 접근할 수도 있습니다.

package com.example;

public class MainApp {
    public static void main(String[] args) {
        com.example.util.Utility util = new com.example.util.Utility();
        util.printMessage("Hello without import!");
    }
}

(3) 같은 패키지 내 경로 생략

같은 패키지에 있는 클래스는 import 없이 바로 사용할 수 있습니다.

디렉토리 구조

src/
  └ com/
      └ example/
          ├ MainApp.java
          ├ Helper.java

MainApp.java

package com.example;

public class MainApp {
    public static void main(String[] args) {
        Helper helper = new Helper(); // 같은 패키지라 import 생략 가능
        helper.sayHello();
    }
}

Helper.java

package com.example;

public class Helper {
    public void sayHello() {
        System.out.println("Hello from Helper!");
    }
}

(4) 애스터리스크(*)로 모든 클래스 가져오기

package com.example;

import com.example.util.*; // com.example.util 패키지의 모든 클래스 import

public class MainApp {
    public static void main(String[] args) {
        Utility util = new Utility();
        util.printMessage("Using wildcard import!");
    }
}

5. 패키지 설계 시 주의점

  1. 패키지 이름 충돌 방지:

    • 고유한 이름을 사용하기 위해 회사 도메인 기반으로 패키지 이름을 작성합니다.

      • 예: org.companyname.projectname

  2. 패키지 계층 구조:

    • 클래스가 많아질 경우 계층 구조를 적절히 설계하여 관리 효율성을 높입니다.

      • 예: com.example.app.ui, com.example.app.service, com.example.app.util

  3. Import 사용 시 가독성 유지:

    • 애스터리스크(*)는 지양하고 필요한 클래스만 명시적으로 가져옵니다.

PreviousStatic 보충자료Next07 객체지향 프로그래밍

Last updated 5 months ago