개발자는신이야
The first step
개발자는신이야
전체 방문자
오늘
어제
  • 분류 전체보기 (114)
    • 🍃웹개발 Spring (15)
    • ❓내 질문 (4)
    • 🔥웹개발종합반 (11)
    • 💻개인프로젝트 (5)
    • 😕error (2)
    • 💡알고리즘 (3)
    • 📖혼자공부하는자바 (22)
    • 📑WIL (2)
    • 🥸 CS 면접 스터디 (13)
    • 🤓천재교육 풀스택 1기 노트 (21)
    • ⏰정처기 공부 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Controller
  • boot
  • 변수
  • db
  • API
  • database
  • 기초
  • JPA
  • dependencies
  • IntelliJ
  • CRUD
  • Lombok
  • Java
  • SQL
  • style
  • CSS
  • repository
  • jquery
  • HTML
  • Spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자는신이야

The first step

📖혼자공부하는자바

Chapter 06-6-1 패키지와 접근 제한자

2022. 12. 2. 14:43

패키지

프로젝트를 개발하다 보면 수많은 클래스를 작성하게 될 때가 많다.

몇백 개 혹은 몇천 개가 될 수도 있는 클래스들을 관리하지 않으면 유지 보수가 어렵게 된다.

그래서 이런 많은 클래스를 관리하기 위해 패키지를 사용한다.

 

클래스는 이름이 동일하더라고 패키지가 다르면 다른 클래스로 인식한다.

클래스의 전체 이름은 '패키지 이름+클래스 이름'으로 클래스명만 입력하는 것은 정확한 방법이 아니다.

따라서 만약 같은 클래스명이라도 다른 패키지에 들어 있으면 다른 클래스로 사용된다.

더보기

ex)

1. com/example/ClassA와 cam/example/ClassB인 같은 경로에 있는 클래스 2개가 있다고 가정해보자.

ClassA 클래스명은 com.example.ClassA 이다.

ClassB 클래스명은 com.example.ClassB이다.

 

2. com/example/ClassA와 com/another/ClassA인 다른 경로에 있지만 같은 클래스명을 가지고 있는 파일이 2개 있다고 가정해보자.

첫 번째 클래스명은 com.example.ClassA이다.

두 번째 클래스명은 com.another.ClassA이다.

즉 언뜻 보면 같아 보일 수 있어 에러가 날 것 같지만 명확하게 다른 이름을 가지고 있는 다른 클래스 파일이다.

 

패키지를 선언할 때는 규칙과 주의해야 할 사항이 있다.

  • 숫자로 시작해서는 안 되고 _,$를 제외한 특수 문자를 사용해서는 안된다.
  • java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용해서는 안 된다.
  • 단어 바뀌는 것 상관없이 모두 소문자로 작성하는 것이 관례이다.

JDK 8 이전 버전에서는 패키지가 없는 클래스를 선언할 시 default 패키지에 포함시킨다.

JDK 11 이후 버전부터는 패키지가 없는 클래스를 생성하면 컴파일 에러가 난다.

import문

사용하고자 하는 클래스들이 다른 패키지에 소속되어 있다면, import문으로 해당 패키지의 클래스 또는 인터페이스를 가져와 사용할 수 있다.

 

//import 상위패키지.하위패키지.클래스이름;
import com.example.ClassA;
import com.example.*;

만약 사용하고자 하는 클래스들이 동일한 패키지 소속이라면 개별 import문을 작성하는 것보다는 *을 이용해서 해당 패키지에 소속된 클래스들을 사용할 것임을 알려주는 것도 좋은 방법이다.

 

import문을 사용할 때 주의할 점은

  • 상위 패키지를 import 했다고 하위 패키지까지 import 되는 것은 아니다.
    자바는 패키지 전체 이름으로 패키지를 식별한다
    따라서 com.example과 com.example.ClassA는 서로 다른 패키지로 인식한다
    따라서 이 두 패키지에 소속된 클래스를 사용하려면 각각의 패키지를 import해와야 한다.
  • 서로 다른 동일한 클래스 이름이 존재하고, 두 패키지가 모두 improt 되었다면 컴파일 에러가 발생한다.
    이 경우에는 정확하게 패키지가 포함된 클래스 전체 이름을 기술해야 한다.
package chap6.hankook;

public class Engine {

}

package chap6.hyundai;

public class Engine {
}

package chap6.mycompany;

import chap6.hyundai.Engine;
import chap6.hankook.*;

public class Car {
    chap6.hankook.Engine engine1 = new chap6.hankook.Engine();
    chap6.hyundai.Engine engine2 = new chap6.hyundai.Engine();
}

Engine 클래스는 import 된 두 패키지에 모두 있기 때문에 패키지 이름과 함께 전체 이름이 기술되어야 한다.

 

접근 제한자

접근 제한자는 말 그대로 접근을 제한하기 위해 사용된다.

접근 제한자의 종류로는 public, protected, private 세 가지가 있다.

  • public 접근 제한자: 외부 클래스가 자유롭게 사용할 수 있다.
    public 제한자를 가지면, 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한 없이 사용할 수 있다.
  • protected 접근 제한다: 같은 패키지 또는 자식 클래스에서 사용할 수 있다.
  • private 접근 제한자: 외부에서 사용될 수 없게 합니다.

위 세 가지 접근 제한자가 적용되지 않으면 default 접근 제한을 가진다.

  • default 접근 제한: 같은 패키지에 소속된 클래스에서만 사용할 수 있다.
    default 접근 제한을 가지면 같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없도록 제한된다.

'📖혼자공부하는자바' 카테고리의 다른 글

Chapter10-2 예외 처리  (1) 2022.12.20
Chapter 07-3 추상 클래스, 추상 메소드  (0) 2022.12.10
Chapter 06-4-2 메소드 호출  (0) 2022.11.29
Chapter 05-2 배열  (0) 2022.11.26
Chapter 06-1 객체  (0) 2022.11.22
    '📖혼자공부하는자바' 카테고리의 다른 글
    • Chapter10-2 예외 처리
    • Chapter 07-3 추상 클래스, 추상 메소드
    • Chapter 06-4-2 메소드 호출
    • Chapter 05-2 배열
    개발자는신이야
    개발자는신이야
    첫발을 내디딘 초보 개발자입니다.

    티스토리툴바