# Strategy

23개의 포스트
post-thumbnail

[디자인 패턴] 06. Strategy 패턴

PART 1. Strategy 패턴 다이어그램 Strategy 패턴은 해당 이름 뜻에서도 알 수 있듯이 전략과 관련된 패턴입니다. 즉, 전략(알고리즘)을 바꿔서, 같은 문제를 다른 방법으로 해결하기 쉽게 만들어주는 패턴입니다. 여기에서 살펴보아야 할 것은 Context 클래스입니다. Context 클래스가 전략(알고리즘)을 선택적으로 교체할 수 있도록 합니다. 전략(알고리즘)을 선택적으로 교체해야 하는 상황을 살펴보겠습니다. 알고리즘을 개량해서 더 빠르게 만들고 싶은 경우 Strategy패턴을 이용하면, Strategy 역의 인터페이스를 변경하지 않고, ConcreteStrategy역만 수정하면 됩니다. 원래 알고리즘과 개량한 알고리즘의 속도를 비교하고 싶은 경우

4일 전
·
0개의 댓글
·
post-thumbnail

[디자인 패턴] Spring 다담다 프로젝트에 전략 패턴 적용하기

0️⃣ 서론 📄 현재 프로젝트 구조 현재 Scrap이라는 부모 클래스로 Video, Product, Article, Place, Other 카테고리의 자식 클래스가 있습니다. 따라서 각각의 자식 클래스는 각각의 Entity로 되어 있습니다. 하지만, 상속 관계에 있는 만큼 조회 기능, 검색 기능, 수정 기능 등 각각의 Video, Product, Article, Place, Other 카테고리는 기능이 거의 유사합니다. 그러나, 각각은 다른 Repository와 Service, Controller를 가지고 있기 떄문에 ArticleController, OtherController, ProductController, VideoController에서는 동일한 기능이어도 아래와

2023년 9월 16일
·
0개의 댓글
·
post-thumbnail

[ JPA ] GenerationType enum의 종류

GenerationType은 @Id (primary key)를 생성하는 전략을 의미합니다. 이 전략에는 다음과 같이 AUTO, IDENTITY, SEQUENCE, TABLE이 존재합니다. > ## 1. GenerationType.AUTO (default) JPA에서 자동으로 생성 전략을 결정합니다. > ## 2. GenerationType.IDENTITY primary key 생성을 JPA가 아닌 데이터베이스에서 관리합니다. * auto increment > ## 3. GenerationType.SEQUENCE 데이터베이스의 Sequence 객체를 사용하여 primary key를 생성합니다. * @SequenceGenerator를 사용하여 Sequence를 등록해야 합니다. > ## 4. GenerationType.TABLE primary key 생성용 테이블을 사용합니다. * @TableGenerator를 필요로 합니다.

2023년 9월 2일
·
0개의 댓글
·

디자인패턴(3) - 전략패턴

https://thebook.io/080326/0017/ 1. 전략패턴의 정의 > 전략패턴(Strategy pattern)은 정책 패턴(Policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우, 직접 수정 없이도 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주며 상호 교체가 가능하게 만드는 패턴 >>컨텍스트 : 상황, 맥락, 문맥을 의미. 개발자가 어떤 작업을 완료하는데 필요한 모든 관련 정보 Strategy_structure 간략하게 하자면,행위를 클래스로 캡슐화해, 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴 GoF 디자인 패턴에서는 행동 및 객체 분류에 해당한다. 행동패턴은 객체가 상호작용하는 방법이나 관심사를 분리하는 방법에 관여한다

2023년 8월 31일
·
0개의 댓글
·
post-thumbnail

Typescript로 다시 쓰는 GoF - Strategy

Strategy패턴이란? Strategy는 전략이며, 소프트웨어에서의 전략은 특정 기능을 어떤식으로 구현할지에 대한 알고리즘 혹은 비즈니스 로직이다. Strategy 패턴은 하나의 목적을 가지는 여러개의 전략이 있을 때 이를 효과적으로 관리하고 또 교체하여 사용하기 편리하게 하기 위해 사용한다. 각 전략들 간에 공통된 인터페이스를 두고, 구체적인 구현체만 추가 혹은 수정하여 사용한다. 언제 쓸까? Strategy 패턴은 굉장히 다양하게 쓰일 수 있다. 그중 대표적으로는 결제 시스템에서 결제 수단을 관리할 때, 혹은 게임에서 몬스터의 상태에 따라 행동패턴을 변화시킬 때 사용할 수 있다. Strategy 구현 Strategy 패턴의 구조는 비교적

2023년 8월 29일
·
0개의 댓글
·
post-thumbnail

디자인 패턴 - Strategy

출처 | https://www.youtube.com/watch?v=Wao5HiXMCg&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2yw_jZ&index=3 Strategy 어떠한 상황적 이유로 단계3을 변경하게 될 때, Strategy 디자인 패턴을 사용한다. SumPrinter는 1~N의 총합을 출력해주는 클래스 SumPrinter을 이용하여 값을 가져온다 SumStrategy 인터페이스를 구현한 simpleSumStrategy , GaussSumStrategy 패턴에서 총 합을 계산하는

2023년 8월 12일
·
0개의 댓글
·
post-thumbnail

전략 패턴(헤드 퍼스트 디자인 패턴)

'헤드 퍼스트 디자인 패턴'을 정리한 내용입니다. 디자인 원칙 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다. 구현보다는 인터페이스에 맞춰서 프로그래밍한다. 상속보다는 구성을 활용한다. 전략 패턴(Strategy Pattern) > 전략 패턴(Strategy Pattern)은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해줍니다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있습니다. 슈퍼클래스가 아래와 같이 존재한다고 가정한다. 고무 오리, 러버덕 과 같은 오리가 위의 Duck을 상속받는다고 하자. Duck에 fly()를 추가하는 경우, 하위의 모든 오리에 적용되는 결과가 발생한다. 고무 오리와 러버덕을 울지도 날지도 못하지만 fly()와 quack()의 실행이 가능해진다. 상속으로 해결할 경우(추천하지 않는 이유) 서브 클래스에서 코드가 중복된

2023년 7월 17일
·
0개의 댓글
·
post-thumbnail

Strategy 패턴

Strategy 패턴 이 패턴은 사용중인 알고리즘을 교채할때 코드 수정없이 교체할 수 있다는 장점이 있다. Context에서 Strategy에게 위임하고 있으므로 Context 수정 없이 Strategy를 바꿀 수 있다.

2023년 4월 23일
·
0개의 댓글
·

객체지향 디자인패턴 1~2

movie movie >Singleton 어떤 클래스의 객체가 해당 프로세스에서 딱 하나만 만들어져 있어야 할 때 사용 >Strategy 프로그램 실행 중 모드가 바뀔 때마다 해당 모듈에 맞는 시나리오가 이루어지는 방식 >State 특정 상태마다 다르게 할 일을, 나아가서 그 상태들 자체를 그 상태마다 실행시 할 일과 함께 하나하나 모듈화 해서 지정해둘 때 쓰임 (메서드가 실행될 때 해당 모드도 전환되도록 하는 패턴.) >Command 모드 변경에 따라 명령을 갈아끼울수도 있고 스위치를 올릴때와 내릴때 각각 다른 명령을 심어줄 수도 있고 여러 명령들을

2023년 3월 27일
·
0개의 댓글
·
post-thumbnail

Strategy

GoF의 디자인 패턴, 전략 패턴에 대해 알아본다. 해당 글은, 다음의 코드를 기반으로 이해하는 것이 편리합니다. 핵심 요약 실행 중에 기능을 변경해야 하는 경우 사용 예시 Code main SumPrinter SumStrategy SimpleSumStrategy GaussSumStrategy 활용성 알고리즘의 변형이 필요할 때 (여러개 일 때) 결과 장점 조건문을 없앨 수 있다. 서브클래싱을 사용하지 않을 수 있다. 알고리즘의 자사용이 가능하다. 구현의 선

2023년 2월 13일
·
0개의 댓글
·
post-thumbnail

[W5] Spotify’s Next strategy

Weekly 과제에서 스포티파이를 다루면서 항상 주된 고민은 어떻게 하면 한국 시장을 공략할 수 있는 스포티파이를 만들 수 있지?였다. 개인적으로는 최근 앱서비스에서 받은 경험 중 스포티파이의 경험이 어딘가 독특했기 때문에 뭔가 알리고 싶은 마음이 있었던 것 같다. Spotify는 이미 유럽과 북아메리카에서 거대한 사용자를 보유하고 있고, 171개의 국가에서 댜양한 사용자를 보유하고 있다. 4억 2200만 명이 한 달에 한 번 Spotify를 사용한다고 하니 그 규모가 상상할 수도 없다. 그렇지만 한국에서는 멜론과 유튜브 뮤직의 경쟁 속에 한마리에 새우 같이, 점유율 경쟁에서 등 터지는 중이라고 할 수도 있겠다. 그래서 오늘은 글로벌 스포티파이의 런칭부터 최근까지 사용했던 Growth 전략을 분석

2023년 1월 14일
·
0개의 댓글
·
post-thumbnail

[Information] Strategies to Solve Data Shortages

**The above picture is a laptop power saving screen, and has nothing to do with this post. Transfer Learning > ### Pre-training & Fine-tuning Data Augmentation > ### 1. Back Translation > ### 2. Replace specific words with synonyms > ### 3. Insert or Delete Random Words > ### 4. Two Words Exchange in a Sentence Noise Injection > Etc... >

2022년 12월 16일
·
0개의 댓글
·

[NodeJS] passport-local

passport란? >Passport는 이름 그대로 서비스를 사용할 수 있게끔 해주는 여권 같은 역할을 하는 모듈이다. 회원가입과 로그인은 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복잡한 작업이 많으므로 검증된 모듈을 사용하는 것이 좋다. >그런 방면에서, Passport는 사용하기 좋은 검증된 모듈이다. 예를들자면, 여권이라는 것은 입/출국 심사시에 해당 여권 소지자가 입/출국 자격에 대해 인증하는 역할을 한다. 이를 서버에 비교해보면, 클라이언트가 서버에 요청할 자격이 있는지 인증할 때에 passport 미들웨어를 사용하는 것이다. 요즘에는 서비스에 로그인할 때 아이디와 비밀번호 이외에 구글, 페이스북, 카카오 같은 기존의 SNS 서비스 계정을 이용하여 로그인 하는데, passport모듈이 바로 여기에 사용되는 것이다. 정리하자면, passport모듈은 로그인 절차를 확실하게 하기위해 사용하는 라이브러리 인 셈이다. passport-local > passpo

2022년 12월 15일
·
0개의 댓글
·
post-thumbnail

[디자인패턴] - Strategy

전략 패턴이란 전략 패턴이란, 옵션마다의 행동을 캡슐화하여 인터페이스를 정의하고, 독립적이고 상호 교환가능하도록 만드는 패턴입니다. 예를 들어, CoffeeMachine을 이용해 Coffee를 받으려고할때 Americano와 CafeLatte를 받을 수 있습니다. 이와같이 직접적으로 Americano와 CafeLatte를 의존한다면 새로운 커피종류가 추가되었을 경우 CoffeMachine에 새로운 커피종류를 추가해야하기때문에 OOP원칙에서 개방폐쇄원칙을 위반하게 됩니다. 이와 같이 커피 종류를 선택하는 전

2022년 11월 16일
·
0개의 댓글
·

[JPA] 기본키(PK) 자동 생성 전략

기본 키 생성 전략 공부 동기 실무 프로젝트를 하면서 기존에 Node 계열에서는 거의 안보이던 기본 키 생성 전략이라는 개념이 보이게 되면서 혼란스러워서 따로 정리를 해서 개념을 익혀둘 필요성을 느꼈다. 현재 실무 프로젝트에서는 기본키 자동 생성 전략으로 IDENTITY를 사용하고 있다. 별도로 Spring을 공부하지 않고 처음으로 백엔드로 Spring을 사용하면서 굉장히 낯설었지만, 일이 주어진 이상 할 수 밖에 없기에 차근차근 하나씩 진행을 해보았다. 하지만 IDENTITY를 사용하지 않으면 Entity 같의 관계를 맺는 경우에 에러가 발생하는 것을 보면서 이상함을 느꼈다. IDENTITY 전략을 사용하면 기본적으로 1번 Table에서 id가 1인 row를 생성하게 되면 다음 2번 Table에서는 id가 2인 row가 생성이 된다. 이게 시간이 지나면 지날수록 row가 많아질탠데 이러한 상태가 되는 점이 조금 이상하긴 하지만 제일 중요한 관계가 맺어지지

2022년 8월 27일
·
0개의 댓글
·
post-thumbnail

[JPA & Hibernate Naming Strategy] CamelCase -> 'SNAKE_CASE & 대문자' 만들기

기본전략 physicalnamingstrategy > org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy Spring에서 제공하는 CamelCaseToUnderscoresNamingStrategy (기존: SpringPhysicalNamingStrategy) 전략 CamelCase를 snake_case로 변경 한다. 모든 문자를 소문자로 변경 한다. SNAKE_CASE & 대문자 만들기 Class 만들기 CamelCaseToSnakeAndUpperCaseStrategy.java CamelCaseToUnderscoresNamingStrategy class를 상속한다. getIdentifier 함수를 override 한다. toLowerCase() -> toUpperCase()로 변경 적용 하기 변경 전

2022년 8월 24일
·
0개의 댓글
·
post-thumbnail

NestJS 전략 & 데코레이터 패턴에 대해서

이번에 적어볼 것은 여러가지 디자인 패턴 중에서 구조적 설계에 속해있는 데코테이터 패턴과행위 디자인에 속해있는 전략 패턴에 대해서 적어보려고 한다. 그리고 NestJS는 어떤식으로 커스텀 데코레이터가 어떻게 작동을 하게되는 것인지 또, 실제 돌아가는 코드를 확인하면서 하나하나 알아가보려고 한다. 원래는 CS 공부해야하는데 네트워크가 머리아파서 정신승리하려고 쓴다.. 해당 코드는 모두 여기서 보실 수 있습니다. => https://github.com/Sweet-Salty-Project/Sweet-Salty-Server 전략 패턴 (Strategy) >전략패턴이란 수차례 같은 로직이 돌아가는 것을 방지하기 위하여 특정하는 입력값에 따라 로직을 구현하여 캡슐화를 시켜놓은 것을 이야기한다. 사실 디자인 패턴을 공부하면서 계속 느끼는건데, 전략 패턴은 퍼사드 패턴과도 비슷한게 아닌가? 라는 생각도 든다. 아니 그냥 패턴이 엄청 많은 갈래로 나눠져있는데, 정말

2022년 6월 22일
·
0개의 댓글
·

[디자인 패턴] 로그 기능 적용 : 전략 패턴

문제 이전 포스팅에서 템플릿 메서드 패턴을 통해서 비지니스로직과 부가기능인 로깅을 분리했었다. 하지만 상속을 사용해서 결합도가 증가하고, 추상 내포클래스를 사용해서 가독성이 떨어지는 등의 문제가 있었다. 이런 문제들을 해결하기 위해 콜백을 사용한 전략패턴을 통해서 로깅부분을 수정 해 보자 전략 패턴 템플릿 메서드 패턴에서 부모클래스를 추상클래스로 만들고 상속을 통해서 call 메서드를 구현했었다. 전략 패턴에서도 call 메서드를 다형적으로 사용하는 것에는 변함이 없지만 다형성을 상속을 통해서 해결하는 것이 아닌 컴포지션을 통해서 해결한다. 우선 전략에 해당하

2022년 6월 5일
·
0개의 댓글
·
post-thumbnail

패쓰포트에 대해 이해해보자!

클라이언트와 서버는 서로 노관심이다. 따라서 둘을 이어주는 cookie와 session이 필요하다. 쿠키와 세션이 클라이언트와 서버에서 둘을 어떻게 이어주는 지 알아보자. 브라우저(클라이언트)에서 서버로 request를 보내면, 서버는 데이터베이스에 세션이라는 것을 저장한다. 반면 서버는 클라이언트에게 response를 보낼 때, cookie라는 것과 함께 돌려보낸다. 이 쿠키는 위에서 말한 데이터베이스를 참조하며, 이 쿠키에게는 session id라는 것이 존재한다. 이 쿠키는 서버로 보내는 모든 request와 항상 함께 보내지고, 이를 통해 서버는 사용자가 누구인지 판별할 수가 있다. (이것이 stateless한 HTTP를 stateful하게 바꿔주는 것) 그렇다. 위 과정은 매우 복잡하다. 코드로 살펴보자. app.js 파일에서 아래와 같이 적어주고, routes>auth.js 파일에서 콘솔에는 req.session

2022년 5월 15일
·
0개의 댓글
·