추상화란?
상속이 자손 클래스를 만드는데 조상 클래스를 사용하는 것이라면, 이와 반대로 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상 클래스를 만드는 것이라고 할 수 있다.
추상화를 구체화의 반대되는 의미로 이해하면 된다. 즉 상소계층도를 따라 내려 갈수록 세분화되며, 올라갈수록 공통요소만 남게 된다.
추상화 : 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업
구체화 : 상속을 통해 클래스를 구현, 확장하는 작업
추상 클래스
추상 클래스라는 것은 단지 추상 메서드를 포함하고있다는 의미이다. 따라서 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.
추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서 중요한 의미를 갖는다. 새로운 클래스를 작성할 때 아무것도 없는 상태에서 시작하는 것보다는 완전하지는 못하더라도 어느 정도 틀을 갖춘 상태에서 시작하는 것이 나을것이다.
추상 클래스는 추상메서드를 포함하고 있다는 것을 제외하고는 일반클래스와 전혀 다르지 않다. 추상클래스에도 생성자가 있으며, 멤버변수와 메서드도 가질 수 있다.
추상 메서드
메서드는 선언부와 구현부로 구성되어있는데, 추상메서드는 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이다. 즉, 설계만 해놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드인 것이다.
그 이유는 메서드의 내용이 상속받은 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려 주고, 실제 내요은 상속받는 클래스에서 구현하도록 비워두는 것이다.
/* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다. */
abstract 리턴타입 메서드이름( );
추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 추상클래스의 추상메서드를 모두 구현해주어야 한다. 만약 추상메서드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상클래스로 지정해 주어야 한다.
어차피 자손 클래스에서 오버라이딩하여 자신의 클래스에 맞게 구현하면 추상메서드로 선언하는 것과 내용없는 빈 몸통만 만들어 놓는 것이나 별 차이 없어보이지만,
그래도 굳이 abstract를 붙여서 추상메서드로 선언하는 이유는 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해서이다.
'Java > 객체지향프로그래밍' 카테고리의 다른 글
[Java] 인터페이스(interfce) - 코딩밥상 (0) | 2023.02.11 |
---|---|
[Java] 다형성(polymorphism) - 코딩밥상 (0) | 2023.02.09 |
[Java] 제어자(modifier) - 코딩밥상 (0) | 2023.02.09 |
[Java] 오버라이딩(overriding) - 코딩밥상 (0) | 2023.02.08 |
[Java] 상속(Inheritance) - 코딩밥상 (0) | 2023.02.08 |