인성개발자

Computer Science/DataStructure

[DataStructure] Array & ArrayList & LinkedList (JAVA) 정리

Array (배열) 배열이란 같은 데이터 타입의 변수들로 이루어진 자료구조로, 자바에서 기본적으로 지원하는 자료 구조이다. 배열을 구성하는 각각의 값은 요수 혹은 원소(element)라고 부릅니다. 배열에서의 위치를 가리키는 숫자는 인덱스(Index)라고 부릅니다. 대부분의 언어에서 배열의 인데스는 0부터 시작하며, 자바에서도 0부터 시작한다. 대부분의 언어에서 배열의 인덱스는 0부터 시작하며, 자바에서도 0부터 시작한다. 참고로 파이썬의 경우 배열과 비슷한 list에서 리스트 맨 끝의 원소를 가리키는 인데스 -1도 존재하는데, Java에서는 배열의 인덱스는 0을 포함한 양의 정수만 가질 수 있다. 배열은 참조 객체이므로 배열을 가리키는 참조 변수는 스택영역에 할당되며, 이 참조 변수가 가리키고 있는 주..

Computer Science/Algorithm

[Algorithm] Hash(해시) 란

Hash 란? 해시란 임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장하는 것이다. 키에 대한 해시값을 사용하여 값을 저장하고 키-값 쌍의 갯수에 따라 동적으로 크기가 증가하는 associate array이다. 키에 대한 해시값을 구하는 과정을 hashing(해싱)이라고 한다. 이때 사용하는 함수(알고리즘)를 해시함수라고 한다. 해시 값 자체를 index로 사용하기 때문에 평균 시간복잡도가 O(1)로 매우 빠르다. Hash 함수란? 위에서 설명한 것과 같이 키에 대한 해시값을 만드는 함수(알고리즘)이라고 한다. 계산이 복잡하지않고 키값에 대한 중복이 없고 해시값을 고르게 만들어 내는 함수가 좋은 함수이다. 특징 입력값이 일부만 변경되어도 전혀 다른 해시값을 출력한다...

Computer Science/Algorithm

[Algorithm] 시간복잡도와 공간복잡도

시간 복잡도란? 시간 복잡도(Time Complexity)는 알고리즘의 절대적인 실행 시간을 나타내는 것이 아닌 알고리즘을 수행하는 데 연산들이 몇 번 이루어지는 지를 숫자로 표기한다. 알고리즘의 성능 평가 Case 최선의 경우 (Best Case) 최적의 입력을 한 상태에서, 작업을 완료하는 데 가장 연산 횟수가 적은 경우 최악의 경우 (Worst Case) 최악의 입력을 한 상태에서, 작업을 완료하는 데 가장 연산 횟수가 많은 경우 평균의 경우 (Average Case) 여러 경우의 수를 고려하여, 총 연산 횟수를 계산하고 시행 횟수로 나눈 경우 알고리즘 분석 시 평균의 경우와 최악의 경우가 가장 많이 활용되며, 알고리즘이 복잡해질수록 평균을 구하기 어려워져 최악의 경우로 알고리즘 성능을 파악한다. ..

Computer Science/DataBase

[DataBase] 정규화(1NF, 2NF, 3NF, BCNF)

정규화(Normalization) 정규화란 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다. 즉, 쉽게말하면 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 이러한 테이블을 분해하는 정규화 단계가 정의 되어 있다. 정규화의 장단점 정규화의 장점 데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있다. 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 ..

Computer Science/DataBase

[DataBase] RDBMS와 NoSQL의 차이점

DB 컴퓨터 시스템에 전자 방식으로 저장되어 있는 구조화된 정보 또는 데이터의 체계적인 집합을 말한다. SQL Structed Query Language 관계형 데이터베이스 관리시스템(RDBMS)의 관리를 위해 제작된 언어로써, 자료의 검색과 재조합, 스키마 생성과 수정과 같은 데이터베이스 객체 조정 관리를 위해 사용되고 있다. DBMS 데이터베이스 관리 시스템으로 사용자와 데이터 사이에서 사용자의 요청에 의해 데이터의 생성 조회 등 데이터베이스를 관리해주는 역할을 한다. RDBMS란? Relational DataBase Management System의 약자로, 관계형 데이터베이스 관리 시스템을 의마한다. RDB를 관리하는 시스템이며 RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이..

Computer Science/DesignPattern

[DesignPattern] 객체지향 프로그래밍이란

객체지향 프로그래밍이란? 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 이 방식은 오늘날 가장 많이 사용한 대표적인 프로그래밍 방식이다. 대표적으로 Java, C#등이 대표적인 객체지향 프로그래밍 언어이다. 객체지향 프로그래밍 특징 그리고 장점, 단점 객체 지향 프로그래밍에서는 크게 추상화, 캡슐화, 상속, 다형성의 네 가지 특징을 가진다. 추상화 객체에서 공통된 속성과 행위를 추출하는 것 공통의 속성과 행위를 찾아서 타입을 정의하는 과정 추상화는 불필요한 정보는 숨기고 중요한..

Computer Science/OperatingSystem

[OS] 참조의 지역성과 참조 집합

참조의 지역성이란? CPU가 프로그램을 실행하는 동안 짧은 시간 범위 내에 일정 구간의 메모리 영역을 반복 참조(액세스)하는 경향이 있는데 이것이 참조의 지역성이라고 한다. 참조의 지역성 특성 참조의 지역성은 프로그램이 가지는 기본적인 실행 특성이다. 프로세스의 실행동안 메모리가 균일하게 참조되지 않고 특정 부분이 집중 참조된다. 참조의 지역성은 지역성(locality), 지역성의 원리(principle of locality)라고도 부른다. 프로세스는 최근에 참조한 데이터와 코드를 다시 참조하는 경향이 있다. 프로세스가 실행되는 동안 메모리 영역을 옮겨 다니면서 참조의 지역성이 나타난다. 경험적 관찰에서 발견한 90/10 규칙은 "프로그램 코드의 10%가 프로그램 전체 실행 시간의 90%를 소비한다"는 ..

Computer Science/OperatingSystem

[OS] 가상 메모리(Virtual Memory System) 란?

가상 메모리(Virtual Memory System) 란? 메모리가 실제 메모리보다 많아 보이게 하는 기술로, 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안하여 고안된 메모리 기법이다. 왜 가상 메모리를 사용하는가? 물리 메모리는 컴퓨터에 장착된 실제 메모리로서 최대 크기는 CPU에 의해 제한된다. 그렇다면 운영체제는 물리메모리보다 큰 프로세스를 실행시킬 수 없는 것인가? 또한 운영체제는 여러 프로세스를 합쳐 물리 메모리보다 클 때 이들을 동시에 실행 시킬 수 없는 것인가? 이에 대한 해답으로 가상메모리 기법이 등장하게되었다. 결국에 가상 메모리는 물리 메모리보다 큰 프로세스나 여러 개의 작은 프로세스를 동시에 실행시켜, 사용자나 응용프로그램에게 ..

Tenacity_Dev
'분류 전체보기' 카테고리의 글 목록 (28 Page)