Programing Language 28

JVM (Java Virtual Machine) 구조 상세 설명

JVM은 **자바 바이트코드(.class 파일)**를 실행하기 위한 가상 머신이에요.구조적으로는 크게 클래스 로더, 런타임 데이터 영역, 실행 엔진, 네이티브 인터페이스로 나뉘어요.1️⃣ 클래스 로더 (Class Loader Subsystem)역할: .class 파일(바이트코드)을 메모리로 적재해서 런타임 영역에 올림동적 로딩(Dynamic Loading): 실행 중 필요한 클래스만 메모리에 로드주요 단계Loading클래스 파일을 읽어 Method Area에 로드LinkingVerification: 바이트코드가 JVM 규격에 맞는지 검사Preparation: static 변수에 메모리 할당 & 기본값 초기화Resolution: 심볼릭 참조(클래스명, 메소드명 등)를 실제 메모리 주소로 변경Initiali..

파이썬의 동작 과정

🐍 파이썬 ↔ C 관계 & 가상환경1. 파이썬과 C의 관계파이썬(특히 CPython)은 사실상 C로 구현된 인터프리터예요.CPython: 가장 널리 쓰이는 파이썬 구현체 (Python 공식 배포판)핵심 원리:파이썬 소스 코드 → **바이트코드(.pyc)**로 컴파일이 바이트코드를 **C로 작성된 인터프리터(CPython VM)**가 실행파이썬 객체(PyObject)는 C 구조체로 관리됨즉:파이썬은 "문법과 문화를 가진 언어"CPython은 "C로 만들어진 실행기"a = 10 a는 스택에 참조 저장10은 힙에 PyLongObject라는 C 구조체로 생성👉 파이썬에서 int, list 같은 객체들은 실제로 C 언어 구조체에 불과함. 2. 왜 C 기반으로 동작할까?성능: C는 저수준 언어라서 메모리와 C..

파이썬 메모리 구조 개요

🐍 파이썬 메모리 구조 & GC 정리1. 메모리 구조 개요파이썬 인터프리터(CPython 기준) 메모리 구성:스택(Stack)함수 호출 시 로컬 변수, 참조 저장함수 종료 시 자동 해제실제 데이터가 아닌 객체 참조(포인터) 저장힙(Heap)모든 파이썬 객체(list, dict, 사용자 정의 객체 등) 저장GC와 메모리 풀(Pymalloc) 관리크기 동적 할당코드/전역 영역전역 변수, 상수, 함수 정의 저장프로그램 종료 전까지 유지2. 힙 메모리와 객체 구조모든 객체는 PyObject 구조체로 관리됨.typedef struct { Py_ssize_t ob_refcnt; // 참조 카운트 struct _typeobject *ob_type; // 객체 타입} PyObject;ob_re..

Python 데코레이터(Decorator)

데코레이터의 기본 개념데코레이터는 다른 함수를 인자로 받아, 새로운 함수를 반환하는 함수입니다. 즉, 데코레이터를 사용하면 기존 함수의 기능을 바꾸거나 확장할 수 있습니다. 형태:def decorator_function(original_function): def wrapper_function(*args, **kwargs): # 추가 동작 print(f"{original_function.__name__} 함수가 호출되었습니다.") result = original_function(*args, **kwargs) # 추가 동작 print(f"{original_function.__name__} 함수가 종료되었습니다.") return ..

object, class, case class, trait 의 상속과 인스턴스

Scala는 객체지향 프로그래밍과 함수형 프로그래밍을 모두 지원하는 프로그래밍 언어입니다. Scala에서는 object, class, case class, trait 같은 여러 키워드를 사용해 다양한 타입의 데이터 구조와 행동을 정의할 수 있습니다. Java와 비교하면서 각각에 대해 설명하고 예제를 들어 보겠습니다. 1. Class Scala의 class는 Java의 class와 매우 비슷합니다. 클래스는 객체의 청사진을 제공하며, 데이터와 그 데이터를 조작하는 메소드를 포함할 수 있습니다. Scala 예제: class Person(var name: String, var age: Int) { def greet(): Unit = { println(s"Hello, my name is $name and I a..

JAVA 바이트 코드 조작

출처 : https://www.inflearn.com/course/the-java-code-manipulation 바이트 코드 조작의 사용예시 (코드 커버리지) 코드 커버리지는 테스트 코드가 소스 코드의 어느 부분을 실행(확인)했는지를 백분율로 나타낸 것입니다. JaCoCo는 Java 코드 커버리지를 측정하는 도구 중 하나입니다. JaCoCo 사용하기 JaCoCo 설정: Maven 프로젝트의 pom.xml에 JaCoCo 플러그인을 추가합니다. JaCoCo 사용법. https://www.eclemma.org/jacoco/trunk/doc/index.html http://www.semdesigns.com/Company/Publications/TestCoverage.pdf pom.xml에 플러그인 추가 org..

RxJS 파이프라인 연산자

pipe RxJS의 pipe 함수는 여러 개의 연산자를 함께 사용하여 복잡한 데이터 흐름을 쉽게 관리할 수 있도록 도와줍니다. pipe 함수는 Observable에 메서드 체인으로 연산자를 적용하고, 최종적으로 새로운 Observable을 반환합니다. 이 방법을 통해, 입력 Observable로부터 출력 Observable까지 데이터가 어떻게 변형되고 처리되는지 명확하게 볼 수 있습니다. import { interval } from 'rxjs'; import { filter, map, take } from 'rxjs/operators'; const observable = interval(1000).pipe( filter(value => value % 2 === 0), // 짝수만 통과 map(value ..

RxJS 설명과 Observable 예제

RxJS RxJS는 특히 비동기 이벤트를 처리할 때 강력하며, 복잡한 데이터 스트림을 다루어야 하는 상황에서 꼭 필요하다고 할 수 있습니다. 이러한 상황은 주로 실시간 데이터 처리, 사용자 입력 처리, HTTP 요청 처리 등에 해당됩니다. RxJS를 사용하면 이벤트 스트림을 쉽게 생성, 변환, 조합 및 구독할 수 있으며, 이는 복잡한 비동기 코드를 보다 선언적이고 관리하기 쉬운 형태로 만들어줍니다. 예제: 실시간 검색어 기능 구현 다음은 사용자가 입력 필드에 텍스트를 입력할 때마다 검색어를 실시간으로 서버에 쿼리하고 결과를 받아 표시하는 기능을 구현한 예제입니다. 이 예제는 사용자 입력 처리와 HTTP 요청을 동시에 다루는 방법을 보여줍니다. RxJS를 사용하면 이런 유형의 상호작용을 효과적으로 구현할 ..

타입스크립트 스프레드 연산자, 나머지 매개변수(...), 언더스코어(_)

TypeScript에서 .., ..., _ 같은 기호들은 각각 다른 용도로 사용됩니다. 여기서 ..는 TypeScript 문법에 직접적으로 해당하는 기호가 아니지만, ... (스프레드 연산자 또는 나머지 매개변수)와 _ (일반적으로 무시되는 변수 또는 속성을 나타내는 데 사용)는 TypeScript 및 JavaScript에서 중요한 역할을 합니다. ... (스프레드 연산자 또는 나머지 매개변수) 스프레드 연산자 (Spread Operator): 배열이나 객체의 모든 요소를 개별 요소로 확장하거나, 함수 호출 시 인자 리스트로 전개하는 데 사용됩니다. 배열 또는 객체 리터럴 내부에서 사용할 수 있습니다. let numbers = [1, 2, 3]; let moreNumbers = [...numbers, 4..

CSS 박스 모델과 요소의 크기

html의 요소는 box로 둘러쌓여 있으며 가장 내부의 contents에 실제로 작성하는 내용이 들어간다. padding,border,margin순으로 감싸고 있다. 1.border hi 2. padding 추가 hi 3. margin 추가 hi box의 크기 hi width와 height를 주더라도 border,padding,margin의 값이 추가 된다. 컨텐츠 기준으로 작성한 box의 총 사이즈를 결정하려면 box-sizing옵션을 사용하면된다. hi hi

반응형