본문 바로가기

java

(22)
[JAVA] JVM 에 대하여 ( + Garbage Collection) https://howtodoinjava.com/java/basics/jdk-jre-jvm/ 사이트와 책 'JVM Performance Optimizing 및 성능 분석 사례'를 함께 보았다. 1. 왜 Java Virtual Machine 일까? 2. 자바 프로그래밍의 실행(Execution of a Java Program) With JVM 개략적으로 살펴보면, 작성한 .java 파일을 .class 파일로 컴파일 하여 얻은 바이트 코드가 JVM 에서 실행된다. 그래서 바이트 코드로 올라온 것부터 JVM의 영역이라고 할 수 있을 것 같다. 헷갈리지 말아야 할 점은 JVM은 바이트 코드가 런타임 환경에서 실행될수 있는 정보를 제공하는 명세일뿐이다. 다양한 벤더들은 이 명세의 구현 방법들을 제공하고 있는데 아래..
[JAVA] 자바의 정석 - Execption 정리 1. 예외처리(exception handling) 1.1 프로그램 오류 자바는 실행 시점에 따라 3가지로 에러 타입을 나눈다. 1) 컴파일 에러 컴파일시 발생하는 에러. 클래스 파일(*.class) 이 생성되기 전에 오타나 잘못된 구문, 자료형 체크등의 기본적인 검사를 컴파일러가 수행한다. 2) 논리적 에러 실행은 되나 의도와는 다르게 동작하는 것 3) 런타임 에러 실행시 발생하는 에러 실행시 발생 하는 프로그램 오류를 '에러(Error)' 와 예외(exception) 두가지로 구분한다. 1) 에러(Error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 2) 예외(Exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 1.2 예외 클래스의 계층 구조 자바에서는 실행 ..
[JAVA] Concurrent Collections - ConcurrentHashMap() ConcurrentHashMap을 알기전에 Thred Safty 알아보기! Thread safty 하다? Thread safty (스레드 안전) 은 멀테 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서 함수의 수행결과가 올바르게 나오는 것으로 정의한다. thread safty 하게 스레드를 구현하는 방법은 아래와 같다. 1. Re-entrancy : 어떤 함수가 한 스레드에 의해 호출되어 실행 중일때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바르..
[JAVA] Map 정리(HashMap , TreeMap , Red-Black Tree ) 컬렉션 프레임웍의 구성요소 Map 인터페이스에서 HashMap 의 내부코드를 간단히 살펴 보고 HashMap과 TreeMap의 성능 차이 TreeMap 의 Red-Black Tree를 알아보자. Map 인터페이스 HashMap HashMap 과 TreeMap TreeMap의 Red-Black Tree Map 인터페이스 - 컬렉션 프레임웍의 멤버이다. - 키(Key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합 - key는 문자열, 정수형, Object 객체형 등의 다른 데이터 형이 될 수 있고, Key 값을 사용자가 직접 입력한다. - 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. 예) 우편번호, 지역번호(전화번호) - 구현 클래스 : HashMap, Has..
SOLID(객체지향설계) - 코드 예제, 리팩토링 SOLID 원칙에 대한 개념을 그림과 코드 예제를 통해 알아보고 SOLID 원칙을 적용 할 수 있는 리팩터링을 다시 확인 합니다. 모든 내용에는 출처가 있습니다 목차 1. SOLID 원칙이란? 1) SRP 단일 책임 원칙 2) OCP 개방-폐쇄 원칙 3) LSP 리스코프 치환 원칙 4) ISP 인터페이스 분리 원칙 5) DIP 의존성 역전 원칙 2. 코드로 보는 SOLID 원칙 예제 3. 함수 리팩터링 1. SOLID 원칙이란? 러버트 마틴이 2000년대 초반 명명한 객체 지향 프로그래밍 및 설계의 다섯가지 기본 원칙을 마이클 페더스가 두(머리)문자어 기억술로 소개 한것이다. 프로그래머가 시간이 지나도 유지보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용 할 수 있다. SOLID 원칙들..
[JAVA] AtomicInteger, 쓰레드 동기화(synchronization) , Atomic, CAS 알고리즘 이해하기 AtomicInteger 을 자세히 이해하기 위한 흐름을 정리해 보았습니다. 모든 내용은 출처가 있습니다. [목차] AtomicInteger 란? 0. 쓰레드란? 1. 쓰레드의 동기화 1) 기본 synchronized 를 이용한 동기화 2. Atomic 에 대해서 1) CAS Algorithm 2) ABA Problem 3. Atomic class 에 대해서 4. AtomicInteger 상세 확인하기 AtomicInteger 란? AtomicInteger 란 원자성을 보장하는 Interger를 의미한다. 멀티 쓰레드 환경에서 동기화 문제를 별도의 synchronized 키워드 없이 해결하기 위해서 고안된 방법이다. (일반적으로 동기화 문제는 synchronized, Atomic, volatile 세가지..
[JAVA] - 변수(Variable) 이 내용은 남궁성 자바의 정석을 토대로 작성 되었습니다. 1. 변수란? 1.2 변수의 명명 규칙 2. 변수의 타입과 자료형(primitive , reference) 3. 변수의 타입과 자료형에 따른 stream API 제약 (primitive type 의 박싱, 언박싱) 1. 변수란? "변수란, 단 하나의 값을저장할 수 있는 메모리 공간" 하나의 변수에 단 하나의 값만 저장 할 수 있으므로, 새로운 값을 저장하면 기존의 값은 사라진다. 변수를 선언하면, 메모리의 빈 공간에 "변수 타입" 에 알맞은 크기의 저장 공간이 확보 되고 앞으로 이 저장 공간은 "변수 이름" 을 통해 사용할 수 있게 된다. 변수의 초기화 변수를 선언한 이후 부터는 변수를 사용할 수 있으나, 그 전에 반드시 변수를 초기화(Initia..