Backend/Do it 자바 완전 정복 강의

10장 클래스의 상속과 다형성

solog 2025. 1. 17. 18:02

10-1. 클래스의 상속

- 생성자는 상속 받지 않는다.

- 부모에게 상속 화살표를 향한다.

- 가장 중요한 장점은 다형적 표현이 가능하다는 것이다. ★ ★ ★

- 학생은 사람이다. 그러나 사람은 학생이다 (x) 불가능하다.

- A의 모든 기능은 C가 가능하다.  (화살표 방향으로 읽으면 모두 성립한다.) (화살표를 거스른다면 불가능하다.)

- 다형적 표현은 하나의 객체를 두고 여러 의미로 부를 수 있는 것이 다형적 이다.

- 배열의 2가지 특징 1) 동일한 타입만 저장 2) 크기 고정

- 상속은 상위 클래스인 부모클래스를 정의해서 나머지 하위 자식들을 포함하자. 

- 부모 클래스를 정의하면 하위 클래스를 관리할 수 있다. (객체를 관리하기 편해진다.)

- 상속 = 다형적 

- 다중 상속을 받으면, 모호성이 생기기 때문에 발생하지 않도록 불가한다.

- 자식 클래스는 여러 개 가능하나, 부모클래스가 다중은 안됀다는 것

- student 필드에서 3개, 메서드 3개 사용할 수 있다. (상속 받았기 때문에)

- 메모리 구조 중요 ★ ★ ★

- B b = new B(); 에서 부모가 있는 경우 부모 객체가 먼저 만들어진다. (B() 는 객체 의미)

- 생성자를 상속하게 되면 생성과 동시에 오류이다. 

- 화살표의 방향을 이해하자.

- 코드를 보고 UML 형식을 만들 수 있어야한다.

 

10-2. 객체의 타입변환

- 자식에서 부모로 가는 것을 업캐스팅, 부모에서 자식으로 가는 것이 다운캐스팅

- 업캐스팅은 항상 가능 (기억)

- 항상 = 를 중심으로 왼쪽과 오른쪽이 타입이 같아야 한다! (컴파일러로 인해 자동으로 캐스팅이 됐을 뿐이다.)

- 다운캐스팅은 언제 가능하고 언제 불가능할까?

- 다운캐스팅은 컴파일러가 자동으로 절대 해주지 않는다.

- 첫 번째 메모리 그림을 잘 이해하기 (a가 가리키는 것은 A객체이다.)

- B b = new B()와 A a = new B()의 차이점과 A a = new A()와 A a = new B()의 차이점을 잘 이해하기

 

- instanceof는 캐스팅이 가능한지 불가능한지 알려주는 문법이다.

 

10-3. 메서드 오버라이딩 (Overriding)

- void (리턴타입) /  abc (int, int ) (시그너처) 의미한다.

- 오버라이딩을 통해 배열로 한번에 관리 가능하며, 코드가 간결하고 다형적 표현이 가능하다.

- 오버라이딩은 상속했을 때 내용이고, 오버로딩은 동일한 메서드 이름에서 시그너처가 달라  같은 공간에 있을 수 있는 것이다.

10-4. 필드와 static 멤버 (필드_메서드)의 중복

- 오버라이딩의 정식 명칭은 '메서드 오버라이딩'이다. => 인스턴스 메서드의 오버라이딩이다.

- 인스턴스 필드와 static (필드/메서드)의 중복이 됐을 때 어떻게 될까? 에 대한 내용

- B 객체 안에 m = 3, m=4 가 같이 만들어지는데, 인스턴스필드가 중복이 된다. => 오버라이딩이 되나? 

- 이때는 공간상 분리가 되어있기 때문에 오버라이딩이 일어나지 않고 각각의 공간에 m이 존재하는 형태로 있다.

- 오버라이딩 되는 조건은 메모리 상에 같은 공간에 있어서 덮어쓰기가 돼냐 아니면 다른 공간에 있어 덮어쓰기가 안돼냐를 구분할 수 있으면 되는 것이다.

- 스태틱 영역에 또한 공간이 분리되어있기 때문에 오버라이딩이 되지 않는다.

 

<정리>

- instance 메서드는 오버라이딩이 되기때문에 기준이 B() 를 보면 되는 것이다.

 

10-5. super와 super()

- super 키워드는 this 키워드 & super()는 this()와 비슷하다고 생각하면 된다.

- this는 자신의 객체 의미했었다.

- 주의해야할게, 덮어쓰기라고 했지만 덮어쓰기가 아니라 부모메서드 위에 올라탄 것. (부모 것을 없애는 것이 아님)

- 부모의 것을 호출하려고 할 때 super 사용

- super.init을 작성하면 위의 100줄 코드를 작성하지 않고도 한줄만 코드를 추가하면 2줄코드로도 끝낼 수 있다.

- this() 메서드는 자신의 생성자를 호출하는 것이므로 super()는 부모 생성자를 호출하는 것이다.

- 생성자 첫줄에서만 super 사용가능 => this ()도 동일한 특징 => 즉, this와 super 메서드 동시에 불가능

- 자식 class 안에는 생성자의 첫줄에는 반드시 this() 또는 super()가 존재!

 

- super와 super()을 공부할 때는 this와 this()를 연계하여 같이 공부하자!

 

10-6. 최상위 클래스 Object

- 상속을 작성하지 않은 경우 Object를 자동으로 상속받게 된다.

- 자바의 클래스는 모두 object의 자식이다. (몇단개의 자식인가에만 차이)

- 내용비교를 하기 위해서는 equals를 재정의해야한다.

- hash 자료구조

- hashmap은 쌍으로 기억하는 데이터를 말함

- hashmap은 key가 중복될수 없으므로 1 안녕이 1 땡큐로 바뀐다.

- hashcode는 동등비교에서 사용된다.

- 해쉬코드는 오브젝트의 해쉬코드는 위치기반으로 고유값을 만들기 때문에 위치가 다르면 서로 다른 해쉬코드가 나온다.

- 즉, 같은 해쉬코드를 오버라이딩 해서 같은 데이터로 만들어야한다.

 

 

 

 

 

https://www.youtube.com/@doit4312/playlists

 

Do it 자바 완전 정복 동영상 강의

Do it 자바 완전 정복 동영상 강의입니다.

www.youtube.com

위 강의를 듣고 작성하였습니다.