본문 바로가기

Java/[패스트캠퍼스] 100% 환급 챌린지

패스트캠퍼스 환급챌린지 53일차 미션 (3월 24일) : 시그니처 백엔드 Path 초격차 패키지 Online. 강의 후기

https://fastcampus.co.kr/dev_online_besignature
수강 강의명

강의 내용

[1] BookArray 클래스를 만들어 사용하는 방법
[2] ObjectArray 클래스를 만들어 사용하는 방법

 

[1] BookArray 클래스를 만들어 사용하는 방법

배열처럼 동작하는 클래스를 통해 책을 핸들링하는 방법

Q. 책 3권을 배열에 저장하고 출력하시오.
Book(데이터 자료형)을 먼저 만들어야 함

// 잘 설계된 VO, DTO
public class Book {
    private String title;
    private int price;
    private String company;
    private String author;

    // 기본 생성자
    public Book() { }

    // 생성자 오버로딩
    public Book(String title, int price, String company, String author) {
        this.title = title;
        this.price = price;
        this.company = company;
        this.author = author;
    }

    // Setter, Getter
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    // 재정의 : Object -> toString()
    @Override
    public String toString() {
        return "Book{" +
            "title='" + title + '\'' +
            ", price=" + price +
            ", company='" + company + '\'' +
            ", author='" + author + '\'' +
            '}';
    }
}

(1) 생성 동작 : BookArray()

생성자 오버로딩 : 생성자를 이용하여 객체를 초기화하기 위함

(2) 저장 동작 : add()
객체 배열 : 책 데이터 한 권이 들어가야 함

(3) 가져오는 동작 : get()
println()로 인해 객체의 toString()가 호출된다.

(4) 크기를 구하는 동작 : size()
public class BookArray {
    private final int DEFAULT_CAPACITY = 5;  // 상수(수정 불가)
    private Book[] elements;  // 원하는 형태로 변경
    private int size = 0;

    // 생성 동작
    public BookArray() {
        elements = new Book[DEFAULT_CAPACITY];
    }

    // 저장 동작
    public void add(Book element) {
        // 공간 확인
        if (size == elements.length) {
            // 크기를 2배로 늘리는 작업
            ensureCapacity();
        }

        elements[size++] = element;
    }

    public void ensureCapacity() {
        int newCapacity = elements.length * 2;
        elements = Arrays.copyOf(elements, newCapacity);
    }

    // 가져오는 동작
    public Book get(int index) {  // -1, 5
        // index 확인
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("index의 범위(0~4)가 초과됨");
        }
        return elements[index];
    }

    // 원소의 개수를 넘겨주는 동작
    public int size() {
        return size;
    }
}
public class MyBookArrayTest {
    public static void main(String[] args) {
        // Q. 책 3권을 배열에 저장하고 출력하시오.
        BookArray list = new BookArray();
        list.add(new Book("자바", 15000, "한빛", "홍길동"));
        list.add(new Book("C++", 17000, "대림", "이길동"));
        list.add(new Book("Python", 16000, "정보", "나길동"));

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));  // toString()
        }
    }
}

 

[2] ObjectArray 클래스를 만들어 사용하는 방법

IntArray, BookArray : 특정 타입만 저장 가능(한계)
범용적인 API가 되려면? 특정 타입이 아닌 여러 타입을 저장해야 함

클래스가 어떤 배열을 갖느냐에 따라 범용성인지 확장 가능한 클래스인지 결정된다.
# Object : 최상위 클래스. 모든 객체에 대한 업캐스팅 가능

Q. 객체 3권을 배열에 저장하고 출력하시오.
어떤 타입의 객체라도 저장 가능한 범용적인 클래스(A, B, C : 서로 다른 클래스)

최상위 클래스이므로 서로 다른 하위 클래스 저장 가능(다형성 배열)
Object로 Upcasting되면 꺼낼 때 Downcasting되어야 함
# 다형성 배열 : 모든 클래스를 저장할 수 있는 배열

(1) 생성 동작 : ObjectArray()
(2) 저장 동작 : add()
(3) 가져오는 동작 : get()
(4) 크기를 구하는 동작 : size()
public class A {
    public void display() {
        System.out.println("나는 A이다.");
    }
}
public class B {
    public void display() {
        System.out.println("나는 B이다.");
    }
}
public class C {
    public void display() {
        System.out.println("나는 C이다.");
    }
}

public class ObjectArray {
    private final int DEFAULT_CAPACITY = 5;  // 상수(수정 불가)
    private Object[] elements;  // 다형성 배열
    private int size = 0;

    // 생성 동작
    public ObjectArray() {
        elements = new Object[DEFAULT_CAPACITY];
    }

    // 저장 동작
    public void add(Object element) {  // 다형성 인수
        // 공간 확인
        if (size == elements.length) {
            // 크기를 2배로 늘리는 작업
            ensureCapacity();
        }

        elements[size++] = element;
    }

    public void ensureCapacity() {
        int newCapacity = elements.length * 2;
        elements = Arrays.copyOf(elements, newCapacity);
    }

    // 가져오는 동작
    public Object get(int index) {  // -1, 5
        // index 확인
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException("index의 범위(0~4)가 초과됨");
        }
        return elements[index];
    }

    // 원소의 개수를 넘겨주는 동작
    public int size() {
        return size;
    }
}

public class MyObjectArrayTest {
    public static void main(String[] args) {
        // A, B, C 객체를 배열에 저장하고 출력하시오.
        ObjectArray list = new ObjectArray();

        list.add(new A());  // Upcasting : Object element = new A();
        list.add(new B());  // Upcasting : Object element = new B();
        list.add(new C());  // Upcasting : Object element = new C();

        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) instanceof A) {
                ((A)list.get(i)).display();  // Downcasting : Object -> A
            } else if (list.get(i) instanceof B) {
                ((B)list.get(i)).display();  // Downcasting : Object -> B
            } else {
                ((C)list.get(i)).display();  // Downcasting : Object -> C
            }
        }
    }
}

 


 

수강 화면수강 화면
수강 화면

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/48sS29N

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr