반응형
목차
개요
카카오테크캠퍼스 백엔드 과정 주차 관련 공부내용
전략 패턴(Strategy pattern)
정의
- 알고리즘을 캡슐화하여 객체 간에 상호 교환 가능하게 만드는 디자인 패턴
- 여러 알고리즘을 정의하고, 이들을 추상화된 인터페이스로 구현한 후, 실행 중에 원하는 전략을 선택할 수 있다.
정렬 알고리즘 인터페이스를 예시로 들어봤다.
interface SortingStrategy {
void sort(int[] arr);
}
class BubbleSort implements SortingStrategy {
public void sort(int[] arr) {
// Bubble sort algorithm implementation
}
}
class QuickSort implements SortingStrategy {
public void sort(int[] arr) {
// Quick sort algorithm implementation
}
}
class SortingContext {
private SortingStrategy strategy;
public void setStrategy(SortingStrategy strategy) {
this.strategy = strategy;
}
public void sortArray(int[] arr) {
strategy.sort(arr);
}
}
위와 같이 순서가 존재하지 않고 필요한 요소를 선택하여 사용할 수 있는 방식이다.
템플릿 메서드 패턴(Template Method pattern)
정의
- 알고리즘의 구조를 정의하고, 하위 클래스에서 일부 단계를 재정의할 수 있게 하는 디자인 패턴
- 상위 클래스에서 알고리즘의 골격을 정의하며, 하위 클래스에서 구체적인 구현을 제공
- → 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현
- 코드의 흐름(시나리오)를 정의한다.
- 프레임 워크에서 기능구현을 위해 많이 사용하는 패턴이다.
데이터 파싱 추상 클래스를 만들어서 파일 형식마다 다른 메서드를 사용하는 템플릿 메서드 패턴을 사용했다.
abstract class DataParser {
// Template method
final void parseDataAndGenerateReport() {
//순서가 적용된 경우가 많다.
readData();
processData();
createReport();
}
abstract void readData();
abstract void processData();
void createReport() {
System.out.println("Report generated");
}
}
class CSVDataParser extends DataParser {
void readData() {
System.out.println("Reading data from CSV file");
}
void processData() {
System.out.println("Processing data from CSV file");
}
}
class XMLDataParser extends DataParser {
void readData() {
System.out.println("Reading data from XML file");
}
void processData() {
System.out.println("Processing data from XML file");
}
}
public class Main {
public static void main(String[] args) {
DataParser csvDataParser = new CSVDataParser();
csvDataParser.parseDataAndGenerateReport(); // CSV 파일에서 데이터를 읽고 처리한 후 보고서를 생성
DataParser xmlDataParser = new XMLDataParser();
xmlDataParser.parseDataAndGenerateReport(); // XML 파일에서 데이터를 읽고 처리한 후 보고서를 생성
}
abstact class의 메서드를 final public 옵션을 추가해준다면 다른 클래스에서 템플릿 메서드를 호출할 수 있게 되며, 하위 클래스에서는 오버라이드할 수 없게 된다.
'미사용 > KakaoTechCampus' 카테고리의 다른 글
MySQL기초[1]- 고전 3티어 구조 및 MySQL엔진 구성요소 (0) | 2023.06.14 |
---|---|
Java기초[10] 인터페이스 기본개념으로 알아보는 다형성 (0) | 2023.04.28 |
Java기초[8] 명시적&묵시적 형변환 (0) | 2023.04.28 |
Java기초[7] 자바에서의 상속 구현 (0) | 2023.04.28 |
[카테캠] 백엔드 과정 1기 웰컴키트(굿즈) 리뷰 (0) | 2023.04.18 |