Day16 - static 변수의 초기화 / 싱글톤

2021. 3. 9. 22:25JAVA 공부

이번에는 static 변수의 초기화 하는 방법에 대해 알아 봅시다

 

static 변수의 초기화

 

static 변수를 초기화 하는 방법은 2개가 있습니다.

1. 직접 초기화

2. static{} 을 통한 초기화

 

예제를 한번 보도록 하죠

먼저, 비교를 위해서 이렇게 static 변수와 일반 변수를 만들어 줍시다.

 

직접초기화 를 알아보죠

직접초기화는, 클래스에서 선언할때, 바로 초기화 해주는 겁니다

static{}을 통한 초기화 를 알아보죠

static { } 을 쓰고 중괄호{} 안에 초기화 해주면 됩니다.

static 은 단 1번만 실행이 됩니다. 그런데 사용은 잘 안하고, 직접초기화를 더 많이 사용한다고 합니다.

그래서 Computer 클래스는 이렇게 만들어 주었고, main 에서 확인해 봅시다

순서를 보면, 생성자보다, static 초기화 가 먼저 일어난걸 확인 할 수 있죠?

구조를 보면, 실행이 될 때, static 으로 선언된 변수, 메서드 등이 먼저 실행이 되서 메모리에 할당이 된 후에 다른 클래스나 일반변수들이 실행이 된다고 합니다.

 

이걸 보면, 따로 객체를 생성하지 않아도, static{} 이 실행된 걸 확인 할 수 있죠?

 

싱글톤

이제 싱글톤에 대해서 알아 봅시다.

싱글톤은 객체가 1개만 존재하는 패턴 입니다

즉. 객체를 1 개 이후로는 더 이상 만들 수 없습니다.

왜 이런게 필요하냐구요?

 

예를 들어서.... 인터넷에 접속했을 때, 사람들이 많이 몰리면 로딩 속도가 느려지는 거 겪어본 적 있으신가요?

그런데 그 때, 새로고침 엄청 연타하시는 분들 계시죠?

그러면 100번 눌렀다고 생각 해봅시다.

그러면, 객체가 100번 생성이 되는거에요

그런데, 그걸 1명이 아니라 10명 100명 이 했다고 생각해 봅시다.

그럼 객체가 1000개 , 10000개 가 생성이 됩니다. 그러면 굉장히 많은 메모리가 필요하겠죠? 그러다가 터지고....

그래서 이런걸 방지하기 위해서 객체를 1개만 만드는 겁니다.

 

싱글톤 패턴은 static 을 이용해서 만들 수가 있는데요

1. 단 1개의 객체 -> static 변수

2. 이미 만들어진 1개의 객체를 변경하지 못하도록 private 처리

3. 생성자를 호출해서 객체를 만들지 못하도록 생성자 private 처리

4. 1개의 객체를 다른 곳에서 쓸 수 있도록 getter 생성

 

이렇게 싱글톤패턴으로 만든 클래스를 사용해 봅시다

사용을 위해서 Singleton클래스에 멤버변수와 메서드를 만들어 줄게요

그 다음 main 에서 어떻게 사용 하는지 한번 봅시다

이렇게 사용하려고 보니까 오류가 나는걸 확인할 수 있죠?

하나만 만들려고 해도 오류가 납니다.

왜냐? 생성자가 private 처리 되어 있기 때문이에요

그러면 어떻게 사용하냐?

이렇게 사용합니다.

결국 getInstance() 도 static이죠? 그렇기 때문에 따로 객체를 생성해 줄 필요는 없습니다.

그리고 반환되는 instance는 Singleton의 객체죠? 그렇기 때문에 Singleton 을 이용해 instance를 저장 할 수 있습니다.

s1과 s2 는 각각 instance를 반환해서 저장했으니까 같겠죠?

s1 의 변수 s 를 변경해주었는데.... s2 의 s 도 바뀐 걸 확인 할 수 있습니다.

즉. 객체가 1개 인 겁니다. (같다)

 

이렇게 static 변수의 초기화와 싱글톤 패턴에 대해 알아 보았습니다

 

고생하셨습니다

'JAVA 공부' 카테고리의 다른 글

Day16 - abstract  (0) 2021.03.09
Day16 - final  (0) 2021.03.09
Day16 - static의 사용  (0) 2021.03.09
Day15 - instanceof  (0) 2021.03.08
Day15 - 다형성이 필요한 이유 / 메서드  (0) 2021.03.08