인터페이스 - g추상 메서드의 집합
추상 클래스 - 일반 클래스, 추상 메서드를 가지고 있는것
인터페이스 - 추상 메서드만 가지고 있는것 ( 구현 된것이 없는 껍데기 )
(예외 자바 8 이후 default, static method)
1) 변수 - 무조건 public static final 로 선언, 없어도 생략 된 것이다. 2) 추상 메소드 - 무조건 public abstract 로 선언, 없어도 생략 된 것이다. 3) default 메소드 : 인터페이스에서 기본적으로 제공하지만 구현 내용을 재구현 하고 있다면 오버라이딩이 선택적으로 가능 4) static 메소드 : 인터페이스에서 제공하는 것으로 무조건 사용해야 한다.
인터페이스의 조상은 인터페이스만 가능 ( Object가 최고 조상이 아님)
다중 상속이 가능( 구현 된 것이 없으므로, 충돌 문제가 없음)
설정 정보 등의 공용 정보
매번 메모리에 로딩하거나 값을 읽어들이는 것보다 일종의 ‘전역변수’와 같은 개념을 통해서 접근하는 것이 비용도 줄이고 효율을 높일 수있다.
변수 종류 | 선언 위치 | 생성시기 |
---|---|---|
class variable ( static ) 공통 공유 | 클래스 영역 | 클래스가 메모리에 올라갈때 |
instance variable 개별 | 클래스 영역 | 인스턴스 생성시 |
local variable | 클래스 영역 이외 (메서드 생성자, 초기화 블럭) |
변수 선언문이 수행될때 |
클래스 변수는 Method Area에
인스턴스 변수는 Heap 영역에
지역 변수는 call stack 영역에
대상 | 의미 |
---|---|
멤버변수 | - 모든 인스턴스엣 공통적으로 사용되는 클래스 변수 - 인스턴스 생성하지 않고도 사용 가능 - 클래스가 메모리에 로드될 때 생성 |
메서드 | - 인스턴스를 생성하지 않고도 호출이 가능 - static 메서드 내에서는 인스턴스 멤버들(iv,im)을 직접 사용할 수 없다.(객체를 만들고 나야지 쓸 수 있으니깐.) |
클래스 변수(static) 은 참조 변수로 써도 되지만, 클래스.변수 형태로 써야 한다.
클라이언트 - 서버간 상호운영성은 두 가지로 구분될 수 있다.
네트워크 통신에만 특정된 것은 아니다.
객체 직렬화 (Serialization) 는 JVM에서 자바 객체를 ‘내보내는’ 간단한 방법.
직렬화된 객체는 디스크에 기롤할 수 있고, 네트워크가 아닌 다른 I/O 인터페이스에 기록할 수도 있다.
Vector VS ArrayList
Vector : synchronized -> 1 thread만 접근 가능
ArrayList : 멀티스레드 가능
배열은 요소 추가시 O(n) : 새로 만들어야 하니깐
ArrayList 는 요소 추가시 O(1), 최악은 O(n) : 일정 크기의 배열을 만들어 놓는다. 리스트 요소가 일정 이상 많아지면 배열처럼 새로 만들어야 한다.
단, 특정 인덱스에 끼워 넣는것은 O(n)이다. 이는 마찬가지로 뒤로 한칸씩 미뤄 줘야 하니깐…
삭제는 바로 새로운 리스트가 만들어 지는것이 아니라, 일정 개수 삭제후 compaction을 한다. 이도 최악은 O(n) 이다.
인덱스 없다. 배열이 없다. 노드가 있다.
추가 및 삭제 시 O(1) : 단 특정 인덱스에 추가하는 것은 O(n) . 그 노드까지 찾아가서 (조회 후..) 추가해야 .
삭제는 개념적으로는 O(1)이지만 실질적 삭제는 O(n) 이다. 개념적 삭제는 Node만 지워 주면 되는 데, 내용물을 조회후 삭제를 해야 하므로 O(n)이다.
조회시 O(n) ( 순차적으로 next node를 따라간다.)