언어/자바 12

GC에 대해서 좀 더 살펴보자

자바의 메모리 관리 방법! 가비지 컬렉션 (Garbage Collection) [ 자바 기초 강의 ] 위의 유튜브를 참고했습니다. 가비지 컬렉션? 자바의 메모리 관리 기법으로 애플리케이션이 동적으로 할당했던 메모리 영역중 더이상 사용하지 않는 영역을 정리하는 기능 GC는 heap 메모리에서 활동하며 JVM에서 GC의 스케줄링을 담당하며 개발자가 직접 관여하지 않아도 사용하지 않는 메모리 제거해주는 역할 stop the world GC를 수행하기 위해 JVM이 멈추는 현상 GC 작동하는 동안 GC 관련 Thread를 제외한 모든 thread는 멈춤 일반적으로 ‘튜닝'이라는 것은 이 시간을 최소화하는 것을 의미 GC의 종류 serial , parallel, cms, g1, z GC등이 있다. GC의 원리 G..

언어/자바 2022.07.05

예외처리(exception)

예외 입력 값에 대한 처리 불가능하거나, 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름을 어긋나는 것 에러 시스템에 무엇인가 비정상적인 상황이 발생한 경우 Checked Exception / Unchecked Exception checked Exception RuntimeException을 상속하지 않는 클래스 명시적으로 처리해야함 - checked 이 코드에서는 컴파일 시점에 이미 애러발생 아래 코드와 같이 반드시 예외 처리해줘야함 private void throwExceptionExample(String file, String targetFile) throws IOException { BufferedReader reader = null; PrintWriter writer = null; try ..

언어/자바 2021.09.16

열거형(enum)

한정된 데이터만을 가지는 타입 → enumeration Type public enum Week { MONDAY,TUESDAY,WEDNESDAY -> 열거 상수 } 메모리 구조 내부적으로 public static final 필드이면서 객체로 제공됩니다. 즉 static이 붙어있기 때문에 클래스로더가 로드 시점에 JVM 메소드 영역에 해당 클래스 변수를 할당시키고 언제든지 가져다가 사용 할 수 있는 주소공간을 확보합니다. Week today = Week.MONDAY; 이러한 로직을 만나면 heap 영역에 해당 enum이 생성됩니다. 그리고 method 영역의 열거상수들은 해당 heap영역에 생성된 객체를 바라보게 됩니다. 그래서 Week thisWeek = Week.SUNDAY; Week nextWeek =..

언어/자바 2021.09.16

자바 - 제네릭(Generic)

제네릭이란? 데이터 형식에 의존하지 않고, 하나의 값이 여러 데이터 타입들을 가질 수 있도록 하는 방법 List integerList = new ArrayList(); String 으로 되어 있는 리스트, Integer로 되어 있는 리스트들을 모두 하나하나 타입에 따라 만들 수는 없으니... 그 때마다 이 리스트는 어떤 형식이에요! 라고 지정해주는게 좋겠죠? → 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. public class ClassN{ private E element } 제네릭에는 그 때마다 타입들이 많이 존재합니다. 그럼 하나씩 간단하게 볼게요. (사실 무의식적으로 사용하고 있고 이론적으로 알고있어야하나 싶긴 합니다...) 언바운드(무한한) 와일드카드 타입..

언어/자바 2021.09.13

직렬화 (Serialization) 와 역직렬화(Deserialization)

직렬화 (Serialization) 와 역직렬화(Deserialization) 직렬화란? 객체를 직렬화 하여 전송 가능한 형태로 만드는 것을 의미 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해줌(byte형태로 변환) 주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용 역직렬화란? 직렬화된 파일 등을 역으로 직렬화하여 다시 객체의 형태로 만드는 것을 의미 저장된 파일을 읽거나 전송된 스트림 데이터를 읽어 원래 객체의 형태로 복원 왜 사용하나요 데이터 포맷이 맞지 않아 json 형식으로 만들어서 사용하는등 이미 많이 사용하고 있었습니다. Json형태로 변환도 직렬화 Jackson, GSON 등의 라이브러리를 이용해서 변환 자바 직렬화의 장점 자바 시스템 개발에 최..

언어/자바 2021.09.13

thread에 대해서!

프로세스와 쓰레드 프로세스 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다 최소 1개의 스레드(메인 스레드)를 가지고 있다. 쓰레드 프로그램(프로세스) 내에서 실행되는 흐름의 단위 운영체제에 의해 관리되는 하나의 작업 혹은 테스크 JVM에 의해 하나의 프로세스가 발생하고 main()안의 실행문들이 하나의 쓰레드 thread 만들기 → thread상속 or Runnable 인터페이스 구현 다중쓰레드 작업 시 각 쓰레드 끼리 정보를 주고 받을 수 있어 과정의 오류 줄어든다 프로세스는 완벽히 독립적 - 메모리영역(code, data, heap, stack)을 다른 프로세스와 공유를 하지 않지만 쓰레드는 해당 쓰레드를 위한 스택을 생성할 뿐 이외의 영역을 공유 스택을 독립적으..

언어/자바 2021.09.11

자바 컬렉션(List, Map, Set)

자바 컬렉션? 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것 List 인덱스로 관리 - 저장하면 자동 인덱스 부여, 삭제 가능 객체의 주소 값을 참조함 동일한 객체를 중복 저장할 수 있는데 이 경우 동일한 번지가 참조 arrayList , linkedList 데이터의 검색, 삽입, 삭제 시 성능 비교 검색 ArrayList는 인덱스 기반 자료구조, get(index) O(1), LinkedList는 검색 시 모든 요소 탐색 o(n) 그런데 !! ArrayList list = new ArrayList (); 가 아닌 List list = new ArrayList (); 를 사용하는 이유가 뭘..

언어/자바 2021.09.10

동시성(Concurrency)과 병렬성(Parallelism)

https://balldev.tistory.com/18 함수형 프로그래밍 & 람다 & 메소드 참조 함수형 프로그래밍 일단 함수형 프로그래밍의 등장 배경을 보겠습니다. 일단 명령형 프로그래밍 기반에서 소프트웨어의 크기가 커졌습니다. 그래서 스파게티 코드를 유지 보수할 수가 없어졌 balldev.tistory.com 이전에 쓴 글인 함수형 프로그래밍이 왜 유행하고 있는가에 대해 얘기해보겠습니다. 동시성과 병렬성 동시성 싱글 cpu가 동시에 여러 작업을 실행 하나의 cpu코어에서 멀티 스레드가 번갈아가며 실행 '비동기 처리' 또한 동시성을 이용한 방법 병렬성 멀티 코어, 여러개의 cpu에서 개별 쓰레드가 동시에 실행 동시성과 병렬성 비교 일반적인 성능 → 동시성 > 병렬성 병렬성을 만족하면 동시성도 만족 bu..

언어/자바 2021.09.08

java의 스트림이란??

스트림에 알아보기 전에 자바 8 이전부터 알아보겠습니다. 자바 8 이전 for, foreach문을 돌면서 요소 하나씩 꺼내서 다루는 방법 → 로직이 복잡해질수록 코드의 양이 많아짐, 여러 개의 스레드가 하나의 변수에 영향을 줄 수가 있음 이를 예방하기 위해서는 수동으로 변수에 락을 걸어주거나 , synchronized를 사용하는 것인데 이것은 비용이 비쌉니다. 이러한 이유때문과 이전 글에 썼던 이유로 인해서 함수형 프로그래밍이 나왔습니다. 스트림이란? 한번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임 배열, 컬렉션에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻는 것 배열과 컬렉션을 함수형(선언형)으로 처리 병렬 처리 가능(동시에 실행하더라도 안전하게 실행해야함, 가변 데이터..

언어/자바 2021.09.06

함수형 프로그래밍 & 람다 & 메소드 참조

함수형 프로그래밍 일단 함수형 프로그래밍의 등장 배경을 보겠습니다. 일단 명령형 프로그래밍 기반에서 소프트웨어의 크기가 커졌습니다. 그래서 스파게티 코드를 유지 보수할 수가 없어졌습니다. 그래서 순수 함수로 문제를 해결하는 기법인 함수형 프로그래밍이라는 패러다임에 관심을 가지게 되었습니다. 하지만 함수형 프로그래밍은 객체지향이 유행하기 전부터 존재했었지만 최근 들어서야 함수형 프로그래밍이 유행하고 있다. → 현대 컴퓨터 시스템은 과거에 비해 컴퓨터 자원들의 가격이 저렴해지고 멀티코어가 기본적으로 장착되어 있고 성능이 좋게 나온다. 그리고 최근에는 머신러닝, 데이터 분석 등 무겁고 시간이 오래 걸리는 작업들이 많이 있다. 그리고 이 작업들을 효과적으로 시간을 단축시켜 수행하기 위해 컴퓨터 멀티코어라는 점을..

언어/자바 2021.09.05