분류 전체보기(95)
-
[독서 - 개발] 객체지향 시스템 디자인 원칙 (Simple Object Oriented Design)
[독서] 객체지향 시스템 디자인 원칙 (Simple Object Oriented Design) - 마우리시오 아니체 지음교보문고서문프론트엔드 개발자로 공부를 하면서 객체지향 프로그래밍을 적용하여 유지보수와 확장성을 높이는 방법을 고민하게 되었다.이 책은 백엔드를 기반으로 하여 (예제 코드가 Java 기반의 pseudo code로 작성되어 있음) 객체지향 시스템 디자인 원칙을 설명하고 있지만, 프론트엔드 개발자에게도 많은 도움이 될 것이라 생각되어 읽게 되었다.책 소개명확하고 간결한 객체지향 시스템 디자인 원칙을 제시하는 책이다. 6가지 원칙을 통해 유지보수성과 확장성을 높이는 방법을 예제와 함께 설명한다.코드를 작게 유지하는 방법객체의 일관성을 유지하는 방법의존성을 적절하게 관리하는 방법추상화를 이해하고..
2025.09.14 -
[Functional Programming] 부록: 지연 평가 사용 사례
함수형 프로그래밍의 핵심 개념 중 하나는 지연 평가(Lazy Evaluation) 이다.데이터를 즉시 계산하지 않고, 필요할 때 평가(evaluation)하는 전략이다.1. 지연 평가는 왜 필요한가메모리 효율 형상성능 최적화무한 데이터 스트림 안전하게 가능조건에 따라 조기 중단 가능(take(n), find(item))2. Javascript에서 지연 평가JS에서는 Array.map, Array.filter는 즉시 평가(eager evaluation)이다.[1, 2, 3, 4] .filter(x => x % 2 === 0) // → 즉시 실행 .map(x => x * 10); // → 즉시 실행3. 지연평가 이용 사례3.1. 무한 숫자 스트림에서 100번째 짝수 찾기func..
2025.04.26 -
실전으로 배우는 전략 패턴 (Strategy Pattern) – 트레이딩 봇에서 OOP 활용하기 w.Python
전략 패턴이란?전략 패턴(Strategy Pattern)은 알고리즘(전략)의 동적 교체를 가능하게 해주는 객체지향 디자인 패턴입니다.행동(Behavior)을 캡슐화하고, 런타임 시에 객체에 전략을 주입해 변경 가능한 유연한 구조를 만들 수 있도록 도와줍니다.“변화하는 부분을 분리하고, 고정된 부분은 그대로 두자”는 OOP 원칙의 대표 사례입니다.https://github.com/99mini/trading 에서 소스코드를 확인할 수 있습니다.구조 요약trading-bot/├── .venv/ # 가상환경├── .gitignore├── requirements.in # 의존성 명시├── requirements.txt # 고..
2025.04.25 -
[Functional Programming] 4장: 고급 이터러블 함수 구현
property get lengthclass Fx implements Iterable { /** * @description evaluates the iterable and returns the length of the array (O(n)) * @returns {number} the length of the array */ get length(): number { return this.toArray().length; }}Fx 클레스에 length 프로퍼티를 추가합니다. length 프로퍼티에 접근하게 되면 평가가 진행되어 O(n)의 시간 복잡도를 가지게 됩니다.왜 O(n)의 시간복잡도를 유지하는가?github copilot의 코드리뷰입니다.src/Fx.ts:62Using toArra..
2025.04.24 -
[Functional Programming] 3장: group 함수와 Fx 클래스 분리
이번 장에서는 함수형 유틸리티의 대표적인 고급 함수 중 하나인 group 함수를 구현하고,기존에 하나로 묶여 있던 Fx 클래스와 각 함수들을 모듈 단위로 분리하는 리팩토링을 진행했습니다.1. group 함수란?group은 주어진 키 생성 함수에 따라 데이터를 그룹핑하여 Map 형태로 반환하는 함수입니다.기본적으로 다음과 같은 역할을 수행합니다.group([{ age: 20 }, { age: 30 }, { age: 20 }], x => x.age)// Map {// 20 => [ { age: 20 }, { age: 20 } ],// 30 => [ { age: 30 } ]// }함수형 프로그래밍에서는 reduce를 사용해서 구현할 수도 있지만,이번에는 이터러블 기반 구현 + 타입 안정성을 고려해 gr..
2025.04.23 -
[Functional Programming] 2장: iterator 함수 range 구현하기
함수형 유틸리티를 만들 때 빠질 수 없는 기본 도구 중 하나는 바로 range입니다.range는 원하는 숫자 범위를 순차적으로 생성해주는 반복기(iterator)이며, 지연 평가와 매우 잘 어울리는 함수입니다.이 장에서는 TypeScript에서 제너레이터와 함수 오버로드를 이용해 range 함수를 구현하고, 이를 테스트하는 과정을 설명합니다.range 함수란?range는 Python을 비롯한 많은 함수형 언어에서 기본 제공되는 기능입니다. range(5) → [0, 1, 2, 3, 4]range(2, 5) → [2, 3, 4]range(0, 10, 2) → [0, 2, 4, 6, 8]range(5, 0, -1) → [5, 4, 3, 2, 1]이러한 형태를 TypeScript에서 구현하면서도 이터러블을 ..
2025.04.21