ch7-34 추상 클래스의 작성
여러개의 클래스가 있다고 할 때 한 부분만 다르면 객체지향 개념에서는 공통된 부분만 뽑아 조상으로 만든다. 조상은 미완성 이므로 추상 클래스이고, 자손이 조상을 상속받아 다른 부분만 넣어 완성한다. 중복을 제거할 수 있다.
새로운 클래스가 만들어지면 조상 상속받아서 새로운 부분만 추가하면 된다. 객체 생성이 더 편해진다.
공통된 부분이 바뀌면 위는 3번 바꿔야 하지만, 아래는 공통 부분 1번만 바꾸면 되어 유지보수가 편하다. 코드의 관리, 변경이 용이하다.
추상 클래스를 한꺼번에 만들지 않고 위와 같이 단계적으로 만들면 장점이 있다.
공통된 부분을 바꾸고 싶을 때, 3번 째 자손에서 상속받아 구현하지 않고 2번 째 자손에서 상속받아 구현하면 변경에 훨씬 용이하다.
추상화는 불명확하고 반대인 구체화는 명확하다. 구체적이고 명확한 것이 좋은게 아닐까? 하는 의문이 들 수 있다. 프로그래밍에서 추상회된 코드는 구체화된 코드보다 유연하다. 변경에 유리하다.
GregorianCalendar 클래스는 Calendar 클래스를 상속받는 자손 클래스이다. 참조 변수의 타입과 객체의 타입이 일치하면 구체적이다. 하지만 Calendar 클래스는 추상 클래스이기 때문에 객체생성이 불가능하고, Calendar.getInstance() 메소드를 사용해야 한다. 다형성으로 Calendar 조상 타입의 참조 변수에 Calendar의 자손 객체 getInstance()를 반환할 수 있는데 이 인스턴스가 무엇을 반환할지 불분명하다.
getInstance()가 추상적이기 때문에 위와 같이 createCalendar 메서드를 만들어서 caltype에 따라 다른 객체를 생성해서 반환할 수 있다. 구체적으로 적으면 cal 사용한 곳을 전부 바꿔야 한다. 추상적으로 적으면 getInstance()에 들어있는 메서드인 createCalendar만 바꾸면 되므로 변경에 용이하다.
'자바 > 자바의 정석 Ch.7 객체지향 프로그래밍 II' 카테고리의 다른 글
ch7-38 인터페이스와 다형성 (0) | 2023.05.04 |
---|---|
ch7-35~37 인터페이스의 선언, 상속, 구현 (0) | 2023.04.24 |
ch7-33,34 추상클래스의작성1 (0) | 2023.04.22 |
ch7-31,32 추상 클래스, 추상 메서드 (0) | 2023.04.22 |
ch7-29,30 여러 종류의 객체를 배열로 다루기 (0) | 2023.04.21 |