패키지(Package)

  • 자바에서는 클래스를 체계적으로 관리하기 위해 패키지(Package)를 사용한다.
  • 패키지의 물리적인 형태는 파일 시스템의 폴더이지만, 단순히 파일 시스템의 폴더 기능만 하는 것은 아니다.
  • 패키지는 클래스의 일부분으로 클래스를 유일하게 만들어 주는 식별자 역할을 한다.
  • 즉, 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식한다.
  • 형태는 : package 상위패키지.하위패키지.클래스

 

패키지 선언

  • 클래스를 작성할 때 해당 클래스가 어떤 패키지에 속할 것인지를 선언하는 것을 의미한다.
  • 패키지는 클래스의 일부이다. 이유는, 클래스만 따로 복사해서 다른 곳으로 이동하면 클래스를 사용할 수 없기 때문! 
  • JDK 8 이전 버전에서는 패키지가 없는 클래스를 선언할 수 있었지만, JDK 11버전 이후 버전부터는 패키지가 없는 클래스를 생성하면 컴파일 에러가 뜬다.

① 패키지 이름의 규칙

  • 숫자로 시작해서는 안 되고, _ $를 제외한 특수문자를 사용할 수 없다.
  • java로 시작하는 패키지는 자바 표준 API에서만 사용하기 때문에 사용하서는 안된다.
  • 모두 소문자로 작성하는 것이 관례이다.
  • 참고로 여러 개발 회사들이 함께 참여하는 프로젝트의 경우 중복을 방지하기 위해 회사 도메인 이름으로 패키지를 만든다.

 

② import문

  • 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있따면 import문으로 해당 패키지의 클래스 또는 인터페이스를 가져와 사용할 것임을 컴파일러에게 알려줘야 한다.

 

  • 형식은 다음과 같다.
    • import 상위패키지.하위패키지.클래스이름;
    • import 상위패키지.하위패키지.*; (사용하고자 하는 클래스들이 동일한 패키지 소속일 경우 *을 사용)

 

  • import문은 패키지 선언과 클래스 선언 사이에 작성한다.
  • import문은 개수에 제한이 없고 얼마든지 추가할 수 있다.
  • 주의할 점은 상위패키지를 import했다고 해서 하위 패키지까지 impoprt되는 것은 아니라는 점
  • 즉, com.hankook과 com.hankook.project는 서로 다른 패키지로 인식된다.

 

 

※ 만약 서로 다른 패키지에 동일한 클래스 이름이 존재하고, 두 패키지가 모두 import된 경우 컴파일에러가 발생한다.

  • 이 경우에는 정확하게 패키지가 포함된 클래스 전체 이름을 기술해야 한다.
  • 예를 들어, 두 패키지에 Tire라는 동일한 클래스명이 존재할 경우, 아래와 같이 전체 이름을 표기.
  • ex) sec06.exam02.hankook.Tire Tire1 = ....,  sec06.exam02.kumho.Tire Tire2 = ....

 

접근 제한자

  • 접근 제한자(Access Modifier)는 말 그래로 접근을 제한하기 위해 사용된다.
  • 여기서 접근이란, 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 의미한다.
  • 클래스와 인터페잇를 다른 패키지에서 사용 못하도록 막을 필요가 있을 경우 사용한다.
  • 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 하는 경우도 사용한다.
  • 클래스를 선언할 때 public을 생략했다면, 클래스는 defalut 접근 제한을 가진다.
  • 클래스에 생성자를 선언하지 않으면 컴파일러에 의해 자동으로 기본 생성자가 추가된다. 

 

접근제한 적용 대상 접근할 수 없는 클래스
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메소드 모든 외부 클래스

 

 

Getter와 Setter 메소드

  • 객체의 필드를 객체 외부에서 직접적으로 접근하는 것을 막기위해 사용.
  • 그 이유는 외부에서 마음대로 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨질 수 있기 때문
  • 예를 들면, 자동차 속력은 음수가 될 수 없는데 외부에서 음수로 변경할 경우 무결성이 깨진다고 할 수 있다.
  • 클래스를 선언할 때 가능하다면 필드를 private로 선언해서 외부로부터 보호하고, 필드에 대한 Setter와 Getter 메소드를 작성해서 필드값을 안전하게 변경/사용하는 것이 좋다.

 

Setter : 외부에서 값을 받아 필드를 변경하는 메소드

  • 필드는 외부에서 접근할 수 없도록 막고, 외부에서 메소드를 통해 필드에 접근하도록 하는 메소드
  • 메소드는 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있도록 한다.

Getter : 필드의 값을 외부로 리턴해 주는 메소드

  • 메소드로 필드값을 가공한 후 외부로 전달하는 역할
  • 예를 들어 자동차의 속도를 마일에서 km단위로 환산해서 외부로 리턴해주는 getSpeed() 메소드를 다음과 같이 작성 할 수 있다.

'Coding > Java' 카테고리의 다른 글

[21] JAVA 타입변환과 다형성  (1) 2022.12.02
[20] JAVA 상속  (0) 2022.11.30
[18] JAVA 인스턴스(객체) Instance  (0) 2022.11.27
[17] JAVA 자료구조 ArrayList  (0) 2022.11.25
[16] JAVA 메소드  (0) 2022.11.24

+ Recent posts