본문 바로가기

java

(25)
배열과 리스트 - 리스트는 특정 타입 값들이 순차적으로 정렬된 컬렉션이다. 자바에서는 LinkedList나 ArrayList 클래스를 일반적으로 사용 - 어떤 경우에는 LinkedList보다 ArrayList가 더 적합하며 반대일 수 도있다. - 사용하기 전에 리스트는 애플리케이션의 성능이나 메모리 사용량과 밀접한 관계가 있기 때문에 반드시 고민을 해봐야 한다. - 리스트를 사용하려면 메서드와 생성자 매개변수는 필드 정의로 List 인터페이스를 사용함.배열과 리스트의 관계public void arrayDefinitions() { int[] interger = new int[3]; boolean[] bools = {false, true, true, false}; String[] strings = new String[] ..
람다 정리 람다표현식 - 메서드로 전할할 수 있는 익명 함수를 단순화한 것 람다 특징익명 : 보통의 메서드와 달리 이름이 없음으로 익명이라 표현함수 : 특정 클래스에 종속되지 않으므로 함수라고 부름전달 : 메서드 인수로 전달하거나 변수로 저장가능간결성 : 익명 클래스처럼 자질구레하게 구현할 필요 없음 Comparator byWeghtLamda = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 파라미터 리스트 - 파라미터 (두 개의 사과) 화살표 - 람다의 파라미터 리스트와 바디를 구분 람다의 바디 - 두 사과의 무개를 비교, 반홤값에 해당하는 표현식 자바 8에서 지원하는 람다 5가지 표현 (String s) -> s.length(); // St..
Java HashMap동작 원리 HashMap - Hash맵은 Key와 Value로 이루어진 Java의 자료구조 - Key는 중복을 허용하지 않고 Value는 중복을 허용한다. - HashMap의 내부구조는 배열로 되어있고 key는 직접 내부 배열의 인덱스가 될 수 있다. 이 배열을 버킷이라 한다. - 인덱스를 구하기 위해서 해시 함수를 사용하는데 해시 함수는 hashcode() % M 으로 구할수 있다. - 그런데 이렇게 HashCode를 구하면 동일 중복값이 발생하게 된다. 이것을 해시 충돌이라 하는데 - 해시 충돌을 방지하기 위해 Open Addressing 방식과 Separate Chaning 방식이 있다 - Open Adressing 방식은 해시충돌이 발생하면 인접 index 값을 새로 구해서 해시충돌을 우회하는 방법이다. -..
ClassLoader ClassLoader- java 파일을 컴파일 후 Compile된 파일을 Load하여 필요한 클래스 정보를 적재함. 클래스 로더는 로드한 클래스의 필요한 클래스 정보를 로드한 적이 있다면 Cache에서 찾고 Cache에 없다면 부모 ClassLoader에서 찾고 부모에도 없다면 Self로 찾는다.클래스 로더는 계층적 구조를 갖는다. 1. BootStrapClassLoader - 최상위 클래스 로더로써 java가 필요한 기본 클래스 정보를 로드한다. - JAVA_HOME/jre/lib/rb.lib 파일을 로드함2. ExcentionClassLoader - java에서 필요한 부가 정보를 로딩한다 - JAVA_HOME/lib/ex/*.lib 을 로드함3. SystemClassLoader - java clas..
GabageCollector JAVA GarageColletor - Serial GC - 단일 처리 - 단일 처리 할때 사용되는 gc - Young Generation은 Generation 알고리즘을 사용 하고 Old Generation 은 Mark-and-Compaction 알고리즘 사용 - Paralle GC - 병렬로 처리 - Young Generation은 Generation알고리즘을 사용하고 Young Generation만 병렬로 처리 - Paralle Copy Algorithm - Generation Algorithm과 동일 하지만 Eden 영역에서 Survivor 영역으로 Copy될때 병렬로 처리 된다. - 병렬로 처리 될때 같은 동일한 스레드가 같은 객체를 참조하면 Curruption이 발생한다. Curruption을..
GarbageCollection GarbageCollection이란? - Java에서는 객체를 효율적으로 소멸시키기 위해 사용되는 알고리즘 ReferenceCounter Algorithm- 각 객체에 참조되어 있는 객체가 있으면 Count를 매겨 객체의 GC 대상 여부를 판별함 - 객체의 Count가 없는 객체만 GC하면 되기 때문에 Suspend 현상이 짧음 - 참조하는 RootSet이 없어도 각 객체 끼리 순환 구조이면 서로를 참조하고 있어 GC 대상이 되지 않고 계속 살아 있게되어 메모리릭 발생 확률이 높아짐. Mark-And-Sweep Algorithm - RootSet 부터 참조하는 객체에 Marking하여 객체가 살아 있는지 판별하게 됨. - Mark Pahse와 Sweep Phase로 나뉨 - Mark Pahse : App..
String StringBuider SttringBuffer 차이 Stirng - String 객체는 불변(Immutable) 객체이다. String은 메모리에 한번 할당이 되고 할당된 내용을 수정 또는 문자를 추가 하려고 하면 새로운 객체가 생성되고 기존에 할당된 객체는 변경되지 않는다. 예를 들어 String test = "hello"가 있고 test += "test"; 라고 하면 내부적으로 new StringBuilder(test).append("test").toString()을 호출하게 된다.그래서 스트링은 불변 객체이다. new String과 리터럴 String 의 차이- 그러면 리터럴로 선언한 스트링과 객체로 선언한 스트링은 어떤 차이가 있을까? 리터럴로 선언한 Stirng은 String Constant Pool에 생성이 되고 new String으로 할당한 ..
예외 Java 예외 - java 예외에는 Error와 Exception으로 나뉜다. - 모두 Throwble을 상속한다. Error - 개발자가 Control 하지 못하는 예외이다. 대표적으로 OOM와 StackOverFlow가 있다. Exception - Exception에는 CheckedException과 UnchkedException이 있다. Checked Exception - 예외를 핸들링하지 않으면 Compile 시점에 Compile Error가 발생한다. - 예외를 핸들링하여 장애 상황을 미리 대처할 수 있다. - 대표적으로 IoException과 CheckedException 있다. Unchecked Exception - Runtime Exception이다 - 예외를 핸들링 하지 않아도 Compi..