Java
[Java] 자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기
3o14
2023. 7. 22. 22:44
728x90
반응형
자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기
🍊 접근 제한자
자바(Java)에서는 접근 제한자(access modifier)를 사용하여 클래스, 메서드, 필드, 생성자 등의 멤버들에 대한 접근 범위를 지정할 수 있습니다. 자바에서 사용할 수 있는 네 가지 접근 제한자는 다음과 같습니다.
- public: 가장 넓은 범위의 접근 제한자입니다. public으로 선언된 멤버는 모든 곳에서 접근할 수 있습니다. 다른 패키지에서도 접근이 가능합니다.
- protected: protected로 선언된 멤버는 같은 패키지 내에서는 접근 가능하며, 다른 패키지의 하위 클래스에서도 접근 가능합니다.
- default (package-private): 접근 제한자를 별도로 지정하지 않은 경우를 default 접근 제한자라고 합니다. 같은 패키지 내에서만 접근이 가능하고, 다른 패키지에서는 접근할 수 없습니다.
- private: 가장 제한적인 범위의 접근 제한자입니다. private으로 선언된 멤버는 해당 클래스 내에서만 접근이 가능하며, 외부에서는 접근할 수 없습니다.
코드 예시
public class MyClass {
public int publicField; // 모든 곳에서 접근 가능
protected int protectedField; // 같은 패키지 및 하위 클래스에서 접근 가능
int defaultField; // 같은 패키지에서 접근 가능 (접근 제한자를 명시하지 않은 경우)
private int privateField; // 해당 클래스 내에서만 접근 가능
public void publicMethod() {
// 모든 곳에서 접근 가능한 메서드
}
protected void protectedMethod() {
// 같은 패키지 및 하위 클래스에서 접근 가능한 메서드
}
void defaultMethod() {
// 같은 패키지에서 접근 가능한 메서드 (접근 제한자를 명시하지 않은 경우)
}
private void privateMethod() {
// 해당 클래스 내에서만 접근 가능한 메서드
}
}
이와 같이 접근 제한자를 적절히 사용하여 클래스의 캡슐화(encapsulation)를 유지하고, 필요한 멤버들에 대한 접근을 제어할 수 있습니다.
🍊 싱글톤 패턴으로 instance 생성하기
public class Algo {
int x;
private static Algo instance; // private으로 객체 인스턴스 생성 (static)
private Algo() {} // private로 생성자 접근 금지
public static Algo getInstance() {
if(instance == null) { // 인스턴스 생성이 아직 안된 상태일 경우
instance = new Algo(); // Algo객체 인스턴스 생성
}
return instance; // 인스턴스 반환
}
}
public class AlgoTest {
public static void main(String[] args) {
Algo a = new Algo(); // 오류 -> Algo 클래스 생성자가 private이기 때문
Algo b = new Algo(); // 오류
Algo c = Algo.getInstance(); // 정상 작동
System.out.println(c.x); // 정상 작동
}
}
LIST