프로그래밍 언어/자바의 정석 기초편

자바의 정석 기초편 ch7-33,34 추상클래스의작성2

life grow 2022. 10. 24. 15:18

50인치 TV 모델이 A, B, C가 있다고 가정하자

설계도가 비슷하다.

다 똑같은데 노란색 부분만 다르다.

그럼 얘네들을 설계도를 이렇게 관리하면 다 고쳐야 한다.

 

미완성 설계도를 바탕으로 설계도를 완성하는 것이다.

자손들은 완성된 설계도

이렇게 부모, 자손 관계를 해놓으면 중복이 제거되고 

자손들은 노란색 부분만 추가하면 설계도가 완성된다. 

처음보다 설계도 만들기가 쉬워졌다.

 

새로운 모델을 만들때도  

 

미완성 설계도(추상클래스의 장점)

1. 설계도를 쉽게 작성할 수 있다.

미완성 설계도를 바탕으로 만들면 되니까

2. 관리가 용이하다.

하나의 요소를 하트로 바꾼다면 나머지도 다 바뀐다.

만약 추상클래스가 아니라면 하나씩 전부 바꿔야 한다.

추상클래스를 상속받으면서 클래스가 점차 구체적이게 된다.

추상클래스를 하나만 만드는게 아니라 추상클래스가 완성돼 가는 단계별로 

중간단계마다 만들어 놓는다.

추상클래스를 의미 있는 단계별로 나눠서 작성해 놓으면 내가 중간단계 걸 선택해서 구현할 수 있다.

1,2,3,4가 있다면 4에서 3번째 네모를 바꾸고 싶다면

2번째에서 마름모와 연두색 추가해주면 된다.

 

추상화 <--> 구체화

구체화: 명확, 구체적

추상화: 불명확, 애매

 

추상화된 코드는 구체화된 코드보다 유연하다. 변경에 유리

(말 바꾸기 쉽다는 말)

 

첫 번째 코드(구체적)

내가 어떤 클래스를 쓸지 정해져 있다.

참조변수도 일치한다.

내가 어떤 클래스의 객체를 만들어서

그것을 그 클래스 타입의 참조변수로 다룬다.

뭘 쓸지 명확, 분명하다.

 

두 번째 코드(추상적)

Calender 자손객체를 반환해서 그걸 참조변수 cal로 받는다.

추상클래스 타입의 참조변수로 자손 객체 다루는 것 된다.

getinstance()가 뭘 반환할지 모른다. 

불분명하다.

 

getinstance()가 createCalendar를 생성해서 반환한다.

createCalendar가 객체생성해서 반환하는데 

case는 caltype에 따라서 다른 객체를 반환한다.

 

구체적으로 쓴다면 나라마다 코드를 변경해줘야 한다.

근데 코드를 추상적으로 쓰면 더 유연하다.

그 시스템에서 사용하는 os에 설정을 보고서

이 셋 중에 어떤 Calnedar를 쓸지 결정한다.

그것을 cal에 돌려준다.

 

다형성에 의해서 불교력, 일본력, 서양력을 쓸 수 있다.

아직 내용이 이해 안 갈 수 있다.

대신에 이 개념을 듣고 진도를 계속 나가다 보면 

실제로 추상클래스가 쓰인 예들을 계속 보게 된다.

그러면서 객체지향 개념을 진짜로 이해하게 된다.

이해가 안 가면 어떻게 한다? 실습을 많이 한다!

진도 나가며 꾸준히 계속 듣고 반복한다.