Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Java] 인터페이스와 구현객체, Collections 본문
인터페이스(Interface)
⚠️ 클래스가 아니다. 객체생성x, 상속x
추상 메서드(abstract method)만을 가지고 있는 형태
※ 단, 인터페이스 내부에는 디폴트 메서드, 정적 메서드가 올 수 있다.
🎯 목적:
✔️ 다중상속과 같은 효과를 낼 수 있다.
✔️ 소통을 위한 규격의 역할을 한다.
🧩 확장성 🧩 유지보수
추상 메서드(abstract method)만을 가지고 있는 형태
※ 단, 인터페이스 내부에는 디폴트 메서드, 정적 메서드가 올 수 있다.
🎯 목적:
✔️ 다중상속과 같은 효과를 낼 수 있다.
✔️ 소통을 위한 규격의 역할을 한다.
🧩 확장성 🧩 유지보수
> 🦔 인터페이스의 변수는 항상 앞에 public static final이 붙는다.(생략)
WHY?
인터페이스는 규격과 같은 역할을 한다.
❓static이 없다면?
구현객체마다 초기화값이 다르다. ➡️ 🗿 규격의 의미가 없어진다.
❓final이 없다면?
구현객체마다 변수의 값을 바꿀 수 있다. ➡️ 🗿 규격의 의미가 없어진다.
🗿 즉, 인터페이스가 만들어질 때, 한번 진정한 상수를 만들고,
이를 모든 구현객체가 공유해야 규격의 의미가 있다.
인터페이스는 규격과 같은 역할을 한다.
❓static이 없다면?
구현객체마다 초기화값이 다르다. ➡️ 🗿 규격의 의미가 없어진다.
❓final이 없다면?
구현객체마다 변수의 값을 바꿀 수 있다. ➡️ 🗿 규격의 의미가 없어진다.
🗿 즉, 인터페이스가 만들어질 때, 한번 진정한 상수를 만들고,
이를 모든 구현객체가 공유해야 규격의 의미가 있다.
> 🦔 인터페이스의 메서드에는 public abstract가 붙는다.
WHY?
인터페이스는 규격과 같은 역할을 한다.
🗿규격을 위한 추상화가 목적이므로 BODY가 없다 ➡️ abstract
인터페이스는 규격과 같은 역할을 한다.
🗿규격을 위한 추상화가 목적이므로 BODY가 없다 ➡️ abstract
☁️ 인터페이스를 implements한 객체를 구현객체라 한다.
오버라이딩(Overriding)된 객체
Java는 Collection API를 인터페이스 형태로 제공한다, Collections
➡️ 이를 오버라이딩한 구현객체를 미리 만들어서 제공
✔️ List: 순서(index)가 있고, 중복이 가능하다.
📍 ArrayList(비동기), Vector(동기), LinkedList (구현객체)
✔️ Set: 순서가 없고, 중복이 안된다.
📍 HashSet, TreeSet(element를 정렬) (구현객체)
✔️ Map: key와 value의 한쌍(entry)으로 이루어지며, 순서가 없다.
📍 HashMap, TreeMap(key를 정렬), HashTable (구현객체)
Java는 Collection API를 인터페이스 형태로 제공한다, Collections
➡️ 이를 오버라이딩한 구현객체를 미리 만들어서 제공
✔️ List: 순서(index)가 있고, 중복이 가능하다.
📍 ArrayList(비동기), Vector(동기), LinkedList (구현객체)
✔️ Set: 순서가 없고, 중복이 안된다.
📍 HashSet, TreeSet(element를 정렬) (구현객체)
✔️ Map: key와 value의 한쌍(entry)으로 이루어지며, 순서가 없다.
📍 HashMap, TreeMap(key를 정렬), HashTable (구현객체)
> 🦔 Collection 객체는 객체만 저장할 수 있다.(기본 타입 값 저장 ❌)
때문에, Wrapper 객체가 기본 타입의 값을 감싼다.
🎯 목적: 단지, 객체로 생성하는데 목적이 있다.
📦 박싱
Wrapper 클래스 타입의 변수에 기본타입의 값이 대입될 때 발생
📦❌ 언박싱
기본 타입의 변수에 Wrapper 객체가 대입될 때 발생
⚠️ Wrapper 객체는 equals()를 통해 비교하는게 정확하다.
🎯 목적: 단지, 객체로 생성하는데 목적이 있다.
📦 박싱
Wrapper 클래스 타입의 변수에 기본타입의 값이 대입될 때 발생
📦❌ 언박싱
기본 타입의 변수에 Wrapper 객체가 대입될 때 발생
⚠️ Wrapper 객체는 equals()를 통해 비교하는게 정확하다.
> 🦔 모든 Collection들의 데이터를 추출해주는 표준화된 인터페이스 Iterator
📌. HashSet()은 HashMap()구조로 설계되어있다. (map은 key는 순서를 보장하지 않는다.)
즉, Map과 Set의 데이터를 꺼낼때는 iterator
📌. 개선된 for는 내부적으로 iterator와 같은 역할을 한다
즉, Map과 Set의 데이터를 꺼낼때는 iterator
📌. 개선된 for는 내부적으로 iterator와 같은 역할을 한다
public class HashMapExam {
Map<Integer, String> map = new HashMap<>();
public HashMapExam() {
map.put(10, "희정");
map.put(50, "나영");
map.put(19, "미나");
map.put(18, "영희");
map.put(27, "지연");
// 조회하기
Set<Integer> keySet = map.keySet();
Iterator<Integer> it = keySet.iterator();
while(it.hasNext()) {
int key = it.next();
String value = map.get(key);
System.out.println(key + ": " + value);
}
// Map.Entry<K,V>로 조회하기
Set<Map.Entry<Integer, String>> set = map.entrySet();
Iterator<Map.Entry<Integer, String>> iter = set.iterator();
while(iter.hasNext()) {
Map.Entry<Integer, String> entry = iter.next();
System.out.println(entry.getKey() + " = " + entry.getValue());
}
// 개선된 for문으로 조회하기
for(Integer key : map.keySet()) {
String value = map.get(key);
System.out.println(key + ": " + value);
}
}
public static void main(String[] args) {
new HashMapExam();
}
}
'Backend > 자바' 카테고리의 다른 글
[Java] Set 중복체크, hashCode와 equals (0) | 2023.04.17 |
---|---|
[Java] 객체지향언어 Java (0) | 2023.04.17 |
[Java] 기타제한자 static / final / abstract (0) | 2023.04.08 |
[Java] Immutable Object(불변객체) String과 StringBuilder (0) | 2023.04.07 |
[Java] 상속관계와 Polymophism, 오버라이딩(Overriding) (0) | 2023.03.13 |
Comments