개발 언어/Java

    Java] 추상클래스와 인터페이스

    추상클래스와 인터페이스 이 두가지를 함께 물어본다면, 상속과 다형성에 대해서 묻는 것이다. (다형성이라 함은 간단하게 말한다면, 상속을 통해 기능을 확장하거나 변경하는 것을 의미. 즉, 하나의 메서드가 다양한 방법으로 동작하는 것) 클래스는 일반클래스와 추상클래스로 나뉘는데, 추상클래스는 추상매서드가 하나 이상 포함되거나 abstract로 정의된 클래스를 말한다. 인터페이스는 모든 메서드가 추상메서드로 이루어져 있다. (단, Java 8이후에는 default 키워드로 일반 메서드의 구현도 가능하게 됐다.) 추상클래스를 상속받는 클래스 또는, 인터페이스를 구현하는 클래스는 그 안에 있는 '추상메서드'를 구현하도록 강제한다. 어떻게 보면 의미가 비슷하다고 느낄 수 있으나, 추상클래스와 인터페이..

    Java] Comparable 과 Comparator를 사용한 정렬

    Comparable과 Comparator를 사용한 정렬 Java에서 정렬을 하다보면 Comparator 또는 Comparable을 사용한다. 사람마다 사용하는 이유와 목적이 다르기도하고, 각자가 편하게 느끼는 것이 또 다르다. 나 역시 그때그때 다르게 사용할때도 있고 긴가민가하며 다시 찾아보는 경우가 많았기에 이번에 정리해보려고 한다. 1. Comparable Interface 정렬수행시, 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의해 놓은 인터페이스. 사용 방법 : Comparable 인터페이스를 implements 한 뒤, 내부에 있는 compareTo 메서드를 원하는 정렬 기준대로 구현하여 사용. 자바에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현하고 있으며..

    GC(Garbage Collection) - summary

    GC(Garbage Collection) GC란, 이미 할당된 메모리에서 더 이상 사용하지 않는 메모리를 해제하는 행동. 사용되지 않는 메모리의 대상은 Heap과 Method Area에서 사용되지 않는 Object를 의미. 소스상에서 close()는 Object 사용중지 의사표현일 뿐 Object를 메모리에서 삭제하겠다는 의미가 아님. System.GC()를 명시적으로 호출할 수 있지만, Full GC를 수행시키는 메소드이기 때문에 Stop-the-world 시간이 길고 무거운 작업이며 또한 반드시 즉시 수행한다는 보장도 없는 메소드이기에 사용을 지양. GC 작동원리 Heap을 3개의 영역으로 나누어 관리. young 영역(Young Generation): 새롭게 생성한 객체의 대부분이 위치해있음. 가득..

    GC(Garbage Collection) - stop-the-world

    stop-the-world stop-the-world란, GC(Garbage Collection)을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다.

    GC(Garbage Collection) - 2 (GC Algorithm 구동방식)

    GC Algorithm 구동방식 Garbage : 참조되지 않고 있는 객체 reachability : 참조되고 있는 상태 unreachability : 참조되지 않는 상태 참조 상태중 최초에 참조되는 상태를 루트 셋이라고 하는데, 루트 셋에 연결되지 않고 unreachability한 객체들을 garbage처리한다. Heap 영역에 있는 객체들은 총 4가지의 종류가 있다. Heap내의 다른 객체에 의한 참조 Java stack, 즉, 메소드 내에서 사용하는 지역변수와 파라미터에 의한 참조 네이티브 영역에서 생성된 객체에 의한 참조 메서드 영역의 정적 변수에 의한 참조 2,3,4가 루트 셋이다. Serial GC : 적은 CPU, 메모리일 때 적합. Parallel GC : 다수의 스레드를 GC로 사용.

    GC(Garbage Collection) - 1 (intro)

    GC(Garbage Collection) 누군가 GC에 대해서 알고 있냐고 물어봤을 때, 어떤 역할을 하는지 두루뭉술하게는 알지만 명쾌하게 설명해줄 수 없었다. Java를 주로 사용하는데 GC에 대해서 설명하지 못한다면 좋은 개발자가 아니라고 생각한다. Naver D2의 글 중에서, GC에 대해서 관심을 가지고, 이해하는 것은 훌륭한 Java 개발자의 기본이라는 내용 일부를 본 적이 있다. 그래서 더욱 더 조사하고 알아보고 싶었다. Garbage Collection은 무엇일까? GC란 이미 할당된 메모리에서 더 이상 사용하지 않는 메모리를 해제하는 행동을 의미한다. 사용되지 않는 메모리의 대상은 Heap과 Method Area에서 사용되지 않는 Object를 의미한다. 그리고 소스상에서 close()는 ..

    상수(constant,final)와 리터럴(literal)

    상수(constant)와 리터럴(literal) 한 번쯤은, 또는 자주 들어봤을만한 용어들이다. 하지만 두 용어를 같은 의미로 사용하거나 차이를 모르는 사람들이 많다. 나 역시 명쾌하게 설명하지 못했기에 포스팅 하고자 한다. 아주 간단하게 설명하자면, 상수는 변하지 않는 변수를 말하며, (ex. final key word) 리터럴은 변수의 '값'이 변하지 않는 데이터 그 자체를 의미, 소스 코드의 고정된 값을 대표하는 용어(ex. 100, "abc") 라고 말할 수 있겠지만, 아래 내용을 보기 전이라면 와닿지 않을 수 있다.(나도 그랬다) 조금 더 구체적으로 알아가보자. 사람들이 이 둘을 헷갈리는 이유는 아마도 둘 다 변하지 않는 값(데이터)를 의미하기 때문이다. 상수(constant) 코드의 관점에서 ..

    Java의 변수와 메모리 영역

    Java의 변수 Class 변수 class가 메모리에 올라갈 때 생성 → 딱 한번만 생성됨, 인스턴스 생성 안해도 접근 가능. instance변수에 static을 붙인 것. instance 변수 instance가 생성될 때 (new / compiletime) local 변수 변수 선언문이 실행될 때(runtime) 위 3가지 변수가 올라가는 메모리 영역 Class변수 → Method area 이 영역에서 생성되는 변수는 프로그램이 종료될 때 까지 할당된 메모리를 점유한다. 이 때문에 메모리의 비효율성을 발생시킨다. Android 에서 static 남발하면 메모리 누수가 발생. instance변수 → Heap 지역변수는 초기화가 자동적으로 이루어지지 않는다. local 변수 → Stack Static의 의..