객체 지향의 필요성
Q. 객체 지향 프로그래밍 왜 해야할까?
A. 유지보수성 + 재사용성 👍
✨ 객체 지향 4대 원칙
1. 캡슐화(Encapsulation)
정보 은닉
public
: 모두가 접근 가능
protected
: 상속 / 같은 패키지 내 클래스에서 접근 가능
default
: 같은 패키지 내 클래스에서 접근 가능
private
: 본인만 접근 가능
2. 상속(Inheritance)
재사용 => extends
- 하위 클래스 - 상위 클래스
- 하위클래스
is a kind of
상위클래스
- 하위 클래스는 상위클래스 특성을 재사용하고, 확장한다.
- 상위 클래스의 물려줄 특성이 많을수록 좋다 (LSP)
- 상위 클래스가 너무 빈약하면, 불필요한 형변환이 자주 일어난다.
- 인터페이스
- 다중 상속 대신 도입
- 어떤 객체가 해야할 일을 정의하는 추상 자료형
- 구현 클래스
is able to
인터페이스 (ex. Runnable
)
- 인터 페이스는 구현을 강제할 메서드가 적을수록 좋다 (ISP)
3. 추상화(Abstraction)
모델링 => class
- 클래스 VS 객체
- 클래스 : 분류에 대한 개념 -> 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념 (ex.사람)
- 객체 : 실체 -> 유일무이한 사물 (ex. 김연아)
- 추상화
: 구체적인 것을 분해해서 관심 영역 (애플리케이션 경계) 에 있는 특성만 가지고 재조합하는 것 (= 모델링)
4. 다형성 Polymorphism
사용 편의 => 오버라이딩, 오버로딩
- 오버라이딩
- 같은 메서드 이름 / 같은 인자 목록 / 상위 클래스의 메서드 재정의
- 상위 클래스 타입의 객체 참조 변수에서 자동으로 하위 클래스가 오버라이딩한 메소드를 호출해 줌
- 오버로딩
- 같은 메서드 이름 / 다른 인자 목록 / 다수의 메서드 중복 정의
번외
Q. 실무에서는 클래스와 인터페이스 중에 어떤 걸 사용하는 게 좋을까?
✏️ 인터페이스
✏️ 클래스의 상속은 하위클래스가 100개라면, 상위클래스를 바꾸기 쉽지 않기 때문이다.