[Java] 동시성 제어 2탄 - 세마포어(Semaphore)
·
Teck Stack/Java
개요[Java] 동시성 제어 1탄 - Lock [Java] 동시성 제어 1탄 - Lock개요멀티 스레딩 환경에서 발생할 수 있는 동시성 문제 상황을 살펴보고, Java에서 이를 어떻게 제어할 수 있는지 알아보고자 합니다. 동시성 제어에는 다양한 방법이 존재하지만, 이번 포스팅에taetae99.tistory.com 이전 게시글에 이어서, Java 환경에서 동시성을 제어하는 방법에 대해 작성하겠습니다. 이번 게시글에서는 세마포어를 활용한 동시성 제어를 다루고 있습니다. 세마포어란?세마포어는 동시에 실행할 수 있는 스레드 수를 제한하는 데 사용합니다. 즉, 자원에 대한 접근을 일정 수준으로 제한하고 싶을 때 사용할 수 있습니다. 세마포어의 동작은 다음과 같습니다.세마포어에서 퍼밋을 획득한다. ( permi..
[Java] 동시성 제어 1탄 - Lock
·
Teck Stack/Java
개요멀티 스레딩 환경에서 발생할 수 있는 동시성 문제 상황을 살펴보고, Java에서 이를 어떻게 제어할 수 있는지 알아보고자 합니다. 동시성 제어에는 다양한 방법이 존재하지만, 이번 포스팅에서는 그중에서도 Lock을 활용한 제어 방식에 대해 중점적으로 다뤄보고자 합니다. 동시성 문제 상황 상품 클래스(Product)에 재고 감소 로직(decrease)이 있습니다.public class Product { private String name; private int stock; public Product(String name, int stock) { this.name = name; this.stock = stock; } public void decreas..
[Java] 일급 컬렉션(First Class Collection)이란?
·
Teck Stack/Java
개요우테코 프리코스를 진행하면서 클린 코드 원칙을 준수해야 했습니다. 그중에서 "컬렉션에 대해 일급 컬렉션을 적용했는가?"라는 항목이 존재했고, 처음 들어보는 단어였기에 관심을 갖게 되었습니다. 일급 컬렉션은 소트웍스 앤솔로지의 객체지향 생활 체조 원칙에서 언급된 단어입니다. 일급 컬렉션이 무엇인지 그리고 언제 사용하면 좋을지 알아보겠습니다. 일급 컬렉션일급 컬렉션은 컬렉션을 Wrapping 하면서, 컬렉션 이외의 다른 멤버 변수를 가지지 않는 클래스를 의미합니다. 컬렉션을 단순히 데이터 보관용 객체로 두지 않고, 하나의 객체로 추상화해 책임을 부여한 클래스입니다. 컬렉션을 클래스로 포장하여 책임을 갖기 때문에 컬렉션에 대한 비즈니스 로직을 내부에 작성하고 관리할 수 있습니다. 예시를 들어보겠습니다..
[JAVA] Static은 언제 사용할까?
·
Teck Stack/Java
Staticstatic 키워드를 사용한다는 것은 프로그램이 시작될 때 메모리에 한 번 할당되고 프로그램이 종료될 때 해제되는 것을 의미합니다. static 키워드는 변수와 메소드에 선언할 수 있습니다. 정적 변수 사용 예시public class Cat { private static final String SOUND = "meow"; public void sound() { System.out.println(SOUND); }} 정적 메소드 사용 예시public class Cat { public static void sound() { System.out.println("meow"); }}//사용Cat.sound();정적 메소드는 객체를 생성하지 않고 클래스명..
[Java] Error와 Exception
·
Teck Stack/Java
자바에서는 Error(오류)를 Error(오류)와 Exception(예외)로 나눌 수 있습니다. Error (오류)시스템이 종료되어야 할 수준과 같이 수습할 수 없는 심각한 문제개발자가 미리 예측하여 방지할 수 없다.Exception (예외)개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생개발자가 방지 가능하다. 오류는 발생시점에 따라 컴파일 오류와 런타임 오류로 나눌 수 있다. Compile Error (컴파일 오류)소스코드를 컴파일하는 과정에서 발생하는 오류이다.컴파일러가 코드를 읽고 바이트코드(. class)로 변환하는 과정에서 발견된다.오타나 구문 오류, 선언되지 않은 변수, 함수 혹은 클래스 등을 사용한 경우에 발생한다.Runtime Error (런타임 오류)소스코드 컴파일은 정..
[Java] JVM의 구조
·
Teck Stack/Java
JVM (Java Virtual Machine)JVM은 자바 가상 머신의 약자입니다. 이는 Java의 바이트 코드를 실행하는 역할을 담당합니다. JVM은 소프트웨어로서, 서로 다른 플랫폼에서 자바 프로그램이 실행되는 동일한 환경을 제공합니다. 자바 프로그램을 소스 파일(. java)로 작성하고, 자바 컴파일러는 소스 파일을 컴파일하여 바이트 코드(. class)를 생성합니다. 변환된 바이트 코드는 기계어가 아니므로 OS에서 바로 실행될 수 없습니다. 이때 JVM이 Java와 OS사이에서 중개자 역할을 수행하여 OS가 바이트 코드를 이해할 수 있도록 도와줍니다. JVM 구조 Class Loader (클래스 로더)JVM이 실행 중 필요한 클래스를 동적으로 메모리에 올려 실행할 수 있게 해주는 역할입니..