[Spring] 의존성 주입하려는데, 조회되는 빈이 두개라면? (NoUniqueBeanDefinitionException 발생)
·
Spring
들어가며@CompnentScan으로 객체를 빈으로 안전하게 관리하기 위해 클래스에 @Component를 많이 붙히곤 한다. 하지만 프로그램의 완성도가 올라가면 올라갈수록 추상화의 정도가 어느정도 높아진다고 생각을 하는데, 그렇다면 다음과 같은 코드에서 문제가 생기고 만다.@Componentpublic class OnePlusOneEvent implements OfferEvent { @Override public void apply() { System.out.println("1+1 이벤트"); }}@Componentpublic class TwoPlusOneEvent implements OfferEvent { @Override public void apply() { ..
[JAVA] 2910-빈도정렬 🩶3: 정렬 로직을 자유자제로 적용하자
·
Problem Solve
들어가며https://www.acmicpc.net/problem/2910문제의 요구사항은 N개의 숫자가 들어오면 그 숫자의 빈도대로 정렬하여 출력하는 것이었다. 즉 많이 나온 숫자 먼저 출력해야한다. 단, 빈도가 같을 경우 먼저 나온 숫자를 출력해야하는 것이 골치 아픈 포인트였다.본론으로딱 보자마자 음.. 개수를 카운팅 하는 배열을 만들어서 arr[num]++; 식으로 진행해야겠다~ 싶었다. 하지만 들어오는 수의 범위를 보면(1 다행인 것은 들어오는 숫자의 갯수가 (1 시간복잡도 보다는 들어오는 숫자의 범위가 커서 다른 자료구조를 떠올려야 하는 문제다.값 - 카운팅 해야하니 자연스럽게 생각은 Map 자료구조나 List자료구조로 옮겨진다. 그래서 정답코드는 많은 우여곡절 끝에 아래와 같이 작성했다.publ..
[Spring] 스프링 컨테이너가 빈을 관리하는 방식이 너무 궁금해서 Application.run(.class, args) 해부해보기
·
Spring
들어가며빈과 컨테이너는 스프링 기반의 프로젝트를 진행하다 보면 너무나 당연하게 쓰게 되는 개념이다. 자주 쓰는 프레임워크가 정확히 어떤 이유로 어떻게 기능을 제공하는지 알고 있어야, 여러가지가 꼬인 문제가 생겼을 때 근본적으로 해결할 수 있는 개발자가 될 수 있다고 생각해서 개념을 정리하고 있었다. 그러다가 정확히 코드로 어떻게 제공중인지도 궁금해져서 메인함수에 쓸쓸하게 혼자 있던 Application.run()메서드를 해부해보았다. 그 이해 흐름을 작성한 글이다.본론으로🧐 스프링은 왜 컨테이너와 빈이라는 개념을 제공할까?스프링 컨테이너가 객체들을 빈으로 관리하여 필요시에 해당 객체를 찾아서 반환해준다는 식의 표현을 많이 접할 수 있다. 하지만 왜 굳이 객체를 컨테이너로 관리하며 반환해줄까? 아래 코드..
[JAVA] 광범위한 타입을 제공하는 제네릭(Generic)과 와일드카드(WildCard) 정리
·
Java & Kotlin
들어가며제네릭(T)은 대충 아무 타입이나 올 수 있는 정도로 알고 써왔었는데, 자세히 공부해보니 생각보다 더 깊고 좋은 기능이었다. 이 기회에 새로 배운 와일드카드까지 같이 정리해보려고 한다.본론으로 들어가기 전에 스스로 타입 정보를 추론해서 개발자가 타입 정보를 생략할 수 있는 것을 타입 추론 이라고 하는 것을 알고가자.GenericBox integerBox = new GenericBox() // 타입 직접 입력GenericBox integerBox2 = new GenericBox() // 타입 추론본론으로🧐 제네릭이 뭘까?자바에서는 여러 타입이 오게 할 수 있는 기능으로 형식으로 제공한다. 이게 바로 제네릭 문법이다. 와닿지 않을 수 있으니 코드를 바로보자!public class AnimalHos..
[JAVA] 1629번-곱셈 🩶1, 4375번-1 🩶3 : 자료형의 범위를 벗어나는 상황에서는 모듈러 연산의 특징을 이용하자. (정수론)
·
Problem Solve
문제 1. 곱셈(1629번)https://www.acmicpc.net/problem/1629문제는 매우 간단했다. A를 B번 곱한 값을 C로 나눈 나머지를 구하는 것이었다. 즉 (A^B) % C = ? 이다. 그래서 난 처음에는 직관적으로 아래와 같은 코드를 작성했다.public class Main { public static void main(String[] args) throws Exception { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(bf.readLine()); long A = Integ..
[JAVA] 자바 중첩 클래스(Nested Class), 지역클래스의 변수 캡처(Capture)와 함께 정리하며 람다의 출생 이유까지 알아보기
·
Java & Kotlin
들어가며클래스 안에 클래스를 두는 것을 중첩 클래스라고 하는데, 정의 자체만 알고 이를 어떨 때 사용하고 어떤 방식으로 클래스를 중첩시키는지 명확하게 알고 있지 않다. 그래서 이번 기회에 깊게 정리해보고자 한다!본문으로보통은 코테 문제에서 Node 구조체가 필요할 때 내부에 static class를 두었던 기억이 있다. 이때는 자바의 메인함수는 static이니 Node클래스도 static으로 올려야 활용할 수 있으니.. 그렇게 하자! 정도로 외우고 작성했었다.public class Main { static class Node { int x; int y; Node(int x, int y) { this.x = x; this.y..
[JAVA] 자바가 제공하는 날짜 시간 총정리
·
Java & Kotlin
들어가며날짜와 시간 내용은 프로그램을 만들면서 필수적으로 들어가는 핵심 내용이다.하지만 윤년, 일광 절약 시간(일부 지역은 태양이 일찍 뜨는 3, 10월을 1시간 앞당기거나 미룬다고 한다.), 나라별로 다른 시간 때문에 개발자는 날짜와 시간 관련한 로직을 구성할 때 매우 골치가 아프다. 이러한 문제점 때문에 날짜 시간 관련한 라이브러리를 활용하더라도 정확하고 잘 설계된 라이브러리를 선택해야하는데, 자바는 이를 명확하게 해결하기 위해 java.time 패키지를 제공한다.(이전에는 Date, Calender 라는 클래스도 있었지만, 여러 단점이 존재하여 자바 8 이후로 새로운 클래스가 도입되었다.)본문으로🤔 java.time 패키지에는 어떤 클래스를 제공하고 있을까?java.time 패키지에는 위의 사진처..
[JAVA] String은 바쁘다! 속도가 중요할 시 StringBuilder를 이용하자
·
Java & Kotlin
들어가며String 클래스의 문자열은 불변 객체이다. 즉 문자열에 메서드를 적용하거나 이어붙힐때 아래 로직처럼 계속해서 새로운 객체를 생성해야 한다.String str = "A" + "B" + "C" + "D";String str = String("A") + String("B") + String("C") + String("D");String str = new String("AB") + String("C") + String("D");String str = new String("ABC") + String("D");String str = new String("ABCD");그만큼 GC를 더 많이 하며 메모리를 관리할 것이다. -> 컴퓨터 메모리 사용량이 많아진다.그렇다면 해결방법은 무엇일까?본론으로이 문제를 ..
[회고] 방향성을 잡게 해준 2025년 회고🧑‍💻
·
Writing
들어가며26년이 밝은지 한달이 지나가는 지금 뒤늦게나마 회고를 써본다!지난 1년을 되돌아보며 생각정리를 하고, 26년에는 어떤 사람으로 성장하고 싶은지 적어본다.본론으로1월본격적으로 무언가 만드는 "개발"을 시작한 것은 군대 전역 후 24년도 10월쯤이다. 그때는 정말 개발자라는 길이 나랑 맞는 길인지 의문투성이였던지라 가장 좋아했던 게임 개발을 먼저 공부했다. 그래서 24년 10월.. 11월...12월... 공부하며 1월에는 어느정도 돌아가는 게임을 완성했다.이때는 사실 1인 개발을 하다가, 욕심이 나서 디자이너 분도 구하고 작곡가 분도 구해서 진행을 했다.스케일이 생각보다 커져서 당황했지만, 부족한만큼 잠 줄여서 오류 수정하고 기능 추가하던 기억은 잊지못할 추억이다🫠2월플레이스토어에 프로그램 처음 ..
[객체지향의 사실과 오해] 객체지향을 조금 더 알게 해준 고마운 책
·
Book
들어가며"객체지향적인 로직"을 구현하기 위해 매번 많은 기술 블로그를 참고하여 적용만 하고 넘어갔었다. 당시에는 완성된 코드를 보고 어느정도 만족하며 미션을 제출했었던 기억이 난다. 하지만 지금 냉정하게 생각해보면 그것은 훌륭한 커리어를 가진 개발자분들이 올려두신 로직을 그저 "모방"한 것에 불과하다는 생각이 든다.이제는 객체지향적인 패턴, 스킬들을 적용하기 위해 급하게 구글링 하는 것이 아니라, 한발짝 물러서서 조금 더 객체지향이라는 근본을 공부해보고 싶어졌다. 종강도 했겠다, 천천히 읽어보며 나의 지식과 책에서 던져주는 메시지를 대조해보자! 자 들어가자!본론으로우선 책을 읽다보면 리뷰보다 더욱 더 스토리텔링 식의 이야기가 강하다. 그래서 처음에는 소설 책 읽듯이 편하게 읽으려고 했었다. 하지만 읽다보..