추상 클래스와 인터페이스
너네 둘은 왜 나눠 놓는 거냐? 추상 클래스에 메소드 밖에 없으면 인터페이스 역할을 하는 거 아닌가?
부터 시작 된 고뇌... 어제 나를 잠 못이루게했다. (오늘도 그럴듯)
추상 클래스에 메소드 밖에 없으면 인터페이스 역할을 하는 건데 인터페이스를 왜 써야 돼?
존재 이유가 뭐야? 도대체 뭔데!!
추상 클래스
추상 클래스는 말 그대로 어떤 객체의 행위를 추상화 해놓은 것이다.
그 객체가 가지고 있는 추상화 된 행위를 자식 개체는 상속을 받아서 행위를 확실하게 정의하여 사용할 수 있다.
자바에서는 오버라이딩을 이용해서 재구현 할 수 있다.
추상 클래스는 상속을 해야 진가가 발휘되는데, 상속을 한다는 점에 집중해서 밑의 그림을 보자
사람으로 예를 들자면 민수와 철수는 사람이다. 하지만 말투는 다르다.
둘다 말을 할 수 있지만 말투가 다르다. 내가 다른 객체(사람) 영수를 만든다고 하면
영수도 똑같이 말을 하지만(일반 메소드) 말투(추상 메소드)는 다를 수 있다. 이 말투를 추상화 하는 거다.
추상 클래스는 인스턴스화를 시킬 수 없다. 왜냐하면 자바가 모호한 걸 싫어하기 때문이다. (다른 언어는 뭔지 모르겠다)
모호한 사람을 만들어 낼 수는 없다. 이게 추상 클래스다.
인터페이스
인터페이스는 추상 메서드의 집합이라는 말을 많이 들었을 것이다.
영어로 말하자면 추상 클래스는 (kind of~~) 인터페이스는 (able to~~) 라고 생각하면 된다.
위의 사진이 내가 생각하는 인터페이스다
대충 소리를 내는 게(행위) 뭘까? 를 생각하면 그게 인터페이스가 되는 거다
거기서 조금 더 행위를 추가 시켜가며 인터페이스를 상속 상속 시키다보면 어느새 객체까지 와있는 것이다.
그러면 추상 클래스에 메소드만 넣어두면 그게 인터페이스 아니야?
맞다! 추상 클래스에 메소드만 넣어두면 인터페이스와 동일한 역할을 하는 것이다.
근데 우리가 객체지향을 쓰는 이유를 생각해야된다.
코드의 유지보수성을 높히고.. 이 부분이다
추상 클래스는 나중에 확장(상속)할 수 있는 장점을 가진다. 필요에 따라 일반 메서드를 넣어서 공통된 메서드를 구현을 할 수 있다.
인터페이스는 여러 인터페이스를 클래스에 구현 할 수 있다. 다중 구현이라고 생각하면 될거 같다. 그러나 일반 메서드를 넣지 못한다.
어? 그러면 인터페이스는 쓰레기 아니야? 안써도 되잖아
천만에 말씀 만만에 콩떡이다
인터페이스는 클래스간의 의존성을 낮춰줄 수 있다는 점이 있다.
나는 이렇게 이해했는데 솔직히 이 부분은 맞는 생각이나 설명인지는 모르겠다.
이 부분은 다음주 월요일에 물어봐야지...
오늘은 여기서 끝
'TIL' 카테고리의 다른 글
TIL 2023-10-24 Github Pull Request 가이드, 팀 협업!! (0) | 2023.10.24 |
---|---|
TIL 2023-10-23 Class별 역할 충실히하기 / 키오스크 프로젝트 완료 (0) | 2023.10.23 |
TIL 2023-10-19 키오스크 프로젝트 장바구니 주문 구현 메소드 (0) | 2023.10.19 |
TIL 2023-10-18 프로그래머스 조건 문자열, 키오스크 개인 프로젝트 설계 및 구현 시작 (0) | 2023.10.18 |
TIL 2023-10-17 매개변수, 인자, 가변길이란 무엇인가 (0) | 2023.10.17 |