인터페이스(Interface)
상속(Inheritance)
final
static
Comparator(interface)
List(interface)
Lambda
둘 사이를 연결하는 매개체
- public abstract method로 구성
- 모든 변수는 public static final로 구성
- instance를 생성할 수 없음
- interface간의 상속(extends)이 가능
- class는 interface를 구현(implements)함으로 추상메서드들의 오버라이딩 관계가 성립함
- interface의 형을 대상으로 참조변수의 선언이 가능
- 자바8 부터 default 메서드, static 메서드 정의 가능
- 마커 인터페이스로 사용하기도 함
상속(Inheritance)
연관된 일련의 클래스들에 대해 공통적인 규약을 정의할 수 있습니다.
- 자식클래스의 인스턴스가 생성되면 부모클래스 생성자부터 자식클래스 생성자 순으로 호출된다.
- 단일 상속
- static 변수는 상속하지 않는다.
- 자식클래스는 부모클래스의 모든 특성을 지닌다.
- IS - A 관계
오버로딩(Overloading)
- 메서드 오버로딩: 한 클래스 내에 동일한 이름의 메서드를 둘 이상 정의할 때, 각 메서드 매개변수의 선언이 다를 경우
- 생성자 오버로딩 : 한 클래스 내에 생성자의 매개변수를 각기 달리 정의할 경우
오버라이딩(Overriding)
부모 클래스에서 정의된 메서드를 자식 클래스에서 다시 재정의
final
- 클래스를 정의하는데 다른 클래스가 상속하는 것을 원하지 않을 때
- 메서드를 정의하는데 다른 클래스에서 오버라이딩을 원하지 않을 때
static
- 클래스 변수: 모든 인스턴스가 공유하는 변수를 선언
- 클래스 메서드: 인스턴스 생성을 할 필요없이 바로 사용하는 메서드를 선언
JVM의 메모리 영역
- Method 영역: 메서드의 바이트코드, static 변수
- Stack 영역: 지역변수, 매개변수
- Heap 영역: 인스턴스
Wrapper 클래스
기본 자료형을 객체로 만들거나(boxing) Wrapper 클래스 인스턴스를 기본자료형으로 풀어냄(unboxing)
- int < - > Integer
- double < - > Double
- boolean < - > Boolean
- long < - > Long
Comparable(interface)
인스턴스의 '기본' 정렬 기준을 판단할 때
Comparator(interface)
인스턴스의 '기본' 정렬 기준 외의 다른 기준을 판단할 때
List(interface)
인스턴스의 저장 순서를 유지하고, 중복을 허용하는 컬렉션 인터페이스
- ArrayList: 배열을 이용하는 자료구조(장점: 저장된 인스턴스의 참조가 빠르다, 단점: 내부 배열의 크기를 늘릴때, 인스턴스를 삭제할 때 느리다)
- LinkedList: 노드를 이용하는 자료구조(ArrayList의 반대)
Map(interface)
Key와 Value 쌍으로 이뤄진 데이터들을 저장하며, Key는 중복될 수 없으며 Key가 다를경우 Value는 중복될 수 있음
- HashMap: 저장순서를 유지하지 않음
- TreeSet: Key의 인스턴스를 기준으로 정렬 상태를 유지함
Set(interface)
인스턴스의 저장 순서가 유지되지 않고, 중복을 허용하지 않는 컬렉션 인터페이스
- HashSet: HashMap을 이용하는 자료구조(Key: 저장하려는 객체, Value: Dummy Object(new Object()))
Queue(interface)
First In First Out
- LinkedList: 노드를 이용하는 자료구조로 List 타입으로 선언하면 '리스트'로 동작하고, Queue 타입으로 선언하면 '큐'로 동작
Stack(class)
Last In First Out
- Stack: thread에 안전하게 설계된 자료구조로 지금은 호환성 유지를 위해 존재함. Deque를 권장.(자바 1.6 이전)
- ArrayDeque: Queue 인터페이스를 상속한 Deque 컬렉션 인터페이스를 구현한 클래스로 내부적으로 배열을 자료구조로 사용(자바 1.6)
Enum(열거형)
의미가 부여된 이름을 갖는 상수 선언
Lambda
(추상)메서드가 한개만 존재하는 인터페이스(Functional Interface)를 간략하게 표현
- 코드의 양이 줄어들고, 가독성이 좋아짐
- Predicate(boolean test(T)), Supplier(T get()), Consumer(void accept(T)), Function<T, R>(R apply(T))
- static 메서드 참조(ClassName::staticMethodName)
- 람다식에서 접근 가능한 참조변수는 final로 선언된 것 또는 final 이라고 추론할 수 있는 변수만 참조가능하다.(병렬처리에서 변수 값의 변화로 인한 문제점을 차단)
static 팩토리 메서드
객체를 생성하는 메서드를 만들고 static으로 선언
- 메서드 이름이 있으므로 생성자에 비해 가독성이 좋다
- 호출할 때 마다 새로운 객체를 생성할 필요가 없다(단, 미리 정의해 둔 객체일 경우)
- 하위 자료형 객체를 리턴할 수 있다.
형인자 자료형 객체를 만들 때 편리하다(자바 1.7 Diamond Operator로 쓸모 없어짐)
Immutable
객체를 생성한 뒤부터는 변경을 허용하지 않는다
- 멀티쓰레드 환경에서 객체를 안전하게 공유할 수 있다. 그로인한 사이드이펙트에서 자유로워짐
- 기본자료형의 경우 final 선언. 객체의 경우 멤버변수의 final 선언. 컬렉션들은 Collections API를 통한 unmodifiable 시리즈를 사용하면 객체를 불변화 시킬 수 있다.
댓글
댓글 쓰기