목록Study (36)
DevGang
GC(Garbage Collection) JVM의 heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스 Reachability 어떤 객체에 유효한 참조가 존재한다면 Reachable, 그렇지 않다면 Unreachable *GC Roots stack 영역의 데이터들 method 영역의 static 데이터들 JIN에 의해 생성된 객체들 heap 영역의 다른 객체의 참조도 reachable Mark and Sweep, Compact Mark : GC Root로부터 모든 변수를 스캔하면서 어떤 객체를 참조하고 있는지 찾아서 마킹한다. Sweep : Unreachable 객체들을 Heap에서 제거한다. Compact : Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지..
JCF란 Java에서 Collections란 데이터의 집합, 그룹을 의미한다. JCF는 이러한 데이터, 자료구조인 Collection과 이를 구현하는 클래스, 정의하는 인터페이스들을 제공한다. JCF 장점 코드 재사용이 쉽다. 프로그램 속도와 품질을 높일 수 있다. 관련성이 없는 API들의 상호운영성을 보장한다. 표준적인 인터페이스를 제공하면서 새로운 API를 배우는 노력을 줄여준다. 새로운 API를 직접 제작하는 노력의 낭비를 줄여준다. 프로그래밍을 쉽게 한다. JCF 종류 List - ArrayList 배열을 구현한 클래스로 논리적 순서와 물리적 순서가 동일하며 가장 많이 사용 List - LinkedList 논리적으로 순차적인 구조지만, 물리적으로는 순차적이지 않을 수 있음 Queue Queue는 ..
XML HTML은 한정된 태그를 가지고 있는데 확장성이 용이하지 않다. 동일하게 Markup Language이고 새로운 태그를 만들어내는 기능을 통해 무한한 확장이 가능하도록 한 것이 XML이다. XML은 필요에 의해서 새로운 태그를 추가할 수 있다. 그 추가된 태그를 정의하는 파일이 .dtd이다. 데이터 정의 파일이 함께 네트워크 상을 오가며 새로운 태그를 이해할 수 있게 해 준다. XML은 data를 전달하는 데 포커스를 맞춘 언어. HTML은 data를 표현하는데 포커스를 맞춘 언어. JSON 데이터를 나타낼 수 있는 방식은 여러 가지가 있지만, 대표적인 것이 XML이고, 이후 가장 많이 사용되는 것이 아마도 JSON일 것이다. 왜 XML보다 JSON이 더 많이 사용되는 것처럼 보일까? 그것은 아마..
Redundant Array of Inexpensive/Independent Disk 저장장치 여러 개를 묶어 고용량·고성능 저장 장치 한 개와 같은 효과를 얻기 위해 개발된 기법이다. 초기에는 업그레이드 후 '폐기하기엔 아깝고, 그렇다고 단독으로 쓰기에는 성능이 부족한'(Inexpensive) 저장장치를 재활용할 목적으로 사용하였다. 저장장치 기술이 발전한 현재는 Inexpensive보다는 Independent로 해석하는 추세이다. RAID의 주 사용 목적은 크게 무정지 구현(안정성)과 고성능 구현으로 구분된다. 무정지 구현을 극도로 추구하면 RAID 1, 고성능 구현을 극도로 추구하면 RAID 0이 되며, RAID 5, 6은 둘 사이에서 적당히 타협한 형태. RAID 10이나 RAID 01과 같이 두..
배열(Array) 배열은 많은 수의 항목을 메모리에 저장할 때 사용할 수 있는 방법 가운데 가장 단순하고 기본적인 방법이다. 배열은 메모리에 연속적인 공간을 할당하여 만든다. 배열 속에 저장하려는 항목은 그 메모리 공간 속에 순차적으로 기록한다. 장점 - 프로그래밍하기 쉽고 접근시간이 상수 시간이다. 단점 - 연속적으로 이어진 메모리 공간에만 저장할 수 있다. 중간 항목을 제거하려면 제거하는 항목 이후의 모든 항목을 한 칸씩 앞으로 당기거나 죽은 공간으로 표시해야 한다. 연결 리스트(linked list) 저장한 칸들을 쇠사슬처럼 연결한 구조이다. 장점 - 배열과 달리 연속적인 메모리 주소로 구성될 필요가 없다. 처음부터 필요한 모든 메모리를 할당해 둘 필요가 없다. 리스트 중간에 추가, 삭제가 간단하다..
JDK 1.0(1991) OAK 발표: GE사의 요청으로, 선마이크로 시스템즈에서 C++의 단점을 극복하고자 만든 언어 메모리 할당/해제의 어려움과 다중 상속으로 인한 실수유발을 극복하려고 했다. 1996년, JDK 1.0 발표 : Java로 개명, Java Virtual Machine 1.0을 발표했다. Java Applet도 이때 처음 도입 JDK1.1(1997) JDBC, RMI, Reflection, JIT, Inner Class 개념이 포함 JDK 1.2(1998) Java SE 1.2, ME 1.2, EE 1.2 세 가지 버전으로 발표 - Swing이 SE에 포함, Corba IDL(이종기기간 함수 호출 스펙), Collection Framework 포함 JDK 1.3(2000) HotSpot..
제네릭이란? 제네릭은 클래스에서 사용할 타입을 클래스 외부에서 설정하는 것 제네릭 선언은 클래스 으로 합니다. 제네릭의 타입으로는 참조형 데이터 타입만 설정 가능합니다. class CustomStack { List customStack = new ArrayList(); public void pop( T inputItem ) { customStack.add( inputItem ); } } public class GenericEx_1 { public static void main(String[] args) { CustomStack stringStack = new CustomStack(); CustomStack integerStack = new CustomStack(); stringStack.pop( "홍길동..
JVM(Java Virtual Machine) JVM은 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다. JVM은 플랫폼에 독립적이다. 리눅스와 윈도우의 JVM은 다르지만 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있다. JIT 컴파일러, 자바 인터프리터 등 JRE(Java Runtime Environment) JRE는 JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리와 기타 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현한다. 클래스 로더 , 자바 API, 실행 시간 라이브러리 등 JDK(Java Development Kit) JDK는 JRE를 포함하여 개발을 위해 필요한 도구들을 포함한다. 컴파일러, 디버거, 애플릿뷰어 등 JDK 종류 Ja..
절차 지향(Procedural oriented) 프로그래밍 이란? 절차 지향 프로그래밍은 단순히 순서대로 명령을 수행하는 것을 의미하는 것이 아닌 프로시저 호출의 개념을 바탕으로 하는 구조적 프로그래밍의 일종이다. 영문 표기 "Procedural Programming"을 한국어로 번역하면 "절차" 혹은 "절차적"이 되기 때문에 "절차"를 사전적 의미 그대로 해석해서 순차적 프로그래밍 또는 함수형 프로그래밍과 유사하거나 같은 부류에 속하는 것으로 오해하기 쉬우나, 여기서 말하는 "절차"는 프로시저 혹은 함수로 해석해야 한다. 절차적 프로그래밍은 명령형, 구조적 프로그래밍의 일종으로 프로시저 콜이라는 함수 호출을 통해 추상화와 재사용성을 얻어내는 것에 초점을 맞추고 있기 때문에 선언형, 비구조적 프로그래밍과..
최선의 경우를 바라되, 최악의 경우를 대비하라. 최상의 경우 : 오메가 표기법 (Big-Ω Notation) 평균의 경우 : 세타 표기법 (Big-θ Notation) 최악의 경우 : 빅오 표기법 (Big-O Notation) 평균인 세타 표기를 하면 가장 정확하고 좋겠지만 평가하기가 까다롭다. 일반적으로 가장 중요한 경우는 최악의 경우 입니다. 최소한의 기준점이 되기 때문이죠. 최악의 상황을 상정하면 더 나쁜 상황은 있을 수 없는 거니까요. 상황에 대한 설명이 주어지지 않았다면, 최악의 상황을 상정해야 하는 겁니다. - 한 권으로 그리는 컴퓨터과학 로드맵 중에서 아래는 대표적인 Big-O의 복잡도를 나타내는 표이다.