전체 글 120

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

JAVA - 추상클래스와 인터페이스

추상메서드 일반메서드 멤버 변수 인터페이스 O O - 디폴트 메서드가 생김 X 추상메서드 O O O 자바 8부터 디폴트 메서드가 생겨서 인터페이스에서 구현도 가능함 → 잘 쓰이지 않음 → 만약 추가 메서드를 인터페이스에서 추가한다면, 이를 implements 한 모든 클래스에서 강제적으로 추상 메서드를 구현해야 하고 안 하게 되면 애러남 → 이럴 때 디폴트 매서드를 사용 추상 클래스 추상 클래스는 A, B, C 비슷한 필드와 메서드를 공통적으로 추출해서 만들어진 클래스 객체 생성 X - 상속을 위한 클래스이기 때문에, 규격만 잡음 예시) 사람 - 팔다리 얼굴 등등 -> 공통적인 변수 - 걷는다. 먹는다. -> 공통적인 메서드 추상 클래스를 왜 사용할까.. 필드와 메서드 이름을 통일하여 유지보수성을 높이고..

언어/자바 2021.09.03

자바의 JVM메모리 구조

프로그램 메모리를 관리하고 최적화해준다. 자바 바이트코드(.class)를 운영체제에 맞는 시스템 명령어로 번역하여 실행 JVM은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해 반드시 실행되어야 하는 기초가 되는 프로그램 자바라는 언어는 기본적으로 동적할당을 프로그래머에게 맡기지 않는다. C언어에서 malloc(), realloc() 등의 함수를 통하여 프로그래머가 힙 영역에 동적할당하고 free() 함수를 통해 할당을 해제하는 작업을 프로그래머가 직접한다. 하지만 자바에서는 그 작업을 JVM에서 전적으로 맡고 스스로 수행한다. 이 기능을 가비지 컬렉션(Garbage Collection)이라고 부른다. 대규모 프로젝트를 진행함으로써 JVM 메모리 구조를 아느냐 모르느냐에 따라 최적화 차이가 나타남 →..

언어/자바 2021.09.01

windows_system_programming(1) - kernel object

YouTube 강의 -> 커널 오브젝트의 이해 이것을 참고했습니다. 커널 오브젝트 : 커널에 의해 관리되는 리소스 정보를 담고있는 데이터 블록 운영체제에 의해 생성 및 소멸되는 것을 리소스라고 합니다. 우리가 파일을 생성, 소멸 시키는 것도 리소스입니다. 하지만 운영체제에 의해 생성, 소멸되는 리소스가 있는데 이것이 커널 오브젝트입니다. 파일 뿐만아니라 핸들, 쓰레드 등등 os가 자동으로 생성해주는 경우에도 커널 오브젝트가 생기게 됩니다. 우리가 어떤 파일을 생성 소멸 시킬 경우 리소스에 대한 요구사항이 있습니다. 이 요구사항을 들어주는 것이 커널입니다. 요구사항을 들어주기 위해서는 리소스를 컨트롤할 수 있는 정보들(접근정보, 파일을 어디까지 읽었는지에 대한 정보)을 가지고 있어야 하는데 이런 정보를 담..

환경변수 나타내기

이번에는 환경변수를 콘솔창에 나타내는 실습을 하겠습니다. #include #include #include #include #include void GetEnv() { PTSTR pEnvBlock = GetEnvironmentStrings(); //환경블럭 내용을 가져와서 문자열 블럭으로 메모리에 생성 후 그 포인터를 반환 TCHAR szName[MAX_PATH]; TCHAR szValue[MAX_PATH]; PTSTR pszCurrent = pEnvBlock; HRESULT hr = S_OK; PCTSTR pszPos = NULL; int current = 0; ZeroMemory(szName, MAX_PATH); //메모리 0으로 초기화 ZeroMemory(szValue, MAX_PATH); while..

error 나타내주기

이번에는 error을 나타내주는 실습을 해보겠습니다. 이 코드는 윈도우속성-> 링커-> 시스템-> 창모드로 해야합니다. 시작하기에 앞서, 이것은 유니코드나 멀티바이트코드 어디에서나 사용가능하게 알아서 바꿔주는 매크로 함수입니다. LPTSTR, _tWinMain등 t가 붙어있는 것들은 f12로 들어가서 보면 유니코드 경우와 멀티바이트 경우와 다르다는 것을 볼 수 있습니다. #include #include //유니코드, 멀티바이트 코드 무엇을 쓰든지 확인해서 바꿔주는 메크로 #define MAX_LOADSTRING 100 TCHAR szTitle[MAX_LOADSTRING] = TEXT("Sample"); TCHAR szWindowClass[MAX_LOADSTRING] = TEXT("Bit"); HWND h..