Deadlock은 mutual exclusion 과정에서 자원 접근 권한 획득과 자원 접근 권한 반환 관계의 꼬임으로 발생한다. Hold and Wait (점유 대기)다수의 스레드가 서로 다른 락을 획득한 후, 다른 락을 기다리며 무한 대기 상태에 빠지게 된다. Circular Wait (순환 대기)순환 대기는 점유 대기와 공유 자원 획득 후 다른 공유 자원 획득 시까지 무한 대기 상태는 동일 하지만, 서로 다른 자원을 점유하면서 서로의 자원을 기다리며 순환 대기 상태에 빠지게 된다. Starvation (기아 상태)다른 프로세스나 스레드가 공유자원의 접근 권한을 지속적으로 가짐으로써 발생할 수 있다.프로세스나 스레드가 공유 자원의 접근 권한을 해제하더라도 운영 방식 등의 이유로 인해 해당 프로세스나 ..
Thread는 하나의 프로세스 내에서 자원을 공유하면서 여러 개가 동시에 실행될 수 있다. Race Condition (경쟁 조건)Race condition은 둘 이상의 thread가 동시에 공유 자원 접근 시 발생한다. Critical Section (임계 구역)병렬 컴퓨팅에서 두 이상의 process 또는 thread가 동시 접근이 허용되지 않는 공유 자원에 접근하는 코드의 블록을 말함. Mutual Exclusion (상호 배제)Mutual exclusion이란 두 개 이상의 process 혹은 thread가 동시에 하나의 공유 자원으로 발생할 수 있는 race condition 문제를 해결하기 위해 어느 시점에서의 공유 자원 접근을 하나의 process 혹은 thread로 제한하는 것을 말한다..
메인 스레드 (Main Thread)자바 프로그램이 실행되면 JVM은 기본적으로 하나의 스레드를 생성하며, 이 스레드가 메인 스레드이다.메인 스레드는 public static void main(String[] args) 메서드를 실행하며, 자바 프로그램의 진입점 역할을 한다.메인 스레드는 자바 프로그램의 생명주기를 관리하며, 프로그램의 기본 스레드로 작동한다. 특징1. 프로그램의 시작점메인 스레드는 main() 메서드를 호출하며, 모든 프로그램 실행은 여기서부터 시작된다. 2. 프로그램 종료 관리자바 프로그램은 Main Thread와 그에 의해 생성된 모든 스레드가 종료될 때 프로그램이 종료된다. 3. 멀티 스레드 프로그램의 조정메인 스레드는 다른 사용자 정의 스레드를 생성하거나 조정할 수 있다.메인 스..
스레드란?프로세스 내에서 실행되는 여러 개의 실행 단위로, 경량화 프로세스라고 부르기도 한다.프로세스 내의 주소 공간이나 자원을 공유할 수 있다.각각 스레드는 각자의 스택과 레지스터 셋을 가지고 있다. 스레드 제어 블록 (Thread Control Block, TCB)스레드를 관리하기 위해 사용하는 데이터 구조스레드 ID (Thread ID)스레드 상태 (Thread State)프로그램 카운터 (Program Counter, PC)레지스터 값 ( Registers)스택 포인터 (Stack Pointer)우선순위 (Priority)스레드별 리소스 정보스레드 소속 정보동기화 정보 Thread 생성자바에서 멀티 스레드 프로그래밍을 구현하는 방법에는 크게 두 가지가 있다. 1. Thread 클래스 상속받아 구현..
프로세스란?프로그램을 실행시킨 인스턴스컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 (스케줄링의 대상이 되는 작업과 같은 용어로 쓰임)\프로그램 = 보조 기억 장치에 저장된 실행 코드프로세스 = 프로그램을 가동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위같은 시간에 여러 개의 프로그램을 실행하는 것을 멀티태스킹 이라고 한다. 프로세스의 구성 요소코드 섹션 (Code Section)실행할 프로그램의 명령어(코드)가 저장된 메모리 영역CPU는 이 영역의 명령어를 읽고 실행한다.데이터 섹션 (Data Section)전역 변수 및 초기화된 데이터가 저장되는 영역프로그램이 실행되면서 공유되거나 수정될 수 있는 데이터가 포함됨.힙 (Heap)동적으로 메모리를 할당받는 영역런타임에 필요..
StreamJava 8에서 도입된 데이터 처리 추상화 API컬렉션, 배열, 파일 등의 데이터 소스를 선언적이고 함수형 프로그래밍 스타일로 처리데이터의 흐름(flow)을 처리하는 데 중점데이터를 직접 저장하지 않음데이터를 읽어 필요한 연산을 수행연산이 데이터에 적용되지 않으며, 새로운 데이터 흐름을 생성 선언형 접근: 데이터 처리 과정을 간단하고 직관적으로 표현.함수형 프로그래밍 지원: 람다 표현식과 잘 어울림.원본 데이터 불변성 유지: 데이터를 안전하게 처리 가능.Lazy Evaluation: 성능 최적화 가능.단일 소비: 한 번 사용된 Stream은 재사용 불가.Lazy Evaluation (게으른 연산)Stream의 중간 연산은 실제로 결과를 즉시 반환하지 않습니다. 대신 최종 연산이 호출될 때 모든..
이름 없는 익명 함수(Anonymous Function)로, 값처럼 취급되어 변수에 저장되거나 함수의 매개변수, 반환값으로 사용 가능.Lambda의 역할일급 시민(First-Class Citizen)으로서의 함수: 함수 자체를 값처럼 다룸.고차 함수 구현: 함수를 매개변수로 받거나 반환값으로 제공 가능.순수 함수 표현: 상태를 변경하지 않고 동일한 입력에 동일한 출력을 제공.스트림 API 활용: 선언적으로 데이터 필터링, 매핑, 집계 등을 수행.Lambda의 장점코드 간결성: 익명 클래스를 대체하여 짧고 간결한 코드 작성 가능.가독성 향상: 함수의 동작에 집중 가능해 이해하기 쉬운 코드 작성.함수형 프로그래밍 지원: 고차 함수와 조합 가능, 선언적 프로그래밍 구현.병렬 처리 용이: 스트림 API와 결합하..
객체 생성1단계: 메모리 할당new 키워드를 사용하여 Heap 영역에 메모리 할당2단계: 생성자를 사용하여 객체 초기화클래스 이름과 괄호를 사용Date now = new Date(); 객체 사용메소드 호출 등 객체 제거원시 메모리 회수메모리 할당 해제 final 클래스슈퍼 클래스로 동작하도록 설계하지 않은 클래스를 파생하는 것은 위험할 수 있음final로 선언된 클래스에서는 서브 클래스를 파생할 수 없음Java의 String, StringBuilder등의 클래스는 final로 선언됨
배열 자체를 넘기면 pass by reference배열에 있는 요소를 넘기면 pass by valuepublic class Sample { public static void changeSomething(int i) { i++; } public static void main(String[] args) { int[] i = {0}; changeSomething(i[0]); System.out.println(i[0]); }}>> 0 Enum Enum 사용 예시public enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, ..
추상화 (Abstraction)추상화는 불필요한 것을 선택하고 제거하는 것 추상화(abstraction)는 대상에 대해 맥락에서 필요한 것에 대한 최소한의 형태가 남을 때까지 불필요한 것을 제거하는 전략입니다. 좋은 추상화는 중요하지 않은 세부 사항을 제거하고 중요한 사항들에 집중할 수 있도록 합니다. 캡슐화 (Encapsulation) 데이터와 메소드의 결합데이터와 메소드를 하나의 캡슐로 결합캡슐 경계는 내부와 외부를 결정캡슐화(Encapsulation)에는 중요한 두 가지 관점이 있습니다.데이터와 기능을 단일 개체로 결합개체의 모든 멤버(메소드, 변수 등)에 대한 접근 가시성 제어 왜 캡슐화를 해야 하는가?제어 허용메소드를 통해서만 접근 가능하도록변경 허용private 데이터 타입이 변경되어도 ..