ComputerScience 38

락 (lock)이란 무엇인가 , Dead-lock 해결

Lock 락은 여러 스레드 간에 자원을 접근하는 매커니즘을 제공한다. 일반적으로 상호 배제 정책을 통해, 하나의 스레드가 특정 자원에 접근중인 경우에는 다른 스레드가 접근하지 못하도록 제한한다. 락이 없다면 두 개 이상의 스레드가 동시에 자원에 접근할 수 있으므로, 데이터의 무결성이 보장되지 않는다. 락의 개념은 멀티스레드를 사용하는 환경이라면 어디든 사용될 수 있다. ex)데이터베이스 락이 필요한 예시 - 여러 스레드가 동시에 공유 자원에 접근하는 경우 이해를 돕기 위해 간단한 예시를 들어보자. 스레드 A, B가 다음의 작업을 동시에 수행한다고 해보자. A, B는 변수 x를 공유한다. 스레드 A: x를 1 증가시킨다 스레드 B: x를 1 증가시킨다 그런데 'x를 1 증가시킨다'라는 작업은 기계어 상으로..

ComputerScience 2024.04.14

프로세스 & 스레드

프로세스 : 프로그램을 메모리 상에서 실행중인 작업 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위 기본적으로 프로세스마다 최소 1개의 스레드 소유 (메인 스레드 포함) 프로세스는 각각 별도의 주소공간 할당 (독립적) Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령) Data : 전역변수, 정적변수, 배열 등 초기화 된 데이터는 data 영역에 저장 초기화 되지 않은 데이터는 bss 영역에 저장 Heap : 동적 할당 시 사용 (new(), malloc() 등) Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역) 스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유 하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성 프로세스는 자신만의 고유 공간과 자..

ComputerScience 2024.04.07

Casting (업캐스팅 & 다운캐스팅)

자바의 참조형 캐스팅 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 타입 변환 혹은 형변환(캐스팅) 이라고 한다. 자바의 데이터형을 알아보면 크게 두가지로 나뉘게 된다. 기본형(primitive type) - Boolean Type(boolean) - Numeric Type(short, int, long, float, double, char) 참조형(reference type) - Class Type - Interface Type - Array Type - Enum Type - 그 외 다른 것들 기본형(primitive) 이든 참조형(referece) 이든 하나의 타입이다. 이는 즉, 서로 타입간의 형변환(casting)이 가능하다는 말이다. 기본적으로 자바에선 대입 연산자 = 에서 변수 와 값 서로 ..

ComputerScience 2024.03.26

[Java] 오토 박싱 & 오토 언박싱

자바에는 기본 타입과 Wrapper 클래스가 존재한다. 기본 타입(Primitive Types) 기본 타입은 Java 언어에 내장된 가장 기본적인 데이터 타입으로, 변수가 실제 값을 직접 저장. (int, long, float, double, boolean 등) 기본 타입은 메모리 효율성이 높고, 속도가 빠르다. 하지만, 객체 지향 프로그래밍의 객체로 취급되지 않아 객체가 제공하는 메소드를 사용할 수 없고, null 값을 가질 수 없음 Wrapper 클래스 각 기본 타입에 해당하는 Wrapper 클래스는 기본 타입의 값을 객체로 취급할 수 있게 함. 이 클래스들은 java.lang 패키지에 포함되어 있으며, 기본 타입 값을 포함하고, 관련된 유용한 메서드 및 상수를 제공함(Integer, Long, Fl..

ComputerScience 2024.03.10

[Java] 원시 타입 vs 참조 타입

원시 타입 원시 타입은 정수, 실수, 문자, 논리 리터럴 등 실제 데이터 값을 저장하는 타입이다. int a = 10; 와 같이 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모리 공간이 JVM 스택 영역에 생성되고, 10이라는 값이 들어간다. 즉, 원시 타입은 메모리 공간의 실제 데이터 값이 저장되어 있다. char 연산 시 주의할 점 JVM은 연산할 때 피연산자 스택을 활용한다. 예를 들어 13 + 20 + 7 을 계산한다면, 20 + 7 을 계산한 결과를 스택에 집어 넣고, 다시 27 + 13 을 계산한 결과를 스택에 집어 넣는 방식을 반복한다. 이때 주의할 점은 JVM의 피연산자 스택은 피연산자를 4 Bytes 단위로 저장한다는 것이다. 즉, char나 short와 같이 int보다 ..

ComputerScience 2024.03.03

Call by value와 Call by reference

Call by value와 Call by reference? 한줄요약 함수가 인자를 받는 방식에서 나타나는 두 가지 주요한 차이 -> 인자가 함수 내부로 전달되는 방식과 함수가 인자를 통해 수행할 수 있는 연산이 어떻게 외부 변수에 영향을 미치는지에 대한 차이를 가짐 Call by Value 정의: Call by value 방식에서, 함수에 인자를 전달할 때 인자의 실제 값의 복사본이 생성되어 함수 내부로 전달. 이는 함수 내부에서 인자의 값을 변경해도, 그 변경이 함수 외부의 변수에는 영향을 미치지 않는다는 것을 의미 특징: 함수 외부의 변수는 함수 호출 후에도 원래의 값을 유지. 따라서, 함수 내부에서 인자의 값이 변경되더라도 그 변경 사항이 외부 변수에 반영되지 않음 적용 예시: 기본 데이터 타입(..

ComputerScience 2024.02.25

Java 컴파일 과정

Compile? 인간이 작성한 코드를 기계가 읽을 수 있는(실행할 수 있는) 기계어로 변환하는 과정 Java 실행 과정 Compile Time 환경 개발자가 Java 소스코드(.java)를 작성한다. Java Compiler가 Java 소스코드(.java)를 자바 바이트 코드(Java Byte Code)로 컴파일한다. ** .java → .class Runtime 환경 컴파일된 자바 바이트 코드 파일(.class)을 Runtime으로 가져가는 시점에 클래스 로더(Class Loader)가 동작합니다. 클래스 로더(Class Loader)가 동적 로딩(Dynamic Loading)을 통해 자바 바이트 코드를 런타임 데이터 영역(Runtime Data Areas), 즉 JVM의 메모리에 로드합니다. 실행 엔..

ComputerScience 2024.02.20

네트워크 ) 네트워크의 분류 , 네트워크 토폴로지 정의

네트워크 분류 LAN(Local Area Network) 근거리 통신망 같은 건물이나 캠퍼스 같은 좁은 공간에서 운영 전송 속도가 빠르고 혼잡하지 않음 MAN(Metropolitan Area Network) 대도시 지역 네트워크 전송 속도는 평균 LAN보다는 더 많이 혼잡 WAN(*Wide Area Network) 광역 네트워크 전송 속도 낮음 MAN보다는 더 혼잡 규모 기반으로 본다면 LAN < MAN < WAN 으로 볼 수 있습니다 === 네트워크 토폴로지 혹은 네트워크 구성은 네트워크 성능을 결정하는 핵심 요소라 할 수 있습니다. 네트워크 토폴로지는 네트워크를 배치하는 방식으로, 링크와 노드 들이 어떤 식으로 배치되어 서로 연결되는지를 물리적으로 혹은 논리적으로 설명합니다. 네트워크가 배치되는 방식..

ComputerScience 2023.11.13

네트워크 ) OSI 7계층, TCP/IP 4계층 모델 그리고 OSI 7계층과 TCP/IP 4계층의 차이점

OSI 7계층 모델 OSI 7계층 모델은 네트워크 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. 계층을 이렇게 나눈 이유는 통신이 일어나는 과정을 단계별로 파악하기 용이하기 때문이다. 특정 계층에서 이상이 생겼을 때 다른 계층은 놔두고 문제가 있는 계층만 고쳐서 문제를 해결할 수 있다. 하나씩 계층별로 살펴보도록 하자 물리계층 (Physical Layer) 전기적, 기계적, 기능적인 특성을 이용하여 통신 케이블로 데이터를 전송한다. 사용되는 통신 단위는 비트(bit)이며, 0또는 1만 나타낼 수 있다. 단지 데이터를 전달만 할 뿐 전송하려는, 또는 받으려는 데이터가 무엇인지는 전혀 신경쓰지 않는다. 대표적인 장치로 통신 케이블, 리피터, 허브 등이 있다. 데이터 링크계층 (DataLink Layer..

ComputerScience 2023.11.13

함수형 프로그래밍은 무엇인가? 순수 함수와 고차 함수의 차이

함수형 프로그래밍(Functional Programming, FP)은 계산을 수학적 함수의 평가로 취급하고 상태 변경이나 변경 가능한 데이터를 피하는 프로그래밍 패러다임입니다. 이 접근 방식은 프로그램의 동작을 순수 함수로 구성함으로써 부수 효과(side effects)를 최소화하고 프로그램의 예측성과 투명성을 높이는 것을 목표로 합니다. 함수형 프로그래밍의 핵심 개념 중 두 가지는 '순수 함수(Pure Functions)'와 '고차 함수(Higher-Order Functions)'입니다. 순수 함수 순수 함수는 다음 두 가지 주요 특성을 가집니다: 입력에만 의존: 함수의 출력은 오직 입력 매개변수에만 의존하며, 외부 상태에 의존하지 않습니다. 즉, 같은 입력에 대해서는 항상 같은 출력을 반환합니다. 부..

ComputerScience 2023.11.09