728x90
목차
1. 싱글톤
■ 싱글톤이란?
- 스태틱 키워드를 활용함
- 싱글톤은 하나만 존재해야 하기 때문에 생성자의 접근지정자를 private로 하여 외부에서 호출 불가하도록 함
- 싱글톤으로 생성된 객체는 모든 곳에서 접근 가능
- 하나의 객체를 공유할 때 사용
2. 예시
■ A
package j17_스태틱.싱글톤;
public class A {
private Student[] students;
private static A instance = null;
private A() {
students = new Student[3];
}
// 첫번째 호출 때 자기자신을 생성
public static A getInstance() {
if (instance == null) {
instance = new A();
}
return instance;
}
public void addStudent(Student student) {
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
students[i] = student;
return;
}
}
System.out.println("더 이상 학생을 추가할 수 없습니다.");
System.out.println();
}
public void showStudents() {
for (Student student : students) {
// Null을 참조할수 없어서 toString을 여기선 사용불가
System.out.println(student);
}
System.out.println();
}
}
■ B
package j17_스태틱.싱글톤;
import java.util.Scanner;
public class B {
public void insertStudent() {
Scanner scanner = new Scanner(System.in);
System.out.print("학생 이름 : ");
String name = scanner.nextLine();
Student student = new Student(name);
A.getInstance().addStudent(student);
A.getInstance().showStudents();
}
}
■ C
package j17_스태틱.싱글톤;
public class C {
public void showAll() {
A.getInstance().showStudents();
}
}
■ Student
package j17_스태틱.싱글톤;
public class Student {
private static final int CODE = 20230000;
// auto_increment
private static int ai = 1;
private int studentCode;
private String name;
public Student(String name) {
studentCode = CODE + ai;
ai++;
this.name = name;
}
@Override
public String toString() {
return "Student [studentCode=" + studentCode + ", name=" + name + "]";
}
}
■ Main
package j17_스태틱.싱글톤;
public class Main {
public static void main(String[] args) {
B b = new B();
C c = new C();
for (int i = 0; i < 4; i++) {
b.insertStudent();
}
System.out.println("c에서 학생 전부 출력");
c.showAll();
}
}
■ KIA
package j17_스태틱.싱글톤;
public class KIA {
// 유일한 객체를 만들며 어디서든 사용 가능
private static KIA instance = null;
private KIA() {
}
// 생성자가 private이라서 외부에서 생성 불가
// 싱글톤 만드는 형식
public static KIA getInstance() {
// 처음 호출 시 생성 후 그 후로는 생성하지 않음
if (instance == null) {
instance = new KIA();
}
return instance;
}
public void printCompanyName() {
System.out.println(getClass().getSimpleName());
}
}
■ KiaMain
package j17_스태틱.싱글톤;
public class KiaMain {
public static void main(String[] args) {
KIA kia = KIA.getInstance();
kia.printCompanyName();
}
}