Java
-
싱글톤 패턴의 동시성 이슈와 해결책Java 2024. 12. 22. 12:30
1. 싱글톤 패턴의 정의와 필요성 소프트웨어 개발에서 싱글톤 패턴은 객체를 하나만 생성하여 공유하는 설계 패턴으로, 주로 애플리케이션의 전역 상태를 관리하거나 고정된 리소스를 효율적으로 활용하기 위해 사용한다. 데이터베이스 연결 풀, 로그 관리, 설정 정보 등과 같이 애플리케이션 전역에서 단일 객체만 필요하거나 공유되어야 하는 경우에 적합하다. 하지만 싱글톤 패턴을 구현할 때에는 동시성 문제를 해결해야 합니다. 특히 멀티스레드 환경에서는 동일한 객체가 여러 번 생성되지 않도록 주의해야 하며, 객체 초기화 방식에 따라 성능과 메모리 점유 효율성이 달라질 수 있다. 싱글톤 패턴의 구현방식을 알아보고 java에서부터 kotlin까지 어떤 방식으로 싱글톤 패턴을 구현하는지 알아보자. 2. 싱글톤 패턴의..
-
자바 객체 생성되는 과정에 대해서Java 2021. 9. 2. 23:20
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..
-
Java 배열에 대해서Java 2021. 8. 27. 23:58
1.1 배열이란? 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다. 서로 다른 타입은 저장이 불가능하고 같은 타입만 저장할 수 있다. 1.2 배열의 선언과 생성 배열의 선언 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열을 의미하는 대괄호를 붙인다. int [] scores; int scores[]; 배열의 생성 배열을 선언하고 선언한 변수에는 배열을 생성해야한다. new연산자를 이용해서 배열을 생성할 수 있다. int[] score; score = new int[5]; 아래 코드는 선언과 동시에 배열을 생성까지하는 코드이다. 위에서 작성한 코드는 선언과 생성을 따로하고 있다. 즉, 선언을하고 생성을 하지 않으면 메모리 공간만 확보한것이고 값을 저장하지는 못하는것이다. int[] score ..
-
자바 String 클래스에 대해서Java 2021. 8. 27. 23:55
자바 String 클래스에 대해서 이번 주제에서 다룰 핵심내용을 정리해보면 아래와 같다. String은 내부적으로 char[]배열을 사용해서 문자열을 저장한다. new 연산자로 생성하면 String constant pool에 저장하지 않고 힙에 그대로 저장 String은 불변클래스이므로 매번 새로운 인스턴스를 생성하는것이다. String클래스에 대한 간단한 소개 String클래스는 불변객체이다. String클래스 내부에는 final로 선언된 char [] val 이 들어있다. String클래스를 통해 문자열을 저장하면 내부에서는 char [] 배열을 이용해서 문자열 정보를 저장하는것이다. 만약 ,"ABC"라는 문자열을 String클래스로 저장을 한다면 value라는 char 배열에 한문자씩 들어가는것이다..
-
자바 - enumJava 2020. 9. 1. 22:49
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..