열심히 끝까지
디바이스 융합 자바(Java) day13 - 컬렉션 프레임워크(List,Set,Map) 본문
디바이스 융합 자바(Java) day13 - 컬렉션 프레임워크(List,Set,Map)
노유림 2022. 6. 23. 19:28[오늘 수업]
[ 컬렉션 프레임워크 ]
ㄴ> 프레임워크 : 틀, 뼈대
- 제작자의 편의성이 증가된다.
>> 만드는 사람이 편하다!(개발자를 위한 것)
- 틀과 뼈대를 기업이 제대로 제공해주면?
>> 유지보수가 용이하다
- 제작자들의 실력이 상향평준화가 된다.
>> 좋은 틀(프레임워크)이 잡혀있으면(제공받으면)
그 틀을 제작자(개발자)가 배운다
>> 배우면서 제작자(개발자)의 실력이 증가한다.
>> 프레임워크의 "사용법"이 중요하다!(써먹는 법이 중요)
: 언제, 어떻게해야 효율적으로 사용하는지를 연구하는 것이 중요
: 메서드 자체를 공부하는 것이 아니다!!
>> 언제 사용해야하는지? 어떻게 사용해야하는지?
등을 연구하는 것이 중요하다!
ex ) List, Map, Set(집합), Stack(자료구조), Queue(자료구조) ...
>> 자료구조 컬렉션을 잘 배워놓고 기억해 놓을 것
>> 웹 개발하는 사람들은 List, Map을 더 잘 배워놓는 것이 중요
>> 리스트, 맵, 셋 .. 중에서 리스트 많이 사용
>> 다하기에는 너무 많고 불편....
> 수업에서는 List, Map, Set를 다루고
코딩테스트에 사용되는 Stack, Queue는 강사님 블로그에 올려놓을테니
공부하고싶은 사람들은 볼 것
[ List ]
// 오늘의 진도
// 별로 중요하지 않지만 그냥 기본 내용이라 일단 설명
// 외울 필요는 없을 거 같다
List 종류
- 배열 리스트 ArrayList
: 배열을 기반으로 하는 인덱스(Index)를 사용하는 구조
: 탐색을 자주하는 프로그램과 주로 사용
- 연결 리스트 LinkedList
: 주소를 직접 연결하는 구조(주소-주소 직접 연결)
: 데이터 변경(추가, 삭제 등)이 자주 발생하는 프로그램과 주로 사용
>> 1초, 데이터가 크지 않기 때문에 로직은 내려놓고 쉽고 간편한
배열 리스트를 공부할 예정!
----------------------
ArrayList al = new ArrayList();
// Scanner, Random처럼 java.util의 ArrayList야! 라고 정의
al. 찍으면 다양한 메서드 출연!
>> 어떤 메서드인지 기억하고 쓸 수 있으면 된다!
>> 구조 공부가 아닌 작업이 가능한지 안되는지,
>> 언제 쓸 수 있는지 그 작업이 있는지 없는지
[ArrayList]
배열 vs 배열 리스트
크기가 분명히 정해져 있어야만 한다 요소를 계속 추가할 수 있다
== 요소의 크기 == al.size(); 요소의 크기 출력
-----------예시
package class01;
import java.util.ArrayList;
class A{
int a;
int b;
A(int a, int b){
this.a = a;
this.b = b;
}
@Override
public String toString() {
return "A 클래스로 만든 객체";
}
}
public class Test01 {
public static void main(String[] args) {
// 컬렉션 프레임워크
// [ArrayList]
// 모르는데 쓸 수 있나요? "배열이 기반인 리스트"
// 배열의 3요소가 정의되어 있지 않다 => 자료형 정의 x, 요소의 개수도 정의 x
// 이 것들 없이도 쓸 수 있다!
ArrayList al = new ArrayList();
// Scanner, Random처럼 java.util의 ArrayList야! 라고 정의
System.out.println(al.toString());
// toString()이 오버라이딩 된 상태!
// al.toString 옆에 오버라이딩 된 것을 볼 수 있다
// >> Abstract Collection이 ArrayList의 부모다!
al.add(10); // al.add는 오버로딩되어 있다.
al.add(20);
System.out.println(al);
al.add(0, 30); // 순서 지정 가능
// 배열리스트명.add(순서, 넣고싶은 것 입력)
System.out.println(al);
// al.clear(); // 값을 초기화
// System.out.println(al);
System.out.println(al.get(0));
// al.get(숫자); <- 숫자의 인덱스 번호에 어떤 값이 있는지 출력
System.out.println(al.get(1));
// is나 has로 시작하면 가지고 있니?
System.out.println(al.isEmpty());
// 배열이 비어있니?를 물어보는 것
al.remove(0); // 인덱스 0번 삭제
System.out.println(al);
System.out.println(al.size());
al.remove(1);
System.out.println(al);
System.out.println(al.size());
// 제약없이 다 넣을 수 있다!
al.add(3.14);
al.add("apple");
al.add(new A(-1, -2)); // 만든 클래스도 넣는 것 가능!
A a = new A(1, 2);
al.add(a);
System.out.println(al);
}
}
* 배열 - 자료형 고정, 크기 고정
* ArrayList - 자료형 자유, 크기 자유
-> int만 다뤄야하는 상황에서..
-> double을 막을 수 없다...
배열류 -> 관련있는 / 같은 타입이고 / 일정한 크기를 갖는
것이 배열의 기본 3요소인데..
>> 이 것들을 타파하고자 만든것이
"제네릭" " <> "
>> 컬렉션에 저장될 데이터들의 타입(자료형)을 "강제"
>> 모든 컬렉션에 제네릭을 추가하여 사용할 것!!!
ex )
ArrayList<Integer> al1 = new ArrayList<Integer>();
// <자료형> 넣어서 넣을 수 있는 자료형 강제!
al1.add(10);
System.out.println(al1);
System.out.println(al1.get(0));
제네릭 설정 안할 시------
ArrayList data = new ArrayList();
for(int i = 0; i < data.size(); i++) {
// data.get(i) == Person 객체
data.get(i); // << 원래라면 i 사용 가능 하지만 작동이 안한다..
Person p = (Person)data.get(i);
p.use();
}
제네릭 설정 후----------
ArrayList<Person> data = new ArrayList<Person>();
for(int i = 0; i < data.size(); i++) {
// data.get(i) == Person 객체
data.get(i);
}
---------------
위를 통해 알 수 있는 사실!
제네릭을 통하면 작동이 안 될 수도 있는 것이 작동한다.
직접 만든 클래스도 설정 가능하다!!
상속받은 클래스 중에서
부모만 받으라고 했을 때 자식이 오면 가능하지만
자식만 받으라고 했을 때 부모가 오면 불가능하다.
--------------
Set 집합
- Set은 추상클래스여서 객체 생성이 불가하다
- 그래서 Set을 받는 클래스 중에서 제일 대표적인 HashSet이 많이 쓰인다.
: 중복된 데이터를 허용하지 않는다!
ex ) 여행지와 관련된 단어 기록
해변 바다 낚시 산 바다<- 중복되면 제거!
- 데이터 분석할 때 대부분 파이썬 쓴다.
- 카운팅 하는 애가 따로 있다(컬렉션)
: 집합 데이터들의 순서는 따로 없다
: 중복된 데이터들은 따로 저장을 안한다!
- 그래서 s.size로 출력하면 중복된 것은 제외하고 뜬다.
ex ) 1 1 1 3 4 5 -> 출력 : 1 4 3 5 size 4
package class06;
import java.util.HashSet;
import java.util.Set;
public class Test05 {
public static void main(String[] args) {
// Set 집합
// 중복된 데이터를 허용 xxx
// 추상클래스 객체 생성 불가!
// Set을 받는 클래스 중 제일 대표적인 HashSet!
// 집합 데이터들의 순서는 xxx
Set s = new HashSet(); // HashSet이 제일 많이 쓰인다
// 집합을 만들고 싶은데 그 중에 HashSet을 쓸꺼야!(다른 Set도 가능하다)
// HashSet s = new HashSet(); 이라고 써도 된다. 의미의 차이가 있을 뿐 상관 없다!
s.add(10);
s.add(10);
s.add(10);
s.add(20);
s.add(20);
s.add(1);
s.add(2);
s.add(3);
s.add(4);
s.add(5);
System.out.println(s);
System.out.println(s.size());
}
}
===================
마지막 컬렉션
Map 맵
ex ) 위에 자판기
1. 콜라
2. 사이다(칠성)
3. 웰치스
4. 사이다(500)
5. 사이다(스프라이트)
-----------------------
콜라 101
사이다 102
웰치스 107
환타 132
커피 201
> 유효한 값을 찾을 수 있게 해주는 "키 값"
>> "값"과 "키 값"을 함께 저장
== 1쌍의 데이터를 함께 저장
or
홍길동(같은 이름을 가진 사람들) 구분 법
홈페이지 -> "아이디"
국가 -> "주민등록번호" 부여하여 관리
학교 -> 학번
학원 -> 수강번호
>> 데이터들을 다룰 때에는
A 데이터와 B(A와 특성이 유사한)데이터를
구분하기 위한 값이 반드시 필요!
-> 기본키P(rimary)K(ey) ID 고유한 값
고유하다는 것?
: NULL 값이 아니고 나만이 유일한 값
> 유효한 값을 찾을 수 있게 해주는 "키 값"
>> "값"과 "키 값"을 함께 저장
== 1쌍의 데이터를 함께 저장
> HashMap 자주 이용
>> 맵은 유효한 값인 value(사이다, 콜라...)를 key(102, 101..)
같이 저장한다.
> 인덱스 대신 key값
package class07;
import java.util.HashMap;
import java.util.Map;
public class Test07 {
public static void main(String[] args) {
// Map 맵
HashMap map = new HashMap();
map.put(101, "콜라");
map.put(102, "사이다");
map.put(107, "웰치스");
System.out.println(map);
// AL(ArrayList) : [10,20,30]
// AL[0] == 10
// AL[1] == 20
// Map : {101=콜라, 102=사이다}
// Map[101] == 콜라
// Map[102] == 사이다
// 인덱스 대신 키값
System.out.println(map.get(101));
// Map2 : {apple=사과, banana=바나나, kiwi=키위}
// Map2[apple] == 사과
HashMap map2 = new HashMap();
map2.put("apple", "사과");
map2.put("banana", "바나나");
map2.put("kiwi", "키위");
System.out.println(map2);
System.out.println(map2.get("apple"));
map2.remove("banana");
System.out.println(map2);
}
}
package class07;
import java.util.HashMap;
public class Test08 {
public static void main(String[] args) {
HashMap<Integer,String> map = new HashMap<Integer, String>();
map.put(101, "콜라");
map.put(102, "사이다");
map.put(107, "웰치스");
System.out.println(map);
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day15 - forEach문,이터레이터,파일입출력 (0) | 2022.06.27 |
---|---|
디바이스 융합 자바(Java) day14 - 예외,예외처리,버퍼,스레드 (0) | 2022.06.24 |
디바이스 융합 자바(Java) day12 - 동적바인딩(본인우선찾기),추상클래스,추상메서드 (0) | 2022.06.22 |
디바이스 융합 자바(Java) day11 - toString,instanceof,포켓몬 (0) | 2022.06.21 |
디바이스 융합 자바(Java) day10 - 학생부(삭제),접근제어자,상속,super(부모의 생성자 호출),상수,오버라이딩 (0) | 2022.06.20 |