| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 유니온파인드
- 플로이드
- 친구비
- CORS
- 9205
- 10159
- Interface
- 투 포인터
- 딕셔너리
- BFS
- java
- 세션
- garbage collection
- 이분탐색
- 전구와 스위치
- 정렬
- Simple Request
- 2138
- Preflight
- 16562
- JVM
- sop
- 쿠키
- gc
- continue
- 백준
- for-else
- python
- Today
- Total
목록Java (6)
Today I Learned
[인터페이스] 추상클래스의 일종으로 추상화정도가 높은 클래스, 추상메서드와 상수를 멤버로 가진다. [특징] 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다. 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다. 단, static 메서드와 default method는 예외이다.(JDK1.8부터) [상속] 인터페이스를 상속받은 클래스에서 인터페이스 메서드 중 일부만 구현한다면 상속받은 클래스는 추상클래스로 명시해주어야한다. 상속받은 클래스가 추상메서드를 하나 이상 포함하고 있기때문이다. 추상클래스와 다르게 인터페이스는 다중상속이 가능하다. [디폴트 메서드] 인터페이스 설계 후 바뀌지 않는 것이 가장 좋지만 변경이 될 수 있다. 이 때 새로운 ..
[추상클래스] 완성되지 않은 클래스, abstract method를 하나 이상 가지고 있는 클래스, class 키워드 앞에 abstract 키워드를 붙여 명시한다. [특징] 미완성 클래스이므로 인스턴스 생성이 불가하며 자손클래스에 의해서만 완성될 수 있다. 일반클래스와 똑같이 생성자, 멤버변수, 메서드를 가질 수 있다. [부가설명] 자동차도 기능에 따라 여러 모델이 있지만 공통적인 부분은 다수 존재한다. 자동차를 처음부터 만드는 것과 공통적인 부분은 만들어놓고 부가적인 기능은 각 모델에 따라 완성하는 것을 비교하였을 때 후자가 더 효율적인 방법이다. [추상메서드] 메서드는 선언부와 구현부로 구성되어있다. 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 메서드가 추상메서드이다. 추상메서드는 리턴타입 ..
[final] 마지막, 변경될 수 없음과 같은 의미를 가지고 있는 제어자이다. [사용가능위치] final modifier가 사용될 수 있는 곳은 크게 변수, 클래스, 메서드 3가지가 있다. [변수] 변수에 final을 사용하면 값을 변경할 수 없는 상수가 된다. final int a = 10; a = 20; // compile error [클래스] 클래스에 final을 사용하면 상속에 사용할 수 없는 클래스가 된다. final class A { int a; A() { a = 10; } } class ChildOfA extends A {// compile error } [메서드] 메서드에 final을 사용하면 오버라이딩을 할 수 없는 메서드가 된다. class A { final int a = 10; fin..
Garbage Collection(GC)는 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기능이다. 필요 없게 된 영역, 사용하지 않을 메모리 영역을 Garbage라고 부른다. [Stop The World(STW)] GC를 수행하기 위해 GC와 관련된 쓰레드가 아닌 다른 쓰레드들은 멈추는 것을 의미한다. GC튜닝은 이 시간을 최소화하는 것을 말한다. [Weak generational hypothesis] 대부분의 객체들은 짧은 시간동안 살아있다. 금방 접근 불가능한 상태(unreachable)가 된다. 오래된 객체에서 젋은 객체로의 참조는 아주 적게 존재한다. 위의 가정을 기반으로 메모리 구조를 크게 2개(Young Generation, O..
Java Virtual Machine(JVM)은 자바 바이트코드를 실행할 수 있는 주체이다. 앞서 포스팅한 JIT Compiler나 앞으로 포스팅할 Garbage Collection은 없는 것을 볼 수 있다. 이에 대한 이유는 JVM Spec에서 찾아볼 수 있다. JVM이라고 칭하려면 단지 class 파일 형식을 읽고 여기에 지정된 작업을 올바르게 수행할 수만 있으면 된다고 한다. 추가적으로 JVM 사양의 일부가 아닌 구현 세부 사항은 구현자의 창의성을 불필요하게 제한한다고 쓰여있다. 이는 런타임 데이터 영역의 메모리 레이아웃, 사용된 가비지 컬렉션 알고리즘, 명령 최적화는 구현자의 재량에 따라 결정된다고 볼 수 있다. 아래 그림은 보다 구체적인 JVM 구조이다. [Class Loader] Loading..
자바는 객체지향 언어이다. [등장 배경] 원래는 가전제품에 탑재해 동작하는 프로그램을 위해 개발되었다. 이때까지만 해도 자바라는 프로그래밍 언어가 아니라 오크(Oak)라는 이름의 언어였다. 오크를 개발한 이유는 기존의 프로그래밍 언어(C, C++)들은 플랫폼에 독립적이지 않아 플랫폼에 따라 컴파일하거나 코드를 다시 작성해야 하는 문제점이 있었다. 이를 해결하기 위해 플랫폼에 독립적인 오크라는 언어가 고안되었다. 이후 다양한 플랫폼을 사용하는 컴퓨터들이 통신하는 인터넷과 웹이 발전하면서 오크를 인터넷 환경에 적합하도록 발전시켰고 자바를 발표하였다. [플랫폼 종속적, 독립적] C, C++은 프로그래머에 의해 코드가 작성되고 컴파일 과정을 거치면 기계어 코드로 변환된다. 이 때 C, C++가 특정 CPU의 기..