[kosta] JAVA 7일차

cokesh·2022년 4월 27일
0

kosta

목록 보기
5/9
post-thumbnail

싱글톤

전체프로그램에서 단 하나의 객체만 만들도록 보장해야 할 때 사용함.
단 하나만 생성된다고 해서 싱글톤이라고 한다.
1. 생성자를 호출한 만큼 객체가 생성되기 때문에 클래스 외부에서 new연산자로 생성자를 호출할 수 없도록 막아야 한다.
2. 생성자를 외부에서 호출할 수 없도록 private 접근 제한자를 붙인다.
3. 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해서 초기화한다,
4. 정적필드 또한 private
5. 외부에서 호출할 수 있는 정적메소드인 getInstance()를 선언 - 자신의 객체를 리턴함.

public class Singleton{
	private static Singleton singleton = new Singleton();
    
    private Singleton(){}
    
    static Singleton getInstance() {
    	return singleton;
    }
}

final필드와 상수

final이란? 최종적인 필드란 뜻이다. 프로그램 실행 도중에 수정할 수 없다는 것이다.

final 타입 필드[=초기값];

생성자는 final필드의 최종 초기화를 마쳐야 하는데 만약 초기화가 되지 않은 필드를 그대로 남겨두면 컴파일 에러가 발생한다.

주민등록필드는 한번 값이 저장되면 변경할 수 없도록 final 필드로 선언함.

final String registerNum;

final 필드를 상수라고 부르지 않는 이유?
final 필드는 객체마다 저장되고 생성자의 매개값을 통해서 여려가지 값을 가질수 있기 때문이다.
상수는 static이면서 final이어야 한다.
static final 필드는 객체마다 저장되지 않고 클래스에만 포함된다. 한번 초기값이 저장이 되면 변경할 수 없다.
초기값이 단순 값이라면 선언시에 주는 것이 일반적이다.
하지만 복잡한 초기화일 경우 정적블록에서도 할 수 있음.

static final 타입 상수;
static {
	상수 = 초기값;
}

패키지

패키지는 클래스를 컴파일하는 과정에서 자동적으로 생성되는 폴더이다.
컴파일러는 클래스에 포함되어 있는 패키지 선언을 보고 파일 시스템의 폴더로 자동 생성시킴.

패키지를 선언하는 방법: package 상위패키지.하위패키지;

패키지이름이 중복될 가능성이 있기 때문에 흔히 회사의 도메인 이름으로 패키지를 만든다.
도메인 이름으로 할 때는 도메인 이름의 역순으로 패키지이름을 지어준다.
com.lg.projectname

다른 패키지에 속하는 클래스들을 사용하가 위한 두가지 방법이 있다.
1. com.hankook.Tire tire = new com.hankook.Tire();
2. import com.hankook.Tire; or import com.hanKook.*;

주의할 점은 패키지 이름 전체를 기술해야 하는 경우가 있는데 서로 다른 패키지에 동일한 클래스 이름이 존재하고, 두 패키지가 모두 import되어 있을 경우이다.

접근제한자

객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 해야함.
접근제한자는 public, protected, default, private 가 있다.

profile
개발 공부로그~

0개의 댓글