-하나의 애플리케이션 내에서 단 하나만 생성되는 객체
(1)외부에서 new 연산자로 생성자를 호출할 수 없도록 막기
-private 접근 제한자를 생성자 앞에 붙임
(2)클래스 자신의 타입으로 정적 필드 선언
-자신의 객체를 생성해 초기화
-private 접근 제한자 붙여 외부에서 필드 값 변경 불가하도록
(3)외부에서 호출할 수 있는 정적 메소드인 getInstance() 선언
-정적 필드에서 참조하고 있는 자신의 객체 리턴
-----------------------------------싱글톤 정리 -------------------------------------
package singletonex;
//특수한 기능을 수행하도록 클래스를 설계하는 패턴을 "설계패턴(design pattern)"
//대략 30가지가 있는데, 그 중에 하나가 바로 지금의 'Singleton Pattern' 이다.
// 이 singleton pattern 의 목적은, 오로지 단 한번 객체가 생성되어서, JVM이 죽을 때
// 계속 하나의 객체로만 유지되어야 할 이유가 있을 때 적용합니다.
public class Singleton {
// 핵심 -2
//private, public 같은 접근제한자는 , 클래스 내부에서는 아무런 효력이 없다!
private static Singleton singleton ;
//컴파일시 단 한번만 수행
static {
singleton = new Singleton();
} // static initializer
// 핵심 -1
//외부 클래스에서 임의로 객체를 생성하지 못하도록,
// private 생성자로 선언 -> new 생성자(); 구문이 성립되지 못함!(왜? 생성자가 안보이니까)
private Singleton() {;;} // default constructor
// 클래스의 필드인 singleton의 값을 반환
static Singleton getInstance() {
return singleton;
} // getInstance
}// end class
//나의 싱글톤 정리
// 1. Static 정적 필드를 생성한다. -- 변수는 외부에서 사용하면 값이 변하니까 은닉해놓는다.
// 2. 컴파일시 static 초기화블럭이 내부에서 객체 하나를 만들어 static 필드에 담아준다 . -컴파일시 단 한 번 실행
// 3. 객체는 따로 생성되면 안되니까 private로 생성자를 은닉해준다.
// 4. 그리고 외부에서 하나뿐인 객체의 주소를 가져갈 수 있는 정적 필드를 반환하는 메소드를 만든다
// -- static 정적메소드로 해놓아야 접근이 가능하다. (2번에 의해서)
--------------------------------싱글톤 기본코드 -------------------------------
package singletonex;
class MasterKey {
private static MasterKey key;
static{
key = new MasterKey();
}//static initializer
private MasterKey() {
;;
}// constructor
public static MasterKey getInstance() {
return MasterKey.key;
} //getInstance
}//end class
public class MasterKeyExample {
public static void main(String ... args) {
// MasterKey key = new MasterKey(); 생성자가 private여서 생성이 안된다!
for(int i = 0; i < 50; i++) {
System.out.println(MasterKey.getInstance());
}//for
}//main
} // end class
(1)최종적인 값을 갖고 있는 필드 = 값을 변경할 수 없는 필드
(2)final 필드의 딱 한번의 초기값 지정 방법
-필드 선언 시
-생성자
나의 구글링 final과 static final 을 구분하여라
static final이 찐 상수다 모조리 대문자로 적어라
(1)상수 = 정적 final 필드
-final 필드: 객체마다 가지는 불변의 인스턴스 필드
-상수(static final):
1)객체마다 가지고 있지 않음
2)메소드 영역에 클래스 별 로 관리되는 불변의 정적 필드
3)공용 데이터로서 사용
(2)상수 이름은 전부 대문자로 작성
(3)다른 단어가 결합되면 _ 로 연결
(1)클래스를 기능별로 묶어서 그룹 이름을 붙여 놓은 것
-파일들을 관리하기 위해 사용하는 폴더(디렉토리)와 비슷한 개념
-패키지의 물리적인 형태는 파일 시스템의 폴더
(2)클래스 이름의 일부
-클래스를 유일하게 만들어주는 식별자
-전체 클래스 이름 = 상위패키지.하위패키지.클래스
-클래스명이 같아도 패키지명이 다르면 다른 클래스로 취급
(3)클래스 선언할 때 패키지 결정
-클래스 선언할 때 포함될 패키지 선언
-클래스 파일은(~.class) 선언된 패키지와 동일한 폴더 안에서만 동작
-클래스 파일은(~.class) 다른 폴더 안에 넣으면 동작하지 않음
(1)패키지 내에 같이 포함된 클래스간 클래스 이름으로 사용 가능
(2)패키지가 다른 클래스를 사용해야 할 경우
-패키지 명 포함된 전체 클래스 이름으로 사용
-Import 문으로 패키지를 지정하고 사용
----------------------------------pakage 및 import 사용 -----------------------------------
package aaa; /// 어떤 패키지에 들어있는지 알려줌
import bbb.ccc.Tc; // bbb 폴더안에 > ccc폴더안에 Tb의 클래스에 접근할 수 있게 연결
public class Taaa {
public static void main(String[] args) {
Tc ex = new Tc();
}
}