-
Java Study[2022-09-16] - 객체지향프로그래밍(List 인터페이스)백엔드 2022. 9. 16. 23:14
🔸 2022-09-16 금요일
[객체지향프로그래밍]
1. List 인터페이스
- 하나의 자료를 위한 인터페이스
- Collection 하위 인터페이스
- 객체를 순서에 따라 저장하고, 관리하는데 필요한 메서드가 선언된 인터페이스
- 배열의 기능을 구현하기 위한 메서드가 선언됨
- ArrayList, Vector, LinkedList
- ArrayList와 Vector
- 객체 배열 클래스
Vector
는 자바 2부터 제공된 클래스- 일반적으로
ArrayList
를 더 많이 사용 Vector
는 멀티 쓰레드 프로그램에서동기화
를 지원- 동기화(Synchronization) : 두 개의 쓰레드가 동시에 하나의 리소스에 접근할 때 순서를 맞추어서 데이터의 오류가 방지하지 않도록 함
- capacity(배열의 용량)와 size(배열 안의 요소 개수)는 다른 의미임
- ArrayList와 LinkedList
- 둘 다 자료의 순차적 구조를 구현한 클래스
- ArrayList는 배열을 구현한 클래스로 논리적 순서와 물리적 순서가 동일함
- LinkedList는 논리적으로 순차적인 구조지만, 물리적으로는 순차적이지 않을 수 있음
- LinkedList 구조 :
자료(data)/다음 요소의 주소
=>자료(data)/다음 요소의 주소
=>자료(data)/다음 요소의 주소
... - LinkedList에서 자료의 추가와 삭제 비용 효율적
- ArrayList는 조금 더 빨리 [i] 번째 요소 검색 가능
- ArrayList에 커맨드 입력한 상태에서 누르면 ArrayList의 클래스 소스를 확인할 수 있음
- ArrayList는 AbstractList의 상속을 받고 있고, List 인터페이스 구현됨
DEFAULT_CAPACITY = 10
=> 10개 용량을 만듬- 내부적으로 Object[]로 구성됨, 타입이 알아서 바뀜
- ArrayList를 사용 시 Element를 지정해서 사용함 => 제네릭 타입으로 구현
- Vector의 클래스 소스를 확인, ArrayList와 비슷
- Vector는 앞에
synchronized
라는 키워드가 메서드에 포함되어 있음 => 나중에 멀티 쓰레드 환경에서 사용한다는 점 알아두기 synchronized(동기화)
=> 역할 : 동기화, 여러 개의 쓰레드가 한꺼번에 리소스에 접근할 때, 순서를 맞춰주는 기능- 동기화 기능을 지원해주니 Vector가 더 좋아보이지만, 단일 쓰레드 환경에서 동기화가 오버헤드 됨 => 쓸 일이 없음
- LinkedListTest
- Element String 추가
- Collection에서 제공되는 기본 메서드 활용 =>
myList.add("")
- 대부분의 Collection에서 toString 제공
- 기억해야 할 점 : ArrayList, LinkedList 둘 다 List 인터페이스를 구현한 것이고, 그 외에 myList.size(), i++ 조건으로 몇 번째 인덱스를 가져오는
것은myList.get(i)
- 나중에
set
을 학습할 때,set
은 get(i) 메서드를 사용할 수 없음, get(i) 메서드는List에서만
존재 - set은 Collection 인터페이스이긴 하나, 중복을 허용하지 않고, 데이터를 관리하는 역할
- 앞서
List 인터페이스
는 순서에 따라 객체를 지정,set 인터페이스
는 순서에 따라 객체를 지정하지 않음 List 인터페이스
는 중복을 허용,set 인터페이스
는 중복을 허용하지 않음
LinkedList<String> myList=new LinkedList<String>(); myList.add("A"); myList.add("B"); myList.add("C"); System.out.println(myList); // [A, B, C] myList.add(1,"D"); System.out.println(myList); // [A, D, B, C] myList.removeLast(); System.out.println(myList); // [A, D, B] for(int i=0;i<myList.size();i++){ String s=myList.get(i); System.out.println(s); }
🔖 Eclipse 실습
🔖 Eclipse 출력 Console
'백엔드' 카테고리의 다른 글
Java Study[2022-09-18] - 객체지향프로그래밍(set 인터페이스, Iterator() 학습) (0) 2022.09.18 Java Study[2022-09-17] - 객체지향프로그래밍(Stack과 Queue 구현하기) (0) 2022.09.18 Java Study[2022-09-15] - 객체지향프로그래밍(컬렉션 프레임워크) (0) 2022.09.15 Java Study[2022-09-14] - 객체지향프로그래밍(제네릭 프로그래밍) (0) 2022.09.14 Java Study[2022-09-13] - 객체지향프로그래밍(String, Wrapper 클래스) (0) 2022.09.13