자바 35

@SafeVarargs 언제 사용할까?

Java 5, 제네릭(generic)와 가변인자(varargs)의 등장 Java 5부터는 제네릭(Generic)과 함께 가변인자(Variable arguments, varargs라고도 함)가 등장했다. 기존 메서드의 매개변수 개수는 고정적이었지만, 가변인자 덕에 동적으로 지정할 수 있게 되었는데, 가변인자는 내부적으로 배열을 이용하므로, 가변인자가 선언된 메서드가 호출될 때마다 새로운 배열이 생성된다. 이때 매개변수로 가변인자가 선언된 메서드는 매개변수로 배열이 선언된 메서드와 달리 인자를 생략할 수 있다는 차이가 있다. 제네릭과 가변인자 혼용 사용 시 발생할 수 있는 문제점 그렇다면 제네릭과 가변인자를 함께 활용하여 아래와 같이 List이라는 매개변수화 타입(parameterized type)의 가변인..

Technology/Java 2022.10.09

Java의 Enum에 대해 알아보자!

Enum이란? Enum은 '열거'라는 뜻을 가지는 enumeration의 약어인데, 자바에서는 JDK1.5부터 Enum Type(이하 '열거형')이라는 특수한 자료형(data type)을 제공한다. 열거형은 특정 변수가 사전에 정의된 상수들의 집합에 속하도록 해주므로, 해당 변수의 값은 사전에 열거형을 통해 정의된 값들 중 하나여야만 한다. 예를 들면, 요일의 경우 '월, 화, 수, 목, 금, 토, 일'로서 단 7개만 존재하므로 열거형 사용을 고려해볼 수 있다. enum 정의하는 방법 enum 키워드를 이용함으로써 다음과 같이 열거형을 정의해볼 수 있다. 단순히 중괄호 { } 안에 상수의 이름을 나열하기만 했다. public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDA..

Technology/Java 2022.10.02

Java의 멀티 스레드(Multi-Thread) 프로그래밍에 대해 알아보자!

개인적으로 자바의 멀티 스레드 프로그래밍 학습에 앞서 적어도 프로세스와 스레드의 차이 그리고 멀티 태스킹과 멀티 스레드의 차이에 대해선 제대로 알고 넘어가야겠다는 생각이 들었다. 이에 대한 내용은 다음을 참고할 수 있다. 프로세스 vs 스레드 그리고 멀티 태스킹 vs 멀티 스레드 프로세스와 스레드 자바 스터디의 일환으로 자바의 멀티 스레드 프로그래밍을 학습하던 중 이를 다루기 위해서는 앞서 프로세스와 스레드의 차이 그리고 더 나아가서 멀티 태스킹과 멀티 스레 ikjo.tistory.com 스레드의 구현 방법 자바에서 스레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법이 있다. Thread 클래스를 상속받는 방법 먼저 Thread 클래스를 상속받아 스레..

Technology/Java 2022.09.25

[백준 - 2206] 벽 부수고 이동하기 - Java

문제 설명 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 접근 방법 해당 문제는 너비 우선 탐색을 이용하여 해결할 수 있었습니다. 2차원 그래프상 특정 지점들간 최단 거리는 보통 너비 우선 탐색을 적용하는데, 깊이 우선 탐색의 경우 말그대로 깊이 탐색하기 때문에 해당 경로가 '최단' 경로인지 구분하기가 어려움 점이 있습니다. 일단 벽을 부수는 것을 제외하면 일반적인 너비 우선 탐색 문제입니다. 벽을 하나 부숴야 함으로써 난이도가 꽤나 상승했습니다. 벽을 하나 부숴야 하기 때문에 특정..

Algorithm/BOJ 2022.09.16

[백준 - 2110] 공유기 설치 - Java

문제 설명 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 접근 방법 해당 문제는 이분 탐색을 이용하여 해결할 수 있었습니다. 여기서 이분 탐색을 찾고자 하는 것은 가장 인접한 두 공유기 사이의 최대 거리입니다. 이때 이분 탐색을 위한 시작점(start)을 1로 두었는데, 이는 인접한 두 공유기 간의 거리가 최소일 경우이기 때문입니다. 또한 끝점(end)을 첫번째 집과 마지막 집 사이의 거리(좌표 차)로 두었는데, 이는 인접한 두 공유기 간의 거리가 최대일 ..

Algorithm/BOJ 2022.09.13