Collection이란?데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현한 것이다.기존에는 여러 개의 객체들을 하나의 객체에 담기 위해서 Object 클래스의 배열을 사용했지만, 배열의 경우 정적 메모리 할당(선언한 크기의 공간만큼 사용)을 하는 반면 컬렉션은 동적 메모리 할당(공간이 계속 필요한만큼 추가)을 하기 때문에 메모리 면에서 효율적으로 사용할 수 있다. 자바의 컬렉션의 구조는 다음과 같다. ArrayList란?ArrayList란 자바의 컬렉션 중 하나로서, 동적 배열을 구현한 클래스 이때, 동적 배열이란 할당된 ArrayList의 배열 공간이 꽉 찼을 때 새로운 배열을 만들어서 기존의 내용을 자동으로 복사하는 과정을 일컫는다.일반적으로 기존 배열의 크기는 ..
Java 언어를 배우면서 항상 들어오던말, "객체지향언어라 유지보수성, 재사용성 좋아~"하지만 매번 대충 뭐 상속때문인가, 오버라이딩?@$#$@# 그런가보다 생각만했지, 대체 왜? 그런지 생각해보지 않았다. 이번 기회에 제대로 알아보자. 0. 배경 데이터 흐름(flow)에 기반한 절차지향 프로그래밍은엄격한 순서에 의해 실행되며, 모든 구성요소가 유기적으로 연결 되어 있으므로문제가 생겼을 시 전체 시스템에 문제가 발생할 수 있어서 디버깅의 어려움이 있었다. 또한, 다양한 데이터 상태에 따라 다르게 동작하는 함수들이 많아지면서각 함수들로 전달되는 변수들이 적절한 값을 확인하는 코드의 복잡성도 늘어났으며,문제가 발생했을 때 함수에 영향을 주는 변수를 추적하는 것이 어려웠다. 이런 상황에 점점 더 프로젝트 규모..
멀티태스킹이란? 평소 우리는 컴퓨터를 사용하면서 웹서핑을 하면서, 친구와 카카오톡으로 채팅하고, 음악을 듣는다. 우리는 이렇게 여러 프로그램들을 동시에 실행하면서 작업을 수행한다. 이를 '멀티태스킹(MultiTasking)'이라고 한다. 근데 과연 진짜 수많은 프로그램들이 동시에 실행되는 것일까? 멀티태스킹 실행원리에 대해 자세하게 알아보자. 컴퓨터를 구매할때, 성능을 비교하면서 "코어와 쓰레드 수"를 보았을 것이다. 먼저 CPU란 컴퓨터의 뇌 역할을 담당하는 하드웨어이다. 주로 기억, 연산, 제어 등 컴퓨터의 논리적 사고를 담당하는 '뇌'와 같은 역할을 한다. 그리고 Core란 실제로 작업을 담당하는 유닛이다. 메인메모리에 올라가있는 프로세스를 해석하고 실행하고, 물리적 계산을 진행하는 '일꾼'같은 역..
프로세스의 자원 공유 여러 프로세스들은 운영체제에 의해 별도의 메모리 공간에 할당되기 때문에 다른 프로세스의 변수나 자료구조에 접근, 공유할 수 없다. 하지만 엄밀히 말하면, 가능하다. 우리는 평소 여러 프로그램들을 실행하면서 프로그램 간 정보를 주고받는 것을 볼 수 있었다. 이렇게 프로세스간 자원을 공유하는 방식은 크게 운영체제가 지원하는 방식과 네트워크를 사용하는 방식이 있다. 1. 운영체제가 지원하는 방식 1-1. Shared Memory ( 공유 메모리) - 공유메모리가 데이터 자체를 보유하며, 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용한다. - 프로세스가 커널에게 공유메모리 요청을 하면 커널은 메모리에 공유메모리 공간을 할당한다. - 대량의 정보를 다수의 프로세스에게 배포가 가능하..
프로세스의 구조 프로세스는 크게 4가지 영역으로 구성이 되어있다. Code(Text) 영역 - 프로그램의 소스를 컴파일하여 CPU가 해석 가능한 기계어가 저장되는 곳이다. Data(data, bss) 영역 - 프로그램의 코드 중에서 전역(global) 변수나 정적(static) 변수, 상수(const)가 저장되는 곳. - 초기화된 데이터는 Data 영역에 저장되고, 초기화 되지 않은 데이터는 BSS 영역에 저장된다. Stack 영역 - 함수와 지역변수가 저장되는 곳으로, 임시적으로 데이터를 저장하는 공간이다. - 함수의 호출과 함께 할당되며, 호출이 완료되면 소멸된다. - 메모리의 높은 주소부터 낮은 주소 방향으로 할당된다. Heap 영역 - 생성자, 인스턴스와 같이 동적으로 할당되는 데이터가 저장되는 ..
개요 소프트웨어를 전공하는 사람이라면 한번은 꼭 들어봤을 프로세스와 스레드. 컴퓨터 실행 내부 요소를 살펴볼때, 운영체제를 공부한다면 맨 처음 배우게 될 기본이 되는 개념이다. 정의는 이렇다. - 프로세스(Process) : 운영체제에게 자원을 할당받은 작업의 단위 - 스레드(Thread) : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 일단 작업의 단위? 실행 흐름의 단위?... 무슨 말인지 모르겠다. 그래도 일단 프로세스는 작업의 단위, 스레드는 실행 흐름의 단위라는 점을 기억하고 파헤쳐보자. 프로그램, 프로세스, 스레드 1) 프로그램(Program) 먼저 사람들이 흔히 아는 프로그램은, 실행할 수 있는 파일을 통칭한다. 윈도우의 exe파일이나 Mac의 dmg파일을 예로 들 수 있다. 여기서..