본문 바로가기
Java/Java 활용 개념 정리

[Java] Object 개념 활용하기! // 다형성 관련 개념 총정리

by Dev dreamer 2023. 2. 6.

💡 Object 클래스


 

Object 클래스는 java 에서 만든 api 이다.

 

상속 관계에 있는 맨위(최상위)의 클래스가 Object 클래스 이다.

 

Object 클래스를 잘 활용하면 프로그램을 유연하게 만들 수 있다.

 

모든 클래스의 부모클래스?

 

Object로 모든 클래스 객체에 접근이 가능하다라는 말이다.

 

단! downcasting을 기본 전제하에 메소드에 접근해야한다.
(Object 클래스에 자식 클래스의 메소드가 없으므로.)

 

 

 

클래스를 설계할 때 디폴트로 생략되어있는 3곳이 있다.

 

1. import java.lang.* 

 

2. 생성자 메소드와 그 내부의 super();

 

3. extends Object

 

 

 

Object 클래스로 A의 객체를 만들었을 때

obj 자체에 display 라는 메소드가 없으므로 접근하기 위해서는

downcasting 을 통해서 display() 메소드에 접근해야 한다.

 

((A)obj).display(); 를 통해서 display 메소드에 접근이 가능하다.

 

이어서 obj가 가지고 있는 toString 을 살펴보자.

 

🔍 toString 

object 클래스 내부에는 toString 이라는 메소드가 있다.

 

객체가 메모리에 만들어지면 그 객체를 가르키는 번지가 있을 것이다.

 

이 번지(16진수)를  문자열로 출력해 주는 기능을 한다.

 

이때 자식 클래스들이 toString을 재정의 할 수 있다.

 

 

재정의를 안했을 경우에 해당 객체의 번지가 출력된다.

재정의 했을 경우 재정의한 메소드가 실행이 된다.

 

여기서 !!!

 

toString을 재정의 해놓은 클래스 들이 있다!

 

1. String 클래스의 toString 메소드

 

자신이 가진 값을 그대로 리턴해준다.

 

2. File 클래스의 toString 메소드

 

자신이 가진 경로 값을 리턴해 준다.

 

 

 

💡 2. Object 클래스의 활용


 

Object 클래스를 다형성 인수로 이용할 때에도 한가지 생각해야 한다.

 

 

Object 를 상속받은 클래스 A와 B 가 있다고 하자. 이때 go()라는 메소드가 각각 있다.

Object 객체를 상속 받아서 A객체와 B객체를 매개변수로 받을 때 부모클래스인 Object 클래스로 대신 받고

 

부모 클래스인 Object 클래스에 go 라는 메소드가 없으므로 A와 B를 downcasting 하여 실행 시킬 수 있는데

 

display(new A()) 를 통해 실행된 display 메서드와

display(new B()) 를 통해 실행된 display 메서드는

 

 

각 실행시킬때 instanceof 를 통해 각 클래스의 실행 조건을 확인해주고

클래스의 타입에 따라서 실행조건을 달아줘야 오류가 발생하지 않는다.

 

 

서로 다른 객체를 배열에 저장하려고 하면 부모 객체를 활용하면 된다.

Object로 배열을 만들어서 각각 저장한 후에

 

instanceof 를 통해 내부의 배열에 담긴 클래스 값을 확인하여 원하는 메소드를 동작시키면 된다.

 

💡 3. 다형성 관련 개념 총 정리!


 

🔍 3.1 객체 지향 프로그래밍의 3대 특징.

➡ 정보 은닉(Information Hiding)

 

private 을 통해서 상태 정보를 보호하는 것.

 

➡ 상속(Inheritance)

 

상속을 통해서 부모클래스가 자식 클래스의 소스코드를 몰라도 메서드가 재정의만 되어있으면 이용이 가능했다.

 

➡ 다형성(polymorphism)

 

상속 관계에 있는 상위 클래스가 하위클래스에게 동일한 메세지를 보냈을 때 하위클래스가 다르게 동작하는 것.

객체지향 원리(개념)

 

 

🔍 3.2 다형성 이론의 전제조건

➡상속 관계가 되어야 한다. or implements 관계도 가능.

 

➡객체 생성을 upcasting으로 할 것(상위 클래스가 하위 클래스에 메세지를 보내야 하므로)

 

upcasting에 되어야 downcasting을 할 수 있다.

 

➡ 동적 바인딩을 통해 실현된다.

(동적 바인딩 : 실행시점에서 사용될 메서드가 결정되는 바인딩, 프로그램의 속도를 떨어뜨리는 원인이 된다.)

 

 

🔍 3.3 추상클래스와 인터페이스의 공통점

 

➡ 다형성을 보장하기 위해서 등장

➡ 객체를 생성 할 수 없다.(new x)

➡ 하위 클래스에 의해 구현되어야 한다. (override : 재정의 필수)

➡ 부모(상위 클래스)의 역할로 사용한다. (upcasting으로 객체를 생성)

➡ 추상 메서드를 가진다.

 

 

 

 

 

 

 

 


Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.

출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)

댓글