ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기
    Java 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
Designed by Tistory.