코드 그라데이션
후발대 15일차 설명 추가 코드 본문
_08_Iterator
public class _08_Iterator {
public static void main(String[] args) {
// 이터레이터
// 컬렉션 프레임워크의 데이터를 순회하는 거라고 생각하면 쉽다.
List<String> list = new ArrayList<>();
// ctrl하고 클릭해보면 List는 인터페이스이고, ArrayList는 클래스이다.
// ArrayList는 List 인터페이스를 상속받는 형태로 구현이 되는 것이에요.
// 그래서 이는 다형성 사례라고 할 수 있음. LinkedList 써도 마찬가지
//추가
// 알 수 없는 오류로 잘못 된 더미 값이 들어온다고 쳐보자
list.add("유재석");
list.add("(알 수 없음)");
list.add("김종국");
list.add("(알 수 없음)");
list.add("강호동");
list.add("(알 수 없음)");
list.add("박명수");
list.add("(알 수 없음)");
list.add("조세호");
// 순회 후 확인
for (String s : list) {
System.out.println(s);
}
System.out.println("------------");
// 이터레이터는 인텔리제이 내장이어서 편하게 쓸 수 있다.
//it는 약자로 편하게 쓴 것.
// 값 가져오기
// list.iterator(); => 그런데, Ctrl + Alt + V 누르면 자동으로 Iterator<String> iterator = list.iterator(); 형식으로 바꿔줌!
Iterator<String> it = list.iterator();
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
// 하나하나씩 번갈아가면서 출력 // // 커서 위치를 처음으로 이동
// 그리고 다음 데이터를 하나씩 하나씩 가지고 온다고 생각하면 된다. 유재석~4번째 알수없음까지
// 그런데 이터레이터는 index가 없다. 몇 번째 까지 순회하징???
//hasNext를 통해 순회함.
System.out.println("---------");
it = list.listIterator(); // 커서 위치를 다시 처음으로 이동 객체를 처음 것을 불러오면 됨.
while ((it.hasNext())) {
System.out.println(it.next()); // 반복을 도는 동안 그 다음값들을 계속 찍어줘. 다음 값이 없으면 탈출.
}
System.out.println("------------");
// 지우는 것부터 다음 시간에!
//Day15 시작
//커서 다시 처음으로 이동
it = list.iterator();
while (it.hasNext()) {
// 먼저 데이터를 가지고 와서 우리가 삭제할 데이터인지를 확인해보자.
String s = it.next(); // 현재 커서가 있는 위치에서부터 그 다음 데이터들을 차례로 찍어줌
if(s.contains("(알 수 없음)")) { // 알 수 없음일 때,
it.remove(); // 삭제
}
}
System.out.println("-----------");
//잘 삭제 되었는지 확인하기
it = list.iterator();
while (it.hasNext()) {
System.out.println((it.next())); // 알 수 없음이 빠진 데이터들이 출력되겠지.
}
System.out.println("----------");
//-------------------------------------
//이터레이터를 맵이나 Set에서도 쓸 수 있다
// 먼저 HashSet을 보자.
HashSet<String> set = new HashSet<>();
set.add("유재석");
set.add("박명수");
//set.iterator()을 쓴 다음에, ctrl + alt + v 하면 자동으로 객체가 생성된다!
// 편리한 기능이니까 참고하도록.
Iterator<String> itSet = set.iterator(); // Set에서 포함된 데이터를 찍어보는 부분을 만들기
while (itSet.hasNext()) {
System.out.println(itSet.next()); // 근데 순서는 보장이 안 되기 때문에 어떤 식으로 나올지는 모른다.
}
System.out.println("-------------------");
// HashMap에서 써보기.
HashMap<String, Integer> map = new HashMap<>(); // 객체 생성
map.put("유재석", 10);
map.put("박명수", 5);
//map.iterator(); 내장함수로 제공되지 않음.
//그럼 어떤식으로 불러와야할까. map.keuSet() 이용
// key와 value를 이터레이터 통해 순회 하면 됨
//map.keySet().iterator(); // 역시 ctrl + alt + v를 통해 객체를 생성
// map.keySet().iterator();
Iterator<String> itMapKey = map.keySet().iterator();
while (itMapKey.hasNext()) {
System.out.println(itMapKey.next());
}
System.out.println("---------");
Quiz
package Prac12;
import java.util.ArrayList;
// 아이유 파이썬
// 정우성 자바
// 유재석 자바
// 한소희 C
// 강동원 파이썬
// 자바 자격증을 보유한 학생
// ----------------------
// 박명수
// 김종국
class Student15 {
public String name;
public String certification;
public Student15(String name, String certification) {
this.name = name;
this.certification = certification;
}
}
public class Day15Quiz {
public static void main(String[] args) {
ArrayList<Student15> list = new ArrayList<>();
list.add(new Student15("아이유", "파이썬"));
list.add(new Student15("정우성", "자바"));
list.add(new Student15("유재석", "자바"));
list.add(new Student15("한소희", "C"));
list.add(new Student15("강동원", "파이썬"));
System.out.println("자바 자격증을 보유한 학생");
System.out.println("----------");
for(Student15 student : list) {
if(student.certification.equals("자바")) { //student의 certification에 "자바" 가 있니?
System.out.println(student.name); //Sturdent의 이름을 뽑아달라.
}
}
}
}
익명클래스
_01_AnonymousClass
package Prac15;
public class _01_AnonymousClass1 {
public static void main(String[] args) {
// 익명 클래스 : 이름이 없는 클래스
// 우리는 지금까지 클래스는 최상단에 정의해 왔는데,
// 사실은 클래스도 다른 클래스 내부에 만들 수 있다.(내부 클래스)
// 내부 클래스 중 특이한 게 익명클래스
Coffee c1 = new Coffee(); // 순서 2
c1.order("아메리카노");
System.out.println("--------");
Coffee c2 = new Coffee(); // 순서 3
c2.order("라테");
System.out.println("-----------");
// 순서 4
// 내가 커피숍 사장인데,
// 굉장히 친한 친구 방문. 절친이니까 커피에 조각케이크를 서비스를 주려고 한다.
// 이 때 쓰는 게 익명클래스. 한 번 보자.
Coffee specialCoffee = new Coffee() {
@Override
public void order(String coffee) {
//order 쓰면 자동완성. 그것 선택하면 super()로 바뀐다.
// 이게 무슨 뜻이냐면, Coffee 객체를 만들 때, specialCoffee 객체만을 위한 order라는 동작을 재정의 할 수 있다는 것.
/*
그럼 우리가 Coffee를 상속해가지고, 다른 specialCoffee라는 클래스를 만들 필요 없이,
그냥 메서드만 재정의 해서 우리가 원하는 동작을 추가할 수 있는 거죠.
*/
super.order(coffee); // 주문하신 (커피) 나왔습니다. 는 기본값이고
System.out.println("(귓속말) 딸기 케이크는 서비스예요."); // 추가로...!
}
@Override
public void returnTray() {
System.out.println("(귓속말) 자리에 두시면 제가 치울게요.");
}
};
specialCoffee.order("바닐라 라테"); // 주문하신 바닐라 라테 나왔습니다. // 순서 6
specialCoffee.returnTray();
}
}
class Coffee { //순서 1
public void order(String coffee) {
System.out.println("주문하신 " + coffee + " 나왔습니다.");
}
public void returnTray() { // 순서 7. 접시를 반남하는 기능을 추가
System.out.println("커피 반납이 완료되었습니다. ");
}
}
_02_AnonymousClass
package Prac15;
public class _02_AnonymousClass2 {
// 예시 : 집에서 만드는 수제버거
// 자 그런데, 수제버거는 레시피가 집집마다 다를 수 있지.
// 그래서 수제버거 추상클래스를 상속하지 않고 익명 클래스를 이용해서 처리해보도록 하겠다.
public static void main(String[] args) {
HomeMadeBurger momMadeBurger = getMomMadeBurger();
momMadeBurger.cook();
System.out.println("------------");
HomeMadeBurger broMadeBurger = getBroMadeBurger();
broMadeBurger.cook();
}
private static HomeMadeBurger getBroMadeBurger() {
return new HomeMadeBurger() {
@Override
public void cook() {
System.out.println("집에서 만드는 동생표 군대리아");
System.out.println("재료: 빵, 치킨패티, 양배추 샐러드, 딸기잼, 치즈, 삶은 계란");
}
};
}
public static HomeMadeBurger getMomMadeBurger() {
return new HomeMadeBurger() {
@Override
public void cook() {
System.out.println("집에서 만드는 엄마표 수제 버거");
System.out.println("재료 : 빵, 소고기패티, 해쉬브라운, 양상추, 마요네즈, 피클");
}
};
}
}
// 코드 한쪽에 다 때려넣으면 복잡하니까 별도의 메서드를 만들어서 처리하도록 하자.
abstract class HomeMadeBurger {
// 앞서 배운 것처럼 추상클래스이기 때문에 HomeMadebuger로는 바로 객체를 만들 수는 없고,
// 이 클래스를 상속해서 cook() 메서드를 재정의 해야만 객체를 만들 수가 있지.
public abstract void cook();
}
/*
정리하자면 우리는 HomeMadeBuger라는 추상클래스 객체를 만드는 것인데,
이 객체를 다른 곳에서 상속을 해가지고 클래스를 정의를 한 게 아니고, 그때 그때 새로운 익명클래스 객체를 만들어서
반환을 해주는 것이다.
*/
728x90
'Java > 후발대' 카테고리의 다른 글
후발대 16일차 설명 추가 코드 (0) | 2023.02.12 |
---|---|
후발대 16일차 전체 코드 (0) | 2023.02.12 |
후발대 15일차 전체 코드 (0) | 2023.02.11 |
후발대 14일차 설명 포함 코드 (0) | 2023.02.03 |
후발대 14일차 전체 코드 (0) | 2023.02.03 |
Comments