전체 354

[Kotlin] Interface와 Class

Interface 특징 다중 상속 가능 추상함수(Abstract) 가질 수 있음 함수 본문 구현 가능 여러 interface에서 같은 함수 가질 수 있음 추상 property 가질 수 있음 다중 상속 여러 인터페이스에 동일한 이름의 추상 함수가 선언되어 있다. 이 때, 다중 상속한 클래스에서는 어떻게 구분해서 호출하는지 다음을 보면 알 수 있다. fun main(args: Array) { val base: Base = Base() base.printA() // AAAAA base.printB() // BBBBB base.printC() // ACAC\nBCBC } interface A { fun printA() { println("AAAAA") } fun printC() { println("ACAC") ..

Kotlin 함수 선언 방법

fun f1(value: Int): Int { return value * 3 } fun f2(value: Int): Int = value * 2 fun f3(value: Int) = value * 2 {} 블록으로 감싸면 타입 추론을 하지 않기 때문에 함수 반환 타입을 명시해야 한다. 명시하지 않으면 Unit(Void) 타입으로 설정된다. 그리고 Java와 다르게 함수 파라미터 기본값을 설정할 수 있다. 그리고 호출할 때 순서를 고려하지 않아도 된다. 다음과 같이 할 수 있다. fun sum(x: Int = 10, y: Int = 5): Int = x + y println(sum(y = 3)) // 13 println(sum(y = 8, x = 6)) // 14 익명 함수, 람다 표현식 람다식을 이용해 ..

함수형 프로그래밍의 특징

데이터 처리의 참조 투명성을 보장하며, 상태와 가변 데이터 생성을 피하는 프로그래밍 패러다임이다. 특징 불변성(Immutable) 참조 투명성(Referential Transparency) 일급 함수(First Class Function) 게으른 평가(Lazy Evaluation) 동시성, 병렬성 동시성 프로그래밍에 적합하다. 동시성(Concurrency): 동시에 실행하는 것처럼 보이도록 하는 것 병렬성(Parallel): 실제로 물리적으로 동시에 돌아가는 것 코드 복잡도가 낮아 간결한 코드 작성 가능 순수 함수(Pure Function) 특징 y = f(x). 동일한 input은 동일한 output을 가짐. 상수가 아닌 전역 변수 등의 외부 변수를 이용하는 코드가 존재하면 순수 함수가 아니다. 부수효..

Chrome이 Multi Thread가 아닌 Multi Process를 이용하는 이유

장점 1. Process는 메모리를 공유하지 않기 때문에 메모리 공격에 안전하다. 2. 서로 다른 사이트의 Frame / Tab을 서로 다른 렌더러가 담당하도록 해서 Same Origin Policy를 적용한다. 3. Process는 죽어도 다른 프로세스가 죽지 않는다. 한 탭의 Renderer Process가 죽어도 다른 탭이 죽지 않는다. 단점 1. 메모리 사용량 증가: Process는 메모리를 공유하지 않기 때문에 Process 별로 하나의 자바스크립트 엔진 코드를 들고 있어야 한다. 2. IPC: 프로세스간의 통신을 이용하는 코드가 많아지면서 코딩 난이도 상승. 그리고 송신-수신 이벤트를 받아서 처리하기 때문에 속도가 조금 느려진다. 기타 - 하드웨어 성능에 따라 프로세스를 나누거나 합치기도 한다.

2021.06.15

Annotations

*JPA에서 Entity는 파라미터가 없는 생성자를 가져야 한다. Lombok @NoArgsConstructor 파라미터가 없는 생성자를 만든다. @Data @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 붙인 효과와 같다. @RequiredArgsConstructor final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만든다. JPA @Entity DB 테이블 매칭되는 클래스로 지정 @PrePersist @Entity 저장 전에 호출 Javax Validation @NotBlank NULL, "", " " 모두 비허용 @Pattern Regexp 형태 체크 @Digits 정수값 형태 체크 Hiberna..

Web/Spring 2021.03.25

Context Switching에서의 Thread와 Process의 관계 + PCB, TCB

Process란? - PC와 Register Set, Process ID, State, 메모리 등의 정보를 가진다. - 프로세스는 적어도 하나의 Thread를 가진다. Thread란? - CPU 스케쥴링의 기본 단위. - Program Counter, Register들과 Stack으로 구성 - Process 내부에서 여러 Thread 생성 가능하며, 코드와 메모리를 공유한다. 운영체제 책에는 이렇게 설명되어 있지만, 의문이 든다. "프로세스가 여러개의 스레드를 가지면 PCB 하나로 어떻게 저장하지? 각 Thread의 정보를 저장해야 할 텐데." 이렇게 생각해서 알아본 것이 TCB이다. PCB는 Process ID와 상태, 우선순위, 메모리 정보 등을 저장한다. 멀티스레드가 아닌 멀티프로세스 환경에서는 P..

OS 2020.05.30

컴퓨터 자원의 구조와 동작, RAM과 Disk에 대해

구조도 CPU와 I/O Controller의 관계 각각의 I/O Controller는 CPU와 독립적으로 그 기능을 수행하며, Bus라는 통로와 Interrupt를 통해 CPU와 통신한다. 프로그래밍을 할 때, 흔히 I/O 작업 수행에 대한 이야기를 한다. I/O 작업의 의미는 CPU가 I/O Controller의 Data Buffer에 데이터를 채운 후 Write 명령을 수행하는 것이다. I/O작업이 수행되면 각 I/O Controller는 독립적으로 그 기능을 수행하며, 작업이 완료되면 Interrupt를 발생시켜 최종적으로는 CPU에게 작업이 완료되었음을 알린다. RAM과 Disk RAM은 CPU가 직접 접근할 수 있는 비휘발성 메모리이며, Random Access Memory이다. RAM의 역할은..

OS 2020.05.26

V8 Engine의 Garbage Collection

목적 GC의 목적 자체는 단순하다. 사용되지 않는 메모리를 찾아 재사용할 수 있는 메모리로 전환하는 것이다. GC는 Heap 메모리를 대상으로 한다. Root Object - V8 엔진에서 직접 참조되는 객체 - 전역 객체, Browser에서는 DOM 등 살아 있다? - Live 객체 - Pointer의 체이닝을 탐색해 접근 가능하다 Stack: 함수 단위로 이루어지며, 지역 변수, 실행 Parameter, 반환값, 반환 주소, 객체의 포인터 주소가 저장됨 Heap: 객체를 대상으로 함 Heap의 구조 를 그림으로 살펴 보자 Pointer 탐색 Remember Set 먼저, 힙 영역에서 Pointer와 Data를 구분해야 한다. GC Root로부터 포인터를 탐색하여 Live 객체를 찾는다. Java와 같..

Web/Node.js 2020.05.24
반응형