본문 바로가기

웹개발 - Back 관련/Architecture

(5)
[ GOF ] 팩토리 매서드 패턴 - Factory Method Pattern with Kotlin Topic =  팩토리 매서드의 의도와 개념 학습 후 예제 작성해보면서 정리해보기 🔑 Purpose팩토리 매서드 패턴은 객체 생성 로직을 추상화하여 작성하는 것으로 객체 생성에 대한 로직 정의와, 객체가 사용되는 로직을 분리한 것으로 SRP( 단일 책임 원칙)와 OCP( 개방/폐쇄 원칙 ) 를 따를 수 있게 된다. 💡 디자인 패턴들을 분리해서 이해하지 않기 → 싱글톤과 같은 디자인 패턴은 다른 패턴들을 보완하기도 하고, 탬플릿 매서드 패턴을 상위 구조로두고 객체 생성에 초점을 맞춘 하위 구조로 팩토리 매서드 구조를 이용할 수 있다.이 전 글에서 배운 탬플릿 매서드 패턴 ( 중복 알고리즘 분리하여 재사용 )과 상당히 유사한 구조로 이루어져 있다. 팩토리 패턴은 탬플릿 매서드 패턴의 응용 버전이기 때문이.. 2024. 9. 11. 22:48
[ GOF ] 전략 패턴 - Strategy Pattern with Koltin Topic =  Strategy 패턴의 의도와 개념을 학습하고 Template Method 패턴과 Strategy 패턴 차이 정리하기 🔑 Purpose전략 패턴 - 특정 알고리즘을 캡슐화하여서 Context 내에서 유연하게 알고리즘을 변경하여 사용할 수 있도록 하는 패턴  Strategy Pattern [ 상황 1 ]사용자들이 서비스를 이용하다가 악성 행위를 했을 때, 악성 유저 점수를 추가하고, 악성 점수 상향 처리에 걸린 시간을 로그로 남기고, 악성 유저 점수가 추가된 후에는 해당 회원의 악성 점수를 로그에 남긴다. [ ❌ Strategy 패턴 미적용 예시 ]private val logger =KotlinLogging.logger { }class User { private var count .. 2024. 9. 10. 18:36
[ GOF ] 탬플릿 메서드 패턴 - Template method with Kotlin Topic =  템플릿 메서드 패턴의 의도와 Kotlin 적용 예제 학습해보기 🔑Purpose변하는 것과 변하지 않는 것을 분리반복되는 공통 로직을 템플릿이라는 변하지 않는 뼈대로 정의해두고, 변하는 부분을 별도의 서브클래스로 정의하여 분리한다. 예시로 비교해보면서 학습하는 탬플릿 메서드 패턴 개념 fun main { fun algorithmA(){ val startTime = System.currentTimeMillis() // 알고리즘 풀이 val endTime = System.currentTimeMillis() val resultTime = endtime - startTime } fun algor.. 2024. 9. 9. 23:34
[ GOF ] 어댑터 패턴 - Adapter Pattern with Kotlin Topic =  어댑터 패턴의 의도와 Kotlin 예제로 실습해보기. 🔑 PurposeAdapter라는 중간 클래스를 통해 서로 다른 인터페이스를 가진 클래스들이 함께 작동할 수 있도록 하여 새로운 시스템을 도입하더라도 기존의 인터페이스를 변경하지 않고도 새로운 기능을 추가할 수 있도록 한다.   Adapter 패턴 개념 Adapter 패턴은 120V 돼지코 콘센트에 220V 플러그를 지닌 전자기기를 사용하기 위해 어뎁터를 사용하는 것과 같이 기존 클래스를 사용하고 싶지만, 그 인터페이스가 다른 코드와 호환되지 않을 때 사용할 수 있다. 즉, Client가 사용하고 있는 Target(120V 콘센트)에 호환되지 않는 Adaptee(220V 플러그)를 Target에 만족시키기 위해 Adapter를 사용하.. 2024. 9. 9. 20:43
[ GOF ] 반복자 패턴 - Iterator Pattern with Kotlin Topic =  반복자 패턴의 의도와 Kotlin 사용 방법 알아보기.PurposeIterator 인터페이스를 추상화 함으로 Array, List, Map 등 컬렉션 모두 동일한 방식으로 순회할 수 있도록 한다.반복문의 요소를 순회하는 방법을 캡슐화 하여 사용자는 각 요소에 대해 수행할 작업만 정의하면 된다. 예시로 비교해보면서 학습하는 반복자 패턴 개념 [ 반복자 패턴을 사용하지 않는 예시 ]val myArr = arrayOf(1,2,3,4,5)val myList = arrOf(1,2,3,4,5)for (i in 0 until myArr.size ) { println(myArr[i]) 특정 배열의 인덱스를 직접 접근하여 반복하는 방식으로, 직접 상태 변수 i를 관리한다,배열 순회 방식의 구현과, .. 2024. 9. 9. 12:40