프레임워크

hwakyoung·2023년 2월 12일
0

java

목록 보기
7/7
post-thumbnail

📌내가 정리한 키워드 공유하기


🍀컬렉션 프레임워크(Collection Framework) 란 자바는 자료구조(Data Structure)를 사용하여 객체들을 효율적으로 추가 , 삭제 , 검색 할 수 있도록 인테페이스와 구현 클래스를 java.util 패키지를 제공하는데 이것들을 총칭하는 것을 뜻한다.

🍀컬렉션(Collection) ==> 객체의 저장

🍀프레임워크(Framework) 란 사용 바어을 정해놓은 라이브러리를 말한다.

실제로 컬렉션 프레임워크는 사용 방법을 정의한 인터페이스와 실제 객체를 저장하는 다양한 컬렉션 클래스(구현 클래스)를 제공한다.

🍀컬렉션 프레임워크의 주요 인터페이스로는 List , Set , Map 이 있다.
이 인터페이스들은 컬렉션 클래스를 사용하는 방법을 정의함.
그기고 인터페이스로 사용가능한 컬렉션 클래스(구현 클래스)를 보여준다.


📌List 컬렉션

🍀List 컬렉션은 배열과 비슷하게 객체를 인덱스로 관리한다.

🍀List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조

📍배열과의 차이점

🍀저장 용량(Capacity)이 자동 증가하며, 객체를 저장할 때 자동 인데스가 부여된다.

🍀추가 , 삭제 , 검색 , 을 위한 다양한 메소드 제공.

🍀List 컬렉션에는 ArrayList , Vector , LinkedList 등이 있다.
인덱스로 객체를 관리하기 때문에 인덱스를 매게값으로 갖는 매소드가 많다.


기능 메소드 설명
📍객체 추가boolean add(E e)주어진 객체를 맨 끝에 추가한다.
void add(int index, E elemnt)주어진 인덱스에 객체 추가
E set(int index)주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈
📍객체 검색boolean contains(Object o) 주어진 객체가 저장되어 있는지 조사
E get(int index)주어진 인덱스에 저장된 객체 리턴
boolean isEmpty( )컬렉션이 비어 있는지 조사
int size( )저장되어 있는 전체 객체 수를 리턴
📍객체 삭제void clear( )저장된 모든 객체를 삭제
E remove(int index)주어진 인덱스에 저장된 객체를 삭제
boolean remove(Object o)주어진 객체를 삭제

📍코드로 알아보기

List<String> list = ...;
list.add("홍길동");			 // 맨 끝에 객체 추가
list.add(1, "신용권");		 // 지정된 인덱스에 객체 삽입
String str = list.get(1);    // 인덱스로 객체 검색
list.remove(0);			     // 인덱스로 객체 삭제
list.remove("신용권"); 	     // 객체 삭제

📍결과

List<String> 으로 list 변수 선언
==> List 컬렉션에 저장되는 객체를 String 타입으로 하겠다!

SO == E 타입 파라미터는 String 타입이된다.

🧩add( ) 메소드의 매개값 ==> 문자열
🧩get( ) 메소드의 리턴값 ==> 문자열


📍List 컬레션의 size( ) 메소드는 현재 저장되어 있는 객체수를 리턴

📍for문을 이용하는 방법

List<String> list = ...;
for(int i=0; i<list.size; i++) {	<== 저장된 총 객체 수만큼 루핑
	String str = list.get(i);	    <== i인덱스에 저장된 String 객체를 가져옴
}


📍List 컬레션에 저장된 객체 수만큼 반복하면서 개게를 하나씩 str 변수에 대입


for(String str : list) {	==> 저장된 총 객체 수만큼 루핑(String 객체를 하나씩 가져옴)
}


📌ArrayList


📍ArrayList를 생성하기 위해서는 저장할 객체 타입을 E 타입 파라미터 자ㅣ에 표기하고 기본 생성자를 호출


List<String> list = new ARrayList<String>();
List<String> list = new ArrayList<>();

🍀1. ArrayList의 E 타입 파라미터를 생략, ==> 왼쪽 List에 지정된 타입을 따라간다.
두 코드는 동일하게 String을 저장하는 ArrayList 객체 생성

🍀2. 기본 생성자로 ArrayList 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는 초기 용량(capacity)을 가지게 된다.

🍀3. ArraList에 객체를 추가하면 0번 인덱스부터 차례대로 저장.

<import java.util.*;

public class ArrayListExample {
  public static void main(String args[]) {
 	List<String> list =  new ArrrayList<String>();
    
    list.add("Java");						//String 객체를 저장
    list.add("JDBC");
    list.add("Servlet/JSP");
    list.add(2,"Database");
    list.add("iBATIS");

	int size =  list.size();				//저장된 총 객체 수 얻기
    System.out.println("총 객체수: " + size);
    System.out.println();
    
    String skill = list.get(2);				//2번 인덱스의 객체 얻기
    System.out.println("2: " + skill);
    System.out.println();
    
    for(int i=0 i<List.size(); i++) {		//저장된 총 객체 수만큼 루핑
    	String str = list.get(i);
        System.out.println(i + ":" +str);
    }
    System.out.println();
    
    list.remove(2);							//2번 인덱스 객체(Database) 삭제됨
    list,remove(2);							//2번 인덱스 개체(Servlet/JSP)삭제됨
    list.remove("iBATIS");
    
    for(int i=0; i<List.size(); i++) {		//저장된 객체 수 만큼 루핑
    	String str = list.get(i);
        System.out.println(i + ":" + str);
    }
  }
}
📍결과

총 객체수: 5

2: Database

0:Java
1:JDBC
2:Database
3:Servlet/JSP
4:iBATIS

0:Java
1:JDBC

📌Vector

Vector은 ArrayList와 동일한 내부 구조를 가지고 있다.


List<E> list = new Vector<E>();
List<E> list = new Vector<>();		
//Vector의 E 타입 파라미터를 생략하면 왼쪽 List에 지정된 타입을 따라감

📌LinkedList


LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경❌

📍ArrayList 는 중간 인덱스의 객체를 제거하면 뒤에 있는 객체의 인덱스가 1씩 앞으로 당겨지기 때문에 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다 LinkedList가 좋은 성능을 발휘.


List<E> = new LinkedList<E>();
List<E> list = new LinkedList<>();	
==> LinkedListE 타입 파라미터를 생략하면 왼쪽 List에 지정된 타입을 따라 감

📍구분📍순차적으로 추가/삭제📍중간에 추가/삭제📍검색
ArrayList빠르다느리다빠르다
LinkedList느리다빠르다느리다

📌Set 컬렉션


📍set컬렉션은 수학의 집합과 비슷하다.

📍List 컬렉션은 객체의 저장 순서를 유지⭕ ==> Set 컬렉션은 저장 순서 유지❌

📍리턴 타입📍메소드📍설명
booleanhashNext()가져올 객체가 있으며 true 리턴 없으면 false를 리턴
Enext()컬렉션에서 하나의 객체를 가져온다.
voidremove()Set 컬렉션에 객체를 제거한다.

Set<String> set =...;
Set.add("홍길동");			//객체 추가
Set.add("신용권");
Set.remove("홍길동");		//객체 삭제
📍설명
Set<String>으로 set 변수를 선언.
Set 컬렉션에 저장되는 객체를 String 타입으로 한다~

SO ==> E 타입 파라미터는 String 타입이 된다.

🧩add() 메소드와 remove() 메소드의 매개값은 문자열이 된다.

Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없다.❌
대신 전체 객체를 대상으로 한 번씩 반복해서 가져오는 **반복자**(Iterator)를 제공

📌HashMap

🍀HashMap은 Set 인터페이스의 구현 클래스이다.

🍀HashMap 생성자 호출

Set<E> set = new HashSet<E>();

타입 파라미터 E에는 컬렉션에 저장할 객체 타입을 지정
Set<String> set = new HashSet<String>();
Set<String> set = new HashSet<>();
==> HashSetE 타입 파라미터를 생략하면 왼쪽 Set에 지정된 타입을 따라간다. 
📍hashCode()equals() 메소드 재정의

public class Member
	public String name;
    public int age;
    
public Member(String name, int age) {
	this.name = name;
    this.age = age;
}

@Override
public boolean equals(Object obj) {
	if(obj instanceof Member) {
    	Member member = (Member) obj;
        return member.name.equals(name) && (member.age==age);
    } else {
    	return false;
    }
 }
 
 @Override
 public int hashCode() {
 	return name.hashCode()+age;
 	}
 }
<import java.util.*;

public class HashSetExample2 {
	public static void main(String args[]) {
    	Set<Member> set = new HashSet<Member();
        
        set.add(new Member("홍길동", 30));		//인스턴스는 다르지만 내부 
        set.add(new Member("홍길동", 30));		//데이터가 동일하므로 객체 1개만 저장
        
        System.out.println("총 객체수 : " + set.size());		//저장된 객체 수 얻기
    }
}

📍총 객체수 : 1


📌총 정리

🍀컬렉션 프레임 워크: 널리 알려져 있는 자료구도(Data Stucture)를 사용해서 객체들을 효율적으로 추가 , 삭제 , 검색 할 수 있도록 인터페이스와 구현 클래스들을 java.util 패키지에 제공.
이를 총칭하여 컬렉션 프레임워크(Collection Framework) 라고 한다.


🍀List 컬렉션 : List 컬렉션은 배열과 비슷하게 객체를 인덱스로 관리한다.
배열과의 차의점은 저장 용량(capacity)이 자동으로 증가하며, 객체를 저장할 때 자동 인덱스가 부여된다.
And 추가 , 삭제 , 검색을 위한 다양한 메소드가 제공된다.
List 컬렉션은 동일한 객체를 중복 저장할 수 있고 null도 저장이 가능하다.


🍀Set 컬렉션: Set 컬렌션은 저장 순서 유지 ❌
또한 객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있다.
Set 컬렉션은 수학의 집합과 비슷, 집합은 순서와 상관없고 중복이 허용되지 않기 때문

🍀**Map 컬렉션: Map 컬렉션 키(key)와 값(value)으로 구성된 Map.Entry 객체를 저장하는 구조를 가지고 있다.
Entry는 Map 인터페이스 내부에 선언된 중첩 인터페이스이다.
여기서 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체된다.


📌이름을 키로 점수를 값으로 저장하기


📍결과

profile
fire-irror

1개의 댓글

comment-user-thumbnail
2023년 2월 12일

어머~ 이거 제가 자바 프로젝트때 한번씩 다 굴려봤던것들이네요~

답글 달기