본문 바로가기

분류 전체보기55

[디자인 패턴] 싱글톤 제 2장 - "싱글톤의 심화과정" 지난 시간에는 싱글톤의 개념과 기본적인 구현 방법 멀티 쓰레드 환경에서 thread - safe 하게 구현하기 그리고 이른 초기화에 대해서 알아보았습니다 (지난 챕터, 싱글톤 제 1장 보러 가기) 이번 시간에는 JAVA 에서 권장하는 방법들과 더불어 1 장에서 다뤘던 개념들의 단점들을 보완하기 위해 나온 방안들을 살펴보겠습니다 Double Checked Locking 멀티 쓰레드 환경에서 이른 초기화처럼 객체를 미리 생성하지 않으면서 synchronized 의 성능 이슈 또한 사전에 방지할 수 있는 기법입니다 Double Checked Locking public class GlobalSettings { private static volatile GlobalSettings instance; private .. 2024. 1. 25.
[디자인 패턴] 싱글톤 제 1장 - "개념 및 멀티 쓰레드와 이른 초기화" 전역으로 공통되어야 하는 데이터가 담긴 인스턴스를 여러 개 생성한다면? 예를 들어 GlobalSettings 라는 클래스가 존재하고 PersonalSettings 에서 GlobalSettings 의 인스턴스를 여러 개 사용한다면 인스턴스의 일관성을 보장할 수 없고, 자원 낭비, 동기화 문제 등 여러 문제가 발생합니다 (GlobalSettings 는 글로벌 세팅으로 각 객체의 독립성이 요구되지 않는다는 가정) 문제가 되는 상황 예시 public class PersonalSettings { GlobalSettings gloSetOne = new GlobalSettings(); GlobalSettings gloSetTwo = new GlobalSettings(); boolean equalCheck = (glo.. 2024. 1. 24.
DB LOCK 에 대해서 알아보자 "여러 사용자 / 프로세스가 동시에 DB 에 접근하고 변경할 수 있다면??" 데이터의 일관성과 무결성이 보장되지 않을 것이다 이를 방지하기 위해 등장한 개념 데이터베이스 락 (Database Lock) 동시에 여러 사용자 혹은 프로세스가 DB 에 접근할 때 데이터의 일관성과 무결성을 유지하기 위해 데이터의 동시 수정을 제어하여 충돌을 방지하는 메커니즘 락의 주요 종류 공유 락(Shared Lock) 여러 트랜잭션이 동시에 데이터를 읽는 것을 허용한다 하지만 공유 락이 걸린 데이터를 다른 트랜잭션이 수정하는 것은 불가하다 주로 읽기 작업에 사용되며 여러 트랜잭션이 동시에 해당 데이터를 읽을 때 유용하다 트랜잭션 A 와 B 가 동일한 데이터에 접근하여 읽으려고 할 때 두 트랜잭션 모두 공유 락을 획득할 수 .. 2024. 1. 23.
람다(Lambda)란 무엇인가 (feat... 람다식) - JAVA "람다(lambda)" 수학과 논리학에서 비롯된 용어로 일반적으로 익명 함수를 의미한다 람다의 기본 개념 1. 익명성 람다는 이름이 없고 구현체만 제공하는 함수이다 이로 인해 간결성이 증가되고 단일 사용 목적을 가진 함수를 작성하기에 간편한 이점이 있다 주로 간단한 연산이나 다른 함수에 대한 인자 이벤트 헨들러 등에 사용된다 2. 클로저 람다는 정의될 때 주변 컨텍스트의 변수를 기억하며 정의된 외부 범위의 변수를 캡처하고 람다가 실행될 때 사용할 수 있는 특성이 존재한다 클러저를 통해 더욱 유연하고 표현력이 풍부한 프로그래밍이 가능하다 3. 간결한 정의 람다는 함수의 본문을 매우 간결하게 표현하기에 가독성을 향상시키고 복잡한 로직을 간단하게 표현할 수 있다 4. 퍼스트 클래스 시민 퍼스트 클래스 시민이란.. 2024. 1. 21.
제네릭(Generic)을 써보고 싶어요 - JAVA 아래 코드가 이해되시나요? 이해가 안 간다면 공부해 봅시다 "제네릭" public class Generic { private T content; public void setGeneric(T content) { this.content = content; } public T getGeneric() { return content; } public static void main(String[] args) { Generic genericForStr = new Generic(); genericForStr.setGeneric("Hello World"); Generic genericForInt = new Generic(); genericForInt.setGeneric(123456); System.out.println(.. 2024. 1. 20.
Java 로 테스트 코드를 작성하시나요? 그렇다면 "JUnit" 저번 시간에는 Test Code 가무엇인지 살펴보았으니,(Test Code 에 대해서 알아보러 가기) 이번 시간에는 java 에서 사용되는가장 대표적인 테스트 프레임워크인JUnit 에 대해서 살펴보겠습니다 JUnit 의 핵심 개념테스트 케이스JUnit 에서 각 테스트는테스트 케이스 클래스 내부에 정의되고보통 테스트할 클래스나 컴포넌트와동일한 이름으로 작성하며, 테스트 메소드를 포함한다(JUnit 4 이후부터는 TestCase 를 상속하지 않고, 단순한 Java 클래스로 작성해도 된다) @Test 어노테이션JUnit 4 이상을 사용하여 단순한 Java 클래스로 작성할 경우@Test 어노테이션을 사용하게 된다해당 어노테이션이 붙은 메소드의 경우, 테스트 메소드로 인식되고 실행된다 AssertJUnit 에서 .. 2024. 1. 19.
728x90
반응형