-
[Java] 자바의 접근 제한자, 싱글톤 패턴으로 객체 instance 생성하기Java 2023. 7. 22. 22:44728x90반응형
자바의 접근 제한자, 싱글톤 패턴으로 객체 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'Java' 카테고리의 다른 글
[Java] OOP 추상클래스와 인터페이스 (1) 2023.07.21 [Java] 상속(Inheritance)과 메소드 오버라이딩 vs 오버로딩 (2) 2023.07.20 [Java] 자바의 정수와 실수의 계산, 부동 소수점 방식 (0) 2023.07.17 [Java] 자바의 조건문과 반복문의 이해와 활용 (for, while, if, swtich) (2) 2023.07.16 [Java] 자바의 연산자 (곱셈, 나눗셈, 덧셈, 비트연산자, 삼항연산자) (2) 2023.07.14