Java
-
SetJava/Data-Structure 2019. 8. 1. 21:37
■Set 인터페이스 - 중복을 허용하지 않음 - 구현 클래스 : HashSet, TreeSet, LinkedHashSet - 동기화를 지원하지 않는다.(Not Thread Safe) ■HashSet 클래스 - 내부 구현 : HashMap - 순서 없이 데이터 저장 - HashSet.add 과정HashMap.put(data,new Objtect) - HashSet.remove 과정HashMap.remove(data) - 데이터를 HashMap의 key를 이용해 저장하기 때문에 검색 속도가 빠르다 - 제네릭을 이용하여 HashSet을 사용할 경우, HashMap의 key 중복 검사에 해당 제네릭 클래스의 hashCode()와 equals()가 사용됨. 따라서 각 메소드들을 적절하게 재정의하는 것이 좋다. -..
-
ListJava/Data-Structure 2019. 8. 1. 21:33
■List 인터페이스 - 순서가 있고 중복을 허용. - 구현 클래스 : ArrayList, Vector, LinkedList ■ArrayList 클래스 - 내부 구현 : Object[] elementData; - 배열과 다르게 크기가 유동적이라는 것이 특징. - 내부 배열을 새로운 크기의 배열로 대체해 가며 유동적으로 관리. - ArrayList.add 과정1. Object[index] = element;2. 인덱스가 가득 찼을 경우, Arrays.copyOf메소드를 통해 Object[oldCapacity + (oldCapacity >> 1)]를 새로 생성해 복사함. - ArrayList.remove1. System.arraycopy(elementData, index+1, elementData, inde..
-
인터페이스 vs 추상클래스Java/Basics 2019. 6. 20. 10:06
■인터페이스 - 비슷한 기능을 가진 클래스들의 공통점(정확하게는 공통된 메소드)을 추출해서 모아놓은 집합체 또는 규칙 또는 약속 또는 표준 (딱 정의내리기가 애매하다) - 일반 클래스와 비슷한 문법으로 작성한다. 하지만 class A -> interface A 로 쓴다. 그리고 static 변수를 제외한 다른 멤버 변수는 선언할 수 없고 메소드만 등록할 수 있다. - 인터페이스에서 선언 가능한 메소드는 추상 메소드, default 메소드 2가지이다.- 추상메소드는 선언만 해놓고 내부는 구현하지 않는다. 인터페이스를 구현한 클래스에 그 구현을 강제시킨다. - default 메소드는 선언과 내부구현 모두 가능하다. (java 1.8에서 추가)생성하려는 메소드의 특징을 잘 파악해서, 추상메소드로 만들지 def..
-
직렬화 vs 역직렬화Java/Basics 2019. 6. 14. 14:23
■직렬화란? - 객체를 파일로 저장하거나 네트워크를 통하여 다른 곳으로 전송하려면, 객체를 바이트 형태로 일일이 분해해야함. 이 작업을 '직렬화' 라고 한다. - 다시말해, 데이터를 연속적인 데이터로 변형하여 객체를 전송 가능한 형태로 만드는 것이다. - 사용 예 : RMI, BEAN 생성 등 ■Serializable Interface - Serializable 인터페이스를 구현하면, JVM은 해당 클래스가 직렬화의 대상이라는 것을 인지하게 됨. - 타 인터페이스와 달리 구현해야 할 메소드가 없음. 단지 선언만 해두면 끝!! - 생성자, 메소드, 클래스변수를 제외한 '멤버변수'만이 직렬화 대상 - 멤버변수에 transient 제어자를 붙이면 직렬화의 대상에서 제외 - 멤버변수에 Serializable을 ..
-