강의 내용
[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 } } } }
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr