자바(20)
-
다형성이 적용된 Object로 JSON 전환하기
Jackson의 기본 사용부터 다형성이 적용된 Object로 JSON 데이터를 전환하는 방법까지 알아본다. 1. 환경구성 Gradle 프로젝트에서 jackson-databind 의존성을 추가한다. implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3' spring-boot-starter-web 의존성을 사용하고 있다면 자동으로 추가된다. 2. JSON to Object Shop 클래스를 작성한다. setter가 없으면 매핑시에 에러를 발생시키기 때문에 꼭 작성하자. public class Shop { private String shopName; private int shopAge; private List staffNames; //gette..
2022.09.10 -
[LeetCode] 문제 복기(322번, 491번, 1372번, 1253번)
322. Coin Change 동전의 목록인 coins가 주어진다. coins로 만들어야하는 amount가 주어진다. coins로 amount를 만들때 가장 적은수를 사용하는 케이스를 출력해야한다. class Solution { public int coinChange(int[] coins, int amount) { // amount가 0이면 만들수 없다 if(amount == 0) return 0; int[] dp = new int[amount+1]; // dp 구현을 위한 공간 할당 Arrays.fill(dp, Integer.MAX_VALUE); // 각 dp 원소에는 Integer의 최대값으로 초기화 Arrays.sort(coins); // coins를 오름차순으로 sorting List coinLi..
2022.04.27 -
[Java] Lambda Expression Quick View
Lambda 표현식은 Java 8 버전에서 정식 발표되었다. 함수형 프로그래밍을 지원하기 위해 Java가 첫번째로 도입한 것이 바로 Lambda 표현식이다. 함수형 프로그래밍을 공부하다 보면 Pure Function(순수 함수), higher-order function(고계 함수) 등 다양한 함수들을 만나게되는데 Lambda는 그중 anonymous function(익명 함수)의 특성을 가지고 있다. 따라서 우리가 알고 있는 일반적인 함수와 달리 Lambda는 함수의 이름이 없다. Lambda는 Class에 속하지 않고도 그 자체로 생성이 가능하다는 주요한 특징이 있다. 또한, 변수처럼 파라미터로 전달하거나 특정 요청에 의해 언제든지 실행될 수 있다. Lambda는 간단한 이벤트 리스너나 콜백함수로 사용..
2021.12.20 -
GraphViz를 통해 함수 호출 그래프 그리기
개발을 하다보면 종종 복잡한 비즈니스 로직을 구현해야 할때가 있다. 이런 복잡한 로직은 시간이 지나 다시보면 한눈에 쉽게 들어오지 않는다는 문제가 있었다.(나만 그런가) 그래서 내가 개발한 프로그램에 대해서 함수의 호출관계를 한눈에 보여주면 꽤 유용할것 같아 심플한 프로그램을 하나 만들어 봤다. 현재 회사에서 화면을 구현할때 Inswave에서 만든 WebSqaure라는엔진을 사용하는데(Javascript를 베이스로 한다.) 해당 소스파일을 분석해야할 일이 있어 WebSquare 문법을 분석해서 호출 그래프를 그려주는 프로그램을 만들었다. WebsSquare의 문법은 Javascript와 유사하며 Map에 함수를 할당하는 방식을 사용한다. 샘플에선 scwin이라는 변수명을 가진 맵을 사용했다. Javasc..
2021.10.13 -
[Java] Multi Thread와 임계영역 설정
Multi Thread 사용시 주의사항 Multi Thread 사용시 병렬적인 Task 처리가 가능하단 장점이 있지만, 자원을 공유하기 때문에 사용시 몇가지 주의할 점이 있다. 1. 교착상태 - 두개의 쓰레드가 서로 끝나기를 기다리는 상태이다. 자신이 원하는 자원을 상대방이 가진채로 놓지 않는 상황이다. 2. 동시접근 - 특정 연산을 수행하고 있는 와중에 다른 쓰레드가 연산의 결과를 조회하는 로직을 수행하는 경우. 예상과 전혀 다른 결과가 나올 수 있다. 연산의 결과가 끝날때 까지는 다른 쓰레드가 연산결과를 조회하지 못하도록 해야한다. 3. 기아 - 특정 쓰레드가 계속해서 자원을 사용하지 못한채로 존재할 수 있다. 위 문제를 해결하기 위해 자바에선 synchronized, wait(), notify() ..
2021.09.01 -
[알고리즘/자바] 백준 1316번 - 그룹 단어 체커
1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 입력된 문자에 존재하는 알파벳이 연속되는지 확인하는 문제이다. 아이디어 1. 입력된 문자에 존재하는 알파벳을 구한다. 2. 알파벳이 연속되는지 확인한다. 3. 현재의 index가 이전의 index보다 +1인 경우는 연속이며 그렇지 않은 경우는 불연속이다. 4. 문자내에 알파벳이 하나만 있는 경우는 연속으로 처리한다. 구현 getAlphabet 함수를 만들어 입력된 문자내에 존재하는 알파벳을 ArrayList로 반환하도록 한다. s..
2021.07.27