우아한테크코스/레벨1
[수업] 상속과 조합, 좋은 객체의 7가지 덕목, 시그니처, final
nauni
2021. 3. 5. 21:05
상속의 특징
- private는 상속되지 않는다.
- abstract class는 new 키워드 사용으로 생성할 수 없다. 미완성 클래스이기 때문이다. 하지만, 생성자는 가질 수 있다. new로 직접 인스턴스 생성이 안되는 것이고 자식 클래스에서는 super()등으로 생성자 사용이 가능하다.
- 상속은 is-a 관계 즉, 계층구조일 때 사용된다. 포함관계가 될 때 사용한다.
- 상속을 사용한다는 것은 보통 abstract class를 사용을 의미하는 듯 하다. 일반클래스는 부모클래스로 사용되는 경우는 흔치 않은 듯 하다. 따라서 상속은 불완전한 클래스를 상속하여 완전하게 만드는 것(abstract를 구체화)을 의미한다.
- 상속은 캡슐화가 깨진다. 그 이유는 상속에서 오는 오류(메소드 오버라이드 등으로 일어나는 부수효과)를 줄이려면 자식 클래스가 부모 클래스의 내부 사항을 잘 알고 있어야하기 때문이다.
조합
- 조합은 인스턴스를 private field로 받아 활용하는 것이다.
- 계층구조가 아니기 때문에 좀 더 유연하다. 예전의 객체지향에서는 재사용성에 포커스를 맞췄다면, 현재는 객체지향의 트렌드가 변화하여 유연성에 포커스가 맞춰지고 있다고 한다.
- 강력한 계층구조를 이루는 상속보다 유연성을 가진 조합이 선호되는 이유이다.
함수의 시그니처
- 이름과 매개변수 타입들을 의미한다.
- 함수의 이름과 매개변수의 갯수와 그 타입이 같다면 함수의 시그니처는 같다.
- return type은 함수의 시그니처에 포함되지 않는다.
- 함수를 오버로딩한다는 것은 같은 이름의 매개변수타입이나 갯수를 다르게 변경하는 것을 의미한다.
final 키워드
- final 키워드는 오직 한번만 할당됨을 의미한다.
- 클래스에 final이 붙으면 상속 불가한 클래스를 의미한다. final로 지정된 클래스도 생성자는 여러개 가질 수 있다.
- 메소드에 final이 붙으면 오버라이드 불가한 메소드가 된다.
클래스와 객체
클래스는 객체를 만들어내는 곳이다. 객체 팩토리라고 할 수 있다. 주된 책임은 객체의 생성과 파괴 등 관리하는 곳이다. 자식(인스턴스)가 해야하는 계약에 대애 알고 있는 관리자라고도 할 수 있다. 클래스는 능동적인 관리자의 역할을 수행해야 한다.
좋은 객체의 7가지 덕목
- 객체가 현실 세계에 존재한다.
- 객체가 계약에 따라 동작한다.
- 객체가 특별해야한다.
특별한 객체가 되기 위해서는 캡슐화를 해야한다. 언제나 같은 내용의 객체가 되지 않고, 캡슐화를 통해 각 객체마다 특별한 정보를 가진 unique한 객체가 되어야 한다는 의미로 받아들였다. - 불변 객체이다.
- static 메소드를 가지지 않는다.
static 메소드는 객체의 행동이 아닌 클래스의 행동이다. - 객체의 이름은 하는 일이 아닌 그 자체를 나타낸다.
-er로 끝나는 객체의 이름을 지양하자. 명사형으로 그 자체가 무엇인지 나타내는 작명을 하는 것이 좋다. - 객체의 클래스가 final 또는 abstract 이다.
final 클래스는 상속이 불가하고, abstract는 불완전한 클래스로 자식 클래스가 완전하게 만들어 주어야 한다.
참고
좋은 객체의 7가지 덕목 번역글
좋은 객체의 7가지 덕목 원본
우테코 수업에서 다룬 키워드와 위의 글을 내 기준으로 다시 정리한 내용이다.