21일차 강의 정리


1. 싱글톤 패턴(singleton pattern)

싱글톤패턴은 인스턴스가 사용될 때 똑같은 인스턴스를 만들어 내는 것이 아니라 

동일 인스턴스를 여러 곳에서 공유되고 사용할수 있는 것을 말한다.

싱글톤 패턴을 적용한 클래스는 단 하나의 객체만 만들어 질 수 있다.

반드시 디폴트 생성자를 구현 해야한다.

소스

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
class Am02{
    int a=1000;
    private static Am02 me;
 
    private Am02(){ // 반드시 디폴트 생성자를 구현
        System.out.println("생성자 호출");
    }
    
    public static Am02 func1(){
        if(me ==null){
            me = new Am02();    //생성자 한번만 호출
        }
        return me;
    }//func1() end
}//Am02 class end
public class Ex02 {
    public static void main(String[] args) {
        // 싱글톤패턴
        Am02 me = Am02.func1();        //me 객체생성
        Am02 me2 = Am02.func1();    //me2 객체생성
 
        me.a=me.a+100;                //me 객체의 a에+100
        System.out.println("me의 a= "+me.a);
        System.out.println("me2의 a= "+me2.a);    //me2 객체에 공유가 되서 me와 같은 결과
        
    }//main end
}//class end
cs

결과

소스2 (오버라이드!)

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Am03{
    Am03 me;
    int idx=1;
    public Am03(int a) {
        super();    //Object
        me = this;
        System.out.println("Am03 디폴트 생성자/a = "+a);
    }
    @Override
    public String toString() {
        System.out.println(idx);
        return ""+idx;
    }
}//Am03 class end
 
class Amm03 extends Am03{        //Am03상속
    int idx=2;
    public Amm03() {
        super(4);
        System.out.println("Amm03 디폴트 생성자");
    }
    public Amm03(int a) {
        this();
        System.out.println("Amm03 생성자/a ="+a);
    }
    public Am03 func01(){
        System.out.println("func01()");
        return super.me;        //객체출력은 toString을 출력..(오버라이드된 값 출력)
    };
    @Override
    public String toString() {        //Am03의 toString 오버라이드
        System.out.println("Amm03 idx -> "+idx);
        return ""+idx;
    }
    @Override
    public boolean equals(Object obj) {
        return idx==((Am03)obj).idx;
    }
}//Amm03 class end
 
public class Ex03 {
    public Ex03() {
        System.out.println("me create");
    }
    
    public static void main(String[] args) {
        Amm03 mm= new Amm03(7);
        System.out.println("--------------------------");
        Am03 mm2 = mm.func01();
        System.out.println("------------mm--------------");
        System.out.println("mm -> "+mm);
        System.out.println("------------mm2-------------");
        System.out.println("mm2 ->"+mm2);
        System.out.println("--------------------------");
        System.out.println(mm2.equals(mm));
    }//main end
}//class end
cs

결과2



'* Programming > JAVA' 카테고리의 다른 글

DAY22 컬렉션프레임워크 Vector  (0) 2016.08.03
DAY21 컬렉션 프레임워크  (0) 2016.08.03
DAY20 Calendar/Date/Random/Arrays Class  (0) 2016.08.02
DAY20 Object클래스,리플렉션  (0) 2016.08.02
DAY20 this/super  (0) 2016.08.02

+ Recent posts