try와 catch문은 예외처리를 할 때 사용하는 구문이다. 예외처리? 프로그램 실행 중 오류, 예외(Exception)이 발생한 경우 프로그램이 강제종료 되지 않고 정상 처리될 수 있게 하는 방법 try-catch-finally 예시 try{ //예외가 발생할 수 있는 코드 }catch(Exception exception){ //Exception이 발생했을때 처리하기 위한 코드를 입력 //보통 예외 메세지를 출력하고 로그로 남긴다. //exception은 참조 변수를 의미 }catch(Exception2 exception2){ //Exception2가 발생했을때 처리하기 위한 코드 입력 }finally{ //예외 발생과 관계 없이 반드시 실행되는 코드를 넣는다 } 예제를 보면 알 수 있듯이 try에 코..
멀티 스레드가 가능한 자바에서 singleton 패턴을 사용할 때, Thread safe singleton을 많이 사용한다. Thread safe가 필요한 이유는 멀티 스레드를 구현할 때 스레드를 사용하는 도중 문제가 일어나지 않게 하기 위해서 이며, 동기화를 위해 사용한다. 이걸 패턴으로 구현한게 Thread safe singleton 이다. Thread safe singleton class Singleton { private static Singleton singleton; private Singleton() {} public static synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton()..
오랜만에 intellij를 사용하는데 아래 사진처럼 소스코드가 실행되지 않는 상황이 발생했다. 버튼도 안되고 단축키도 안됨 이럴 땐 [Current File]의 Edit Configurations로 들어간다. 여기서 + 를 누른 뒤 Application을 클릭해준다. 그리고 Name, Build and run, 실행 위치를 설정 해주면 소스코드 실행이 가능하다!
자바에서 this. 는 뭘 의미할까? this. 는 인스턴스 맴버를 가리킨다 this. 는 자신을 가리키는 키워드, 자신의 객체에 접근할 때 사용 그러니까 필드(전역변수)를 명확히 구분하기 위해서 사용 클래스 맨위에 전역변수로 선언된 그 변수 변수의 이름이 동일할 때 구분하기 위해 사용! 변수 이름이 같을때 구분하기 위해 this를 붙인다. 매소드의 인자값으로 받는것과 this. 변수는 다르다 인스턴스 맴버? 자기가 가지고 있는 필드 및 메소드를 의미한다. this. 사용 예시1 public class Test{ int a; //인스턴스 필드 public Test(int a) //
java는 멀티 스레드를 지원하는 언어이다. 그러다 보니 싱글 스레드에서 최적화된 접근이 있고, 멀티 스레드에서 사용하기 위한 방법도 존재한다. 여기서 멀티 스레드 환경에서 어떤 함수나 변수, 객체가 여러 스레드로부터 동시에 접근이 일어나도 프로그램 실행에 문제가 없는 Thread-safe를 고려한 자료형이 존재한다. ConcurrentHashMap이란? 멀티 스레드 환경에서도 사용할 수 있게 나온 클래스로, 동시성을 높이기 위해 나온 클래스 hashTable과 synchronized map 보다 더 나은 성능을 가지고 있다 왜냐면 concurrentHash Map 은 map의 일부에만 lock을 걸고, hashTable과 Synchronized는 map 전체에 lock을 걸기 때문 사용 예시 1 pub..
java는 멀티 스레드(Multi-Thread) 프로그래밍이 가능한 언어이다. 동시에 여러 가지 일을 할 수 있도록 하는 멀티 스레드, 그리고 스레드는 자바의 중요한 특성인데 cpu의 사용률을 높이기 위해 사용한다. 멀티 스레드 구현을 효과적으로 하기 위해 Atomic과 CAS 같은 개념이 사용된다. Atomic synchromized는 lock을 사용해 다른 스레드가 wating 하는 상황이 발생한다. 이걸 해결하기 위해 non-blocking한 방법으로 Atomic연산 사용 Atomic연산의 핵심 원리가 바로 CAS(Compare and swap)이다 atomin 자료형은 기본 자료형의 동기화를 보장해주는데 내부에서 CAS 알고리즘을 사용 atomic 변수는 멀티 스레드 환경에서 원자성을 보장해주기 ..
Given-When-Then Pattern? 코드 작성 후 이를 검증하기 위한 테스트 코드 작성 방식으로, 테스트 코드를 Given-When-Then 3구역으로 나눠서 표현하는 방식 [준비 - 실행 - 검증] 방식이라 할 수 있다. given : 입력값 / when : 어떻게 할지 행동 / then 은 결과, assert로 나타내는 간단한 패턴 방식이다. 패턴 사용 예시 @Test void hashKeyCheck() { //given HashMake hashmake = new HashMake(); hashmake.saveData(1, "lee"); hashmake.saveData(2, "aa"); hashmake.saveData(3, "lsse"); //when Object returnvalue = ha..
멀티 스레드를 잘 사용하기 위해선 동기화 문제를 해결해야 한다. Java에선 멀티 스레드를 지원하기 위한 구현체를 제공하는데 그 중 Synchronized를 사용하여 동기화와 Critical Section을 사용해보자. 멀티스레드의 동기화를 사용하지 않을 경우 멀티스레드를 구현하는 데 동기화를 사용하지 않는 예제 코드는 아래와 같다. Thread를 두 개 만들어 멀티 스레드를 구현한 다음, CountCheck의 더하기를 멀티스레드로 실행한다. Main package org.example; public class Main { public static void main(String[] args) { TaskRunnuble taskR = new TaskRunnuble(); Thread th1 = new Thr..
자바는 stack, heap, static 이라는 3개의 메모리 영역을 가지고 있다. 자바 멀티 스레드 환경은 스레드들끼리 static, heap영역을 공유하기 때문에 공유 자원에 대한 동기화 문제를 신경 써야 한다. 자바는 java.util.concurrent.lock 패키지를 통해 Lock 외의 직접 동기화 구현이 가능한 lock 구현제를 제공하는데, 여기에 Synchronized와 Reentrant 등의 클래스가 존재한다. 이 둘의 차이점은 아래와 같다. synchronized와 Reentrant 차이 Synchronized 현재 데이터를 사용하고 있는 해당 스레드를 제외한 나머지 스레드들이 데이터에 접근 불가하도록 하는 개념 자바에서 스레드 동기화 시 사용하는 대표적인 기법 synchronized..