개발

    [Java] 다음 큰 숫자 (Programmers, Level 2)

    문제 설명 상세한 설명은 프로그래머스에서 확인할 수 있습니다. 자연수 n을 이진법으로 표현했을 때의 1의 개수가 같으며 n보다 큰 자연수 중 가장 작은 값을 구하는 문제입니다. 예를 들어 4를 이진법으로 표현하면 0100이고, 이보다 크면서 1의 개수가 1개인 수 중 가장 작은 값은 1000인 8입니다. 제한 사항 n

    [SOLID] 객체 지향 설계의 5가지 원칙

    [SOLID] 객체 지향 설계의 5가지 원칙

    배경 2000년대 초반 로버트 마틴(Uncle Bob)이 명명한 객체 지향 프로그래밍 및 설계의 5가지 기본 원칙입니다. 유연하고 재사용 가능한 시스템을 만들고자 할 때 이 원칙들을 적용할 수 있습니다. SOLID (객체 지향 설계) - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org 원칙 1. SRP (Single Responsbility Principle, 단일 책임 원칙) 한 클래스는 하나의 책임만 가져야 한다는 원칙입니다. 쉽게 풀어 설명하면 요구사항이 변경에 따라 영향받는 요소가 한 가지여야 한다는 것입니다. 책임의 범위는 상황에 따라 다르거나 모호할 수 있지만 한 클래스의 변경에 대한 영향력이 적어야 한다는 의미입니다. Controller -> Service -> Reposito..

    [Java] 오픈채팅방 (2019 KAKAO BLIND RECRUITMENT)

    문제 설명 상세한 문제 설명은 프로그래머스에서 확인할 수 있습니다. 카카오톡 오픈채팅방에서 채팅방에 입장 / 퇴장 메시지 출력을 구현하는 문제입니다. 이미 출력된 메시지에 표시된 닉네임은 기존 사용자가 닉네임을 변경할 때 전부 변경됩니다. "Muzi님이 들어왔습니다." "Prodo님이 들어왔습니다." "Muzi님이 나갔습니다." 위 상황에서 Muzi가 나간 후에, Prodo라는 닉네임으로 다시 들어올 경우 기존 채팅방에 남아있던 메시지의 Muzi도 Prodo로 변경됩니다. 닉네임의 중복은 허용하기 때문에 표시되는 닉네임은 겹칠 수 있습니다. "Prodo님이 들어왔습니다." "Prodo님이 들어왔습니다." "Prodo님이 나갔습니다." "Prodo님이 들어왔습니다." 이 때, 기존의 Prodo 닉네임을 사..

    [Java] 영어 끝말잇기 (프로그래머스 Summer/Winter Coding(~2018))

    문제 설명 상세한 문제 설명은 프로그래머스에서 확인할 수 있습니다. 아래와 같이 우리가 알고 있는 영어 끝말잇기 규칙과 같습니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전에 등장했던 단어는 사용할 수 없습니다. 한 글자인 단어는 인정되지 않습니다. 이 규칙에 맞게 N명이 끝말잇기를 진행할 때 가장 먼저 탈락한 사람의 번호와 자신의 몇 번째 차례에서 탈락하는지를 구하면 됩니다. 제한 사항 끝말잇기에 참여하는 사람의 수 n은 2 이상 10 이하의 자연수입니다. words는 끝말잇기에 사용한 단어들이 순서대로 들어있는 배열이며, 길이는 n 이상 100 이하..

    [Java] 성격 유형 검사하기 (2022 KAKAO TECH INTERNSHIP)

    문제 설명 상세한 문제 설명은 프로그래머스에서 확인할 수 있습니다. 지표 번호 성격 유형 1 R, T 2 C, F 3 J, M 4 A, N 각 지표 번호에서 두 유형 중 성격이 강한 것을 조합하여 "RFMN", "TCMA" 같은 성격 유형을 결정합니다. 검사지는 N개의 질문과 아래와 같은 7개의 선택지가 있습니다. 선택지 성격 유형 점수 매우 비동의 첫 번째 유형 3점 비동의 첫 번째 유형 2점 약간 비동의 첫 번째 유형 1점 모르겠음 점수 없음 약간 동의 두 번째 유형 1점 동의 두 번째 유형 2점 매우 동의 두 번째 유형 3점 1번 질문이 "CF" 유형에 대한 질문인 경우 매우 비동의는 C 유형에 3점 동의는 F유형에 3점 이 부여되는 방식입니다. 만약 각 지표 번호에서 두 성격 유형 점수가 같다면 ..

    [Java] 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십)

    [Java] 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십)

    문제 설명 상세한 문제 설명은 프로그래머스에서 확인할 수 있습니다. 인형들이 세팅된 N x N의 2차원 배열 board에서 인형을 집어 오른쪽 바구니로 옮기는 문제입니다. 먼저 바구니로 옮겨진 인형들 위로 새로 옮긴 인형들이 쌓이는 방식인데, 같은 인형이 두 개 쌓이게 되면 해당 인형들은 사라지게 됩니다. 또한 바구니 크기는 제한이 없습니다. (최대 N * N 개의 인형이 쌓일 수도 있는 겁니다) 크레인 위치를 1~N 사이로 이동시키도록 하는 배열 moves에 따라 인형을 뽑을 때 최종적으로 사라진 인형의 개수를 구하는 문제입니다. 제한 사항 board 배열은 2차원 배열로 크기는 5x5 이상 30x30 이하입니다. board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다. 0은 빈칸을 나타냅..

    [Spring] 서비스 코드를 테스트하기 어렵다면?

    [Spring] 서비스 코드를 테스트하기 어렵다면?

    Spring 프레임워크 기반으로 서비스를 개발할 때 간혹 단위 테스트하기 어려운 경우를 마주합니다. 저는 S3 리소스 연동 모듈을 사용하여 서비스를 개발한 적이 있는데 테스트 코드를 작성할 때 서비스 클래스가 S3와 강한 의존성을 갖고 있어 테스트하기 어려웠던 경험이 있습니다. 리소스를 효율적으로 사용하기 위해서 반드시 연동을 테스트해야 하는 경우가 아니라면 임시 모듈로 교체할 필요가 있습니다. 밑에 샘플 코드를 통해 비슷한 예시를 들 수 있습니다. 샘플 코드 @Service public class GithubService { public RepositoryInformation getInformation(String owner, String repositoryName) throws IOException ..

    [Spring Data JPA] saveAll은 만능일까?

    [Spring Data JPA] saveAll은 만능일까?

    개발 환경 필자의 개발 환경에 맞추어 포스팅되었으니 참고 바랍니다. Java / Gradle Spring Boot 2.7.8 Spring Data JPA MySQL 8.0.24 개요 이번에 간단한 팀 프로젝트를 진행하면서 Spring Data JPA를 사용했습니다. 평소에 자주 애용하던 KREAM의 백엔드 서버를 분석하고 구현하는 프로젝트였는데, 필자는 이 프로젝트에서 스타일 파트를 맡았습니다. 스타일은 일종의 인스타그램과 매우 비슷했는데, 특이한 점으로는 KREAM에서 거래 중인 상품을 태그 할 수 있다는 점이었습니다. 해당 도메인의 피드 등록 기능을 개발하던 중 피드에 들어가는 해쉬태그(#)나 상품들을 별도 테이블로 분리해서 관리할 필요가 있었습니다. 테이블이 분리되었기 때문에 하나의 피드가 등록될 ..

    [Java] 백준 2178번: 미로 탐색

    https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 핵심 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다. 밑줄 친 부분을 통해서 BFS 풀이법으로 접근해 볼 힌트를 얻을 수 있습니다. 풀이 class Point { int y; ..

    TestContainers가 Docker 감지 못 하는 문제 (Mac)

    TestContainers가 Docker 감지 못 하는 문제 (Mac)

    발생 TestContainers를 활용해서 통합 테스트를 작성하고 실행하는데 오류가 발생했습니다. 분명히 도커는 백그라운드에 실행 중인데 말이죠... 에러 Could not find a valid Docker environment. Please see logs and check configuration 해결 https://www.testcontainers.org/supported_docker_environment/ 테스트 컨테이너 홈페이지에서 도커 환경과 관련한 내용을 읽어보다가 답을 찾았습니다. Mac OS의 경우에 위처럼 도커를 찾지 못할 경우 아래의 명령어를 터미널에 입력하면 될 겁니다. sudo ln -s $HOME/.docker/run/docker.sock /var/run/docker.sock