[Java] 프록시 패턴을 통한 멀티 스레드 환경 조성하기
·
Dev Lang/JAVA
멀티스레드에서의 동시성멀티스레드 환경에서의 컬렉션 프레임워크들은 공유변수에 대한 값을 보장할 수 있을까?수 많은 스레드의 접근에도 유효한 값을 보장하는지에 대한 궁금증을 해결하기 위해 아래의 예시를 준비했습니다. 단순 컬렉션 구현 코드package thread.collection.simple.list;import static util.ThreadUtils.*;import java.util.Arrays;public class BasicList implements SimpleList { private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size = 0; public BasicList() { elem..
[Java] 제네릭 클래스의 이해와 활용
·
Dev Lang/JAVA
학습 키워드Generic Class & InterfaceType ParameterType SafetyCode ReusabilityBounded Type ParameterMultiple Type ParametersRaw TypeType Inference 학습 내용1. 제네릭 클래스의 기본 구조와 필요성Java에서 제네릭이 없던 시절의 코드를 보면 다음과 같은 문제점이 있었다.// 제네릭 이전의 코드class OldBox { private Object item; public void setItem(Object item) { this.item = item; } public Object getItem() { return item; }}// 사용 예시OldBox..
[JAVA] 자바의 기본형과 참조형의 값 공유 특성
·
Dev Lang/JAVA
학습 키워드기본형(Primitive Type)참조형(Reference Type)값 복사(Pass by Value)참조 복사(Pass by Reference)학습 정리1. 기본형(Primitive Type)기본형은 실제 값을 복사하여 전달. 복사본은 원본과 독립적으로 동작하며 서로 영향을 주지 않음.public class PrimitiveExample { public static void main(String[] args) { int x = 10; int y = x; // x의 값 복사 x = 20; // x값 변경 System.out.println("x: " + x); // 출력: 20 System.out.println("y:..
[TypeScript] TypeScript에서 간단한 데코레이터(어노테이션) 구현하기
·
Dev Lang/TypeScript
TypeScript에서 가벼운 어노테이션(데코레이터)을 만드는 기본적인 세팅을 위해 VSCode를 사용하여 프로젝트를 설정하는 방법을 단계별로 알아보겠습니다.1. 프로젝트 디렉토리 설정먼저 새로운 TypeScript 프로젝트를 위한 디렉토리를 만듭니다. 터미널에서 다음 명령을 실행합니다.mkdir ts-annotation-projectcd ts-annotation-project2. package.json 생성프로젝트 디렉토리 안에서 npm init 명령으로 기본 설정 파일을 생성합니다.npm init -y이 명령은 package.json 파일을 자동으로 생성해 줍니다.3. TypeScript 설치TypeScript와 Node.js에서 실행할 수 있게 관련 패키지들을 설치합니다.npm install typ..
[TypeScript] 타입스크립트: 컴파일타임에서의 오류 감지
·
Dev Lang/TypeScript
런타임과 컴파일타임에 대해서 알고 있니?런타임(Run-time)과 컴파일 타임(Compile-time)의 개념을 이해하는 것이 TypeScript와 JavaScript의 차이를 이해하는 데 중요한 요소입니다. 이 두 개념이 어떻게 작동하는지 명확하게 이해하면, 왜 TypeScript가 더 엄격한 타입 시스템을 제공하는지, JavaScript가 왜 동적 언어로 런타임 시에 오류를 감지하는지 알 수 있습니다.1. 컴파일 타임(Compile-time)컴파일 타임은 코드가 실행되기 전에, 즉 프로그램이 빌드되는 과정에서 일어나는 단계입니다.컴파일러는 코드를 읽고, 그 코드가 올바른지 확인한 후 기계어로 번역하거나 다른 형태의 코드로 변환하는 역할을 합니다.이 단계에서 문법 오류나 타입 오류가 발생하면, 코드가 ..
[TypeScript] 타입스크립트: 정적 타입 시스템 제공(문자열 타입 & 문자열 리터럴 타입)
·
Dev Lang/TypeScript
두 타입은 두 언어에서 어떻게 사용되고 있을까?문자열 리터럴 타입과 같은 개념은 TypeScript에서 중요한 핵심 개념이지만, JavaScript에서는 제한적으로 적용되는 개념입니다. 그 이유는 TypeScript는 정적 타입 시스템을 제공하는 반면, JavaScript는 동적 타입 언어로 설계되었기 때문입니다.TypeScript에서의 핵심 내용문자열 리터럴 타입과 같은 기능은 TypeScript에서 매우 중요한 역할을 합니다. TypeScript는 JavaScript의 상위 집합으로, 개발자가 코드 작성 시 더 안전한 타입 검사를 통해 버그를 예방할 수 있도록 도와줍니다.TypeScript는 타입을 명시적으로 지정하거나 추론을 통해 정적 분석을 수행하여 런타임 전에 타입 오류를 찾아낼 수 있습니다.문..
[Python] else의 다른 활용
·
Dev Lang/Python
파이썬에서 else 문은 일반적으로 if 문과 함께 사용되는 것을 주로 볼 수 있습니다. 그러나 파이썬에서는 else 문이 for, while 및 try 문과도 함께 사용될 수 있습니다. 이러한 사용법은 다른 언어와는 달리 특별하며, 때로는 혼동을 줄 수 있습니다. 각 사용 사례에 대해 설명하겠습니다. 1) for-else: for 문과 함께 사용될 때, for 문이 전체를 순회한 후에 (즉, 중간에 break로 인해 중단되지 않은 경우) else 블록이 실행됩니다. for i in range(5): if i == 10: break else: print("Loop was not interrupted by break.") 2) while-else: while 문과 함께 사용될 때, while 조건이 거짓이..
[Python] reverse, reversed
·
Dev Lang/Python
파이썬 reverse, reversed의 차이 파이썬에서 리스트의 요소를 뒤집을때 reverse, reversed를 사용한다. 이 두개의 차이에 대하여 간단하게 알아보자. reverse reverse는 list타입에서 제공하는 함수이다. l = ['a', 'b', 'c'] t = ('a', 'b', 'c') d = {'a': 1, 'b': 2, 'c': 3} s = 'abc' l.reverse() # list의 순서를 뒤집어줌 t.reverse() # AttributeError: 'tuple' object has no attribute 'reverse' d.reverse() # AttributeError: 'dict' object has no attribute 'reverse' s.reverse() # ..
개발자 성현