코드 그라데이션
후발대 13일차 설명 보충 본문
Generics(2)
public class _02_GenericsClass {
public static void main(String[] args) {
// 다양한 형태의 메서드들을 받아서 하나로 처리하는 걸로 구현을 앞에서 했었지
// 커피 실습할거야.(커피 패키지 생성)
// 5개 실습 중에 먼저 주문 번호로 알려주는 CoffeeByNumber부터 생성
CoffeeByNumber12 c1 = new CoffeeByNumber12(33); // 대기번호
c1.ready(); //커피 준비 완료 : 33 출력
// 이제 닉네임으로 불러드리는 고객님이 오셨다고 하자...
// CoffeeByNumber12에서는 int로 받았으니까, 닉네임으로 받는 걸 만들어줘야지, 클래스 생성하자. 2. CoffeeByNickName
CoffeeByNickName12 c2 = new CoffeeByNickName12("미연");
c2.ready();
System.out.println("-----------"); // 줄변경
// c1이나 c2나 사실 동작은 똑같다. 값이 바뀌어야 한다고 하면 그때마다 새로운 클래스를 만들어야 해서 번거로움이 있을 것이다.
/*
방법: 1 Object클래스 사용
모든 클래스의 조상이기 때문에 따로 상속을 해주지 않아도, 모든 클래스에서는 object 타입을 받을 수가 있다.
*/
//3. CoffeeByName 생성
CoffeeByName12 c3 = new CoffeeByName12(34); // Object로 받았으므로 아무 문제가 없어요. 정수
c3.ready();
CoffeeByName12 c4 = new CoffeeByName12("조미연"); // 문자열
c4.ready();
System.out.println("------------------");
// 이제 CoffeeByName12에서 name을 가져와서 이름과 주문번호를 확인하고 싶어요.
int c3Name = (int)c3.name;
// 반드시 형변환 해서 가져와야함. 처음엔 object인데 int값 들어왔다고 빨간줄이 떴음.
System.out.println("주문 고객 변호: " + c3Name);
String c4Name = (String)c4.name;
// 반드시 형변환 해서 가져와야함. Object이므로
System.out.println("주문 고객 변호: " + c4Name);
// c3에 c4를 가져온다거나, 이렇게 잘못 가져온 경우가 있을 수 있지
// c4Name = (String)c3.name
// Objcet
System.out.println("-------");//줄바꿈
//5. Coffee 클래스 생성
Coffee12<Integer> c5 = new Coffee12<>(35);
c5.ready();
//만약 우리가 c5의 name을 얻어온다고 가정하면!
int c5Name = c5.name; // 에러 안 난다. 당연히 정수데이터를 넣기로 했기 때문에 형변환도 필요가 없어.
System.out.println("주문 고객 번호: " + c5Name);
Coffee12<String> c6 = new Coffee12<>("강동원");
c6.ready();
//여기도 마찬가지!
String c6Name = c6.name;
System.out.println("주문 고객 이름: " + c6Name);
// 우리가 앞에서 있었던 문제가 c4 name을 c3으로 형변환 하면서 애러가 있었지, 만약에 35를 정우성으로 바꾸면 바로 에러 난다.
// 숫자만 넣기를 기대했기 때문에, 물론 강동원을 35로 바꿔도 마찬가지
/*
이제 회원가입을 추가해서 관리했다고 가정하자. 휴대폰 번호 등을 이용해 포인트 적립 등으로 혜택
*/
// 이제 사용자들이 주문하는 상황을 가정해봅시다 (CoffeeByUser12)
CoffeeByUser12<User12> c7 = new CoffeeByUser12<>(new User12("이동욱"));
// 지금 우변의 <>안에는 User12가 들어가도 되고, 생략해줘도 된다.
//괄호() 안에 객체가 들어가야 함. User의 객체. new User12의 형태는 문자열로 받게 되어있으니까 문자가 들어가야.
c7.ready();
CoffeeByUser12<VipUser12> c8 = new CoffeeByUser12<>(new VipUser12("정우성"));
c8.ready();
//CoffeeByUser12<VipUser12> c8 = new CoffeeByUser12<>(new Camera11("정우성")); 이건 애러. 받는 것 제한
//----------------------------------------------------------
//Day13
// 지금까지는 T 값 하나만 전달받아서 했는데, 하나 말고 더 할 수도 있다.
System.out.println("---------------");
orderCoffee("유재석");
orderCoffee(36);
System.out.println("--------------");
orderCoffee("조보아", "자바칩프라프치노");
orderCoffee(37, "라테");
}
public static <T> void orderCoffee(T name) {
System.out.println("커피 준비 완료: " +name);
System.out.println("------------");
}
public static <T, V> void orderCoffee(T name, V coffee) {
System.out.println(coffee + " 준비 완료: " + name);
// 아메리카노도 시켰는지, 라테도 같이 시켰는지 봐보자 // 다이아몬드 기호 속에 적어주면 된다.
}
}
WrapperClass
public class _03_WrapperClass {
public static void main(String[] args) {
// wrapper 클래스
// 다양하게 형태 작성 가능
Integer i = 123; // int i = 123;
Double d = 1.0; // double d = 1.0;
Character c = 'A'; // char c = 'A'
System.out.println(i);
System.out.println(d);
System.out.println(c);
System.out.println("------------");
// 이제 기능이랑 메서드를 활용해서 출력해보겠다.
//i 하고 . 찍으면 인티저와 관련된 많은 기능들을 확인해 볼 수 있음.
System.out.println(i.intValue());
System.out.println(d.intValue()); // 실수를 형변환해서 int로 바뀐 것을 볼 수 있을 듯
System.out.println(c.charValue());
System.out.println("-----------");
// 정수를 문자열 형태로 쉽게 바꾸기
String s= i.toString();
System.out.println(s); // i에 있던 123값이 문자로 바뀌어서 출력됨을 확인할 수 있다.
String str = "10";
int num = Integer.parseInt(str);
System.out.println(num); // String을 숫자값으로 출력시켜줌.
Integer ii = new Integer(10); // 박싱 : 숫자를 인티저 타입으로 넣는 것
int num1 = ii.intValue(); // 언박싱 : ii에서 intValue값만 꺼내와서 이거를 다시 int형태의 값에다가 담는 것.
}
}
ArrayList
public class _04_ArrayList {
// 컬랙션 프레임워크. 많은 데이터를 효과적으로 관리하기 위해서 자바가 제공하는 어떤 클래스의 모음.
// List, Set, Map
public static void main(String[] args) {
// 우리가 이전에 두 개 이상의 데이터를 관리하기 위해서 배열을 배웠었지.
// 하지만 배열은 크기 고정이므로, 새로운 데이터 추가 시 새로운 배열을 선언해줘야 해서 불편함이 있었다.
/*
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;
*/
// ArrayList
// 어떤 학원에서 진행하는 5명짜리 수업이 있다고 하자. 선착순 5명!
// 데이터 추가
ArrayList<String> list = new ArrayList<>(); //꺽쇠 안에는 받을 데이터 타입
list.add("유재석");
list.add("조세호");
list.add("김종국");
list.add("박명수");
list.add("강호동");
System.out.println("-------------"); // 줄변경
// 데이터 조회
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.get(3));
System.out.println(list.get(4));
// 만약 박명수씨가 등록을 철회한다면?
// 데이터 삭제
// 한 개만 지워줄 때는 remove
System.out.println("신청 학생 수 (등록 철회 전) : " + list.size());
list.remove("박명수"); // ()괄호 안에 삭제할 데이터를 그대로 적어주면 됨.
System.out.println("신청 학생 수 (철회 후) : " + list.size());
System.out.println(list.get(3)); // 강호동 씨가 앞으로 올라온 것을 알 수 있음.
System.out.println("-----------");
System.out.println("남은 학생 수 (제외 전) : " + list.size());
list.remove(list.size()-1); // 마지막 인덱스를 삭제
System.out.println("남은 학생 수 (제외 후) : " + list.size());
// 순회 : for each문 통해 확인
for (String s : list) { // 좌측에 담을 변수, 우측엔 순회할 배열
System.out.println(s); // 유재석, 조세호, 김종국 출력
}
System.out.println("-----------");
// 데이터 변경
// 유재석 씨가 다른분께 수강권 양도해서 다른 사람이 대신 등록
System.out.println("수강권 양도 전: " + list.get(0)); // 유재석 출력
list.set(0, "이수근"); //(바꿀 위치, 바꿀 데이터)
System.out.println("수강권 양도 후: " + list.get(0)); // 이수근 출력
System.out.println("------------");
// 확인
// 이번에는 김종국 씨가 자기 데이터를 확인하고 싶다고 학원에 문의가 왔다면
System.out.println(list.indexOf("김종국")); // 괄호 안에 찾으려는 데이터를 넣어주면 된다. 여기서는 김종국씨의 위치를 찾겠지.
// 리스트 안에 포함되어 있는지 아닌지 확인 // 선착순 5명 내에 포함되어 있는가?
// contains() 메서드 => True, False로 반환값 출력
if (list.contains("김종국")) {
System.out.println("수강 신청 성공");
}
else {
System.out.println("수강 신청 실패");
} // 수강 신청 성공 출력됨.
System.out.println("---------------");
// 리스트에 있는 내용 전체 삭제 : clear()
list.clear();
// 리스트가 비워져 있는지를 확인
if(list.isEmpty()) {
System.out.println("학생 수: " + list.size() );
System.out.println("리스트가 비어 있습니다.");
}
System.out.println("-------------");
// 여기까지 되면 완전히 리스트 깨끗해짐
// 새로운 학기가 시작되어 새로운 학생 5명을 선착순으로 받아서 새로 공부를 시작한다.
list.add("유재석");
list.add("조세호");
list.add("김종국");
list.add("박명수");
list.add("강호동");
// 출석부를 만들어보자. 가나다순으로 이름 정렬해서
// 정렬
Collections.sort(list); //(안에는 정렬하고 싶은 데이터의 이름)
// for-each문을 통해 잘 정렬되었는지 확인
for(String s : list) {
System.out.println(s); // 강호동, 김종국, 박명수, 유재석, 조세호 순으로 출력 됨.
}
}
}
LinkedList ( 1 )
public class _05_LinkedList {
public static void main(String[] args) {
// 링크드 리스트
// 여러명이 앉을 의자가 있다고 가정한 설명
/*
먼저 어레이리스트는, 여러명이 앉을 의자가 연달아 있으면, 중간에 누가 앉으려고 한다면 그 사람의 위치로부터
그 사람 뒤에 있는 사람들이 모두 일어나서 한 칸씩 이동해야 하는 번거로움이 있다.
링크드 리스트는 의자 없이 사람들이 나란히 손을 잡고 있는 상황이다.
중간에 한 명이 2-3번 사이로 들어간다고 하면, 잡았던 손을 놓고, 그 사이에 들어가고 나서 기존에 2-3번에 있는 사람과 손을 잡으면서
쉽게 여러 사람들 사이로 들어갈 수 있다. 그냥 손을 놨다가 새로 들어온 사람과 손을 잡는..
쓰는 방법은 두 가지가 거의 비슷하다.
*/
// 선착순으로 수업 진행
LinkedList<String> list = new LinkedList<>();
list.add("유재석");
list.add("조세호");
list.add("김종국");
list.add("박명수");
list.add("강호동");
// 데이터 조회
System.out.println(list.get(0)); // 유재석 출력
System.out.println(list.get(1)); // 조세호 출력
System.out.println(list.getFirst()); // 편리하게 가장 첫번째 데이터 뽑을 수 있음 // 유재석 출력
System.out.println(list.getLast()); // 마지막 데이터를 뽑을 수 있음 // 강호동 출력
System.out.println("-----------");
// 데이터 추가
list.addFirst("서장훈"); // 처음으로 데이터가 들어가게 만든다.
for(String s : list) {
System.out.println(s);
}
System.out.println("--------");
list.addLast("김희철");
for(String s : list) {
System.out.println(s);
} // 7명이 됨
System.out.println("-----");
// 중간에 데이터를 추가하는 경우
System.out.println("학생 추가 전: " + list.get(1)); // 유재석 출력
list.add(1, "김영철"); // 유재석 씨 앞에 김영철 씨 추가됨
System.out.println("학생 추가 후: " + list.get(1)); // 김영철 출력
// 진짜 추가되었는지 확인해보기
System.out.println("학생 추가 후: " + list.get(2)); // 유재석 출력 <== 이동한 위치
728x90
'Java > 후발대' 카테고리의 다른 글
후발대 14일차 설명 포함 코드 (0) | 2023.02.03 |
---|---|
후발대 14일차 전체 코드 (0) | 2023.02.03 |
후발대 13일차 전체 코드 (0) | 2023.02.03 |
후발대 12일차 전체적 정리 (0) | 2023.01.27 |
후발대 12일차 전체 코드 (0) | 2023.01.27 |
Comments