13일차 싱글톤과 final 그리고 패키지

쿠우·2022년 4월 8일
0

싱글톤(Singleton)

-하나의 애플리케이션 내에서 단 하나만 생성되는 객체

싱글톤을 만드는 방법

(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
	

final 필드와 상수(static final)

final 필드

(1)최종적인 값을 갖고 있는 필드 = 값을 변경할 수 없는 필드
(2)final 필드의 딱 한번의 초기값 지정 방법
-필드 선언 시
-생성자


나의 구글링 final과 static final 을 구분하여라
static final이 찐 상수다 모조리 대문자로 적어라


상수(static final)

(1)상수 = 정적 final 필드
-final 필드: 객체마다 가지는 불변의 인스턴스 필드
-상수(static final):
1)객체마다 가지고 있지 않음
2)메소드 영역에 클래스 별 로 관리되는 불변의 정적 필드
3)공용 데이터로서 사용

(2)상수 이름은 전부 대문자로 작성

(3)다른 단어가 결합되면 _ 로 연결

패키지(package)

패키지란?

(1)클래스를 기능별로 묶어서 그룹 이름을 붙여 놓은 것
-파일들을 관리하기 위해 사용하는 폴더(디렉토리)와 비슷한 개념
-패키지의 물리적인 형태는 파일 시스템의 폴더

(2)클래스 이름의 일부
-클래스를 유일하게 만들어주는 식별자
-전체 클래스 이름 = 상위패키지.하위패키지.클래스
-클래스명이 같아도 패키지명이 다르면 다른 클래스로 취급

(3)클래스 선언할 때 패키지 결정
-클래스 선언할 때 포함될 패키지 선언
-클래스 파일은(~.class) 선언된 패키지와 동일한 폴더 안에서만 동작
-클래스 파일은(~.class) 다른 폴더 안에 넣으면 동작하지 않음
업로드중..

import 문

(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();
		
	}

}
profile
일단 흐자

0개의 댓글

관련 채용 정보