본문 바로가기

프로그래밍/Java

Java_템플릿 메서드 패턴, 싱글톤 패턴, 빌더 패턴

반응형

템플릿 메서드 패턴

: 추상 클래스와 추상 메서드를 이용해 코드 중복을 줄이고 재사용성을 높일 수 있다.

 

Teacher 클래스

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
package ch01;
 
abstract class Teacher {
    
    public void start_class() {
        inside();
        attendance();
        outside();
        teach();
    }
 
    private void inside() {
        System.out.println("선생님이 강의실로 들어온다.");
    }
 
    private void attendance() {
        System.out.println("선생님이 출석을 부른다.");
    }
 
 
    private void outside() {
        System.out.println("선생님이 강의실을 나간다.");
    }
    
    abstract void teach();
}
 
class Korean_Teacher extends Teacher{
 
    @Override
    void teach() {
        System.out.println("국어를 수업합니다.");
    }
    
}
 
class Math_Teacher extends Teacher{
    
    public void teach() {
        System.out.println("수학을 수업합니다.");
    }
}
 
class English_Teacher extends Teacher{
    
    public void teach() {
        System.out.println("영어를 수업합니다.");
    }
}
cs

 

MainTest

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
package ch01;
 
public class MainTest {
 
    public static void main(String[] args) {
        Korean_Teacher kr = new Korean_Teacher();
        Math_Teacher mt = new Math_Teacher();
        English_Teacher en = new English_Teacher();
        
        kr.start_class();
        System.out.println("--------------");
        mt.start_class();
        System.out.println("--------------");
        en.start_class();
    }
 
}
 
결과 
선생님이 강의실로 들어온다.
선생님이 출석을 부른다.
선생님이 강의실을 나간다.
국어를 수업합니다.
--------------
선생님이 강의실로 들어온다.
선생님이 출석을 부른다.
선생님이 강의실을 나간다.
수학을 수업합니다.
--------------
선생님이 강의실로 들어온다.
선생님이 출석을 부른다.
선생님이 강의실을 나간다.
영어를 수업합니다.
cs

 

 

싱글톤 패턴

: 객체를 생성할 때마다 메모리 영역을 할당받아야 하는데 new를 통해 객체를 한 번만 생성해서 메모리 낭비를 방지한다.

 

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
package ch01;
 
// DBHelper 쓸 때 썼던 방식으로 하면 됨
public class Singleton {
    private static Singleton singleton = new Singleton();
    
    private Singleton() {
        
    }
    
    public static Singleton getInstance() {
        return singleton;
    }
    
    public void say() {
        System.out.println("hi");
    }
    
    public static void main(String[] args) {
        Singleton.getInstance().say();
    }
}
 
결과 
hi
cs

 

 

빌더 패턴

: 생성자 오버로딩을 할 때 새롭게 추가되는 변수 때문에 모든 코드를 수정하지 않아도 된다.

또한, 매개변수가 많아도 호출하여 값을 넣을 수 있으니 코드의 가독성이 높아진다.

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
package ch01;
 
public class Todo {
 
    // 빌더 패턴
    private String content;
    private int complete; // 1 완료, 0 미완료
 
    // 1. 기본 생성자 재정의
    private Todo() {
    }
 
    public static class MyBuilder {
 
        private String content;
        private int complete;
 
        // this!
        public MyBuilder setContent(String content) {
            this.content = content;
            return this;
        }
 
        public MyBuilder setComplete(int complete) {
            this.complete = complete;
            return this;
        }
 
        // 핵심 !!
        // 매개변수를 편하고 명확하게 쓸 수 있음.
        public Todo build() {
            Todo todo = new Todo();
            // Todo 변수 content = Build 변수 content;
            todo.content = content;
            todo.complete = complete;
            return todo;
        }
    }
 
    // main 함수
    public static void main(String[] args) {
 
        Todo todo1 = new MyBuilder().setComplete(1).build();
//        Todo todo2 = new MyBuilder().setContent("잠자기"); // 오류
        Todo todo3 = new MyBuilder().setComplete(0).setContent("청소하기").build();
 
    } // end of main
}
 
cs
반응형

'프로그래밍 > Java' 카테고리의 다른 글

Java_스트림(Stream)  (0) 2023.04.09
Java_어댑터 패턴  (0) 2023.03.27
Java_람다식(Lambda Expression)  (1) 2023.03.22
Java_소켓(Socket) 통신  (0) 2023.03.04
Java_Input/Output 스트림(Stream)  (0) 2023.03.02