분류 전체보기 51

[프로그래머스][Lv2] 할인행사

📌 문제 [할인행사 - 프로그래머스 lv2] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 고객이 원하는 장바구니에 대한 map을 생성합니다. 할인점에서 만들 수 있는 장바구니(10일치)를 생성합니다. ✔️number 원소의 합은 10이므로 10일치에 대한 장바구니를 생성합니다. 이 둘을 비교하여 일치한다면 (장바구니를 구성하고 있는 과일과 그 개수) answer 의 값을 증가시켜 줍니다. 📌 코드 import java.util.*; class Solution { private static int answer = 0; public int solu..

[Mockito & JUnit] @Mock 과 @InjectMock

📌 Mockito 란? Mockito 는 Junit5를 이용한 단위테스트 코드를 작성할 때 Mock을 위해 많이 사용하는 Framewor입니다. 테스트 대역(Test Double)의 종류 중 모의(Mock) 객체를 필요로 할 때 사용합니다. ✔️ 테스트 대역(Test Double) 테스트를 위해 실제 객체를 대체하는 것을 말합니다. ✔️ 모의(Mock) 객체 호출했을 때 사전에 정의된 명세대로의 결과를 돌려주도록 미리 프로그램되어 있는 테스트용 객체. Mockito 기본 사용 //의존성 선언 testImplementation 'org.mockito:mockito-core:3.11.2' testImplementation 'org.mockito:mockito-junit-jupiter:3.11.2' testR..

Java 2023.03.28

Design Pattern, Factory Method

📌 들어가며 디자인 메서드 패턴은 이번 이직을 위해 개발했던 사전과제 서비스에서도 그렇고 실무에서도 정말 많이 사용하고 있는 패턴입니다. 그만큼 확장성이 좋기 때문에 계속 활용하게 되는 것 같은데 이론적으로는 한번도 정리해본 적이 없어 이번 포스팅을 통해 이론적인 내용을 정리해두려고 합니다. Factory Method Pattern(팩토리 메서드 패턴) 팩토리 메서드 패턴은 상위 클래스에서 객체의 인터페이스를 정의하고, 하위 클래스가 객체를 생성할지를 결정하도록 하는 패턴입니다. 객체를 하위 클래스에서 생성되도록 시키는 것이죠. 이는 다시 말해 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴입니다. 이러한 Fact..

Design Patterns 2023.03.26

응용 서비스는 어떻게 구현해야 하는가

📌 들어가며 이번 포스팅에서는 응용 서비스를 구현할때 항상 절대적일 순 없지만 따르면 좋은 구현 방식에 대해서 포스팅하고자 합니다. API를 개발할 수록 이 기능에 대한 로직은 어디에 있어야 할까? 혹은 응용 서비스가 이렇게 길어지는게 맞나...? 자주 고민하게 됩니다. 물론 도메인의 상황, 팀별 규칙에 따라 달라질 순 있겠지만 통상적인 구현 방식에 대해 정리해 보고자 합니다. 📌 응용 서비스란 응용 서비스는 표현 영역과 함께 사용자와 도메인을 연결해주는 매개체 역할을 합니다. 표현 영역이 사용자로부터 URL, 요청 파라미터, 쿠키, 헤더 등을 이용해서 사용자가 어떤 기능을 실행하기를 원하는지 판별하고 근 기능을 제공하는 응용 서비스를 실행하게 됩니다. 응용 서비스는 실행하는데 필요한 입력값을 메서드 파..

Architecture 2023.03.25

CQRS 란 무엇인가

📌 들어가며 현재 개발 중인 쿠폰 도메인에는 CQRS 패턴이 구현되어 있습니다. 이러한 CQRS 패턴이 무엇인지에 대해 경력직 채용시 면접 질문으로 질문 했다는 얘기를 점심시간에 듣게 되었습니다. 그리하여 이번 포스팅을 통해 애매하게 알고 있던 개념을 정리하고자 합니다. 📌 CQRS 패턴을 사용하게 되는 이유 만약 주문 내역 조회 기능을 구현하게 된다면 여러 애그리거트에 접근하여 데이터를 조회해 와야 합니다. Order에서 주문정보를, Product 에서는 상품에 대한 정보를 Member에서는 회원 관련 정보를 불러와야 합니다. 그런데 조회 화면은 그 특성상 api 의 응답 속도가 빠를 수록 좋은데 이러한 상황에서는 한 번의 select 쿼리 조회로 필요한 데이터를 읽을 수 없어 조회 속도에 문제가 생길..

[Java] 접근 제한자란 무엇인가

📌 들어가며... Java 코딩을 하다보면 public, private, protected 와 같은 접근 제한자들을 마주치게 됩니다. 그런데 이러한 접근제한자의 정의나 기능을 명확히 알지 못하고 단순히 '다른 메서드들이 private으로 되어 있어서.. public 으로 되어 있어서.. 나도 그대로 public 으로 선언 해야지' 라는 가벼운 마음으로 사용할 때가 있는 것 같아 명확히 정의와 그 기능을 알아보고자 합니다. 📌 접근 제한자란? 접근 제한자란 말 그대로 클래스 및 인터페이스 그리고 이들이 갖고 있는 멤버들에 대한 접근을 제한하는 것을 말합니다. 클래스와 인터페이스를 다른 패키지에서 사용 못하도록 막기 객체 생성을 막기 위해 생성자를 호출하지 못하게 하기 필드나 메소드를 사용하지 못하도록 막기..

Java 2023.03.08

[프로그래머스][Lv1][Java] 푸드파이트 대회

📌 문제 푸드파이트 대회 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 레벨 1의 구현 문제라서 그런지 풀이라고 할 만한 것이 딱히 없고 문제에 나온 조건대로 구현하면 쉽게 풀 수 있는 문제였습니다. 다만 바로 떠오르지 않은 문자열 뒤집는 메서드에 대한 공부가 필요할 것 같습니다. 📌 코드 import java.util.*; import java.util.Collections; class Solution { public String solution(int[] food) { String answer = ""; //0, 1, 2, 3 for(int ..

[프로그래머스][Lv2][Java] 폰켓몬

📌 문제 폰켓몬 - Lv2 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 배열의 크기를 구해 고를 수 있는 폰켓몬의 숫자를 구합니다. HashSet을 사용하여 폰켓몬의 종류 번호가 담긴 1차원 배열의 중복값을 제거합니다. 여기서 폰켓몬을 뽑는 경우의 수와는 상관없이(굳이 따지자면 순열 - 순서가 있음) 중복값을 제거한 폰켓몬의 종류에 따라 정답이 정해집니다. ❗️어차피 정답으로 구하는 것은 폰켓몬의 종류❗️ 중복을 제거한 Set 의 크기가 고를 수 있는 폰켓몬의 수보다 크다면 '고를 수 있는 폰켓몬의 수'가 정답입니다. 만약 Set의 크기가 고를..

Refresh Token 이란

📌 들어가며 지난 포스팅에서는 access token 과 session 에 대해서 알아 보았습니다. 이번 포스팅에서는 refresh token에 대해서 알아보고자 합니다. 사실 refresh token에 대해 알아보고자 했던 이유는 얼마 전 같은 팀원 분이 경력직 면접의 면접관으로 들어갔는데 지원자분께 refresh token에 대해 물었더니 제대로 설명을 못해서 충격적이었다 라는 말을 듣게 되어서 였습니다. 비록 현재는 인증과 인가와 관련된 개발을 하고 있지 않지만 인증과 인가는 백엔드 개발자라면 반드시 알아야 하는 개념이라고 생각합니다. 📌 Refresh Token은 왜 사용할까? Refresh Token을 사용하는 가장 큰 이유 중 하나는 보안문제 입니다. 토큰을 서버에서 관리하지 않기 때문에 서버..

[프로그래머스][Lv2][Java] 멀리뛰기

📌 문제 멀리뛰기 - Lv2 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 맨 처음에는 2를 나눠서 개수를 늘리는 방식을 생각했습니다... ➡️ 매우 큰 삽질... ❗️그러나 이 문제의 힌트는 멀리뛰기 할 수 있는 칸의 수가 1 또는 2 라는 곳에 있습니다. 멀리뛰기 할 수 있는 칸 수가 정해져 있으므로 총 점프한 거리는 점프하고자 하는 위치에서 1칸 전인 곳과 2칸 전인 곳에서 점프하는 경우로 생각할 수 있습니다.. 따라서 numList[i] = numList[i-1] + numList[i-2] 다음과 같은 점화식이 성립합니다. 📌 코드 cla..