본문 바로가기

백엔드 기술/Java

(21)
자료구조 - Stack, Queue 차이점 자료 구조 Java에서 자료 구조라 함은, 여러 데이터의 묶음을 저장하고 사용하는 방법을 정의한 것. 아래의 자료 구조 중 가장 많이 사용되는 대표적인 Stack, Queue에 대해 알아 보자. 1. Stack // ex)프링글스 통 #1. LIFO (Last In First Out) - 먼저 들어간 데이터가 제일 나중에 나온다. #2. 데이터는 하나씩 넣고 뺼 수 있다. #3. 하나의 입출력 방향을 가지고 있다. #4. 그래프 탐색 중 '깊이우선탐색(DFS)'에 사용된다. Stack stack = new Stack(); // int 형 스택 Stack stack = new Stack(); // char형 스택 브라우저 앞으로 가기, 뒤로 가기 1. 새로운 페이지로 접속할 때, 현재 페이지를 #Prev ..
Synchronized 키워드의 이해 [Synchronized 키워드] Java 언어에서 '동시성'은 필수 요소 이다. 여러 스레드가 공유 리소스에 액세스 할 때, 기타 동기화 관련 문제를 피하기 위해, 한 번에 하나의 스레드만 리소스에 액세스 할 수 있도록 하는 것이 중요하다. Java에서 이를 가능하게 하는 한 가지 방법은 synchronized 키워드를 사용하는 것이다. 이처럼 공유된 리소스의 '동시성' 문제와 동기화 관련 문제를 방지하는 synchronized 키워드의 대상은 instance method와 static method 가 된다. 이 글에서는 이 synchronized 키워드가 어떻게 동작하는지, 해당 키워드를 instance method와 static method에 적용하면 무엇이 다른지에 대해 알아볼 예정이다. 1. 스..
얕은 복사 VS 깊은 복사 얕은 복사 (Swallow Copy) 원본 객체의 non-static 필드를 복사하여 새로운 객체로 생성하는 것. 새로운 객체를 생성할 때 원본 객체의 필드 타입으로 나뉜다. 1. 원본 객체가 non-primitive 타입의 필드를 가지고 있을 때. 2. 원본 객체가 primitive 타입의 필드를 가지고 있을 때. *primitive 타입 : int, float, double, char, byte, short, long, boolean* 1. 원본 객체가 non-primitives 타입의 필드(변수)를 가질 경우, 원본 객체의 non-primitive 타입의 필드들을 복사하여 새로운 객체를 생성한다. 그 결과, 원본 객체와 얕은 복사의 결과인 새로운 객체는 동일한 non-primitive 타입 필드들을..
Optional<T> 클래스란 ? Optional 클래스 Java 프로그래밍을 하다보면 객체의 값이 null 값일 경우, 그 객체를 참조할 때 발생하는 #NullPointerException(NPE)가 자주 발생한다. [#NullPointerException(NPE)] 정의 : null 때문에 발생하는 Runtime Exception. 원인 : null 자체의 의미가 모호해 다양한 파생 에러가 발생. 예시 #1. null 객체의 인스턴스 메서드를 호출 Object obj = null; obj.toString(); #2. null 객체의 필드 액세스 또는 수정 Person p = null; p.name = "nhj"; #3. 빈 배열 객체에 길이 속성을 가져올 때 int[] arrayInts = null; arrayInts.length; ..
Multi-Thread & Multi Process 우선 #멀티 쓰레드와 #멀티 프로세스에 대해 알아보자. #멀티 쓰레드 (Multi Thread) 하나의 프로세스에서 여러 개의 스레드를 사용해 작업을 하도록 해주는 기능이며 각 쓰레드는 자신이 속한 하나의 프로세스의 메모리를 공유하며 실행된다. #멀티 프로세스 (Multi Process) 여러 개의 CPU의 코어를 사용하여 여러 개의 프로세스를 동시에 수행하는 것을 의미하며, 각 프로세스는 독립적인 메모리를 가지고 별도로 실행된다. 그림과 같이 하나의 프로세스 안에 여러 개의 스레드가 존재한다. [쓰레드] 프로세스 내에 작업을 수행하는 흐름. [싱글 스레드 (Single Thread)] 하나의 프로세스 내에서 하나의 스레드를 이용하여 한 번에 한 작업만 수행하는 것. [멀티 쓰레드] 하나의 프로세스 내에..
SingleTon 디자인 패턴 [싱글톤 패턴] 소프트웨어 디자인 패턴 중 하나인 #싱글톤 패턴 은, 생성자가 여러차례 호출되어도 실제로 생성되는 객체는 하나이며, 최초 생성 이후 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 것. 즉, 하나의 클래스에 하나의 객체를 생성하도록 하는 패턴. [장점] 1. 메모리 측면의 이점 > 1개의 인스턴스만을 고정 메모리 영역에 생성하므로, 메모리 낭비를 방지 가능 2. 객체의 유일성을 보장 3. 속도 측면의 이점 > 생성된 인스턴스를 사용할 때는 이미 생성된 인스턴스를 활용하므로 속도에 있어서 빠르다. 4. 데이터 공유의 이점 > 싱글톤이 적용된 클래스의 인스턴스는 #전역 인스턴스라 다른 클래스의 인스턴스들과 데이터 공유가 쉽다. [단점] 1. #전역 인스턴스 이므로 다른 클래스의 인스턴..
컴파일(Compile)과 런타임(Runtime) Java에서 개발 언어로 작성된 소스 코드를 실행 가능한 코드로 변환하고 실행하는 과정에는 #컴파일과 #런타임이라는 두 가지 주요 단계가 포함된다. 컴파일 (Compile) 컴파일 이란, 개발언어로 작성된 소스 코드(.java 파일들)를 컴퓨터가 인식 가능한 기계어 코드 (바이트코드 = .class파일)변환하여 실행가능한 프로그램이 되는 과정 Java, C, C++ 등의 언어는 #컴파일 언어이며, 실행(Runtime)을 위해서 반드시 #컴파일 과정을 거쳐야 한다. 반면, JavaScript, Php, Python 등의 언어는 #스크립트 언어이며, #컴파일 과정 없이 기계어로 번역되는 즉시 동작하도록 되어 있다. 그래서 컴파일 언어와 비교하면 스크립트 언어는 실행할 때 마다 번역과정을 거쳐야 하므로 속도가..
Java - Generic 제네릭이란 ? 제네릭(Generic) Java에서 Generic은, 클래스나 메서드에서 사용할 데이터 타입을 내부가 아닌 외부에서 지정하는 방법이다. 즉, 데이터 타입을 미리 지정해주는 대신 타입의 경계만 지정하고, #컴파일 때 필요한 타입으로 캐스팅하는것 [장점] 1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 #컴파일 단계에서 방지할 수 있다. 2. 클래스 외부에서 타입을 지정해, 내부에서 따로 타입을 체크하고 변환해줄 필요가 없다. = 관리가 편함 3. 비슷한 기능을 지원하는 경우, 타입이 정해지지 않았으므로 코드의 재사용성이 높아진다. [사용 방법] 타입 설명 Type Element Key Value Number 정해진 규칙은 아니지만, 일반적으로 위와 같이 사용하고 있다. #1. 클래스 및 인터페이..