본문 바로가기

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

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

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

강의 내용

[1] Object 클래스를 이용하여 객체를 생성하는 방법
[2] Object 클래스를 활용한 다형성

 

[1] Object 클래스를 이용하여 객체를 생성하는 방법

Object

모든 클래스의 부모 클래스(최상위 클래스)

자바에서 제공하는 API 중 가장 먼저 만들어진 클래스

자바의 모든 API는 상속 관계로 이뤄짐(부모를 이용하면 효율적인 코드 작성 가능)

Q. 클래스 한 개를 만들면 기본적으로 생략되는 코드를 쓰시오.
코드를 적지 않아도 컴파일러가 자동으로 코드를 넣는다.
(1) default package : 자바에서 가장 많이 사용하는 클래스들을 모아놓은 묶음(패키지)
(2) java.lang.Object(최상위 클래스) : 모든 클래스의 부모(기본적으로 Object가 상속된다.)
(3) default 생성자 : 클래스 이름과 동일하며 리턴 타입이 없음. 상위 클래스 객체를 생성하는 메서드가 생략된 형태
import java.lang.*;  // (1) default package
public class A extends Object {  // (2) java.lang.Object(최상위 클래스)
     public A() {  // (3) default 생성자
          super();
     }
}
Q. A 클래스의 객체를 생성하시오.(2가지 방법)
(1) 객체 자신이 객체를 생성하는 방법
(2) 업캐스팅을 이용하여 객체를 생성하는 방법(다형성)
*다형성 : 상위 클래스를 통해 하위 클래스를 실행하는 방법

A a = new A();
Object obj = new A();  // Upcasting : A와 Object는 상속 관계
Q. Object 클래스를 이용하여 A 클래스의 display()를 호출하시오.
동적 바인딩이 일어나려면 Object의 display()가 하위 클래스에서 재정의되어야 함
Object에는 display()가 없기 때문에 부모 타입을 자식 타입으로 변경해야 함
public class A {
    public void display() {
        System.out.println("나는 A입니다.");
    }
}
public class ObjectTest {
    public static void main(String[] args) {
        // A 객체를 생성하시오.
        A a = new A();
        a.display();

        Object obj = new A();  // Upcasting
        ((A)obj).display();  // Downcasting
    }
}

 

[2] Object 클래스를 활용한 다형성

Object를 다형성 인수로 활용하는 방법

Object를 활용하면 유연한 코드 작성 가능

Object 타입으로 Upcasting하면 꺼낼 때는 하위 타입으로 Downcasting해야 함

Object에 없는 하위 클래스의 메서드는 동적 바인딩이 일어나지 않기 때문에 호출할 수 없음

Downcasting을 하여 하위 클래스의 메서드를 찾아가야 함

[다형성 인수 : 다른 타입(하위)을 받을 수 있는 인자(상위)]
[Object : A 타입과 B 타입을 받을 수 있는 타입]

Q. Object 클래스를 이용하여 A, B 클래스의 printGo()를 호출하시오.
Object 타입에는 printGo()가 없기 때문에 동적 바인딩이 일어나지 않음
instanceof 연산자를 이용하여 인자가 어느 타입인지 확인
(1) 인자가 A 타입이면 A 타입으로 Downcasting해야 함
(2) 인자가 B 타입이면 B 타입으로 Downcasting해야 함
Object 타입으로 객체를 받으면 Downcasting이 반드시 일어난다.
public class A {
    public void display() {
        System.out.println("나는 A입니다.");
    }

    public void printGo() {
        System.out.println("나는 A입니다.");
    }
}​
public class B {
    public void printGo() {
        System.out.println("나는 B입니다.");
    }
}
public class ObjectPolyArgTest {
    public static void main(String[] args) {
        A a = new A();
        display(a);

        B b = new B();
        display(b);
    }

    private static void display(Object obj) {  // Object : 다형성 인수
        if (obj instanceof A) {  // 타입을 확인한 다음 Downcasting
            ((A)obj).printGo();
        } else {
            ((B)obj).printGo();
        }
    }
}

 

Object[] 배열을 다형성 배열로 활용하는 방법

클래스를 배열에 담으려면 부모 배열이 필요하다.

Q. A, B 클래스를 Object[] 배열에 저장한 다음 printGo()를 호출하시오.
타입이 다른 A와 B를 배열에 넣으려면 A와 B의 부모 배열에 넣어야 함
Object로 받아 꺼내는 작업을 할 줄 알아야 Object를 이용한 API를 활용할 수 있다.
public class ObjectPolyArrayTest {
    public static void main(String[] args) {
        // A, B 클래스를 저장할 배열을 생성하시오.
        Object[] obj = new Object[2];  // 다형성 배열(바구니)
        obj[0] = new A();  // Upcasting
        obj[1] = new B();  // Upcasting

        display(obj);
    }

    public static void display(Object[] obj) {  // 데이터 이동
        for (int i = 0; i < obj.length; i++) {
            if (obj[i] instanceof A) {
                ((A)obj[i]).printGo();  // Downcasting
            } else {
                ((B)obj[i]).printGo();  // Downcasting
            }
        }
    }
}​

 


 

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

 

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

https://bit.ly/48sS29N

 

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

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

fastcampus.co.kr