Java 9일차
인터페이스(interface)(⭐️⭐️⭐️⭐️⭐️)
- 자바는 다중 상속을 지원하지 않으므로 인터페이스를 사용해서 다중 상속(구현)을 구현
- 다른 클래스를 작성할때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 매개 역할을 담당하는 일종의 추상 클래스와 비숫
- 인터페이스는 추상 메소드와 상수만을 포함할 수 있음(자바8부터 인스턴스 메소드, static 메소드를 포함)
인터페이스 작성
접근제어자 interface 인터페이스명{
public static final 타입 상수명 = 값;
public abstract 메소드명(매개변수1, 매개변수2..);
}
- 인터페이스의 모든 필드는 public static final 이여야 함
- 인터페이스의 모든 메소드는 public abstract 이여야 함
인터페이스 구현
class 클래스이름 implements 인터페이스명 {
}
- 자바의 상속과 구현을 동시에 하려면
class 클래스이름 extends 부모클래스명 implements 인터페이스명 {
}
- 여러 개의 인터페이스를 구현하려면
class 클래스이름 implements 인터페이스명, 인터페이스..{
}
인스턴스 메소드
- 클래스에서 작성하는 일반적인 메소드
- 인터페이스에서 작성시 default 키워드를 붙여 만듦
컬렉션 프레임워크(매우 중요🔥🔥🔥🔥🔥)
- 여러가지 데이터를 메모리에서 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
- 자료구조를 구현한 클래스의 모음
자료구조란?
- 데이터를 효율적으로 관리할 수 있는 데이터 구조를 의미
- 코드 상에서 효율적으로 데이터를 처리하기 위해, 데이터의 특성에 따라 체계적으로 구조화함
알고리즘이란?
- 어떤 문제를 풀기 위한 절차 및 방법
- 어떤 문제에 대해 압력을 넣으면 원하는 출력을 얻을 수 있도록 만드는 프로그래밍
1. List 인터페이스
- 순서가 있는 데이터들의 집합으로 데이터의 중복을 허용
- Vector, ArrayList, LinkedList, Stack, Queue
1) Vector 클래스
- 자바의 배열은 고정 길이를 사용
- 동적인 길이로 여러 데이터 형을 저장하기 위해 사용
- 배열과 동이랗게 정수 인덱스를 이용하여 액세스 할 수 있음
- 동기화 되어 있으며 한번에 하나의 스레드만 벡터의 메소드를 호출 할 수 있음
Vector<타입> 참조 변수 = new Vector(요소의 개수);
메소드 | 설명 |
---|---|
addElement() | 요소 추가 |
removeAllElements() | 저장된 모든 요소를 삭제 |
size() | 요소의 개수 반환 |
capacity() | 현재 벡터에 저장 가능한 크기 |
get() | 인덱스로 저장된 값 반환 |
set() | 인덱스로 저장된 값 변경 |
2) ArrayList 클래스
- 동적인 길이로 여러 데이터형을 저장하기 위해 사용
- 배열과 동이랗게 정수 인덱스를 이용하여 액세스 할 수 있음
- 비동기식을 사용하며 멀티 스레드를 지원
ArrayList<타입> 참조변수 = new ArrayList();
메소드 | 설명 |
---|---|
add() | 요소 추가 |
remove() | 해당 인덱스를 이용하여 요소 삭제 |
size() | 요소의 개수 반환 |
capacity() | 현재 ArrayList에 저장 가능한 크기 |
set() | 인덱스로 저장된 값 변경 |
3) LinkedList 클래스
- 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식
- 노드 : 데이터(값)와 포인터(주소)를 담고 있는 형태 - ArrayList에 비해 데이터의 추가나 삭제가 빠름
- 인덱스가 없기 때문에 특정 요소에 접근이 느림
- 탐색 또는 정렬을 자주하는 경우에는 배열을 사용하고, 데이터의 추가/삭제가 많은 경우는 LinkedList를 사용하는 것이 좋음
예제)
import java.util.LinkedList;
public class LinkedList1 {
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("김사과");
linkedList.add("반하나");
linkedList.add("오렌지");
linkedList.add("이메론");
linkedList.add("배애리");
System.out.println(linkedList);
System.out.println(linkedList.peek()); // 맨 앞에 있는 자료 뽑기
System.out.println(linkedList.poll());
System.out.println(linkedList);
linkedList.remove("오렌지");
System.out.println(linkedList);
}
}
4) Stack
Stack stack = new Stack();
- LIFO(후입선출) 자료구조를 구현한 클래스
- 한쪽 끝에서만 자료를 넣고 뺄수 있는 형식의 자료구조
메소드 | 설명 |
---|---|
push() | 객체 삽입 |
pop() | 객체 제거 |
peek() | 마지막 데이터 반환 |
search() | 데이터 순서 반환 |
예제)
import java.util.Stack;
public class Stack1 {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
System.out.println(stack.hashCode());
stack.push(40);
stack.push(100);
stack.push(80);
stack.push(50);
stack.push(20);
System.out.println(stack);
System.out.println(stack.peek());
System.out.println(stack);
System.out.println(stack.pop());
System.out.println(stack);
System.out.println(stack.search(40)); // 4번째에 있다.
}
}
5) Queue
Queue queue = new LinkedList();
-
FIFO 자료구조에서 사용되는 메소드 정의
-
큐는 한쪽 끝은 프론트로 정하여 삭제 연산만 수행
-
다른 한쪽 끝은 리어로 정하여 삽입 연산만 수행
-
컴퓨터 버퍼에서 주로 사용
-
Queue 인터페이스를 구현한 대표적인 클래스는 LinkedList.
메소드 설명 offer() 객체 추가 poll() 첫번째 데이터를 반환하고 제거 peek() 첫번째 데이터 반환 remove() 값 제거 clear() queue를 초기화
👉🏻 다음 강의에서 설명
2. Set 인터페이스
- 순서가 없는 데이터 집합으로 데이터의 중복을 허용하지 않음
- HashSet, TreeSet
3. Map 인터페이스
- 키와 값의 한쌍으로 이루어지는 데이터의 집합으로 순서가 없고, 키는 중복으로 허용하지 않지만 값은 중복될 수 있음
- HashMap, TreeMap, HashTable, Properties
Author And Source
이 문제에 관하여(Java 9일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soyounjeong/Java-9일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)