반응형
여러 패키지, 클래스를 이용한 프로그래밍을 하다보면 클래스 외부로부터의 접근을 제한할 필요가 느껴진다. 이 문제를 해결해주는건 바로 접근제한자들이다.
접근제한자 | 적용가능한 대상 | 외부에서 접근가능한 클래스 범위 | 외부에서 호출가능한 생성자 범위 |
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 |