Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 독서일지
- 성수직장인
- IntelliJ
- 직장인
- 개발자
- 코딩
- 객체지향프로그래밍
- 성수
- 책너두
- Java
- JavaScript
- 독서
- JAVA개발자
- 성수볼거리
- 디자인패턴
- 깨끗한코드
- 상속
- 헤드퍼스트
- 성수핫플
- 객체지향
- 헤드퍼스트디자인패턴
- 오브젝트
- 직장인점심
- 성수맛집
- DesignPattern
- 클린코드
- docker
- Linux
- 주니어개발자
- 책읽기
Archives
- Today
- Total
닭발개발
[헤드퍼스트 디자인패턴] 25일차. 335-345pg 본문
728x90
25일차
헤드퍼스트 디자인패턴 [5주차_월요일]
335-345pg
요약
CHAPTER 08. 알고리즘 캡슐화하기 (feat. 템플릿 메소드 패턴)
- 서브클래스에서 언제든 필요할 때마다 알고리즘을 가져다가 쓸 수 있도록 캡슐화한다.
[ 자바 API 속 템플릿 메소드 패턴 ]
템플릿 메소드 패턴은 정말 많이 쓰이는 패턴이다. 왜냐하면 프레임워크를 만드는데에 아주 좋은 도구임. 프레임워크로 작업이 처리되는 방식을 제어하면서도 프레임워크에서 처리하는 알고리즘의 각 단계를 사용자가 맘대로 지정할 수 있다.
[ 템플릿 메소드로 정렬하는 법 (Arrays 클래스 속 템플릿 메소드) ]
- mergeSort() 메소드 : 템플릿 메소드
private static void mergeSort(Object src[], Object dest[], int low, int high, int off) {
// 많은 코드
for(int i = low; i < high; i++ {
// 템플릿 메소드를 완성하려면 compareTo() 메소드를 구현해야만 한다.
for(int j = i; j > low && ((Comparable)dest[j-1]).compareTo((Comparable)dest[j] > 0; j--) {
// Arrays 클래스에 이미 정의되어있는 구상 메소드
swap(dest, j, j-1);
}
}
}
- 오리를 정렬할 때 compareTo() 메소드를 써야한다.
- sort()만 쓰면 sort() 자체가 특정 슈퍼클래스에 정의되어 있는 게 아니라서 sort() 메소드가 내가 compareTo() 메소드를 구현했는지를 알아낼 수 있는 방법이 필요함.
- 이 문제를 해결하기 위해 Comparable 인터페이스 도입.
[ JFrame 속 템플릿 메소드 ]
- JFrame : 가장 기본적인 스윙 컨테이너
- JFrame의 update() 알고리즘은 paint() 메소드를 호출한다. 기본적으로 paint()는 아무일 도 안한다. 그냥 후크 메소드임
[ AbstractList ]
- ArrayList, LinkedList 같은 자바의 리스트 컬렉션은 리스트에서 필요한 기능을 구현해 주는 AbstractList 클래스를 확장한다.
- AbstractList에는 get()과 size() 추상 메소드에 의존하는 subList() 템플릿 메소드가 있다.
- 따라서 AbstractList를 확장해서 나만의 리스트를 만들 때는 이 2가지 메소드를 구현해야한다.
[ 전략패턴 vs 템플릿 메소드 패턴 ]
- 템플릿 메소드 패턴 : 알고리즘의 개요를 정의하는 일
- 전략패턴 : 클라이언트에게 객체 구성으로 알고리즘을 구현할지 말지 선택할 기회를 준다. 객체 구성을 사용하니 더 유연함.
728x90
반응형
'책책책 책을 읽읍시다‼ ver.개발 > [ 헤드퍼스트 디자인패턴 ]' 카테고리의 다른 글
[헤드퍼스트 디자인패턴] 27일차. 361-373pg (0) | 2023.06.01 |
---|---|
[헤드퍼스트 디자인패턴] 26일차. 346-360pg (2) | 2023.05.31 |
[헤드퍼스트 디자인패턴] 24일차. 317-334pg (2) | 2023.05.26 |
[헤드퍼스트 디자인패턴] 23일차. 305-316pg (0) | 2023.05.26 |
[헤드퍼스트 디자인패턴] 22일차. 294-304pg (0) | 2023.05.19 |