user123/user123-first-assistant icon
public
Published on 4/18/2025
My

This is an example custom assistant that will help you complete the Java onboarding in JetBrains. After trying it out, feel free to experiment with other blocks or create your own custom assistant.

Rules
Prompts
Models
Context
gemini gemini-2.5-flash-preview-04-17 model icon

gemini-2.5-flash-preview-04-17

gemini

gemini gemini-2.5-pro-exp-03-25 model icon

gemini-2.5-pro-exp-03-25

gemini

openai google/gemini-2.5-pro-exp-03-25:free model icon

google/gemini-2.5-pro-exp-03-25:free

OpenAI

openai meta-llama/llama-4-maverick:free model icon

meta-llama/llama-4-maverick:free

OpenAI

mistral codestral-latest model icon

codestral-latest

mistral

gemini models/text-embedding-004 model icon

models/text-embedding-004

gemini

Response in Korean
Java docshttps://docs.oracle.com/javase/8/docs/api/

Prompts

Learn more
JPA Entity
A sample prompt
DDL에 해당하는 JPA 자바 엔티티 클래스를 만들어줘. Comment는 @Comment("xx")로 만들어서 컬럼 위에 적어줘.
@Column은 사용하지 마.
주석은 필요없어.
클래스 내부에는 @Id, @GeneratedValue, @Comment, @ManyToOne, @OneToOne, @OneToMany 어노테이션을 제외한 어떤 어노테이션도 사용하지 마.
summary
summary
아래의 조건을 모두 지켜서 문서의 내용을 요약해줘.

> 응답은 요약된 내용만 제공할 것.
> 모든 내용은 문서의 내용만을 기반으로 할 것. 인터넷에서 검색한 내용을 사용하면 안됨.
> 모든 문장은 음슴체로 끝낼 것. 
> 문장 앞에 숫자를 사용하지 말고 '-'을 사용할 것.
> 중요한 부분을 `을 사용해 강조할 것.

예시)
- `객체 지향 설계`는 유연하고 확장 가능하며 유지보수가 용이한 코드를 작성하는 것을 목표로 함.
- `스프링`은 `자바` 기반의 애플리케이션 개발을 지원하는 `프레임워크`로, 객체 지향 설계의 원칙을 기반으로 함.
- `좋은 객체 지향 설계의 원칙`은 `SOLID 원칙`으로 요약됨.
- `SOLID 원칙`은 단일 책임 원칙(`SRP`), 개방-폐쇄 원칙(`OCP`), 리스코프 치환 원칙(`LSP`), 인터페이스 분리 원칙(`ISP`), 의존 역전 원칙(`DIP`)을 포함함.
- 스프링은 `의존성 주입`(Dependency Injection)과 같은 기술을 통해 `객체 간 결합도를 낮춰` 유연한 설계를 지원함.
- 스프링의 핵심 철학은 `객체 간의 느슨한 결합`과 `테스트 용이성`을 지향하는 것임.
explain
explain
아래의 조건을 모두 지켜서 문서의 내용을 요약해줘.

> 응답은 요약된 내용만 제공할 것.
> 모든 내용은 문서의 내용만을 기반으로 할 것. 인터넷 검색이나 문서에 없는 내용은 포함되면 안 됨.
> 모든 문장은 음슴체로 끝낼 것.
> 내용을 최대한 자세히 설명할 것.
> 글머리 기호('-')와 숫자를 사용할 것.
> 제목(# 1., # 2.)은 2개 이상 존재할 것.
> 제목은 2단계만 사용할 것. ex) '1.1.1' 사용하지 말 것
> 문서 내의 모든 예제 코드를 package문, import문 제외하고 추출해서 포함시킬 것. (예제 코드가 없다면 포함시키지 말 것)
> 예제 코드의 제목은 클래스명으로 하고 ###으로 시작할 것.
> 중요한 부분을 `을 사용해 강조할 것.

예시)
# 1. 새로운 할인 정책 적용

## 1.1 새로운 할인 정책 개발

- 기존 `고정 금액 할인`에서 `주문 금액에 따른 정률 할인`으로 변경함.
- `RateDiscountPolicy` 클래스를 추가함.

### RateDiscountPolicy

```java
public class RateDiscountPolicy implements DiscountPolicy {
    private int discountPercent = 10; // 10% 할인

    @Override
    public int discount(Member member, int price) {
        if (member.getGrade() == Grade.VIP) {
            return price * discountPercent / 100;
        } else {
            return 0;
        }
    }
}

```

### RateDiscountPolicyTest

```java
class RateDiscountPolicyTest {
    RateDiscountPolicy discountPolicy = new RateDiscountPolicy();

    @Test
    @DisplayName("VIP는 10% 할인이 적용되어야 한다.")
    void vip_o() {
        // given
        Member member = new Member(1L, "memberVIP", Grade.VIP);

        // when
        int discount = discountPolicy.discount(member, 10000);

        // then
        assertThat(discount).isEqualTo(1000);
    }

    @Test
    @DisplayName("VIP가 아니면 할인이 적용되지 않아야 한다.")
    void vip_x() {
        // given
        Member member = new Member(2L, "memberBASIC", Grade.BASIC);

        // when
        int discount = discountPolicy.discount(member, 10000);

        // then
        assertThat(discount).isEqualTo(0);
    }
}

```

## 1.2 새로운 할인 정책 적용과 문제점

- 할인 정책을 변경하려면 `OrderServiceImpl`의 코드를 변경해야 함.
- `OrderServiceImpl`은 `DiscountPolicy` 인터페이스에만 의존하는 것이 아니라 `FixDiscountPolicy`, `RateDiscountPolicy`와 같은 `구체 클래스에도 의존`하고 있음.
    - `DIP(의존 역전 원칙)`을 위반하고 있음.
- 기능을 확장해서 변경하면 클라이언트 코드에 영향을 주므로 `OCP(개방-폐쇄 원칙)`를 위반함.

# 2. 문제 해결 방안

## 2.1 인터페이스에만 의존하도록 변경

- `OrderServiceImpl`이 `DiscountPolicy` 인터페이스에만 의존하도록 코드를 변경함.
- 구현 객체를 생성하고 주입해줄 `AppConfig` 클래스를 생성함.

## 2.2 관심사의 분리

- `AppConfig`는 애플리케이션의 전체 동작 방식을 구성하고 구현 객체를 생성, 연결하는 책임을 가짐.
- `MemberServiceImpl`과 `OrderServiceImpl`은 `실행에만 집중함.`

### AppConfig

```java
public class AppConfig {

    public ***MemberService*** memberService() {
        return new MemberServiceImpl(new MemoryMemberRepository());
    }

    public ***OrderService*** orderService() {
        return new OrderServiceImpl(
                new MemoryMemberRepository(),
                new FixDiscountPolicy()
        );
    }
}

```

Context

Learn more
@code
Reference specific functions or classes from throughout your project
@docs
Reference the contents from any documentation site
@diff
Reference all of the changes you've made to your current branch
@terminal
Reference the last command you ran in your IDE's terminal and its output
@problems
Get Problems from the current file
@folder
Uses the same retrieval mechanism as @Codebase, but only on a single folder
@codebase
Reference the most relevant snippets from your codebase

No Data configured

MCP Servers

Learn more

Filesystem

npx -y @modelcontextprotocol/server-filesystem /Users

Memory

npx -y @modelcontextprotocol/server-memory