enum 개념은 대략 알겠다만,, 언제 적용해야 하는지는 해봐야 알 것 같다.
다형성도 실제 코드 작성하면 익히는데 문제없을 것 같다.
무어의 법칙
무어의 법칙(Moore's law)은 반도체 집적회로의 성능이 24개월마다 2배로 증가한다는 법칙이다.
경험적인 관찰에 바탕을 두고 있다. 인텔의 공동 설립자인 고든 무어가 1965년에 내놓은 것이다.
enum
- 열거형은 연관된 값들을 저장하고, 그 값들이 변경되지 않도록 보장한다.
- 열거형 자체가 클래스이기 때문에 열거형 내부에 생성자, 필드, 메소드를 가질 수 있어서 단순히 상수가 아니라 더 많은 역할을 할 수 있다.
다형성
abstract class Calculator{
int left, right;
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
int _sum() {
return this.left + this.right;
}
public abstract void sum();
public abstract void avg();
public void run(){
sum();
avg();
}
}
class CalculatorDecoPlus extends Calculator {
public void sum(){
System.out.println("+ sum :"+_sum());
}
public void avg(){
System.out.println("+ avg :"+(this.left+this.right)/2);
}
}
class CalculatorDecoMinus extends Calculator {
public void sum(){
System.out.println("- sum :"+_sum());
}
public void avg(){
System.out.println("- avg :"+(this.left+this.right)*2);
}
}
class Main {
public static void execute(Calculator cal){
System.out.println("실행결과");
cal.run();
}
public static void main(String[] args) {
Calculator c1 = new CalculatorDecoPlus();
c1.setOprands(10, 20);
Calculator c2 = new CalculatorDecoMinus();
c2.setOprands(10, 20);
execute(c1);
execute(c2);
}
}
위의 코드는 Calculator를 데이터 타입으로 하고, CalculatorDecoPlus와 CalculatorDecoMinus 클래스의 메소드를 호출할 때 오버라이딩을 통해 다른 동작을 하게 할 수 있다.
이 맥락에서의 다형성이란 하나의 클래스(Calculator)가 다양한 동작 방법(ClaculatorDecoPlus, ClaculatorDecoMinus)을 가지고 있는데 이것을 다형성이라고 할 수 있다.
출처 : https://opentutorials.org/module/516/6127
다형성 - Java
이번 시간에는 다형성(Polymorphism)이라는 주제에 대해서 알아보자. 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유
opentutorials.org
오버로딩(Overloading) : 같은 이름의 메서드 여러 개를 가지면서 매개변수의 유형 또는 개수가 다르도록 하는 기술.
오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용.
해쉬 테이블(Hash Table) : 해쉬 테이블은 해쉬 함수를 사용하여 해쉬 코드라고 하는 인덱스를 원하는 값을 찾을 수 있는 버킷 또는 슬롯 배열로 계산한다 .
조회하는 동안 키가 해시되고 결과 해시는 해당 값이 저장된 위치를 나타낸다.
저장 시에 시간 복잡도는 O(1)이다.
해쉬 함수를 거쳐 값이 저장될 때 같은 인덱스에 저장될 수 있다. (해쉬 충돌)
이를 해결하는 방법은 여러 가지 있다고 한다.
그중 같은 인덱스에 다른 배열을 넣는 방법을 쓸 수 있다.
이때 키 값을 이용해 Value값을 불러올 때 인덱스 도달 후 선형 검색을 하게 된다.
Collection 프레임워크
주요 인터페이스
- List
- ArrayList
- LinkedList
- Vector - Stack(후입선출)
- Set
- HashSet
- TreeSet
- LinkedHashSet
- Queue (선입선출)
- LinkedList
- PriorityQueue
- Map (별도로 정의)
- HashMap
- SortedMap
- TreeMap
- Hashtable
- LinkedHashMap
List<E> | 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. | Vector, ArrayList, LinkedList, Stack, Queue |
Set<E> | 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. | HashSet, TreeSet |
Map<K, V> | 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음. 이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있음. |
HashMap, TreeMap, Hashtable, Properties |
Collection 인터페이스 주요 메소드
boolean add(E e) | 해당 컬렉션(collection)에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 컬렉션의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 컬렉션과 전달된 객체가 같은지를 확인함. |
boolean isEmpty() | 해당 컬렉션이 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 컬렉션의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거함. (선택적 기능) |
int size() | 해당 컬렉션의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함. |
List 인터페이스 주요 메소드
boolean add(E e) | 해당 리스트(list)에 전달된 요소를 추가함. (선택적 기능) |
void add(int index, E e) | 해당 리스트의 특정 위치에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 리스트의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) | 해당 리스트가 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 리스트와 전달된 객체가 같은지를 확인함. |
E get(int index) | 해당 리스트의 특정 위치에 존재하는 요소를 반환함. |
boolean isEmpty() | 해당 리스트가 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 리스트의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 리스트에서 전달된 객체를 제거함. (선택적 기능) |
boolean remove(int index) | 해당 리스트의 특정 위치에 존재하는 요소를 제거함. (선택적 기능) |
E set(int index, E e) | 해당 리스트의 특정 위치에 존재하는 요소를 전달받은 객체로 대체함. (선택적 기능) |
int size() | 해당 리스트의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 리스트의 모든 요소를 Object 타입의 배열로 반환함. |
Stack 클래스는 Vector 클래스의 메소드를 5개만 상속받아 사용.
boolean empty() | 해당 스택이 비어 있으면 true를, 비어 있지 않으면 false를 반환함. |
E peek() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환함. |
E pop() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환하고, 해당 요소를 스택에서 제거함. |
E push(E item) | 해당 스택의 제일 상단에 전달된 요소를 삽입함. |
int search(Object o) | 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환함. 이때 인덱스는 제일 상단에 있는(제일 마지막으로 저장된) 요소의 위치부터 0이 아닌 1부터 시작함. |
Queue 인터페이스는 Collection 인터페이스 메소드만을 상속받아 사용
boolean add(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입함. 만약 삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생시킴. |
E element() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환함. |
boolean offer(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입함. |
E peek() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환함. 만약 큐가 비어있으면 null을 반환함. |
E poll() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환하고, 해당 요소를 큐에서 제거함. 만약 큐가 비어있으면 null을 반환함. |
E remove() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 제거함. |
Set 인터페이스 메소드
boolean add(E e) | 해당 집합(set)에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 집합의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) | 해당 집합이 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) | 해당 집합과 전달된 객체가 같은지를 확인함. |
boolean isEmpty() | 해당 집합이 비어있는지를 확인함. |
Iterator<E> iterator() | 해당 집합의 반복자(iterator)를 반환함. |
boolean remove(Object o) | 해당 집합에서 전달된 객체를 제거함. (선택적 기능) |
int size() | 해당 집합의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 집합의 모든 요소를 Object 타입의 배열로 반환함. |
HashMap<K, V> 메소드
void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거함. |
boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지를 확인함. |
boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함. |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
boolean isEmpty() | 해당 맵이 비어있는지를 확인함. |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
boolean remove(Object key, Object value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
int size() | 해당 맵의 매핑의 총 개수를 반환함. |
TreeMap<K, V> 메소드
Map.Entry<K, V> ceilingEntry(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 큰 키 중에서 가장 작은 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
K ceilingKey(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 큰 키 중에서 가장 작은 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거함. |
boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지를 확인함. |
boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함. |
NavigableMap<K, V> descendingMap() | 해당 맵에 포함된 모든 매핑을 역순으로 반환함. |
Set<Map.Entry<K, V>> entrySet() | 해당 맵에 포함된 모든 매핑을 Set 객체로 반환함. |
Map.Entry<K, V> firstEntry() | 해당 맵에서 현재 가장 작은(첫 번째) 키와 그에 대응하는 값의 엔트리를 반환함. |
K firstKey() | 해당 맵에서 현재 가장 작은(첫 번째) 키를 반환함. |
Map.Entry<K, V> floorEntry(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 작은 키 중에서 가장 큰 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
K floorKey(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
SortedMap<K, V> headMap(K toKey) | 해당 맵에서 전달된 키보다 작은 키로 구성된 부분만을 반환함. |
Map.Entry<K, V> higherEntry(K key) | 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
K higherKey(K key) | 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
Map.Entry<K, V> lastEntry() | 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환함. |
K lastKey() | 해당 맵에서 현재 가장 큰(마지막) 키를 반환함. |
Map.Entry<K, V> lowerEntry(K key) | 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
K lowerKey(K key) | 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
Map.Entry<K, V> pollFirstEntry() | 해당 맵에서 현재 가장 작은(첫 번째) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함. |
Map.Entry<K, V> pollLastEntry() | 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함. |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
boolean remove(K key, V value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
int size() | 해당 맵의 매핑의 총 개수를 반환함. |
SortedMap<K, V> subMap(K fromKey, K toKey) | 해당 맵에서 fromKey부터 toKey까지로 구성된 부분만을 반환함. 이때 fromKey는 포함되나, toKey는 포함되지 않음. |
SortedMap<K, V> tailMap(K fromKey) | 해당 맵에서 fromKey와 같거나, fromKey보다 큰 키로 구성된 부분만을 반환함. |
Iterator 인터페이스
List,Set 인터페이스에서도 사용가능
boolean hasNext() | 해당 이터레이션(iteration)이 다음 요소를 가지고 있으면 true를 반환하고, 더 이상 다음 요소를 가지고 있지 않으면 false를 반환함. |
E next() | 이터레이션(iteration)의 다음 요소를 반환함. |
default void remove() | 해당 반복자로 반환되는 마지막 요소를 현재 컬렉션에서 제거함. (선택적 기능) |
내일 할 거
- 주특기 기본 주차 시작.
- 알아볼거 대충 정리하고 뭐 해야할지 알아보자.
'TIL' 카테고리의 다른 글
항해99_TIL220523 (http 상태코드, https, SSL) (0) | 2022.05.24 |
---|---|
항해99_WIL220522 (객체지향 프로그래밍, JVM) (0) | 2022.05.22 |
항해99_TIL220521 (JPA, MVC패턴) (0) | 2022.05.22 |
항해99_TIL220520 (주특기 Spring 시작) (0) | 2022.05.21 |
220518 TIL (0) | 2022.05.18 |