Java 패키지와 접근 제한자 #1

jjinny_0609·2023년 2월 14일
0

Java

목록 보기
18/31

패키지와 접근 제한자

패키지

패키지는 물리적인 형태는 파일 시스템의 폴더입니다. 패키지는 단순히 파일 시스템의 폴더 기능만
하는것이 아니라 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할을 합니다.
클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식합니다.

클래스 이름이 같지만 패키지가 달라서 다른 클래스로 인식해서 오류가 발생하지 않음

윈도우
문서\pdf문서\abc.pdf
문서\엑셀문서\abc.xls
문서\한글문서\abc.hwp

자바
패키지
문서.pdf문서.abc.class
문서.엑셀문서.abc.class
문서.한글문서.abc.class

패키지 선언

상위패키지.하위패키지.클래스

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

public class CalssName { ... }

  • 패키지는 언더바( _ ), 달러($)를 제외한 특수문자 작성안됨 -> 2가지만 됨
  • java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용해서는 안 됩니다.
  • 모두 소문자로 작성하는 것이 관례

import문

다른 패키지에 있는걸 사용하려면 import를 사용해야함

패키지선언 -> import선언 -> 클래스선언 순서 꼭 지켜주자

import 패키지명. : 은 패키지에 포함된 모든 클래스를 가지고 올때 사용


접근 제한자

접근 제한자(Access Modifier)는 말 그대로 접근을 제한하기 위해 사용됩니다.
여기서 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말한다.

접근제한자의 종류

  • public : 단어 뜻 그대로 외부 클래스가 자유롭게 사용할 수 있도록 한다.
  • protected : 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 한다.
  • private : 단어 뜻 그대로 개인적인 것이라 외부에서 사용될 수 없도록 한다.

public >> protected >> default >> private 순서

위 세 가지 접근 제한자가 적용되지 않으면 default 접근 제한을 가진다.
default : 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 한다.
따로 default라고 작성할 필요없음!!

클래스의 접근 제한

2가지만 사용가능

  • default 접근 제한 : 클래스를 선언할 때 public을 생략 했다면 default 접근 제한을 가지게 된다.
    같은 패키지에서는 아무런 제한없이 사용 가능, 다른패키지에서는 사용할수 없도록 제한한다.
  • public 접근 제한 : public 접근 제한자를 붙였다면 클래스는 pbulic 접근 제한을 가지게 된다.
    같은 패키지뿐만아니라 다른 패키지에서도 아무런 제한 없이 사용가능하다.

생성자의 접근 제한

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

4가지 사용가능
public : 모든 패키지에서 아무런 제한없이 생성자를 호출할수 있다.
protected : 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 한다.
다른 패키지에 속한 클래스가 해당 클래스의 자식(child) 클래스라면 생성자를 호출할 수 있습니다.
default : 필드와 메소드를 선언할 때 접근제한자를 생략하면 default 접근제한을 가집니다.
default 접근 제한은 같은 패키지에서 아무런 제한 없이 필드와 메소드를 사용할 수 있으나,
다른 패키지에서는 필드와 메소드를 사용할 수 없도록 합니다.
private : 동일한 패키지건 다른 패키지이건 상관없이 필드와 메소드를 사용하지 못하도록 제한한다.
오로지 클래스 내부에서만 사용가능


필드와 메소드의 접근 제한

// 필드 선언
[ public | protected | default | private ][static] 타입 필드;

// 메소드 선언
[ public | protected | default | private ][static] 리턴 타입 메소드( . . . ){ . . . }

public : 모든 패키지에서 아무런 제한없이 필드와 메소드를 사용 가능
protected : 같은 패키지에 속하는 클래스에서 필드와 메소드를 호출할 수 있도록 한다.
다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 필드와 메소드를 사용할 수 있다.
default : 필드와 메소드를 선언할 때 접근제한자를 생략하면 default 접근제한을 가집니다.
default 접근 제한은 같은 패키지에서 아무런 제한 없이 필드와 메소드를 사용할 수 있으나
다른 패키지에서는 필드와 메소드를 사용할 수 없도록 합니다.
private : 동일한 패키지건 다른 패키지이건 상관없이 필드와 메소드를 사용하지 못하도록 제한한다.
오로지 클래스 내부에서만 사용가능

Getter와 Setter 메소드

ex)

// 필드
// 외부에서 접근할 수 없도록 막고
private int speed;

// 메소드
// 공개해서 외부에서 메소드를 통해 필드에 접근 유도

void setSpeed(double speed){
		//만약에 speed값이 음수이면
		if(speed < 0){
			// 아무것도 안하고 setSpeed 메소드 종료
			return;
		}
	 	else{ // speed값이 양수이면
			// speed필드에 값을 저장.
			this.speed = speed;
		}
	} //setSpeed끝
	double getSpeed(){
		double km = speed*1.6;
		return km;
	}
}

Setter : 매개값을 검증해서 유효한 값만 객체의 필드로 저장하는 역할을 함
Getter : 메소드로 필드값을 가공한 후 외부로 전달하는 역할을 함

끝.

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글