스터디

정적, 비정적 클래스 알고 사용하기

자바의 중첩 클래스(Nested Class)에는 여러 가지 종류가 있는데 그중 정적 내부 클래스와 비정적 내부 클래스에 대해 다뤄보고자 한다. 글에서 사용된 코드는 Github에서 확인할 수 있다. 중첩 클래스란 정적, 비정적 내부 클래스에 대해 다루기 전에 중첩 클래스가 생소할 수 있기 때문에 먼저 중첩 클래스에 대해 설명을 하고자 한다. 중첩 클래스는 말 그대로 다른 클래스의 내부에 존재하는 클래스를 의미한다. 중첩 클래스는 특정 클래스가 한 곳(다른 클래스)에서만 사용될 때 논리적으로 군집화하기 위해 사용한다. 이로 인해 불필요한 노출을 줄이면서 캡슐화를 할 수 있고 조금 더 읽기 쉽고 유지 보수하기 좋은 코드를 작성하게 된다. 정적, 비정적 선언 정적 내부 클래스와 비정적 내부 클래스를 나누는 기..

2020.11.06 게시됨

스터디/클린코드

좌충우돌 jacoco 적용기

스터디 블로그 코드블럭 상태가 이상해서 먼저 여기에 올린당.. 좌충우돌 Jacoco 적용기 백기선님의 더 자바 강의를 보던 중 바이트 코드를 다루는 방법의 예시로 jacoco가 언급되었고 테스트 커버리지를 측정하여 build를 성공, 실패 시킬수 있다는 점을 알게되었습니다. 이를 이용하여 ''스터디에서 진행하는 장기 프로젝트와 토이 프로젝트에 적용하면 재미있겠다!' 라는 생각에 적용하며 겪은 내용을 정리해 보고자 합니다! Jacoco 적용하기 단순히 적용하는 것은 어렵지 않았습니다! jacoco 유저 가이드와 우아한 형제들의 jacoco 포스팅을 보면서 쉽게 적용할 수 있었습니다. jacoco plugin 추가 먼저 plugins 블록에 id 'jacoco' 를 추가해 주면 plugins { id 'ja..

2020.02.29 게시됨

스터디/알고리즘

[Programmers] 순위

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 순위 그래프 로 분류되어있는 완전탐색류 문제입니다. 저는 모든 경기수를 확인하기 위해 DFS를 이용하여 문제를 풀었습니다. 풀이 스타일 Java와 같은 객체지향 언어를 이용하여 알고리즘을 푼다면 객체지향스럽게 알고리즘을 풀어야 한다고 생각합니다. 단순한 알고리즘 풀이는 가독성은 당연히 떨어지고, Java를 쓰는 이유가 퇴색되는 것 같습니다. 따라서, Java를 이용해서 문제를 푸신다면 객체가 해야할 행동으로 문제를 풀 수 있도록 하시는 것을 추천드립니다. 모든 선수를 Boxer로, Boxer를 List로 전부 들고있는 일급컬렉션인 MatchHistory를 생성수 Boxer가 이길수 있는 모든 Boxer와 Boxer가 질수 밖에 없는 모든 B..

2019.10.20 게시됨

스터디/알고리즘

[백준] 블랙잭

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 블랙잭 브루트포스 로 분류되어있는 완전탐색류 문제입니다. DFS를 아신다면 가장 기본적인 수준의 난이도에 해당하는 문제일 것 같습니다. 풀이순서는 아래 과정을 반복하면 간단하게 풀 수 있습니다. 카드를 1장씩 모아 저장합니다. 카드가 3장이 되면 합을 구합니다. 2.1. 카드의 합이 목표 값보다 크다면 마지막 카드를 버리고 1번으로 돌아갑니다. 2-2. 카드의 합이 목표 값과 같다면 최대 값으로 저장후 게임을 종료시킵니다. 2-3. 카드의 합이 목표 값보다 작다면 현재 최대 값으로 알고있는 값과 비교하여 큰 값을 유지합니다. 마지막 카드를 버리고 1번으로 돌아갑니다. 풀이 스타일 Java와 같은 객체지향 언어를 이용하여 알고리즘을 푼다면 객..

2019.10.10 게시됨

스터디/알고리즘

[Programmers] 프린터

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 프린터 스택/큐 로 분류되어 있는 문제입니다. 우선순위 큐를 사용하고 우선순위 큐를 사용하기 위해 Comparable 의 compareTo 를 구현할 줄 안다면 쉬운문제입니다. 풀이 스타일 Java와 같은 객체지향 언어를 이용하여 알고리즘을 푼다면 객체지향스럽게 알고리즘을 풀어야 한다고 생각합니다. 단순한 알고리즘 풀이는 가독성은 당연히 떨어지고, Java를 쓰는 이유가 퇴색되는 것 같습니다. 따라서, Java를 이용해서 문제를 푸신다면 객체가 해야할 행동으로 문제를 풀 수 있도록 하시는 것을 추천드립니다. Printer 객체는 두 개의 큐를 가지고 있습니다. 우선 순위가 가장 높은 document 를 head에 가지고 있는 Priority..

2019.10.02 게시됨

스터디/알고리즘

[Programmers] 체육복

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 체육복 탐욕법(Greedy)으로 분류 되어 있는 문제입니다. 학생들의 체육복 보유 여부와 빌려줄 수 있는지를 빠르게 계산하는 것이 문제의 핵심이었던 것 같습니다. 저는 이를 int[] studentStatus 를 이용하여 -1, 0, 1로 각각 나타내었습니다. 풀이 스타일 Java와 같은 객체지향 언어를 이용하여 알고리즘을 푼다면 객체지향스럽게 알고리즘을 풀어야 한다고 생각합니다. 단순한 알고리즘 풀이는 가독성은 당연히 떨어지고, Java를 쓰는 이유가 퇴색되는 것 같습니다. 따라서, Java를 이용해서 문제를 푸신다면 객체가 해야할 행동으로 문제를 풀 수 있도록 하시는 것을 추천드립니다. Student 객체는 체육복을 빌려야하는지 알려주어..

2019.10.01 게시됨

스터디/알고리즘

[Programmers] 여행경로

본 게시글은 PC 환경에서 보기 편하도록 설정이 되어 있습니다. 여행경로 BFS-DFS 문제로 분류가 되어있는 문제입니다. 저는 DFS로 문제를 풀었습니다. 문제의 조건중 눈여겨 봐야할 조건은 1. 주어진 항공권은 모두 사용해야 합니다. 2. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 3. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 인데, 2번의 조건만 만족시키는 방식으로하면 완전한 탐색이 이루어지지 않는 경우가 발생하여 채점시 1번과 2번을 실패할 수 있습니다. 따라서 이 문제는 2번에 맞춰 정해진 경로들의 우선순위를 완전 탐색해야 함을 빠르게 잡아내는것이 중요한 문제였습니다. 풀이 스타일 Java는 객체지향 언어이기 때문에 알고리즘 문제를 자바..

2019.09.27 게시됨