간단 지식/Java

10. 접근제한자(public, protected, default, private)와 싱글톤

납작한돌맹이 2020. 6. 21. 04:54
반응형

여러 패키지, 클래스를 이용한 프로그래밍을 하다보면 클래스 외부로부터의 접근을 제한할 필요가 느껴진다. 이 문제를 해결해주는건 바로 접근제한자들이다.

접근제한자 적용가능한 대상 외부에서 접근가능한 클래스 범위 외부에서 호출가능한 생성자 범위
public 클래스, 필드, 생성자, 메소드 모든 외부에서 접근 가능 모든 패키지에서 호출 가능
protected 필드, 생성자, 메소드 같은 패키지의 클래스 또는 자식클래스에서만 접근 가능 같은 패키지의 클래스 또는 자식클래스에서만 호출 가능
default 클래스, 필드, 생성자, 메소드 같은 패키지인 클래스에서만 접근가능 같은 패키지의 클래스에서만 호출가능
private 필드, 생성자, 메소드 모든 외부에서 접근 불가능 외부에서 객체 생성 불가능

클래스에 적용가능한 제한자는 public과 default으로, 선언방식은 다음과 같다.

public -> public class 클래스명 { ... }

default -> class 클래스명 { ... } 

 

필드와 메소드에도 접근제한자를 적용할 수 있는데 선언방식은 다음과 같다.

(public/protected/default/private)(static) 타입 (필드/메소드(){ ... })


OOP에 대해 공부하다보면 Signleton이란 것을 알게 된다. 싱글톤은 단 하나만 생성되는 객체를 말한다. 따라서 외부에서 생성자를 호출할 수 없게 private을 생성자 앞에 붙여줘야한다. 클래스 내부에서는 자기 자신의 객체를 생성할 수 있는데, 이때 외부에서 필드값을 수정하지 못하도록 타입 앞에 private을 붙여줘야한다. 외부에서 객체를 얻을 수 있는 유일한 방법은 메소드의 리턴을 이용하는 방법이다. 아래 코드에 대하여 외부 클래스에서 Test obj = Test.getInstance(); 를 하면 객체를 얻을 수 있으며, 싱글톤이므로 리턴되는 객체는 항상 동일하다.

public class Test{
    private static Test singleton = new Test();   ---- 클래스 객체 생성
    
    private Test(){}
    
    static Test getInstance(){   ---- 정적필드가 참조하는 클래스 객체 리턴
    	return singleton;
    }
}

 

 

 

(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )

반응형

'간단 지식 > Java' 카테고리의 다른 글

12. 상속  (0) 2020.06.25
11. Getter & Setter  (0) 2020.06.22
09. Package와 import  (0) 2020.06.21
08. 정적멤버(static)와 final필드와 상수  (0) 2020.06.20
07. 클래스 - 필드, 생성자, 메소드  (0) 2020.05.29