본문 바로가기

백엔드개발자 준비하기

[백엔드개발자 준비하기] 싱글톤

싱글톤
생성자가 프라이빗이다
바깥에서 생성이 불가능 함

사용하고 싶은 클래스내부의 변수 및 클래스 생성자를 전부 프라이빗으로 설정하고 게터를 퍼블릭 스태틱 메소드로 만든 후 변수를 반환해주면 싱글톤이다
스태틱이므로 외부에서 불러도 알아서 불러짐

di : 의존성 주입

[예시]

 

[A 클래스]

public class A {
	
	private static A instance = null;

	private Student[] students;
	
	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) {
			System.out.println(student);
		}
		System.out.println();
	}
}

[B 클래스]

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 클래스]

public class C {
	
	public void showAll() {
		A.getInstance();
	}
}

[Main]

public class Main {

	public static void main(String[] args) {
		
		A a = A.getInstance();
		B b = new B();
		C c = new C();
		
		for(int i = 0; i < 4; i++) {
			b.insertStudent();
		}
		
		System.out.println("C에서 학생 전부 출력");
		c.showAll();
	}
}