코드 그라데이션

후발대 13일차 설명 보충 본문

Java/후발대

후발대 13일차 설명 보충

완벽한 장면 2023. 2. 3. 09:56

 

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