CS정리 - 싱글톤 패턴

박경현·2023년 5월 28일
0

이번 주에 CS와 백엔드를 공부하는 스터디 모임에 들어가게 되었다
그러면서 최근에 조금 소홀했던 CS지식을 다시 꺼내서 공부해보려고 한다!!

그래서 오늘은 singleton을 정리하면서 관련 질문들 생각해보려고 한다!

싱글톤 패턴이란

말 그대로 single, 즉 하나의 객체 인스턴스만 만들어서
이걸 공유하면서 사용하는 디자인 패턴을 말한다!

사실 이렇게 말하면 처음 듣는 사람 입장에서 어려울 수 있어서
코드를 꼭 같이봐야하는 패턴이기도 하다!

static으로 객체를 하나 생성해둬서 이걸 다른 인스턴스들이 공유하는 방식이다!

싱글톤 가장 쉬운 코드

public class SingleTon {
	private static SingleTon instance = new SingleTon();
    
    private Singleton() {
    	// 생성자를 private으로 만들어서 외부 접근 막는다!
    }
    public static Singletone getInstance() {
    	// class내에서 만들어놓은 인스턴스를 반환해줌!!
    	return instance;
    }
    public void say () { System.out.println("hi, there"); }
}

싱글톤의 장점

두가지 장점이 있는데
1. 첫번째는 메모리 측면에서 객체가 하나여서 메모리를 크게 아낄 수 있습니다.

최초 한번의 new 연산자를 통해서 고정된 메모리 영억을 사용하기 때문에
추후 해당 객체에 접근해도 메모리 따로 사용 안합니다!

  1. 데이터 공유가 쉽고 빠릅니다.

    싱글톤은 static으로 객체 하나를 만들어 두고 공유해서 사용하는 방식이기 때문에
    다른 인스턴스들이 접근해서 사용하기 쉽습니다.

싱글톤의 단점

단점은 장점과 너무도 관련이 있는데 일단 동시에 다른 객체들이 접근하게 되면
동시성 문제가 일어날 수도 있습니다
그렇기에 설계와 구현을 하는데 있어 코드를 잘 짜야하는 부담이 있습니다

그리고 결합도가 너무 높아지게 되면 SOLID의 OCP원칙인 개방 폐쇄 원칙을 위반하게 됩니다!

싱글톤을 car클래스에 적용해보자!

car 객체를 다른 인스턴스가 사용하고 있을때 또 다른 인스턴스가 사용해버리는
동시성 문제를 막는 car 클래스를 설계했다!

public class CarClass {
	private static CarClass car = new CarClass();

	private CarClass() {}
	
	public static CarClass getCarClass(){
		return car;
	}

	private static boolean isUse = false;
	
	public static void drive() {
		System.out.println(“start driving”);
	}
	public static void parking() {
		isUse = false;
		System.out.println(“parking”);
	}

	public static boolean isEnableUseCar() {
		return !isUse;
	}
}

실제로 car객체를 부를때는 static으로 설정한 isUse를 통해 확인하고 사용하면 된다!

CarClass car = CarClass.getInstance();
if( car.isEnableUseCar() ) { car.drive(); }

if( car.isEnableUseCar() ) {
	car.drive();
}else {
	System.out.println(“+++++wati+++++”);
}
profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글