목차 언젠가 언급했지만, 뜻하지 않게 자바 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개 이상의 물리 스레드 필요 빠른 시간에 하나씩 많은 것을 번갈아가며 처리(멀티 태스킹) 한번에 많은 것을 처..
summarizingInt()는 Collectors와 함께 사용 돼 정수형 스트림에서 제목의 계산을 한번에 해주는 연산자이다. 물론 그중 원하는 요소를 뽑아오는 것도 얼마든지 가능한 아주 기특한 아이이다. 코드를 보자. import java.util.IntSummaryStatistics; import java.util.List; import java.util.stream.Collectors; public class SummarizingExample { public static void main(String[] args) { List list = List.of(2, 3, 5, 7, 11, 13, 17, 19); IntSummaryStatistics statistics = list.stream() .coll..
자꾸 까먹어서 쓸 때마다 검색하는 나 자신이 초라해서 정리한다. 자바엔 세 가지 출력 메서드가 존재한다. print() - 출력 println() - 출력 후 줄바꿈 printf() - 형식(Format)이 있는 출력 그중에서 잘 외워지지 않지만 간간히 써먹는 printf()에 대해 알아보자. 먼저 사용 문법은 아래와 같다. System.out.printf(format, arguments) 괄호의 첫 번째 칸에 형식을, 두 번째 칸 이후에 출력할 변수를 넣으면 되는데, 예를 들면 아래와 같이 쓰인다. public class PrintfExample { public static void main(String[] args) { String str = "Gnidinger"; int n = 3000; Syst..
각종 알고리즘 문제를 풀거나, 입력 값으로 데이터를 받을 때 의도했건 그렇지 않건 문자열 앞 뒤로 공백이 생기고, 생긴 공백을 제거해야 할 때가 있다. trim()은 그때 사용하는 메서드이고, strip()은 자바 11부터 지원하기 시작한 비슷한 메서드이다. 둘의 공통점과 차이점을 간단하게 알아보자. 공통점 public class TrimStripExample { public static void main(String[] args) { String str = " Hello Gnidinger! "; System.out.printf("원본 문자열: '%s'%n", str); System.out.printf("문자열.trim(): '%s'%n", str.trim()); System.out.printf("문자열..
- Total
- Today
- Yesterday
- 파이썬
- 세계여행
- 세모
- 맛집
- 세계일주
- 칼이사
- 리스트
- java
- 유럽여행
- 유럽
- 스프링
- 면접 준비
- Python
- 야경
- 중남미
- 남미
- 동적계획법
- RX100M5
- 여행
- spring
- 스트림
- 지지
- a6000
- 자바
- Algorithm
- Backjoon
- 백준
- 기술면접
- 알고리즘
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |