오늘은 접근지정자에 대해 작성해볼까 합니다
《접근지정자란?》
클래스와 클래스 사이 혹은 클래스의 멤버간의 접근을 제어하는 기능을 가진 한정자
private < default(생략형,package) < protected < public
- private : 자기 클래스안에서만 접근가능. 다른 클래스에서는 접근 불가능
- public: 모든 클래스에서 접근 가능.
- 생략형(package,default) : 같은 패키지내에 있는 클래스들끼리는 접근 가능
《접근지정자를 붙일 수 있는 곳》
1]접근지정자 [modifier] class 클래스명
2]접근지정자 [modifier] final 자료형 멤버상수=초기값:접근지정자와 modifier는 순서는 상관없다.
final 접근지정자 자료형 멤버상수 =초기값
3]접근지정자 [modifier] 자료형 멤버변수;
4]접근지정자 [modifier] 반환타입 메소드명;
※단, class 앞에 붙일 수 있는 접근지정자는 public과 생략형(package)만 붙일 수 있습니다.
결론적으로 인터페이스와 클래스와 클래스의 모든 멤버에는 접근지정자를 붙일 수 있습니다.
《접근지정자 첫번째 예제》
package accessmodifiers;
class PackageClass{}//생략형(패키지/디폴트) 접근 지정자가 붙은 클래스
public class AccessModifierOne {
//[필드]
public int publicVar;
int packageVar;
private int privateVar;
//[멤버 메소드]
public void publicMethod() {
//public int localVar=1;//[x]
//다른 클래스에서 직접 호출이 불가능하니까(접근 불가)
//접근이 가능한 메소드에서 호출 한다
privateMethod();
}
void packageMethod() {}
private void privateMethod() {
//private이 붙은 멤버는 자기 클래스안에서는 어디서든 접근 가능
System.out.println(privateVar);
}
}
《접근지정자 두번째 예제》
package accessmodifiers;
//AccessModifierTwo클래스는 AccessModifierOne과 같은 패키지 안에 있다.
//AccessModifierOne의 멤버(변수,메소드)에 접근해 보자
public class AccessModifierTwo {
//[필드]
//두 클래스 모두 같은 패키지안에 있기 때문에 import할 필요 없다.
AccessModifierOne one;
//[멤버 메소드]
public void access() {
/*
* AccessModifierOne 멤버중 private이 붙은 멤버는 접근불가]-클래스가 서로 다름으로
* private이 붙은 멤버는 주로 public이 붙은
* 멤버 메소드를 통해서 간접으로 호출할 수 있다.
* 직접 호출불가(접근이 안되니까)
*/
one = new AccessModifierOne();
//필드에 접근
//one.privateVar=10;//[x]is not visible
one.packageVar=10;
one.publicVar=10;
//멤버 메소드에 접근
//one.privateMethod();//[x]is not visible
one.packageMethod();
one.publicMethod();
//PackageClass클래스는 접근지정가 생략형(패키지)이지만
//AccessModifierTwo와 같은 패키지 안에
//있기 때문에 접근가능
PackageClass pack = new PackageClass();
}
}
《접근지정자 세번째 예제 - 다른 패키지 접근》
package accessmodifiers.another;
import accessmodifiers.AccessModifierOne;
//AccessModifierTwo클래스는 AccessModifierOne과 다른 패키지 안에 있다.
//AccessModifierOne의 멤버(변수,메소드)에 접근해 보자
public class AccessModifierTwo {
AccessModifierOne one;
//[멤버 메소드]
public void access() {
//[멤버변수(필드)]
//AccessModifierOne클래스는 다른 패키지안에 있기때문에
//사용하려면 import해야한다.(단,접근 지정자가 public이어야 한다)
one = new AccessModifierOne();
//필드에 접근
//one.privateVar=10;//[x]is not visible
//one.packageVar=10;//[x]is not visible
one.publicVar=10;
//멤버 메소드에 접근
//one.privateMethod();//[x]is not visible
//one.packageMethod();//[x]is not visible
one.publicMethod();
//PackageClass클래스는 접근지정자가 생략형이라
//다른 패키지에서는 보이지 않음으로
//import불가.즉 사용 불가
//PackageClass pack = new PackageClass();//[x]
}
}
'IT의 다이어리 > JAVA' 카테고리의 다른 글
Java의 접근지정자와 지정자(modifiers) (0) | 2024.12.30 |
---|---|
Java의 추상화(abstraction) (2) | 2024.12.26 |
Java의 메소드(Method) (0) | 2024.12.23 |
Java의 2차원 배열 (0) | 2024.11.27 |
Java의 1차원 배열 (0) | 2024.11.25 |