- SRP(단일 책임 원칙) : 하나의 클래스는 하나의 책임만 가져야합니다.
- OCP(개방-폐쇄 원칙) : 소포트웨어 요소는 확장에는 열려있고, 변경에는 닫혀 있어야 합니다.
- LSP(리스코프 치환 원칙) : 상위 타입은 항상 하위 타입으로 대체할 수 있어야 합니다.
- ISP(인터페이스 분리 원칙) : 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 합니다.
- DIP(의존 관계 역전 원칙) : 개발자는 추상화에 의존해야 하며, 구체화에 의존하면 안됩니다.
바이트(byte) 정수형 실수형 문자형 논리형 1바이트 byte - - boolean 2바이트 short - char - 4바이트 int float - - 8바이트 long double - -
클래스(Class)는 객체를 만들어내기 위한 설계도 혹은 툴입니다.
객체(Object)는 클래스를 기반으로 생성되며, 자신의 고유 이름과 상태 및 행동을 갖습니다.
여기서 상태는 필드이고, 행동은 메서드라고 표현합니다.
생성자(Constructor)는 클래스와 같은 이름의 메서드 및 객체가 생성될 때 호출되는 메서드입니다. 주로 초기화 작업에서 사용이 되며, 기본 생성자는 작성하지 않아도 기본적으로 만들어져서 매개변수를 다르게 하여 매개변수가 다른 생성자를 생성할 수 있습니다.
오버라이딩(Overriding)은 상위 클래스에 있는 메서드를 하위 클래스에서 재정의 하는 것을 의미합니다.
오버로딩(OverLoading)은 같은 클래스 내에 동일한 이름을 가진 메서드가 있다면, 매개 변수의 타입 혹은 개수가 다르게 정의하는 것을 의미합니다.
컬렉션 프레임워크(Collerction FrameWork)는 데이터의 집합이나 그룹을 이미지하며, 자료 구조를 바탕으로 객체나 데이터들을 효율적으로 관리할 수 있는 자료구조들이 있는 라이브러리입니다.
컬렉션 프레임워크는 Java의 인터페이스를 사용하여 구현됩니다. 대표적으로 List, Set, Map, Stack, Queue 등이 있습니다.
List는 순서가 있는 데이터의 집합으로 데이터의 중복을 허용하고 순서를 보장합니다.
Map은 Key, Value로 이루어진 데이터의 집합으로 Key의 중복을 허용하지 않으나 Value의 중복을 허용하고 데이터 순서가 보장되지 않습니다.
Array는 인덱스로 접근하는 반면, ArrayList는 메서드를 통해 접급합니다.
Array는 객체 뿐만 아니라 원시타입(int, long 등)도 담을 수 있지만, ArrayList는 객체만 담을 수 있습니다.
- 때문에 정수를 ArrayList에 넣을 경우 Integer형은 가능하지만 int 형은 불가능합니다.
Array는 데이터 양이 많지만 삽입 및 삭제가 없으며,데이터 접근이 빈번할때 사용합니다.
LinkedList는 데이터 양이 적고, 삽입 및 삭제가 빈번할때 사용합니다.
StringBuffer는 동기화가 가능하여 멀티스레드 환경에서 해당 스트링이 공유자원일 때 사용합니다. 반면, 멀티스레드 환경이 아닐때는 StringBuilder를 사용합니다.
1. 동기화 지원여부
HashMap은 동기화를 지원하지 않아서 단일 스레드 환경에서 사용하기 좋은 구조이지만, Hashtable은 동기화를 지원하여 멀티 스레드 환경에서 사용하기 좋은 자료구조입니다.
2. Null 여부
HashMap은 Key-Value에 null을 허용하는 반면, Hashtable은 Key-value에 null을 허용하지 않습니다.
3. 속도
멀티 스레드 환경이 아니라면 Hashtable이 HashMap 보다 느립니다.
(다른 스레드가 block되고 unblock되는 대기시간을 기다리기 때문이다.)< 차이점 한눈에 보기>
동기화 지원여부 Null 여부 속도 HashMap 동기화 X null을 허용 O 상대적 빠름 Hashtable 동기화 O null을 허용 X 상대적 느림
- HashMap과 Hashtable은 Map 인터페이스를 상속받아 구현되고, Key-Value 형태로 데이터를 관리하는 자료 구조이다.
직렬화는 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변화하는 과정을 뜻합니다.
역직렬화는 직렬화된 바이트 형태의 데이터를 다시 객체로 변환하는 과정을 뜻합니다.