📖책의 내용을 요약하니 자세한 부가설명이 궁금하시면 보시는걸 추천드립니다. 📖
1. 상속 개요
상속(Inheritance)은 한 타입을 그대로 사용하면서 구현을 추가할 수 있도록 해주는 방법을 제공
하위 클래스는 필요에 따라 상위 클래스의 메서드를 재정의(Overriding) 가능
* 자바는 상위 클래스의 메서드가 private 경우, 상속 받을 수 없다. (언어마다 다름)
2. 다형성과 상속
다형성(Polymorphism)은 한 객체가 여러 가지(poly) 모습(morph)을 갖는다는 걸 의미
즉, 한 객체가 여러 타입을 가질 수 있다. 자바는 타입 상속을 통해 다형성을 구현.
2.1 인터페이스 상속과 구현 상속
타입 상속은 크게 인터페이스 상속과 구현 상속으로 구분
// 1. 인터페이스 상속
interface Bird {
void fly();
}
class Eagle implements Bird {
@Override
public void fly() {
System.out.println("독수리가 날다");
}
}
Bird 인터페이스는 메서드 시그니처만 제공할 뿐 실제 구현은 해당 인터페이스를 상속받은 Eagle 클래스가 제공한다.
// 2. 구현 상속
class Animal {
public void move() {
System.out.println("동물이 움직인다");
}
}
class Tiger extends Animal {
}
구현 상속은 보통 상위 클래스에서 정의된 기능을 재사용하기 위한 목적으로 사용
3. 추상 타입과 유연함
추상화(Abstraction)는 데이터나 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의
추상화된 타입은 오퍼레이션의 시그니처만 정의할 뿐 실제 구현을 제공하지 않는다.
3.1 추상 타입과 실제 구현의 연결
추상 타입과 실제 구현 클래스는 상속을 통해서 연결
3.2 추상 타입을 이용한 구현 교체의 유연함
추상화는 공통된 개념을 도출하여 추상 타입을 정의하면서, 많은 책임을 가진 객체의 책임을 분리해주는 촉매제가 된다
3.3 변화되는 부분을 추상화하기
추상화를 잘 하려면 다양한 경험이 필요하지만 경험이 없더라도 추상화하는 방법이 존재, 바로 변화되는 부분을 추상화 하는 것
3.4 인터페이스에 대고 프로그래밍하기
- Program to interface (인터페이스에 대고 프로그래밍하기)
기능을 정의한 인터페이스를 사용해서 프로그래밍하라는 뜻
인터페이스는 추상화 과정을 통해 도출, 추상화 과정은 변화가 발생하는 곳에서 시작
변화가 많은 곳에서 인터페이스는 변경의 유연함을 얻지만 변화가 없는 곳에서 인터페이스를 만든다면 복잡도가 생기고 유연함이 없을 수도 있다.
3.5 인터페이스는 인터페이스 사용자 입장에서 만들기
인터페이스를 작성할 때에는 그 인터페이스를 사용하는 코드 입장에서 작성해야한다.
3.6 인터페이스와 테스트
실제 콘크리트 클래스(구현 클래스) 대신에 행동하는 객체를 Mock(가짜) 객체라 부른다.
기능 구현에 필요한 외부 인터페이스가 아직 개발중이라면 Mock 객체를 사용해서 기다리지 않고 테스트를 할 수 있다.
Mock 객체를 만드는 방법은 다양하지만 사용할 대상을 인터페이스로 추상화하면 좀 더 쉽게 Mock 객체를 만들 수 있다.
'서적 > 객체지향과 디자인패턴' 카테고리의 다른 글
챕터6, DI(Dependency Injection)와 서비스 로케이터 (0) | 2021.06.04 |
---|---|
챕터5, 설계 원칙 : SOLID (0) | 2021.06.03 |
챕터4, 재사용 : 상속보단 조립 (0) | 2021.06.03 |
챕터2, 객체지향 (0) | 2021.06.02 |
객체지향과 디자인패턴을 시작하며 (0) | 2021.06.02 |