본문 바로가기


Java

[Kotlin] 우당탕쿵탕 CentralDogma Client 적용기 사용환경 : temurin 17, Boot 2.7.1, Centraldogma client 0.62.1 배포에 쓰이는 값은 아닌데 모든서버에서 공통적으로 사용하는 상수급 변수(?) 가 있다. 거의 변하진 않지만 변하면 모든 곳에서 변경해주어야 하는..? 그게 여러서버에 하드코딩되어 관리하고 있었는데 시스템이 많아지고 복잡해지면서 공통화를 해야했다. 근데 이게 저장소 하나를 차지하고 있을만한 값은 또 아니라 이러 저러 고민을 하던 도중 Central Dogma 를 사용하게 됐다. 잡설 (적용코드만 보시려면 아래로) 솔직히 처음에는 이게뭐지? Spring cloud config 같은건가? 라는 생각이 들었는데 대충 맞는 거긴했다. 그럼 나는 코프링을 쓰니까 그냥 spring cloud config 쓰면 되지..
[EEROR] java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml' 스프링 부트 띄우다가 에러남 고치는 방법 1. lint 체크 http://www.yamllint.com/ 문법이 틀릴 때도 이런게 나올 수 있다고해서 lint 체크를 한다. 2. application.yml 새로만들기 난 이방법으로 해결했다. 끝!
[OOP] SRP 와 객체의 역할, 책임의 충돌 SRP 는 Single Responsibility Principle 의 약자로 단일 책임의 원칙이다. 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는 말이다. 객체지향 설계는 '책임' 주도 설계가 바탕이 되어야 하는데 이 개념이 SRP 개념과 충돌하는 지점이 생겼었다. 하나의 객체는 한 협력안에서 하나의 역할만 수행한다면 여러가지 역할을 가질 수 있다. 그리고 역할은 책임의 집합이다. 라는 개념과 클래스는 하나의 책임만 가지며 변경의 이유는 1가지 여야 한다는 개념이 맞물리지가 않았었다. Object 라는 책을 보면서 나온 개념 이었기 때문에 직접 조영호작가님께 여쭤본 결과 놓치고 있었던 키워드를 찾아내었다. 객체 지향설계에서 말하는 책임과 역할은 '객체' 의 관점..
[JAVA] PriorityQueue in Java Priority Queue 는 우선순위 Queue 인 자료구조 이다. 주로 Heap 자료구조를 이용해 구현된다. 우선순위 큐에는 최소 우선순위 큐와 최대 우선순위 큐가 있는데 최소 우선순위 큐는 Heap의 루트(root)가 최솟값가 되도록 생성되고 반대로 최대 우선순위 큐는 최댓값이 되도록 생성된다. 선언 방법 //최소 우선순위 큐 PriorityQueue minHeap = new PriorityQueue(); //최대 우선순위 큐 PriorityQueue maxHeap = new PriorityQueue(Comparator.reverseOrder()); Priority Queue 의 default 가 minHeap 이기 때문에 min 에는 따로 설정할 게 없지만 MaxHeap 으로 할 때는 순서를 반대..
[Java] Java 에는 pair(c++) 가 외없데? 원래 PS 할 때 쓰던 언어가 C++ 이어서 pair 를 아주 요긴 하게 썼었는데 엄청 쉽게 좌표표현 등을 할 수 있었으니까. vector edge; 이런식으로 말이다. 근데 자바가 주언어가 되고나서도 쭉 C++ 로 문제를 풀어오다가 자바로 언어를 바꿔야겠다고 생각하고 문제를 풀려니까 저 pair 가 너무 쓰고 싶었다. 사실 구현해서 써도 된다. class Pair { Integer key; Integer value; public Pair(Integer key, Integer value) { this.key = key; this.value = value; } public Integer getKey() { return key; } public Integer getValue() { return value; ..
[Java] 자바로 2차원 배열 2번째 element 까지 정렬하기, Comparator 알고리즘 문제를 풀거나 할 때 코드내에서 배열을 정렬해야 하는 상황이 온다. 자바에서 배열 정렬은 다음과 같이 간단하게 할 수 있다. Arrays.sort(arr) 근데 만약에 저 array가 2차원이라면? exception 이 떨어진다. java.lang.ClassCastException: [I cannot be cast to java.lang.Comparable at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320) at java.util.ComparableTimSort.sort(ComparableTimSort.java:188) at java.util.Arrays.sort(Arrays.java:1246) a..
[OOP] 책임과 역할의 차이 그리고 타입의 구현 방법 객체지향 관련글을 보다가 책임과 역할의 개념이 나왔다. 책임은 객체가 해야할 행위를 나타내고 역할을 그 책임이 모여 가지게 되는 것이 역할인 것이다. 조형호 작가님의 객체지향의 사실과 오해에서 보면 증언을 해야할 책임을 가진 증인 여기서 증언해야할 책임있고 그것을 하는 주체인 증인이 역할이 된다. 여기서 궁금한게 생겼다. 이상한 나라의 앨리스에서 재판이 열리고 여기서 트럼프 왕이 재판장인 역할을 맡는다. 트럼프가 있고 트럼트왕이있다. 그러면 트럼는 슈퍼타입(Super Type) 트럼프왕은 서브타입(Sub Type) 이다. 그리고 트럼프왕은 '재판장' 이라는 역할을 가지고 있다. 개념적으로 이해는 가지만 결국 이걸 구현하려다 보니 궁금해졌다. 그럼 어떻게 구현하지? 타입과 역할의 차이는 뭐지 역할이 타입이..
[OOP] 객체, 추상화, 캡슐화 객체 객체와 일반적인 값이 구분되는 것은 식별자때문이다. 객체를 고유하게 만들어주는 식별자 그게 바로 객체이다 식별자는 ID나 이름 같은 하나의 값일수도 ID와 이름이 합쳐진 또 다른 타입의 값일 수도있다. 추상화(Abstraction) 추상화는 특성을 일반화하고 세부사항을 제거하여 단순하게 만드는 과정이다. 모든 지형들을 표시하기 보다는 필요에 따라 필요한 특성들을 골라냄을 통해 복잡한 지형을 단순하게 길을 찾기 위한 용도만으로 사용할 수 있다. 이를 객체에 적용하여 하나의 새로운 타입으로 만들어 낼 수 있다. 토끼, 강아지, 고양이 이라는 객체가 있다고 하자 이 객체들을 '동물' 이라는 개념으로 추상화할 수 있다. 추상화의 과정 공통점을 찾아 일반화한다. 숨을 쉰다. 스스로 움직일 수 있다. 토끼가 ..