앞에서 봤든 JVM은 일대일 매핑 스레드 구조이고 사용자 영역 스레드에서 커널을 생성하면 커널 영역 스레드와 매핑되어서 작업이 처리되는것이다.즉,자바 스레드는 JVM에서 User Thread를 생성할 때 시스템 콜을 통해서 커널에서 생성된 Kernel Thread 와 1:1 로 매핑이 되어 최종적으로 커널에서 관리된다.JVM에서 스레드를 생성할 때 마다 커널에서 자바 스레드와 대응하는 커널 스레드를 생성한다.자바에서는 Platform Thread으로 정의되어 있다. 즉 OS 플랫폼에 따라 JVM이 사용자 스레드를 매핑하게 된다.플랫폼 스레드- 스레드에서는 일반적으로 운영체제에서 예약된 커널 스레드와 1:1로 매핑되는 플랫폼 스레드 생성을 지원한다.ThreadJVM 에서 스레드에 대해 좀 더 알아보자. 사..
Spring 환경에서는 JPA의 더티 체킹이나 Bulk Insert 등에서 성능 이슈로 인해 JdbcTemplate을 혼용해서 사용해야 할 때가 있다. (MySQL의 PK 전략이 IDENTITY AUTO INCREMENT 인 경우 가정)이때 우리는 자연스럽게 Service 계층에 @Transactional을 붙이고, 내부에서 jdbcTemplate.update() 등을 호출한다. 근데 여기서 이런 의문이 든다."나는 JdbcTemplate 메서드에 DB Connection을 넘겨준 적이 없는데, 어떻게 기존 트랜잭션에 참여해서 동작하는 걸까?" Spring이 어떻게 트랜잭션 컨텍스트를 유지하고 전파하는지, 그 핵심 원리인 트랜잭션 동기화(Transaction Synchronization) 에 대해 정리해..
기본기는 가볍게 정리해본다.프로세스프로세스는 운영체제에 의해 실행되는 포로그램이다.code, data, heap, stack 메모리 공간을 갖는다.stack은 지역변수, heap은 메모리 등을 사용하게 되는 동적 할당의 영역이다.code, data는 정적 할당의 영역이다.스레드스레드는 프로세스의 작업을 수행하는 최소 실행 단위이다.스레드는 프로세스의 code, data, heap은 공유자원으로 사용한다.스레드는 개별 stack을 갖는다.CPU스레드는 운영체제 스케쥴러에 의해 관리되는 CPU의 최소 실행 단위이다.스레드가 CPU를 선점하게된다.CPU를 스레드가 선점할 때 문맥(레지스터, 캐시 등이 교체되는) 교환이 발생한다. (=컨텍스트 스위칭)동시성 / 병렬성 개념을 정리해보자.동시성동시성은 CPU가 한..
Chapter. 5 - 스트림 활용 (5.5 ~ 5.9)5.5 리듀스“메뉴의 모든 칼로리의 합계를 구하시오", “메뉴에서 칼로리가 가장 큰 요리는?” 과 같이 스트림 요소를 조합해서 더 복잡한 질의를 표현하기 위한 메서드이다.즉, 리듀스는 스트림의 모든 요소를 반복 처리해서 값으로 결과를 도출해낼 때 사용한다.5.5.1 요소의 합for-each 반복문을 통한 리스트 내 숫자 요소의 총 합을 구하는 코드를 보자.val numbers = listOf(1, 2, 3, 4, 5)var sum = 0for (x: Int in numbers) { sum += x}위 코드를 보면 sum 변수 초기값 0리스트의 모든 요소를 조합하는 연산 “+”이렇게 2개의 파라미터를 사용했다. 이러한 리스트 연산의 총 합을 구하..
Chapter. 5 - 스트림 활용 (5.1 ~ 5.4)stream을 활용해서 외부반복을 내부반복으로 변경할 수 있다는걸 확인했다.// 내부반복val vegetarianDishes = mutableListOf()for (dish in menu) { if (dish.isVegetarian()) { vegetarianDishes.add(dish) }}// 내부반복val vegetarianDishes = menu.stream() .filter(Dish::isVegetarian) .collect(toList())위처럼 데이터를 어떻게 처리할지는 스트림 API가 관리하므로 편리하게 데이터 처리가 가능하다.스트림 API를 사용하면 내부 반복 뿐만아니라 병렬 실행 여부도 결정할 수 ..
Chapter. 4 - 스트림 소개컬렉션은 거의 모든 자바 애플리케이션에서 사용하는 기능으로 데이터를 그룹화하고 처리하는 자료구조이다.하지만 컬렉션은 아직 완벽한 모든 기능을 제공하지 못하는데 이를 보완하기 위해 나온것이 스트림이다.4.1 스트림이란?스트림은 Java 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 데이터를 처리하는 임시 구현 코드 없이 질의를 통해 컬렉션 데이터를 처리할 수 있다.예제 데이터class Dish( val name: String = "", val calories: Int = 0)val menu = listOf( Dish("Java", 100), Dish("Kotlin", 200), Dish("C++", 300), Dish("C..
Chapter. 3 - 람다표현식 (3.5 ~ 3.7)3.5 형식 검사, 형식 추론, 제약람다가 사용되는 코드의 문맥(콘텍스트)를 이용해서 람다의 형식(Type)을 추론할 수 있다.어떤 콘텍스에서 기대되는 람다 표현식의 형식을 대상 형식(target type)이라고 한다.3.5.1 형식검사예시private val inventory = listOf(Apple(RED, 100), Apple(GREEN, 90), Apple(RED, 150))***val heavierThan150g: List = filter(inventory) { apple: Apple -> apple.weight > 150 } // == filter(inventory, { apple: Apple -> apple.weight > 150 })*..
Chapter. 3 - 람다표현식 (3.1 ~ 3.4)깔끔한 코드로 동작을 구현하고 전달하는 Java 8의 새로운 기능인 람다 표현식람다표현식을어떻게 만드는건지어떻게 사용하는건지어떻게 코드를 간결하게 만들 수 있는지확인한다.이와 함께인터페이스형식 추론메서드 참조기능을 확인한다.3.1 람다란?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한것.이름은 없지만 파리미터 리스트, 바디, 반환 타입, 발생 가능한 예외 목록을 가질 수 있다.람다의 특징익명 - 일반적인 메서드와 다르게 이름이 없다.함수 - 메서드처럼 특정 클래스에 종속되지 않아 함수라고 불린다.전달 - 람다 표현식을 메서드 인수로 전달하거나 변수로 저장이 가능하다.간결성 - 익명 클래스처럼 쓸데없는 코드를 구현할 필요가 없다.→ 람다가 ..
Chapter. 2 - 동작 파리미터화(behavior parameterization) 코드 전달요구사항이 계속 변하는 상황녹색 사과를 모두 찾고싶어요.150그램 이상인 사과를 모두 찾고 싶어요.150그램 이상이면서 녹색인 사과를 모두 찾고 싶어요.100그램 이상이면서 빨간색인 사과를 모두 찾고 싶어요.…위와같이 변화하는 요구사항을 파라미터화하여 여러 다른 동작을 할 수 있도록 하는 것이 동작 파라미터화이다.Behavior parameterization is the ability of a method to take multiple different behaviors as parameters and use them internally to accomplish different behaviors.변화하는 요..
Chapter. 1 - Java 8-11에서의 변화 요약1. 자바가 멀티코어 병렬성을 더 쉽게 이용할 수 있도록 진화한 과정과 개념자바 8 설계의 밑바탕을 이루는 3가지 프로그래밍 개념스트림 처리스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임스트림 API는 파이프라인을 만드는데 필요한 많은 메서드를 제공4~7장에서 정리메서드에 코드 전달 - 동작 파리미터화(behavior parameterization)연산의 동작을 매개변수화하여 코드로 전달할 수 있다특정 정렬 동작을 코드로 전달받아서 처리하는 개념2~4장에서 정리병렬성을 공짜로 얻을 수 있다공유되지 않는 가변 데이터, 메서드, 함수 코드를 다른 메서드로 전달하는 두가지 기능은 함수형 프로그래밍* 패러다임의 핵심적인 사항18~19장..
객체지향 프로그래밍 패러다임 대표 프로그래밍 패러다임으로 절차지향 프로그래밍 객체지향 프로그래밍 함수형 프로그래밍 3가지가 있다. 이 중 절차지향은 시대에 뒤떨어져 있고, 함수형은 일부 비지니스에서 활용되고 있으나 객체지향을 대체하기에는 한계가 있다. 객체지향 프로그래밍이 현시점에 가장 대중적인 프로그래밍 패러다임인 것이 확실하다. 2.1 객체지향이란 무엇인가? 개발자라면 캡슐화, 추상화, 상속, 다형성 이라는 객체지향의 4가지 특성에 대해 알고 있을 것이다. 하지만 객체지향의 개념은 그 이상을 포함한다. 이제부터 각 개념에 대해 자세히 알아보겠다. 2.1.1 객체지향 프로그래밍과 객체지향 프로그래밍 언어 객체지향 프로그래밍에는 클래스와 객체라는 기본적이지만 매우 중요한 두 가지 개념이 있다. Java,..
디자인 패턴의 아름다움 - 왕정 지음 간략 목차 chapter 1 _ 고품질 코드 문제 정의 및 기준 7가지 (유지 보수성, 가독성, 확장성, 간결성, 유연성, 재사용성, 테스트 용이성) chapter 2 _ 객체지향 프로그래밍 패러다임 (캡슐화, 추상화, 상속, 다형성 등) chapter 3 _ 설계 원칙 (SRP, OCP 등) chapter 4 _ 코딩 규칙 (변수명, 주석 등) chapter 5 _ 리팩토링 기법 chapter 6 _ 생성 디자인 패턴 chapter 7 _ 구조 디자인 패턴 chapter 8 _ 행동 디자인 패턴 책의 목적 고품질의 코드를 작성할 수 있도록 돕는다. Chater 1 _ 개요 코드 설계 방법론을 배우기 전에 '고품질의 코드란 무엇인가' 같은 코드 품질과 관련되어 확실히..
- Total
- Today
- Yesterday