👩💻 JAVA 기초 - 인터페이스 & 컬렉션과 제네릭
*이 글은 글쓴이가 몰랐거나 헷갈렸던 부분만 따로 정리한 포스팅 입니다.*
(아는 지식들은 정리하지않았음)
📌 인터페이스(interface)
✏️ 인터페이스(interface)
:인터페이스에 대해 알아보자
public interface A {
//아래로 쭉 추상화(abstract)
public void insert(String x);
public Object swarch(String x);
public void remove(String x);
}
추상메서드는 내용은 없고 헤더만 들어있는 것을 인터페이스라고 함.
인터페이스는 3개의 추상메서드가 들어가있고 이는 반드시 구현해야함
✏️implements

인터페이스는 구현할때엔 두 개 이상의 인터페이스를 구현할 수 있다
(상속은 한 개의 클래스만 상속받을 수 있음)
✏️대소 비교 Comparable
:대소 비교를 위한 인터페이스인 Comparable에 대해 알아보자
Comparable의 형태

public class 클래스이름 implements Comparable<클래스이름>{
...
public int compareTo(클래스이름 Other){
...
}
}
대소 비교를 위한 Comparable 인터페이스
Comparable 인터페이스는 일반적으로 compareTo 메소드를 재정의하여 두 개의 객체를 비교한다.
String,Date,Integer, Character, Double 등의 Wrapper 클래스에는 이미 Comparable 인터페이스가 구현되어 있으므로 compareTo 메서드를 재정의 할 필요 없음.
💡여기서 Wrapper 클래스란?
:자바의 기본 타입을 클래스화 한 8개 클래스를 통칭
(Wrapper클래스는 가장 앞 문자가 "대문자")
기본 타입 | byte | short | int | long | char | float | double | boolean |
Wrapper타입 | Byte | Short | Integer | Long | Character | Float | Double | Boolean |
Comparable의 비교
(a)서로 다른 클래스 간 비교
//거의 사용할 일 없음
public class A ... implements Comparable<D>{
...
public int compareTo(D x){...}
...
}
(b)같은 다른 클래스 간 비교
public class A ... implements Comparable{
...
public int compareTo(A x){...}
...
}
필드에서 정의되어있는 객체와, 전달받은 객체(x)가 같은 객체인지 확인할 수 있음

✏️대소 비교 Comparator
:한 프로그램 내에서 동일한 타입의 객체들을 여러 개의 멤버를 기준으로 나열할 수 있게 해줌
Comparable의 형태
Comparator는 compare이라는 메서드를 가짐
public interface Comparator{
public int compare(T first, T second);
}
Comparator 인터페이스는 일반적으로 비교에 기준이 되는 멤버를 위한 별도의(제 3의)클래스를 다음과 같이 선언하여 사용
//A는 제3의 클래스
public class A implements Comparator<A>{
...
public int compare(클래스이름 first, 클래스이름 second){
...
}
}
📌 컬렉션과 제네릭
✏️ 컬렉션이란?
:요소(element)라고 불리는 가변 개수의 객체들의 저장소
- 가변 개수의 객체들의 저장소(크기가 바뀔 수 있음)
- 요소의 개수에 따라서 크기 자동 조절 (배열과의 차이점)
- 요소의 삽입 및 삭제에 따른 요소의 위치 자동 이동
배은 선언을 할 때 원소의 갯수가 정해져있다. 또한 이후에 인덱스를 통해 각 원소의 값을 수정할 순 있지만, 배열의 크기는 수정할 수 없다. 컬렉션은 요소의 개수에 따라 크기가 자동을 조절되고, 요소의 삽입, 삭제에 따라서 요소의 위치가 자동으로 이동하기 때문에 고정 크기의 배열을 다루는 어려움을 해소한다.
✏️ 컬렉션의 종류

✏️ 컬렉션의 특징
:컬렉션은 제네릭기법으로 구현 됨
- 제네릭
- 특정 타입만 다루지 않고, 여러 종류의 타입을 변신할 수 있도록 클래스나 메소드를 일반화시키는 기법
- 클래스나 인터페이스 이름에 <E>, <K>, <V>등 타입 매개변수 포함
- 제네릭 컬렉션 사례: 벡터 Vector<E>
- <E>에서 E에 구체적인 타입을 주어 구체적인 타입만 다루는 벡터로 활용
- 정수만 다루는 컬렉션 벡터 Vector<Integer>
- 문자열만 다루는 컬렉션 벡터 Vector<String>
- 컬렉션의 요소는 객체만 가능
- int, char, double 등의 기본 타입으로 구체화 불가능

✏️ 제네릭
:특정 타입만 다루는 것이 아닌, 타입을 변환할 수 있도록 클래스나 메소드를 일반화하는 방법
📌 Vector
✏️ 벡터 Vector<E>
:벡터와 벡터의 특성에 대해 알아보자
- <E>에 사용할 요소의 특정 타입으로 구체화 (ex)Vector<Integer>
- 배열을 가변 크기로 다룰 수 있게 하는 컨테이너
- 배열의 길이 제한 극복. 요소의 개수가 넘치면 자동으로 길이 조절
- 요소 객체들을 삽입, 삭제, 검색하는 컨테이너
- 삽입, 삭제에 따라 자동으로 요소 위치 조정
- Vector에 삽입 가능한 것
- 객체, null
- 기본 타입의 값은 Wrapper 객체로 만들어 저장
- Vector에 객체 삽입
- 벡터의 맨 뒤, 중간에 객체 삽입 가능
- Vector에서 객체 삭제
- 임의의 위치에 있는 객체 삭제 가능
Integer로 구현된 Vector. Integer타입의 Vector를 생성한다.
v.add(10) => vector에 10이라는 값을 추가
v.get(1) => 1번째 인덱스에 있는 값을 꺼내옴 (4)
📌 ArrayList<E>
✏️ ArrayList<E>
:ArrayList에 대해 알아보자
- 가변 크기 배열을 구현한 클래스: <E>에 요소로 사용할 특정 타입으로 구체화
- 벡터와 거의 동일
- 요소 삽입 삭제, 검색 등 벡터 기능과 거의 동일
- 벡터와 달리 스레드 동기화 기능 없음
- 다수 스레드가 동시에 ArrayList에 접근할 때 동기화 되지 않음. 개발자가 스레드 동기화 코드를 작성해야함
📌 Iterator<E>
✏️ Iterator<E> 인터페이스
:리스트 구조의 컬렉션에서 요소의 순차 검색을 위한 인터페이스
Vetcor<E>, ArrayList<E>, LinkedList<E>가 상속받는 인터페이스
Iterator 객체 얻기
- 컬렉션의 iterator()메서드 호출
- 해당 컬렉션을 순차 검색할 수 있는 Iterator 객체를 리턴한다.
Vector<Integer> v = new Vector<Integer>();
Iterator<Integer> it = v.iterator();
while(it.Next()){ //모든 요소 방문
int i = it.next(); //다음 요소 리턴
}
📌 HashMap<K, V>
✏️ HashMap<K,V>
:키(key)와 값(value)의 쌍으로 구성되는 요소를 다루는 컬렉션
- K: 키로 사용할 요소의 타입
- V: 값으로 사용할 요소의 타입
- 키와 값이 한 쌍으로 삽입
- "값"을 검색하기 위해서 반드시 "키"이용
삽입 및 검색이 빠른 특징
- 요소 삽입: put()
- 요소 검색: get()
'Java' 카테고리의 다른 글
[ Java ] Synchronized와 volatile 그리고 Atomic (0) | 2025.09.18 |
---|---|
[Java] 코딩테스트 유용한 문자열 메서드 (4) | 2024.08.28 |
[JAVA] String, StringBuffer, StringBuilder (0) | 2024.08.28 |
[JAVA] 문자열(String) 치환 (0) | 2024.07.28 |