자바의정석/Chapter 7

ch7-29,30 여러 종류의 객체를 배열로 다루기

suniverse 2022. 12. 17. 14:38

- 조상타입의 배열에 자손들의 객체를 담을 수 있다 

 

- 다형성의 장점: 1. 다형적 매개변수, 2. 하나의 배열에 여러 종류의 객체 저장 가능 

 

그림을 그릴 수 있어야 한다

-->왼쪽을 묶어서 배열로 만든 게 오른쪽이다. 둘 이 같은 의미임. 

 

- Vector 가변 배열 기능하는 클래스. Object배열을 멤버로 가지고 있다. 여기에 모든 종류의 객체 저장 가능함 

 

---------------------------------------

ch7-31,32

추상 클래스, 추상 메서드 

 

추상 클래스(abstract class) 

- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스 

- 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가 

- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능

 

---------------------

추상 메서드(abstract method) 

- 미완성 메서드. 구현부(몸통 {})가 없는 메서드 

그럼 추상메서드는 언제 쓰는가? --> 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 

 

 

상속을 통해 자손을 완성한 후, 자손 객체 생성을 해야 호출 가능 

추상클래스와 추상메서드 이기 때문에 앞에 abstract를 안 붙여주면 에러가 난다

 

몸통이 없으니 에러가 난다

 

추상 클래스는 미완성이기 때문에 제품을 만들 수 없다. 그래서 에러가 난다

 

실행해도 결과가 안 나온다. 코드가 비어있기 때문이다.

 

코드를 넣어주면 실행이 된다

 

조상으로 바꿔도 결과값은 똑같다. 이게 바로 다형성의 장점이다.

--> 여기서 Player는 리모콘일 뿐이다. 실제로 가리키는 객체는 AudioPlayer다. 

리모콘이 아무리 추상클래스인 Player라고 해도 실제로 연결되어 있는 건  구현되어 있는 AudioPlayer의 메서드이다. 

 

------------------------------------

 

<ch7-33,34 추상 클래스의 작성 1>

- 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 

기존 클래스의 공통 부분을 뽑아서 추상클래스를 만든다 

--> 해병, 탱크, 비행기는 선언부는 일치하지만 몸통{}은 다를 것이다. 그러니 일치하는 부분만 따로 뽑아내는 것. 

공통 부분을 추출해 Unit클래스로 정의 

 

아래 4줄 코드를 1줄로 줄인 것이다. 배열의 생성과 초기화를 한번에

 

 

참조변수가 나뉘어져 있는걸 합친게 객체 배열이다 

객체배열 --> 참조변수 묶은 것 

리모콘 타입이 Object. Object에는 move가 없기 때문에 에러 발생

-->리모콘에 move가 없다는 말이다 

추상클래스를 사용해서라도 move를 Unit에 넣어준 것 . 리모콘에서 사용할 수 있도록 

------------------------------------------

추상클래스의 작성2

 

- 추상화 <--> 구체화 

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

 

 

 

구체적으로 적지않고 애매하게 써놓으면 변경에 유리하다. 구체적으로 적어두면 캘린더 사용한 부분을 전부 다 고쳐야 하다. 

하지만 애매하게 적어두면 이 메서드 하나만 바꾸면 된다. 메서드가 호출된 곳을 바꿀 필요가 없다 

추상화는 다형성과 관계가 깊다.