참치코더의 꿈 메모장

2020/08/11 Java - 패키지와 접근 제한자 본문

JAVA

2020/08/11 Java - 패키지와 접근 제한자

참치깡 2021. 8. 11. 20:26
728x90

패키지 선언

 

클래스를 작성할 때 해당 클래스가 어떤 패키지에 속할 것인지를 선언하는 것을 패키지 선언이라고 한다.

 

패키지 선언 방법

 

package 상위패키지.하위패키지;

 

public class Classame {  }

 

패키지는 클래스의 일부이다.

 

*클래스만 따로 복사해서 다른 곳으로 이동하면 클래스를 사용할 수 없다.

*만약 클래스를 이동해야 한다면 패키지 전체를 이동시켜야 한다.

 

패키지 이름 작성 규칙 

 

1. 숫자로 시작해서는 안 되고 _,$를 제외한 특수 문자를 사용해서는 안 된다.

2. java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용해서는 안 된다.

3. 모두 소문자로 작성하는 것이 관례이다.

 

* 이클립스는 패키지 선언이 없는 클래스를 default 패키지에 포함시킨다. (default 패키지는 사실상 패키지가 없는 것)

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

 

import 문 

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

또는 인터페이스를 가져와 사용할 것임을 컴파일러에게 알려줘야 한다.

 

import문 작성하는 방법 

 

import 상위패키지.하위패키지.클래스이름;

import 상위패키지.하위패키지.*;

 

만약 사용하고자 하는 클래스들이 동일한 패키지 소속이라면 개별 import 문을 작성하는 것보다는 

*을 사용해서 해당 패키지에 소속된 클래스들을 사용할 것임을 알려주는 것도 좋은 방법이다.

 

import문은 개수에 제한이 없고 얼마든지 추가할 수 있다.

 

* 이클립스에서 import문 자동 추가 기능 : ctrl + shift + o

 

접근 제한자

 

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

 

접근 제한자의 종류 

 

public 접근 제한자 : 외부 클래스가 자유롭게 사용할 수 있도록 한다.

protected 접근 제한자 : 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 한다.

private 접근 제한자 : 단어 뜻 그대로 개인적인 것이라 외부에서 사용될 수 없도록 한다.

 

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

 

default 접근 제한 : 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 한다.

 

* 클래스를 다른 개발자가 사용할 수 있도록 라이브러리 클래스로 개발한다면 반드시 

  public 접근 제한을 갖도록 해야 한다.

 

* 인터넷으로 배포되는 라이브러리 클래스도 모두 public 접근 제한을 가지고 있다.

 

 생성자의 접근 제한 

 

생성자가 어떤 접근 제한을 갖느냐에 따라 호출 가능 여부가 결정된다.

 

*자동으로 생성되는 기본 생성자의 접근 제한은 클래스의 접근 제한과 동일하다.

 

Getter와 Setter 메소드

 

객체 지향 프로그래밍에서는 객체의 필드를 객체 외부에서 직접적으로 접근하는 것을 막는다.

그 이유는 외부에서 마음대로 변경할 경우 객체의 무결성이 깨질 수 있기 때문이다.

 

이러한 문제점 때문에 객체 지향 프로그래밍에서 메소드를 통해서 필드를 변경하는 방법을 선호한다.

그 이유는 메소드는 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있기 때문이다.

 

클래스를 선언할 때 가능하다면 필드를 private로 선언해서 외부로부터 보호하고, 

필드에 대한 Setter와 Getter 메소드를 작성해서 필드값을 안전하게 변경/사용하는 것이 좋다.

 

priavate 타입 fieldName;

 

public 리턴 타입 getFieldName(){

  return fieldName;

}

 

public void setFieldName(타입 fieldName) {

  this.fieldName = fieldName;

}

 

* 이클립스에서 자동으로 Getter/Setter 메소드를 생성시키는 기능 

* 필드를 선언 한후 Source - Generate Getters and Setters 메뉴 선택 

 

 

 

 

 

728x90
Comments