오늘은 Static 변수와 Singleton에 대해 알아보았다.
Static변수는 처음 프로그램이 로드 될 때 데이터 영역에 생성된다.
인스턴스의 생성과 상관없이 사용할 수 있기때문에 클래스 이름으로 참조한다.
클래스변수, 정적변수라고도 한다.
프로그램에서 변수의 유형은 아래와 같이 세가지 종류가 있다.
지역변수(로컬변수)는 함수 내부에 선언되며,
멤버변수(인스턴스 변수)는 클래스 멤버 변수로 선언한다,
Static 변수(클래스 변수)는 static 예약어를 사용하여 클래스 내부에 선언한다.
싱글턴 패턴에 대해서도 알아보았다.
생성자는 private으로 하며
static으로 유일한 객체를 생성한다.
외부에서 유일한 객체를 참조할 수 있는 public static get()메서드를 구현한다.
<추가공부>
☞ 싱글톤 클래스란
객체지향 프로그래밍에서 싱글톤 클래스는 한번에 하나의 객체(Instance)만 가질 수 있는 클래스입니다.
싱글톤 클래스의 객체를 만들때 변수는 첫번째 객체를 가리킵니다.
따라서 어떤 객체를 통해 클래스 내부 변수를 수정하면 생성된 단일 객체의 변수에 영향을 미칩니다.
☞ 싱글톤 클래스를 만드는 방법
1. 생성자를 private으로 만듭니다.
2. 이 싱글톤 클래스를 반환 유형으로 한 정적 메소드를 작성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class MySingletonClass { private static MySingletonClass single_instance = null;
private MySingletonClass() {
}
public static MySingletonClass getInstance() { if(single_instance == null) { single_instance = new MySingletonClass(); }
return single_instance; } } |
cs |
☞ 일반 클래스 vs 싱글톤 클래스
일반 클래스의 경우 클래스를 정의할때 생성자를 사용하는 반면, 싱글톤 클래스의 경우 getInstance() 메소드를 사용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
public class Main { public static void main(String[] args) { MySingletonClass singleton1 = MySingletonClass.getInstance(); MySingletonClass singleton2 = MySingletonClass.getInstance(); MySingletonClass singleton3 = MySingletonClass.getInstance();
System.out.println(singleton1.s); System.out.println(singleton2.s); System.out.println(singleton3.s);
singleton1.s = "Change String";
System.out.println(singleton1.s); System.out.println(singleton2.s); System.out.println(singleton3.s); } } class MySingletonClass { private static MySingletonClass single_instance = null;
public String s;
private MySingletonClass() { s = "MySingletonClass"; }
public static MySingletonClass getInstance() { if(single_instance == null) { single_instance = new MySingletonClass(); }
return single_instance; } } |
cs |
4번째 줄에 MySingletonClass라는 제가 정의한 싱글톤 클래스의 객체(인스턴스)를 3개 만드는 것을 볼 수 있습니다.
일반 클래스의 경우 class a = new class(); 이런식으로 객체를 생성하는것과 달리
싱글톤 클래스의 경우 getInstance() 메소드를 호출하여 객체를 생성하는 모습입니다.
8,9,10번 줄의 결과는 어떻게될까요?
아시다시피 s는 "MySingletonClass"라는 문자열입니다. 이 문자열이 3번 출력됩니다.
12번째 줄에서 첫번째 싱글톤 객체의 s를 "Change String"으로 변경했습니다.
그 다음에 출력을 해보면 어떤 결과가 나올까요?
첫번째 싱글톤 객체의 s만 바꿨기 때문에
ChangeString
MySingletonClass
MySingletonClass
가 나올것 같지만 아닙니다!!
싱글톤 클래스는 위에서 말씀드렸다시피 여러 객체를 생성해도 하나의 객체만 가리키고 있기 때문에
MySingletonClass
MySingletonClass
MySingletonClass
의 출력 결과를 가집니다.
singleton1, singleton2, singleton3 모두 하나의 클래스 객체를 가리키고 있는것이죠.
출처: https://yeolco.tistory.com/122
패스트캠퍼스 강의:
'언어공부 > JAVA&SPRING' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 14회차 미션 (0) | 2020.08.23 |
---|---|
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 13회차 미션 (0) | 2020.08.22 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 11회차 미션 (0) | 2020.08.20 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 10회차 미션 (0) | 2020.08.19 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 9회차 미션 (0) | 2020.08.18 |
댓글