Language/Java

Language/Java

[Java] 멀티 스레드 환경에서 발생할 수 있는 동시성 이슈와 해결 방법

개요 멀티 스레드를 사용하는 환경에서 각 스레드가 공유 자원에 동시에 접근하는 상황이라면 경쟁상태(Race condition)가 발생할 수 있습니다. 경쟁상태가 발생하게 되는 원인은 가시성(Visibility)과 원자성(Mutual Exclusion)을 보장하지 못했기 때문인데요, Java에서는 synchronized 키워드와 Atomic Type, Concurrent Collection 등을 통해 이와 같은 동시성 문제를 해결할 수 있습니다. 본 포스팅에서는 멀티 스레드 환경에서 발생할 수 있는 문제에 대해 설명하고 이를 해결할 수 있는 sychronized, volatile 키워드와 Atomic Type에 대한 내용을 다루겠습니다. 본 포스팅의 주제와 연관된 핵심적인 개념들은 다음과 같습니다. 공유자..

Language/Java

intelliJ, Gradle 환경에서 JavaFX 사용하기

최근 크롤링에 대해 공부하며 여러 시도를 해보다 자바 프로그램을 만들게 되었다. 기존에는 웹 애플리케이션을 구상했지만 운영상의 이유로 자바 기반 프로그램으로 계획을 변경했고, jar 파일을 콘솔에서 실행시키는 것보다 GUI 를 만들어야겠다고 생각했다. 그렇게 관련 자료를 찾아보던 중 JavaFX 라는 것을 알게되었다. 국내에서는 JavaFX 관련 자료가 그리 많지 않아, 초기 세팅에 애를 먹었기 때문에 이번 포스팅을 통해 JavaFX 사용법을 공유하려한다. JavaFX? JavaFX는 Java 기반의 GUI(Graphic User Interface) 를 만들 수 있는 라이브러리이다. 자바 기반이기 때문에 윈도우나 맥, 리눅스에서 사용할 수 있는 것이 가장 큰 장점이다. 기존 GUI 라이브러리인 Swing..

Language/Java

[Java] Math 주요 메서드 정리

프로그래밍을 하다보면 수학적 계산을 아주 많이 하게 된다. 특히, 코딩테스트를 준비하다보면 이러한 계산을 돕는 api들을 많이 찾게 된다. 필자도 해당 api가 필요할 때마다 찾아보곤 했는데, 이번에 자주 사용하는 메서드 위주로 한 번 정리해보려한다. 자바에서는 계산을 위한 Math 클래스를 제공한다. Math 클래스는 java.lang 패키지에 위치하고 있기 때문에 별도의 import 없이 사용 가능하다. 다음은 Math 클래스의 메서드를 표로 정리한 것이다. 구분 메서드 절대값 / 부호 abs, signum 최대, 최소 값 max, min 소수점 올림 / 버림 ceil, floor, round, rint 제곱 / 제곱근 pow, scalb, sqrt, cbrt, hypot 삼각 함수 관련 toRadi..

Language/Java

[Java] 정렬된 배열에서 삽입 포인트 찾기 Arrays.binarySearch()

자바 배열을 사용하다 보면 원하는 값의 인덱스를 찾고 싶을 때가 있다. 이 때 Collection api를 사용한다면 다음과 같이 indexOf 메서드를 사용하면 된다. List abs = List.of(12, 14, 16); int index = abs.indexOf(14); System.out.println(index); // 1 하지만 요소가 primitive 타입인 경우, List 자료형으로 만들기 위해 Integer와 같은 Wrapper 클래스로 형태를 변환해주어야 한다. Arrays.binarySearch() 메서드는 정렬된 배열 요소중 중복된 값이 없음이 보장 될 경우, Collection의 indexOf 와 같은 결과값을 얻을 수 있다. binarySearch() int[] numbers ..

Language/Java

[eclipse] javax.servlet 패키지 import 오류

😢 오류 발생 상황 새로운 프로젝트에서 Servlet 클래스를 생성하였더니, 다음과 같이 javax.servlet 패키지를 import하지 못하는 문제가 발생했다. 💡 해결 방법 1 - 이 오류는 이클립스 프로젝트에 servlet 라이브러리가 추가되어있지 않기때문에 발생한다. - tomcat에서는 web 개발에 필요한 servlet, websocket, jsp 등의 .jar 파일들을 포함하고 있기 때문에 tomcat/lib 경로에 있는 .jar 파일을 프로젝트에 추가해주면 된다. - 프로젝트 우클릭 -> Build Path -> Configure Build Path... - 위쪽 탭에서 Libraries -> Classpath 클릭 -> 우측 메뉴 중 Add External JARs... - tomcat..

Language/Java

[Java] 문자열 분리를 위한 StringTokenizer

자바는 문자열을 위한 다양한 클래스가 존재한다. 문자열을 이어 붙이기 위한 StringBuffer / StringBuilder 부터, 문자열 사이나 앞, 뒤에 구분자를 추가해주는 StringJoiner까지 그 종류는 다양하다. 그 중 java.util 의 StringTokenizer 클래스는 문자열을 토큰(token)의 형태로 나누어 처리 할 수 있도록 한다. StringTokenizer 생성자 StringTokenizer의 생성자는 다음과 같이 3가지 종류가 있다. StringTokenizer(String str) - 매개변수로 받은 문자열을 띄어쓰기 기준으로 분리. StringTokenizer(String str, String delim) - 매개변수로 받은 문자열을 두번째 매개변수로 받은 문자를 기..

KAispread
'Language/Java' 카테고리의 글 목록