본문 바로가기
Lecture

코드 유지보수성과 확장성을 높이는 디자인 패턴

by Renechoi 2023. 7. 3.

패스트 캠퍼스 (The Red: 4천만 MAU를 지탱하는 서비스 설계와 데이터 처리 기술 by 카카오페이지 기술전략이사 윤진석) 필기록입니다.


 

 

코드레벨에서의 확장성에 대해 알아보자. 

 

프로그래밍 패러다임 

 

절차적 프로그래밍 -> 구조적 프로그래밍 -> 객체지향 프로그래밍 

 

 

디자인 패턴이란? 

베스트 프랙티스(best practice, 모범사례)의 일반화된 디자인 유형 

 

문제를 푸는 것을 패턴화했다고 할 수 있다. 

 

객체 지향 프로그래밍 이후의 점점 복잡해지는 소프트웨어를 해결하기 위해 등장. 

 

 

 

Object Composition

 

객 체 합성 구조를 통해 확장성 획득 

 

 

"Client"는 동기화 서비스인 SyncService 인터페이스만 바라보도록 한다. 

환경이나 요구사항에 동기화 메커니즘을 결정할 수 있도록 구체 클래스를 가지고 있는 형태 

 

이와 같은 Composition의 보조도구로서 Dependency Injection을 들 수 있다. 

 

public class MyThread { SyncService syncService;
Public void setSyncService(SyncService syncService) { this.syncService = syncService;
}
Public boolean syncWithOthers() {
syncService.startSync(); }
.. }

 

MyThread worker = new MyThread();
SyncService syncService = new RedisSyncService(); 
worker.setSyncService(syncService); // Dependency Injection

 

MyThread는 구체적인 클래스의 정체를 알지 못하지만 SyncService를 구현했기 때문에 문제 없이 RedisSyncService를 사용할 수 있다. 

 

이러한 예시가 잘 드러나는 사례가 간편 결제 서비스이다. 

 

 

이때 코드를 if 분기문으로 설정하였다면 간편결제를 추가 도입시 힘들어질 수 있다. 

 

이를 Object Composition을 이용하면 다음과 같이 설계할 수 있다. 

클라이언트는 Payservice를 보고 그 구현체들을 나눈다. PayService만 보더라도 구체클래스들을 알게된다. 

 

 

함수형 언어 

 

함수형 언어에 대해 살펴보자 

 

앞의 패러다임과는 다른 별개의 진화 과정을 거쳐왔다. 

 

수학의 표기방식과 비슷한 함수형으로 호출할 수 있는 프로그래밍 모델 

 

 

특히 멀티스레딩, 동시성 이슈 등을 강조하며 동시성 병렬 프로그래밍에 적합성을 증명하면서 등장. 

 

- 이해하기 쉽다

- 디버깅이 쉽다

- 내결함성(fault tolerance)이 높다

- 스레드 안정성이 높다 

 

 

함수형 프로그래밍에도 디자인 패턴이 필요한가? 

-> 객체 지향 프로그래밍과 같은 디자인 패턴은 아니지만 함수형 프로그래밍 디자인 패턴이 있다. 

 

 

 

커링 패턴 (Function Composition)

고차함수: 함수를 인자로 받거나 결과로 반환하는 함수 

 

인자값으로 X, Y가 들어가서 X+Y의 결과값을 리턴하는 것이 일반적일텐데 

커링 패턴을 사용하면 인자값으로 Function X가 들어감 

 

이를 테면 다음과 같다. 

 

var sum = function sum(x) {
	return function (y) {
    	return x+y;
    };
};

 

자바 8부터 등장한 콜백 패턴 같은 것들이 커링 패턴의 일정이다.

즉 함수의 조합으로 재사용하면서 논리를 표현하는 것 

 

클릭 이벤트를 예로 들어보자.

과거에는 각각 클릭 이벤트들을 구현해야 했지만 함수를 재활용할 수 있는 방식으로 변경되었다. 

 

 

 

요약

 

코드 유지보수성, 재사용성, 그리고 확장성을 위해서 디자인 패턴을 공부하자 

 

 

반응형