자바 NIO는 세가지 주요 클래스를 사용합니다.간단하게 알아보고 채팅 서버와 클라이언트 애플리케이션을 만들어보죠. 1. Buffer, channelBuffer특정 원시(primitive) 타입 데이터의 컨테이너입니다. 원시 타입의 데이터들을 많이 담을 수 있는 통이라고 생각하면 편합니다. 한 곳에서 다른 장소로 데이터를 보내기 위해 사용되는 일시적인 공간이며, 채널을 위한 읽거나 기록된 정보를 보유합니다. Buffer에 대해 자세히 알려면 capacity, limit, postion에 대해 알고 있어야 합니다.capacity : 버퍼의 크기. 버퍼의 크기 만큼 데이터 요소를 담을 수 있다.position : 다음 읽거나 써야할 인덱스 위치. 그림1에 의하면 min까지는 데이터를 읽었으니 position은..
안녕하세요🙌! 개발자 갈레입니다! 이 글을 읽으면, 여러분들은 아래 질문들에 대해 스스로의 답변을 만드실 수 있을겁니다. Q. ArrayList는 사이즈가 꽉 차면 어떻게 확장하지? Q. ArrayList는 왜 50%씩 확장하지? Q. HashMap는 사이즈가 꽉 차면 어떻게 확장하지? Q. HashMap은 왜 2배씩 확장하지? 오늘은 알고리즘 문제를 풀며 겪었던 메모리 초과 문제 상황과 이를 해결하기 위해 LinkedList 구조를 살펴봤던 이야기를 해볼겁니다. LinkedList를 뜯어보니 HashMap 또한 궁금해지더군요! HashMap의 구조에 대해서도 알아보겠습니다. 글을 읽으시면서 핵심 부분(노란)과 꼬리질문(초록) 부분에 집중하며 읽어주세요! 개인적으로 키워드에서 꼬리질문을 하는게 개념을 깊..
돈 계산과 같은 높은 정확도를 요구하는 연산 과정에선 float와 double를 사용하지 말라고들 합니다. 아마도 float과 double이 정확도가 낮기 때문이겠죠? 실제로 if (floatVariable == 0)을 지양하라고 합니다. 왜그럴까요? 왜 float와 double은 정확도가 안좋을까요? 적당히 깊게 원리까지 알아보고, 대안을 찾아봅시다. 결론부터 말하면 float와 double은 부동 소수점으로 실수를 표현하기 때문에 정확도가 낮습니다. 또한 부동 소수점 표현 방식은 연산 과정에서 지수부를 일치시킨 후, 가수부 끼리 계산 후, 지수부를 다시 일치시키는 과정을 겪어야 하기 때문에 연산 속도가 느립니다. 이러한 이유로 소수점 계산 시, 이를 정수로 계산한 뒤 소수로 바꾸는 과정을 거치라고들 ..
안녕하세요! 오늘은 JVM 구조? 자바 애플리케이션 실행 과정? 컴파일 과정? 이전 시간에 이어 GC에 대해 알아보려 합니다! 이전 시간에 Garbage Collector가 Heap 메모리에 올라온 데이터의 생명을 관리한다고 했었죠! 이번 시간에는, ('왜 필요한지?' -> 참조) 기본 동작 개념은 뭔지! 실제 동작 과정은 어떤지! 마지막으로 JDK 7, 8이 GC 관련해서 어떤 차이가 있었는지! 알아볼겁니다:) 잘 따라오세요 가시죠! 1. Garbage Collector란? - 정의: Garbage Collector는 힙 공간에서 메모리의 수명 관리를 해주는 주체다. Garbage Collector의 메모리 수명 관리 판단 기준은 참조 유무입니다. 현재 프로세스 내의 변수가 객체를 참조하고 있으면 사용..
왜 JVM 구조를 알아야할까? 기술면접 질문에서 자바 애플리케이션의 실행 과정과 JVM 구조를 묻는 것을 보면, 이는 JAVA 개발자가 알아야할 필수 지식이다. JVM 구조를 알아야할 필요성을 먼저 인식하고 자바 애플리케이션의 실행 과정과 JVM 구조를 알아보자. 어떤 애플리케이션에서도 메모리 관리는 중요하다. 애플리케이션의 메모리관리가 효율적으로 이뤄질 수록 애플리케이션의 성능 또한 향상되기 때문이다. 메모리 관리 방법에는 수동적인 메모리 관리법, Garbage collector를 이용한 메모리 관리법 두가지가 있다. 1. 수동적인 메모리 관리법 메모리 관리를 개발자가 직접 하는 방법이다. 메모리 할당부터 해제까지 개발자가 명시적으로 호출해줘야한다. C++과 같은 경우, new와 delete를 이용해서..
1. 객체지향 프로그래밍이란? 1) 정의 프로그램을 단순히 데이터와 처리방법으로 나누는 것이 아니라, 수많은 객체라는 기본 단위들로 나누고 이들의 상호작용으로 서술하는 것을 지향하는 방식입니다.(즉, 프로그래밍의 방향성을 단순 데이터와 처리방식의 집합이 아닌, 객체들의 상호작용에 두는 관점입니다.) 여기서 객체란 하나의 역할을 수행하는 속성과 메소드의 묶음입니다. 물리적인 사물 혹은 추상적인 개념도 객체가 될 수 있습니다. *왜 지향인가? 프로그래밍을 모두 객체로 바라보는 것이 좋을 수도 있지만 나쁠 수도 있습니다. 왜냐하면 프로그래밍은 실제 세계와 완벽히 같지 않아서 객체로 표현이 안될 수도 있기 때문이입니다. 이에 '지향'이라는 단어를 사용합니다. 2) 장단점? 장점 코드 유지 보수 및 확장이 쉽다...
Set이란? 사전적 정의 수학용어의 하나로 어떤 조건에 따라 결정되는 요소의 모임을 말하며, 그 요소를 집합의 원소라고 한다. 어떤 원소가 그 집합에 들어 있는지, 들어 있지 않은지를 식별할 수 있어야 하고, 집합에서 취한 두 원소가 서로 같은지, 같지 않은지를 식별할 수 있어야 한다. (출처: 네이버 지식백과) 사전적 정의에 따르면 Set내에 값은 유일성을 보장해야한다. 1. 설명 값의 컬랙션 컬랙션 내 값의 유일성 보장 삽입 순서대로 순회(iterate) 가능 let fruitSet = new Set(['apple', 'orange']); for (fruit of fruitSet) { console.log(fruit); } // apple // oragne // 출력! 2. 값의 동일성은 어느정도로 ..
동적 타입 Javascript는 느슨한 타입, 즉 타입과 변수가 느슨하게 묶인 동적(dynamic) 언어입니다. 플레이를 누르면 컴퓨터가 이 파일을 실행할 수 있을지 미리 아는 것이 아닌(컴파일 시) 코드를 하나 하나 실행하면서(런타임) 타입과 변수가 묶이는 방식입니다. 두 종류의 자바스크립트 타입 - 자바스크립트의 타입은 크게 두가지로 나뉩니다. Primitive 값과 Object(객체)값. - Primitive 값은 말 그대로 원시 값이기 때문에 변할 수가 없습니다. 얘네들이 원본 그 자체가 되는 것들이죠. - Object 값은 Array 등 기타 모든 것으로 보입니다. 이들은 Primitive 값을 묶는 자료구조라고 볼 수도 있겠군요. Primitive 값에 대해 먼저 알아보죠 Primitive(원..