퀴즈 피드백
public void setPoint(int p) {
if (p <= 0) {
p = 0;
}
this.point = p;
}
상수
final
import chapter06_3.group2.ClassC;
public class ClassMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassC classC1 = new ClassC();
}
}
public class ClassMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
chapter06_3.group2.ClassC classC1 = new chapter06_3.group2.ClassC();
// 파일 시스템에는 chapter06_3 / group 안에 ClassC 클래스
}
}
접근 제한 | 적용 대상 | 접근할 수 없는 클래스 |
---|---|---|
public | 클래스, 필드, 생성자, 메소드 | 없음 |
protected | 필드, 생성자, 메소드 | 자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
default | 클래스, 필드, 생성자, 메소드 | 다른 패키지에 소속된 클래스 |
private | 필드, 생성자, 메소드 | 모든 외부 클래스 |
생성자 범위 | 설명 |
---|---|
public | 클래스가 public일 경우 O, default일 경우 같은 패키지 내에서만 호출 가능 |
protected | 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 하고 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스면 생성자 호출 가능 |
default | 기본값 - 같은 패키지에서는 아무 제한 X, 다른 패키지에서는 생성자 호출할 수 없도록 한다. |
private | 동일 패키지, 다른 패키지 상관없이 생성자를 호출하지 못하도록 제한 -> 클래스 내부에서만 생성자를 호출하고 객체를 만들 수 있다 |
필드와 메소드의 범위 | 설명 |
---|---|
public | 클래스가 public일 경우 O, default일 경우 같은 패키지 내에서만 호출 가능 |
protected | 같은 패키지에 속하는 클래스에서 필드와 메서드를 사용할 수 있도록 하고 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스면 필드와 메서드 사용 가능 |
default | 기본값 - 같은 패키지에서는 아무 제한 X, 다른 패키지에서는 필드와 메서드 사용할 수 없도록 한다. |
private | 동일 패키지, 다른 패키지 상관없이 필드와 메서드를 사용하지 못하도록 제한 -> 클래스 내부에서만 사용 가능 |
클래스 안에 자신의 타입인 private static 필드를 선언하고, 객체를 생성해 초기화 한다.
-> 외부에서 필드에 접근하면 안되기 때문에 private, 이후에 static 메서드를 통해서 리턴해주어야하기 때문에 인스턴스가 아닌 static 필드 선언
private 생성자를 만든다
-> 생성자가 외부에서 호출되면 안되기 때문에
자기 자신의 객체를 리턴하는 getInstance라는 public static 메소드를 만든다.
-> getInstance라는 메소드는 외부에서 접근해서 호출할 수 있어야하고, 인스턴스를 만들지 않아도 접근할 수 있어야하기 때문에 public + static 메서드를 선언해준다.
+) 외부에서 객체를 얻는 유일한 방법은 getInstance()라는 메소드를 호출하는 방법이다.
+) getInstance는 단 하나의 객체만 리턴하기 때문에 여러번 호출해도 동일한 객체를 참조한다.
package chapter06_3.group1;
public class ClassB {
// 내부에서 private static 객체 생성 ->
private static ClassB classB = new ClassB();
// 이 후 static메서드 안에서 return 해주어야하므로 static, 필드에 접근못하게 하려면 private
// 1. 생성자 private -> 외부에서 new연산자로 새로 생성할 수 없게 만들기
private ClassB() {
}
// 3. 외부에서 접근해서 사용할 수 있도록(public, static) 내부에 만들어놓은 객체 리턴하는 메소드 생성
public static ClassB getInstance() {
// getInstance라고 보통 적음 (싱글톤이라는 걸 한눈에 알기 위해)
return classB;
}
}