-
만약 오브젝트 클래스가 없다면
각각 메서드를 새로 만들어야함 (toString()메서드를 수행할)BadObjectPrinter 클래스가 구체적인 특정 클래스는 A, B를 사용하는 것을 BadObjectPrinter는 A, B에 의존한다고 표현한다.
-
Object가 없고 제공하는 toString() 이 없다면 서로 아무 관계가 없는 객체의 정보를 출력하기 어려울것.
아무 관계가 없다는 것은 공통의 부모가 없다는 뜻.
→ 없다면 하기 내용을 각각의 클래스마다 별도 메서드를 작성해야함
-
다행히 자바에는 객체의 정보를 사용할 때, Object클래스와 메서드 오버라이딩 문제를 해결해줄 Object.toString() 메서드가 존재함.
-
추상적인 것에 의존:
ObjectPrinter클래스는 A, B 같은 구체적인 클래스를 사용하는 것이 아니라, 추상적인 Objcet 클래스를 사용.
→ ObjectPrinter 클래스가 Object 클래스를 사용하는 것을 Object 클래스에 의존한다고 표현한다.
-
ObjectPrinter는 구체적인 것에 의존하는 것이 아니라 추상적인 것에 의존한다.
여기서 말하는 추상적이라는 뜻은 단순히 추상 클래스나 인터페이스만 뜻하는 것은 아니다.
-
추상적인 것은 좀 더 개념적인 것을 뜻함
-
ObjectPrinter와 Object를 사용하는 구조는 다형성을 잘 활용함.
다형성을 잘 활용한다는 것은 다형적 참조와 메서드 오버라이딩을 적절하게 사용한다는 것.
-
ObjectPrinter의 print() 메서드와 전체 구조를 분석.
public static void print(Object obj) { String string = "객체 정보 출력: " + obj.toString(); System.out.println(string); }
→ 다형적 참조 : print(Object obj), Object 타입을 매개변수로 사용해서 다형적 참조를 사용함. Car, Dog 인스턴스를 포함한 세상의 모든 객체 인스턴스를 인수로 받을 수 있다.
→ 매서드 오버라이딩 : Object는 모든 클래스의 부모. 따라서 Dog, Car와 같은 구체적인 클래스는 Object가 가지고 있는 toString() 메서드를 오버라이딩 가능. 따라서 print(Object obj) 메서드는 Dog, Car와 같은 구체적인 타입에 의존(사용) 하지 않고, 추상적인 Object 타입에 의존하면서 런타임에 각 인스턴스의 toString()을 호출할 수 있음.
-
메서드 오버라이딩 부모타입을 호출 하더라도 오버라이딩이 우선순위로 호출된다. → 기본편에 나옴
-
OCP 원칙
기본편에서 했대;
Open: 새로운 클래스를 추가하고, toString()을 오버라이딩해서 기능을 확장가능
Close: 새로운 클래스를 추가해도 Object와 toString()을 사용하는 클라이언트 코드인 ObjectPrinter는 변경하지 않아도 된다.
-
다형적 참조, 메서드 오버라이딩, 그리고 클라이언트 코드가 구체적인 A, B에 의존하는 것이 아닌, 추상적인 Object에 의존하여 OCP원칙을 지킬 수 있음.
→ 새로운 클래스를 추가하고 toString()메서드를 새롭게 오버라이딩해서 기능을 확장 가능함.
→ 이런 추가 등의 변경점에도 클라이언트 코드인 ObjectPrinter는 변경하지 않아도 됨.
-
ObjectPrinter는 모든 타입의 부모인 Object를 사용하고, Object가 제공하는 toString() 메서드만 사용함
→ ObjectPrinter를 사용하면 모든 객체의 정보(toString())를 편하게 출력할 수 있음.
-
ObjectPrinter 클래스 만든 이유
→ System.out.println()의 작동방식을 설명하기 위해서 ㅎㄷㄷ..
→ System.out.println() 매서드도 Object 매개변수를 사용하고 내부에서 toString()을 호출한다.
→ System.out.println()를 사용하면 세상의 모든 객체의 정보 (toString())를 편리하게 출력할 수 있다.
-
자바는 객체지향 언어 답게 언어 스스로 객체지향의 특징을 잘 활용함
→ 다형성은 매우 중요함
-
정적 의존관계 vs 동적 의존관계
정적 의존관계는 컴파일 시간에 결정, 주로 클래스 간 관계를 의미함.
→ 프로그램을 실행하지 않고, 클래스 내에서 사용하는 타입들만 보면 쉽게 의존관계를 파악할 수있음.
동적 의존관계는 프로그램을 실행하는 런타임에 확인할 수 있는 의존관계.
런타임에서 어떤 인스턴스를 사용하는지를 나타내는 것이 동적 의존관계임
→ → 참고로 단순히 의존관계 또는 어디에 의존한다고 하면 주로 정적 의존관계를 뜻함.
→ → → ex) ObjectPrinter는 Object에 의존한다.
→ Object 클래스가 없다면 발생할 경우의 수를 정리.
→ JAVA는 객체지향 언어 답게 언어 스스로 객체지향 특징을 잘 활용한다.
→ 앞으로 예제에 어떤 방식으로 활용될 지 인지하면서 다음 강의 수강이 필요함.
→
※ 파리올림픽으로 시간을 많이 할애하지 못함... 그래도 꾸준히 해나가야함.
'다시 시작 > 인프런 실전 자바 - 중급' 카테고리의 다른 글
240801_Object클래스_equals() (0) | 2024.08.02 |
---|