Java

[Java] 자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기

3o14 2023. 7. 22. 22:44
728x90
반응형

 

자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기

 

🍊 접근 제한자

자바(Java)에서는 접근 제한자(access modifier)를 사용하여 클래스, 메서드, 필드, 생성자 등의 멤버들에 대한 접근 범위를 지정할 수 있습니다. 자바에서 사용할 수 있는 네 가지 접근 제한자는 다음과 같습니다.

  1. public: 가장 넓은 범위의 접근 제한자입니다. public으로 선언된 멤버는 모든 곳에서 접근할 수 있습니다. 다른 패키지에서도 접근이 가능합니다.
  2. protected: protected로 선언된 멤버는 같은 패키지 내에서는 접근 가능하며, 다른 패키지의 하위 클래스에서도 접근 가능합니다.
  3. default (package-private): 접근 제한자를 별도로 지정하지 않은 경우를 default 접근 제한자라고 합니다. 같은 패키지 내에서만 접근이 가능하고, 다른 패키지에서는 접근할 수 없습니다.
  4. 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