-
미술과 객체지향 프로그래밍의 추상DEV 2024. 1. 27. 11:39
최초로 추상화를 그린 화가는 러시아 태생의 칸딘스키로 알려져 있다. 컴퓨터 사이언스에선 추상이란 개념을 누가 먼저 도입했는지는 알 수 없지만, 미술과 컴퓨터 사이언스에서 사용하는 추상이라는 개념은 모두 같은 단어를 사용한다. 영어는 abstract, 한자는 抽象(뺄 추, 코끼리 상) 미술과 프로그래밍에서 사용하는 추상이라는 개념은 서로 관계가 있는걸까? 미술 추상미술은 두 가지로 정의할 수 있다. 첫 번째는 미술가가 형상을 생략, 단순화, 변형시키거나 주관적인 색채를 사용한 미술을 의미한다. 두 번째는 형태로 나타낼 수 없는 것을 표현하거나, 감정, 느낌, 생각 등 눈에 보이지 않는 개념을 표현한 미술이다. 프로그래밍 프로그래밍 추상 또한 '사상'과 '일반화'라는 2가지 관점에서 정리된다. 사상은 복잡한..
-
추상 클래스, 인터페이스, 상속, 합성, 프록시/데코레이터 패턴 그리고 Spring AOPDEV 2024. 1. 20. 12:08
추상클래스와 인터페이스는 어떻게 다른가? 왜 상속보다는 합성(조합)을 사용하는가? 데코레이터 패턴, 프록시 패턴은 이들과 어떤 관계가 있는가? 추상 클래스 public abstract class Logger { private String name; private boolean enabled; private Level minPermittedLevel; //생성자 public void log(Level level, String msg) { ... doLog(level, message); } protected abstract void doLog(Level level, String msg); } public class FileLogger extends Logger { private Writer fileWrite..
-
심리적 안전과 지식공유, 강백호와 중경삼림DEV 2024. 1. 12. 22:36
지식은 형태는 없지만, 소프트 엔지니어링 조직의 가장 중요한 자산이기 때문에, 지식 공유야 말로 조직에 탄력을 불어넣어 변화에 직면했을 때 생존할 수 있도록 하는데 결정적인 역할. 어떻게 하면 조직원들이 개방적이고 정직한 지식 공유를 장려하는 문화를 만들 수 있을까? 지식은 무엇인가? 데이터는 사물이나 사건에 대한 묘사(description)이며, 가공되지 않은 상태의 사실(facts)이다. 그리고 특정한 목적을 위해 데이터가 처리되면(혹은 추상되면) 그 목적에 유용한 정보가 된다. 나아가 정보가 체계화되면 지식이 되며, 지식이 고도로 추상화되면 지혜가 된다. 知 - 알 지 知(지)라는 글자는 矢(화살 시)에 口(입 구)자를 합한 것 입(口)으로 말이나 의견이 화살(矢)처럼 정확하고 빠르게 전달되고 그것..
-
Dependency-Structure-Matrix & DDD & Layered-ArchitectureDEV 2024. 1. 8. 20:58
project 내부 Dependency를 파악해 높은 응집력, 낮은 결합도를 가진 코드를 유지하는 방법과 도구를 DDD 관점에서 알아보자. 일반적으로 코드를 이해하는 데 개발 시간의 60%를 사용 - https://ieeexplore.ieee.org/document/7997917 코드 규모가 커지면 복잡도도 올라가기 때문에 코드 시각화, 코드 출력, 스크래치 리팩터링 등의 도움을 받을 수 있다. 코드 시각화 Dependency structure matrix(DSM) 프로젝트 내 dependency 파악하는 방법 중 하나 열을 기준으로 dependency 파악 다이어그램에서 dependency는 화살표가 들어오는 것으로 파악 task1은 task3에 dependency(의존성)을 가진다. - task3이 ..
-
빈약한 도메인 모델, 풍부한 도메인 모델, DDD 그리고 캡슐화DEV 2023. 12. 31. 20:56
대부분의 비즈니스 시스템은 MVC 아키텍처를 사용하고, 빈약한 도메인 모델(anemic domain model)을 기반으로 작성되고 있다. 이 개발 방식(빈약한 도메인 모델을 기반으로 한 MVC)은 객체지향 프로그래밍 스타일에 위반될 뿐 아니라, 철저하게 절차적 프로그래밍 스타일에 해당하기 때문에 안티 패턴으로 간주되기도 한다. The anemic domain model is described as a programming anti-pattern where the domain objects contain little or no business logic like validations, calculations, rules, and so forth. The business logic is thus baked..
-
LLM기반 chatBot 설계, 구조 변화DEV 2023. 12. 29. 21:25
많은 곳에서 LLM을 활용한 챗봇 서비스가 만들어지고 있다. langchain 코드 예제를 통해 챗봇 개발의 설계, 구조의 흐름이 어떻게 변하고 있는지 조사해 보자. 1. LLM api만을 사용 단순히 LLM에게 하나의 prompt로 질의 약간 아재개그 같지만, 미국에선 먹히는 것 같다. from langchain.chat_models import ChatOpenAI from langchain.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser prompt = ChatPromptTemplate.from_template("Tell me a short joke about {topic}") mode..