분류 전체보기
-
Circular Dependency (순환 참조) 문제와 해결 방법kotlin 2025. 4. 27. 17:29
개발을 하다 보면 클래스 간의 의존성이 서로 얽히는 "써큘러 디펜던시(Circular Dependency)" 문제를 종종 만나게 됩니다. 이번 글에서는 코틀린(Kotlin) 코드로 순환 의존성의 문제를 살펴보고, 이를 lazy 초기화, 의존성 역전 원칙(DIP) 등을 통해 해결하는 방법을 예제와 다이어그램을 곁들여 정리해보겠습니다.1. 써큘러 디펜던시란?써큘러 디펜던시(Circular Dependency)는 두 개 이상의 클래스가 서로를 직접 또는 간접적으로 참조해서 순환 참조가 발생하는 상황을 말합니다. 이는 프로그램의 컴파일 또는 실행 과정에서 오류를 유발할 수 있습니다.문제 예제class A(private val b: B)class B(private val a: A)A는 B를 필요로 하고, B는 A..
-
맥에서 정해진 시간에 로또 자동 구매하기Python 2025. 4. 22. 23:52
오늘은 맥에서 정해진 시간마다 로또 자동 구매하기를 구현한다.일주일에 한번은 로또를 구매해야지하고 생각하지만 매번 놓치기 일쑤여서, 내가 따로 노력을 들이지 않아도 정해진 시간마다 로또를 구매하도록 설정한다.요구 사항 정리동행 복권 사이트에서 랜덤 번호로 로또 구매구매한 번호를 캡쳐해서 내 telegram 계정으로 전송맥북에서 일주일에 한번씩 구매동행 복권 사이트에서 랜덤 번호로 로또 구매파이썬을 이용해서 동행 복권 사이트를 selenium의 webdriver로 띄우고 구매 프로세스를 실행하도록 한다.from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.by impo..
-
Kotlin에서 예외 처리와 스택 추적 이해하기: data object vs classkotlin 2025. 4. 3. 10:44
Kotlin에서 예외 처리 시 스택 추적(Stack Trace)은 디버깅과 문제 해결에 중요한 역할을 합니다. 이 글에서는 data object와 class를 사용하여 예외를 정의할 때의 차이점과 예외 객체가 생성될 때 스택 추적이 어떻게 기록되는지 설명합니다.1. data object와 class의 차이Kotlin에서 예외를 정의할 때 data object와 class를 사용할 수 있습니다. 두 방식은 예외 객체의 생성과 스택 추적 기록에 있어 중요한 차이를 가집니다.data object: 싱글톤 패턴으로 동작하여 프로그램 실행 중 단 하나의 인스턴스만 존재합니다. 예외를 던질 때마다 동일한 인스턴스를 사용하므로, 스택 추적은 객체가 초기화된 시점의 정보를 반영합니다.class: 새로운 인스턴스를 생성..
-
Mockito를 활용한 모의 객체 설정: thenReturn vs doReturnkotlin/Test 2024. 12. 2. 23:31
thenReturn사용법:when(mock.method()).thenReturn(value)용도:주로 open 메서드나 인터페이스의 메서드를 모의할 때 사용합니다.특징:메서드 호출이 실제로 발생해야 하며, null이 아닌 값을 반환해야 합니다.동작 방식:Mockito가 바이트코드를 조작하여 메서드 호출을 가로채는 방식으로 동작합니다.그렇기 때문에 메서드 호출이 실제로 발생해야 하며, final, private, static 메서드에는 사용할 수 없습니다.제약:final, private, static 메서드에는 사용할 수 없습니다.장점:when-thenReturn로 가독성과 명확한 의도를 보여줄 수 있고, 디버깅 정보가 명확하다.가독성: 코드가 직관적이고 읽기 쉽습니다.일관성: 일반적인 Mockito 사용..
-
BOJ3273 두수의 합Algorithm 2024. 12. 2. 22:41
OverviewProblem: https://www.acmicpc.net/problem/3273TimeComplexity: O(N)Type: 배열문제 파악구해야하는 값쌍의 개수입력1 1 1 요구사항입력으로 받은 수열 중에 두수의 합이 x가 되는 쌍의 개수를 출력한다. ai + aj = x (1 i와 J는 같은 값이 될 수 없음을 유의해야한다.문제분석모든 쌍을 다 검사하려면 O(N^2) = 10,000,000,000이 되므로 이 방법으로는 불가능하다.대신 x - a = b를 활용해서 a값은 고정해두고, b값이 이 수열에 있는지 확인만 하면된다.b값이 수열에 있는지 바로 알수만 있다면 이중루프에서 루프 하나를 제외시킬 수 있기 때문에 빠르게 해결할 수 있다.배열의 장점중 하나인 랜덤 액세스를 이용한다.a,b..
-
BOJ10989 수 정렬하기3Algorithm 2024. 12. 1. 23:58
OverviewProblem: https://www.acmicpc.net/problem/10989TimeComplexity:Type: 정렬문제 파악구해야하는 값: 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.입력: 수의 개수 N(1 요구사항입력으로 받은 수를 정렬하여 출력한다.SolutionSolution1N개의 수가 10000이하의 자연수이기 때문에 10001개의 배열을 만들어서 넣고, 해당 배열에 담긴 수만큼 출력한다.이 풀이가 가능한 이유는 10000이하기 때문에 가능하다.1,000,000,000개였다면 4,000MB가 필요하기때문에 이 풀이는 불가능하다.fun main() { val br = BufferedReader(InputStreamReader(System.`in`)) va..
-
BOJ10431 줄세우기Algorithm 2024. 11. 30. 11:36
OverviewProblem: https://www.acmicpc.net/problem/10431TimeComplexity: O(T*n^2)Type: 삽입정렬문제 파악입력20개의 양의 정수구해야하는 값학생들이 뒤로 물러난 걸음 수의 총합요구사항입력으로부터 한명씩 뽑아서 줄의 맨 앞에 세운다.1. 자기앞에 자기보다 큰 학생이 있다면 그 학생 앞에 세운다.1-1. 그 뒤의 모든 학생들은 한발씩 물러선다.2. 자기보다 키가 큰 학생이 없다면 맨 뒤에 세운다.SolutionSolution1요구사항대로 구현한다.주의할 점은 아래와 같다.한발씩 뒤로 물러날때 맨 뒤부터 뒤로 물러나야 겹치지 않는다. 이중 루프에서 빠져나올때 외부루프의 나머지 로직(자기보다 키가 큰 학생이 없다면 맨 뒤에 서기)이 수행되지 않도록 하..
-
BOJ10158 개미Algorithm 2024. 11. 27. 23:05
OverviewProblem: https://www.acmicpc.net/problem/10158TimeComplexity: O(n) 혹은 O(1)Type: 시간복잡도Git: https://github.com/kylelab/algorithms/blob/main/src/boj/BOJ10158.ktSolutionSolution1 (시간 초과)x축과 y축을 나눠서 생각해봤을때, x축은 w까지 이동하면 그 뒤에는 -1씩 이동하고 그 외에는 +1씩 이동한다.동일하게 y축은 h까지 이동하면 그 다음부터는 -1씩 이동하고 그 외에는 +1씩 이동한다.이 풀이는 시간 초과로 실패한다.그 이유는 시간 복잡도가 for문이 하나이기때문에 O(t)이 되는데 이 시간t의 범위가 1 ≤ t ≤ 200,000,000 으로 2초가 넘..