분류 전체보기

    Singleton Pattern과 Inversion of Control

    Singleton PatternInstance가 생성될때 오직 하나의 Instance가 생성되는 것을 보장하는 것을 목표로 하는 디자인 패턴. SingleTon Pattern의 여러 Client들이 접근하는 객체를 하나의 메모리 공간에서 관리할 수 있기 때문에 메모리 효율성이 좋고 객체의 상태관리를 하기에 용이하다.하지만 이러한 Singleton Pattern은 Application Level에서의 Global State로써 동작하기 때문에 복잡한 의존성 관리와 멀티쓰레드 상황에서 쓰레드 안정성이 주된 단점으로 뽑히게 된다.이러한 Singleton Pattern의 단점을 보완하기 위해 적용하는 것이 Inversion of Control 패턴이다.Inversion of Control객체의 의존성 관리 및 ..

    [RAG] Knowledge Graph Prompting for Multi-Document Question Answering

    [RAG] Knowledge Graph Prompting for Multi-Document Question Answering

    https://arxiv.org/abs/2308.11730?source=post_page-----ab5c4006a429-------------------------------- Knowledge Graph Prompting for Multi-Document Question Answering The `pre-train, prompt, predict' paradigm of large language models (LLMs) has achieved remarkable success in open-domain question answering (OD-QA). However, few works explore this paradigm in the scenario of multi-document question an..

    [디자인 패턴] 이터레이터 패턴

    [디자인 패턴] 이터레이터 패턴

    컬렉션의 구현에 관계 없이 Client가 탐색할 수 있는 방법 제공을 하는 것을 목표로 하는 행동 디자인 패턴이다. 컬렉션이란? 자바에서 "컬렉션(Collection)"은 여러 객체(요소)를 모아 처리할 수 있는 인터페이스와 클래스의 집합을 의미한다. 컬렉션 프레임워크는 데이터를 저장, 검색, 수정, 삭제 등을 효율적으로 관리하기 위한 구조적인 방법을 제공한다. 다음은 List와 Queue들에 대해서 원소들을 순회하는 방식이다. List의 순회방식 import java.util.ArrayList; import java.util.List; public class ListExample { public static void main(String[] args) { List stringList = new Arr..

    [git] reflog : 선배의 커밋을 날렸을 때(git reset --hard복구 방법)

    어느 날 밤, 코드를 수정하여 커밋을 푸시했다. 사내 보안 시스템은 내 코드에서 보안 정보를 찾아냈고 나에게 알람이 전송되었다. 나는 git reset HEAD^를 하고 push origin 브랜치 --force를 날렸다. push를 하고 나니 내가 선배의 커밋까지 reset를 시키고 원격 리모트를 업데이트 시켰다는 것을 깨달았다. 그 순간 자리에서 일어나 소리를 질렀고 머리를 쥐어 뜯으며 내 덤벙거림을 탓했다. 나는 혼란스러운 마음에 침대에 누워 천장을 바라보았다. "아... 망했네..." 탄식이 절로 나올 수 밖에 없는 상황이였다. 그리고 멍을 때리다 지푸라기라도 잡는 심정으로 검색을 했다. 그리고 git reflog라는 것을 발견하고 터미널에 치니 remote에서 pull받고 merge된 커밋이 내..

    [디자인 패턴] 템플릿 메서드 패턴

    [디자인 패턴] 템플릿 메서드 패턴

    개념 템플릿 메서드 패턴은 행위 패턴의 일종으로 객체의 메소드에 대해서 변경이 되는 부분들에 대해서 서브 클래스의 그 책임을 위임하는 패턴이다. 추상 기본 클래스 : 템플릿 메서드(알고리즘의 골격)을 정의하며, 이 클래스에는 알고리즘의 각 단계를 실행하는 메서드도 정의된다. 일부 메서드는 기본 클래스에서 정의되며 일부는 서브클래스에서 반드시 구현되어야하는 추상 메서드일 수 있다. 구체적인 클래스 : 추상 기본 클래스를 상속받아 특정 단계를 구체적으로 구현한다. 이러한 구현은 알고리즘의 변하지 않는 구조내에서 특정 작업을 수행한다. 구현 https://github.com/RicardoKim/DesignPattern-Go-/tree/main/template_method_pattern DesignPattern..

    [디자인 패턴] 어댑터 패턴

    [디자인 패턴] 어댑터 패턴

    구조 패턴 구조 패턴은 설계에 있어서 객체와 클래스의 조합을 통해 더 큰 구조를 만드는 방법을 제공하는 디자인 패턴이다. 이 패턴들은 다음 3가지 를 중점으로 설계가 된다. 재사용성 : 이미 존재하는 클래스나 객체를 새로운 구조로 쉽게 재사용할 수 있게 해준다. 확장성 : 시스템의 일부분만 변경하거나 확장해도 전체 구조에 영향을 미치지 않도록 설계하는 것. 독립성 : 구현과 추상화를 분리하여 독립적으로 개발할 수 있게 하며 시스템의 복잡성 관리에 영향을 준다 어댑터 패턴 어댑터 패턴은 구조패턴에서 재사용성에 좀 더 초점을 맞춘 패턴이다. 어댑터 패턴은 호환되지 않는 인터페이스를 가진 레거시 클래스를 어댑터를 사용해서 새로 만드는 코드 시스템에 녹여내는 것에 목적이 있다. 호환되지 않는 클래스들이 함께 작..

    [디자인 패턴] 커맨드 패턴

    [디자인 패턴] 커맨드 패턴

    필요성 client코드에서 다양한 객체들을 호출을 하게 되는 상황을 가정해보자. 객체들을 행동들은 제각기 상이할 것이고 client코드는 이러한 상이한 객체들의 행동들의 순서 및 메소드들에 결합이 강하게 되는 상황이 발생할 것이다. 이러한 예시는 OS에서 프로세스를 실행시키는 상황에서 볼 수 있다. 프로세스들에서 실행시키고자 하는 동작은 각기 다를 것이지만 커널은 이러한 프로세스를 호출해서 실행시키는 것을 반복해야한다. 그렇다고 커널들이 모든 프로세스들의 동작을 알고 있다는 것은 현실상 불가능하다. 따라서 행동을 하는 코드와 호출을 하는 코드 사이의 결합도를 낮출 방법이 필요하고 이러한 경우에 사용하는 것이 커맨드 패턴이다 커맨드 패턴 커맨드 패턴이란 객체의 행동을 캡슐화 하여 이를 호출하는 객체로 하여..

    [디자인 패턴] 팩토리 패턴

    [디자인 패턴] 팩토리 패턴

    생성 패턴이 필요한 이유 생성 패턴이란 객체 생성과정을 보다 유연하고 효율적으로 만들기 위해 사용된다. 이들을 사용하는 이유는 다음과 같다. 1. 객체 생성과 구현을 분리: 생성패턴을 사용하면 객체를 생성하는 로직과 해당 객체를 사용하는 구현부의 로직을 분리할 수 있다. 이를 통해 코드의 시인성 향상, 역할 분리등의 입장에서 강점을 가질 수 있다. 2. 코드 재사용성 증가: 특정 객체를 생성하는 로직을 통일 시키게 되면 해당 객체를 사용하는 모든 메소드에서 동일한 생성로직을 가지는 객체를 활용할 수 있어진다. 3. 시스템의 유연성 증가 및 확장 : 1,2번과 같은 이유로 객체의 생성로직이 달라지거나 혹은 새롭게 객체를 추가할 때 해당 객체의 생성 부분만 변경하거나 추가하면 되기 때문에 시스템의 유연성과 ..