자바에서 의존성 주입이란 객체 지향 프로그래밍에서 객체 간의 의존성을 외부에서 주입하는 것을 가리킨다. 이를 통해 객체 간의 결합도를 낮추고 코드의 유지보수성을 높일 수 있다. 이 글에서는 의존성 주입을 구현하는 몇 가지 방법과 특징에 대해 간단히 알아본다. 늘 그렇듯이 선요약부터: 생성자 주입: 강한 의존성을 보장하며 불변성을 유지할 수 있다.세터 주입: 유연하고 지연 주입이 가능하지만 의존성이 강제되지 않는다.필드 주입: 코드가 간결해지지만 가독성이 떨어지고 테스트가 어렵다.인터페이스 주입: 유연하지만 복잡도가 증가한다. Constructor Injection 생성자 주입은 객체가 생성될 때 필요한 의존성을 생성자를 통해 주입하는 방법이다.public class Service { private..
목차 자바에서 기본 자료형(primitive type)은 null을 가질 수 없으며, 이는 자바의 설계 철학, 그리고 메모리 관리 방식에 기인한다. 구체적으로 이해하기 위해서는 기본 자료형과 객체 참조형(reference type)의 차이점을 포함해 자바의 설계 철학과 메모리 관리 방식까지 살펴볼 필요가 있다. 간결하게 요약해 보자. 기본 자료형 vs. 참조 자료형 기본 자료형 기본 자료형은 자바에서 가장 기본적인 데이터 타입이며, 값 자체를 저장한다. 아래와 같은 8개의 기본 자료형이 있다. 정수형: byte, short, int, long실수형: float, double문자형: char논리형: boolean기본 자료형은 메모리에서 고정된 크기의 공간을 차지하며, 실제 데이터 값을 직접 저장한다. ..
목차 자바 제네릭(Generic)은 자바 5에서 도입된 기능으로, 클래스, 인터페이스, 메서드의 데이터 타입을 지정하지 않고 사용할 수 있게 해 준다. 제네릭을 사용하면 코드의 재사용성이 높아지고, 타입 안전성이 보장되며, 코드의 가독성도 향상되는 장점이 있다. 이 글에서는 제네릭의 기본 개념에서 시작해 사용법, 예시 등을 간결히 정리한다. Basic Concepts 앞서 설명했듯이 제네릭은 클래스, 메서드 등에서 사용할 데이터 타입을 미리 지정하지 않고, 나중에 실제 사용할 때 구체적인 타입을 지정하도록 해준다. 이는 코드 재사용성을 크게 높일 수 있다. 제네릭 타입을 사용하는 클래스나 메서드는 다음과 같은 형태를 가진다. class 클래스이름 { private T 변수; public T 메..
목차 언젠가 언급했지만, 뜻하지 않게 자바 17과 웹플럭스를 이용한 웹 개발을 하게 되었다. 리액티브 프로그래밍 자체에 흥미가 있어 웹플럭스는 공부도 하고 써보기도 했지만, 갑작스러운 자바 17 사용은 당황이 될 수밖에 없었다. 물론 자바 자체가 강력한 하위호환을 지원해서 당장 힘든 일은 없었지만, 레거시 코드를 구성하신 개발자 분들께 물어봐도 왜 자바 17을 선택했는지 아는 분이 계시지 않아 아쉬웠다. 그렇다고 한참 전에 틀을 잡은 개발자분의 연락처를 물어보기도 그렇고... 해서 처음부터 정리하고 싶었지만 미루고 미뤘던 자바 17의 특징에 대해 가볍게 정리하려고 한다. 추가로 에러메시지를 출력하는 System.err.println()까지. Java 17 기존에 사용하던 자바 11과의 비교보다는 17의 ..
목차 Variable Arguments 가변인자는 JDK 1.5부터 도입된 개념이다. 이름 그대로 개수가 동적으로 변하는 인자를 처리하기 위한 기능이다. 가변인자가 도입되기 전까지는 배열을 사용했다고 하며, 현재도 내부적으로는 배열로 처리되고 배열로 다룰 수 있다고 한다. 사용하는 방법은 매개변수의 타입 뒤에 '...'을 붙여서 표시하며, 이상의 주요 특징을 요약하면 아래와 같다. 개수가 변하는 인자를 메서드의 매개변수로 전달 가능 메서드 내부에서는 배열로 처리되므로 유사하게 다룰 수 있음 필요에 따라 다른 매개변수와 함께 사용하는 것도 가능 나는 이제야 경험해 보았지만 코드의 가독성이 좋아지고 작성이 제법 간결해진다. 얼른 익숙해져서 마음껏 사용해야 하는데... Example 가장 간단한 예는 아래와 ..
목차 Strategy Pattern 전략 패턴은 정책 패턴(Policy Pattern)이라 불리기도 하며, 소프트웨어의 실행 중 상황에 맞는 알고리즘을 선택해 실행할 수 있도록 하는 객체 지향 디자인 패턴이다. 예를 들자면 배열을 정렬하는 sort()라는 메서드가 있을 때, 요청한 알고리즘이 어떤 정렬인지에 따라 다른 로직을 실행하도록 소프트웨어를 디자인하는 것이라고 할 수 있다. 위키백과에 따르면 전략 패턴은 대략 아래와 같은 절차에 따라 구성되며, 복수의 알고리즘을 정의 정의한 알고리즘을 캡슐화 해당 알고리즘을 전략에 맞춰 상호 교체 가능하도록 구성 이어서 아래와 같은 세 부분으로 구성된다. 전략 인터페이스(Strategy Interface) 알고리즘을 정의하는 인터페이스. 일반적으로 알고리즘을 수행..
목차 Singleton Pattern 싱글톤 패턴은 자바에서 이용되는 디자인 패턴 중 하나다(스프링 부트가 아니다!). 주로 아래와 같은 상황을 해결하기 위해 사용되며, 공유자원 관리 디비 연결, 로깅, 캐싱과 같은 자원은 시스템 전체에서 한 번만 생성되면 충분하다. 비용이 많이 드는 객체 생성 같은 객체가 빈번하게 생성되는 경우 비용이 많이 든다. 이 경우 싱글톤 패턴을 이용해 하나의 인스턴스를 생성한 뒤에 해당 인스턴스를 재사용함으로써 리소스 낭비를 줄일 수 있다. 전역 변수 사용 제한 전역 변수는 시스템 복잡도를 증가시키고 지역 변수와 충돌할 가능성도 있다. 이를 해결하기 위해 싱글톤 패턴을 이용해 전역변수의 사용을 최소화할 수 있다. 보통 아래와 같은 방식으로 구현하게 된다. 생성자를 privat..
알고리즘 문제를 이리저리 돌려가며 풀다가 Map을 스트림으로 다룰 때의 자료형이 필요했다. 일단 인텔리제이에서 알려주는 대로 사용해서 문제를 풀고, 따라가며 공부하기. Map.Entry 소개부터 하자면 Map.Entry는 자바 컬렉션 프레임워크의 Map 인터페이스의 내부 인터페이스이다. Map과 마찬가지로 키-값의 데이터를 저장하며, Map에서 .entrySet() 연산자를 호출하면 생성할 수 있다. 정확하게 말하자면 .entrySet()의 경우 이름 그대로 아래와 같은 Set을 생성하며, Map integerMap = new HashMap(); Set set = integerMap.entrySet(); 위 Set에 모든 엔트리 객체가 담겨있기 때문에 개별 Map.Entry를 제어하려면 그대로 스트림을..
목차 지난 한 주간은 백준에서 집합과 관련된 문제를 주로 풀었다. 그러면서 해시 셋과 트리 셋의 특성에 대해 전보다 익숙해진 느낌이 들어 든든한 느낌도 든다. 어쨌거나 집합과 맵에 대한 문제를 풀어본 김에, 자바 컬렉션 프레임워크에서 제공하는 집합과 관련된 메서드를 정리하고 가면 좋겠다는 생각이 들었다. 대단히 어려운 내용은 없지만, 그림과 함께 하나씩 정리하자. 먼저, 아래와 같은 셋 두 개를 준비한다. public class example { public static void main(String[] args) { Set treeSet = new TreeSet(List.of(1, 2, 3, 4, 5)); Set hashSet = new HashSet(List.of(4, 5, 6, 7, 8)); } }..
어제 수업을 듣다가 동시성과 병렬성에 대해 배웠다. 말로만 들으니 헷갈려서 시간이 난 김에 정리. 선 요약 병렬성은 동시성을 구현하는 방법 중 하나. 동시성은 동시처럼 보이지만 수도(Pseudo) 동시성. 병렬성이 진짜 동시성. Concurrency vs. Parallelism 동시성(Concurrency) 병렬성(Parallelism) 여러 작업이 동시에 실행되고 있는 것처럼 처리되는 것 여러 작업이 실제로 동시에 실행되는 것 싱글(멀티) 코어 환경에서 논리적 멀티 스레드 생성 및 오버래핑 멀티 코어 환경에서 물리적 멀티 스레드 생성 및 실행 2개 이상의 논리 스레드 필요 2개 이상의 코어, 2개 이상의 물리 스레드 필요 빠른 시간에 하나씩 많은 것을 번갈아가며 처리(멀티 태스킹) 한번에 많은 것을 처..
- Total
- Today
- Yesterday
- 스프링
- 리스트
- 스트림
- 세계일주
- 지지
- 자바
- 면접 준비
- 야경
- java
- 기술면접
- a6000
- Python
- 여행
- 세모
- 파이썬
- 알고리즘
- RX100M5
- 칼이사
- 세계여행
- 유럽여행
- 유럽
- Backjoon
- BOJ
- spring
- 맛집
- 남미
- 중남미
- 백준
- Algorithm
- 동적계획법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |