향상된 for문
- for - each문
- 컬렉션, 배열의 모든 요소를 순차적으로 반복 접근할 수 있는 for문
(순차적 : 0번 인덱스부터 마지막 요소까지 인덱스를 1씩 증가)
[작성법]
for (컬렉션 또는 배열에서 꺼낸 한개의 요소를 저장할 수 있는 변수 : 컬랙션명 또는 배열명)
for(Student std :studentList) {
system.out.print((index++)+"번 : ");
system.out.print(std)
}
컬렉션(Collection)
Java Colloction에는 자바의 자료 구조 모음(List,Set,Map)이있다!
자바에서 제공하는 자료구조를 담당하는 (프레임워크 == 모음)
배열이 가지고 있는 한계를 쉽게 벗어날 수 있도록 도와주는 도구
그렇다면 배열의 문제점이 뭐가 있는지 알아보자
배열 문제점
1. 한 번 크기를 지정하면 변경할 수 없다
한번 크기를 지정하면 변경할 수 없다. 깊읕복사 +얕은복사를 이용해서 번거로웠다.
new int[4] 깊은복사 + 얕은 복사
new int[8]
2. 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다
3. 한 타입의 데이터만 저장 가능하다
상속내에서만 진행했기 떄문에 번거로웠다.
위와 같은 배열의 문제점을 해결해주는게 컬렉션이다. 그렇다면 컬렉션의 장점을 알아보자.
컬렉션의 장점
1. 저장하는 크기의 제약이 없다.
2. 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다.
3. 여러 타입의 데이터가 저장 가능하다
- 객체만 저장할 수 있기 때문에 필요에 따라
기본 자료형을 저장해야 하는 경우 Wrapper클래스 사용 (포장해서 기본자료형 사용 가능하다. )
컬렉션의 주요 인터페이스
어떤식으로 데이터가 저장하는지 알아 보자
List (목록)
- 배열의 모양이라고 생각하면 편하다.
중복이 가능하고 순서를 유지할 수 있다.
set(집합)
- 주머니 모양이라고 생각하면 편하다.
중복이 안된다.
그림에 보면 Colloction이라고 묶여 있다.
이것은 둘다 중복되는 코드가 많아서, colloction이라는 인터페이스가 있다라고 생각하자.
즉, List Set의 공통 코드를 작성한 단순한 부모 인터페이스
위에서 Java Colloction랑 햇갈리지말자! Java Colloction는 자바의 자료 구조 모음(List,Set,Map)이있다!
Map
- 출석부 모양이라고 생각하면 편하다.
1번 나와! -> 박도비
2번 나와! -> 박봉자
key | value |
1번 | 박도비 |
2번 | 박봉자 |
3번 | 박코딩 |
3번 | 박코린 |
3번 나와! 했을때 박코딩/ 박코린이 둘중에 누가 나올지 모른다.
그래서 key는 중복이 안되지만, value는 중복이 가능하다.
인터페이스 (접점)
관련없는 것들 연결 공통된 메소드명을 제공하여 규약을 만듬
추상메소드 상속 받으면 상속 받은 자식이 오버라이딩 해야함
모든 자식 클래스가 같은 이름의 메소드를 갖는다,.
Colloction
1. 저장하는 크기의 제약이 없다.
2. 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다.
3. 여러 타입의 데이터가 저장 가능하다
- 객체만 저장할 수 있기 때문에 필요에 따라
기본 자료형을 저장해야 하는 경우 Wrapper클래스 사용 (포장해서 기본자료형 사용 가능하다. )
List
객체배열 업그레이드 버전이다!라고 생각하기 ! == 인터페이스 == 객체 생성이 불가능하다!
객체생성이 블가능하지만! 부모 참조 변수로는 가능하다 !
List.add(Object e)
ㄴ 매개변수 타입이 Object(최상위 부모참조변수) 임으로 모든 객체를 매개변수로 전달 할 수 있다.
아래 예시에서 보듯 여러 타입으로 데이터를 저장할 순 있다 !
ex)
studentList.add(new Student()); // 0번째 인덱스
StudentList.add(sc); //1번째 인덱스
StudentList.add("문자열"); //2번쨰인덱스
StudentList.add(new Object()); //3번쨰인덱스
하지만, 여러 객체 저장이 되면 Student 객체의 이름만 가져오고 싶다면 Student객체가 맞는지 확인하는 과정이 너무 귀찮고 방해가 되는 경우가 있어 제네릭스(Generics)를 사용하면된다.
제네릭스(Generics)
<>를 사용하면 되고, 컬렉션에 저장되는 객체 타입을 한가지로 제한할 수 있다.
객체배열 선언!
① ArrayList 객체 만들기
List<Student> studentList = new ArrayList<Student>();
ArrayList ( ) 기본생성자
ㄴ ( ) 가로 안이 비어 있다면, 기본 크기가 10칸 짜리 리스트를 생성한다.
하지만 리스트는 크기가 늘었다 줄었다 하기 때문에 큰 의미는 없다.
ㄴ 검색(조회)에 효율적
② LinkedList객체 만들기
List<Student> studentList = new LinkedList<Student>()
LinkedList( ) 기본생성자
ㄴ 객체를 제거하거나 추가하게 되면 바로 앞/뒤 링크만 변경하면 되기 때문에
객체 삭제와 삽입이 빈번하게 일어나는 곳에서는 ArrayList보다 성능이 좋음
● List 객체에 객체 추가하는 방법
형식 : List . add ( Object e )
studentList .add(new Student());
● List 에 i번째 인덱스에 있는 객체 반환하는 방법
형식 : Object list . get(index i)
System.out.println(studentList .get(0).getName());
List는 0부터 인덱스가 시작되며, List에 저장된 데이터 개수를 얻어오는 방법은 int List.size() 이다 !
배열명.length대신 사용한다고 생각하면 편하다.
● List 가 비어있는지 확인하는 방법
형식 : List.isEmpty()
studentList.isEmpty()
● List 정보 수정하는 방법
형식 :Student List.set(int index,Student e)
→ List의 i번째 요소를 전달 받은 e로 변경
반환값 Student == 변경 전 Student 객체가 담겨있다
Student temp = studentList.set(index, new Student(name,age,region,gender,score));
입력 받은 index 번째에 새로운 학생정보를 세팅 == 수정
이때, index번째에 있는 기존 학생 정보가 반환 된다.
● List 정보 제거하는 방법
형식 :studentList.remove(int index)
Student temp = studentList.remove(index);
제거된 요소가 반환이 된다.
● List 정보에 포함되는 것을 찾는 방법
형식 : String.contains(문자열)
String에 문자열이 포함되어 있으면 true
std.getName().contains(input)
'ON > JAVA' 카테고리의 다른 글
18일 _ Map계열 /입출력 /네트워크 (0) | 2023.05.13 |
---|---|
17일 컬렉션 _ Set계열 (1) | 2023.05.11 |
15일차 _ 인터페이스 및 예외처리 (4) | 2023.05.09 |
14일차_객체지향 복습 및 다형성/바인딩 (0) | 2023.05.04 |
13일차_객체지향_상속 (0) | 2023.05.03 |