본문 바로가기
Java에서 동기화를 보장하는 방법 1. Monitor Monitor는 동시성 제어를 위한 기법이다. 세마포어나 락보다는 고수준의 기법으로 프로그래밍 언어수준에서 지원한다. 세마포어의 경우는 상황에따라 timing error가 발생할 수 있는데 이는 찾기도 힘들고 어떤경우에는 생길수도 생기지 않을수도 있다. 타이밍 에러에 대해서 간단하게 설명해보면 임계구역에 접근하기 전에 wait를 실행해야하고 임계구역을 나올때 siginal을 실행해야하는데 만약 순서를 잘못 지키면 타이밍 에러가 발생한다. wait후에 signal을 호출해야하는데 또다시 wait를 작성하면 교착상태가 발생할 수 있다. 이를 해결하기 위해서 언어차원에서 Monitor라는 기법을 제공하는 것이다. Monitor는 결국 세마포어를 개발자가 직접 관리할때 구현을 잘못할 수 있는.. 2021. 11. 5.
자바 객체 생성되는 과정에 대해서 1. KeyPoint 자바 객체가 생성될때 초기화 되는 순서 생성자가 필요한 이유 초기화 블록이 필요한 이유 2. 배경지식 자바 객체 생선 순서를 알아보기 전에 기본적으로 알아야 하는 내용을 간략하게 정리했다. 2.1 Static Blocks 클래스가 로딩되고 클래스 변수가 준비된 후 자동으로 실행되는 블록이다. 한 클래스 안에 여러 개의 static블록을 넣을 수 있고 위에서부터 아래로 순서대로 static block을 실행한다. public class ObjectTest { private final static String CONSTANT = "TEST"; private String instant; public ObjectTest() { System.out.println("No Argument Con.. 2021. 9. 2.
Java 배열에 대해서 1.1 배열이란? 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다. 서로 다른 타입은 저장이 불가능하고 같은 타입만 저장할 수 있다. 1.2 배열의 선언과 생성 배열의 선언 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열을 의미하는 대괄호를 붙인다. int [] scores; int scores[]; 배열의 생성 배열을 선언하고 선언한 변수에는 배열을 생성해야한다. new연산자를 이용해서 배열을 생성할 수 있다. int[] score; score = new int[5]; 아래 코드는 선언과 동시에 배열을 생성까지하는 코드이다. 위에서 작성한 코드는 선언과 생성을 따로하고 있다. 즉, 선언을하고 생성을 하지 않으면 메모리 공간만 확보한것이고 값을 저장하지는 못하는것이다. int[] score .. 2021. 8. 27.
자바 String 클래스에 대해서 자바 String 클래스에 대해서 이번 주제에서 다룰 핵심내용을 정리해보면 아래와 같다. String은 내부적으로 char[]배열을 사용해서 문자열을 저장한다. new 연산자로 생성하면 String constant pool에 저장하지 않고 힙에 그대로 저장 String은 불변클래스이므로 매번 새로운 인스턴스를 생성하는것이다. String클래스에 대한 간단한 소개 String클래스는 불변객체이다. String클래스 내부에는 final로 선언된 char [] val 이 들어있다. String클래스를 통해 문자열을 저장하면 내부에서는 char [] 배열을 이용해서 문자열 정보를 저장하는것이다. 만약 ,"ABC"라는 문자열을 String클래스로 저장을 한다면 value라는 char 배열에 한문자씩 들어가는것이다.. 2021. 8. 27.
Thread Dump로 DeadLock 확인하기 1. Thread란 쓰레드는 프로세스 내부에서 작업을 실행해주는 흐름이다. 한개의 프로세스에는 반드시 1개의 쓰레드가 존재하고 여러개의 쓰레드가 동작하기도한다. 2. Thread Dump란 여러개의 쓰레드를 실행을 하게되면 쓰레드끼리 공유하는 자원이 있다. 공유하는 자원에 여러개의 쓰레드가 동시에 접근해서 데이터를 변경하면 의도치않은 결과가 발생한다. 이를 방지하기 위해서 공유자원에 접근하는 쓰레드를 제한하는 방법을 제공해준다. 이렇게 잠금을 획득하는 과정에서 쓰레드끼리 서로 같은 잠금을 획득하는 과정에서 DeadLock이 발생할 수 있는데 쓰레드 덤프를 활용하면 각 쓰레드의 상태를 파악할 수 있다. 쓰레드 덤프는 실행중인 애플리케이션의 쓰레드 상태정보를 알려주는것이다. 3. Thread Dump 활용 .. 2021. 6. 12.
자바 - enum Enum 자바 1.5 이전에는 상수를 정의할때 `private final static`을 이용해서 상수값을 관리했다. `enum`이 등장한 이유와 `enum`을 사용하면 어떤장점이 있는지 `enum`을 사용하면 얻는 장점을 정리해보자. 정수 열거 패턴 vs enum 대부분의 개발자들은 아래와 같이 상태를 정의할때 정수를 열거하는 방식을 사용해본 경험이 한번쯤은 있다. 이를 정수 열거 패턴이라고 하는데 정수 열거패턴은 치명적인 단점이 있다. 판매상태를 보내야하는 메서드의 파라미터로 배송상태를 넘겨줘도 아무 문제 없이 동작하게 된다. private final static int SELLING_STOP = 0; private final static int SELLING_START = 1; private fin.. 2020. 9. 1.