추상 - 낱낱의 구체적 표상이나 개념에서 공통된 성질을 뽑아 이를 일반적인 개념으로 파악하는 정신작용
상속이 자손 클래스를 만드는데 조상 클래스를 사용하는 것이라면, 이와 반대로 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상클래스를 만드는 것이라 할 수 있음.
추상화를 구체화와 반대되는 의미로 이해하면 보다 쉽게 이해할 수 있을 것임
상속계층도를 따라 내려 갈수록 세분화 되며, 올라갈수록 공통요소만 남게된다.
추상화 - 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업
구체화 - 상속을 통해 클래스를 구현, 확장하는 작업
추상메소드 깃허브 링크
| package common.fundament.AbstractStudy; |
| /* |
| * ■ 추상클래스 |
| * 추상클래스는 미완성 설계도 |
| * 미완성 메소드(추상 메소드) 를 포함한다는 의미 |
| * 추상클래스로는 인스턴스의 생성이 불가능 하다. |
| * 추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 |
| * 바탕이 되는 조상클래스로서 중요한 의미를 갖는다. ( 어느정도 틀을 갖춘다는 의미 ) |
| * |
| * 추상메소드를 포함하고 있지 않은 클래스에도 키워드 'abstract'를 붙여서 추상클래스로 지정가능 |
| * 추상메소드가 없는 완성된 클래스라도 추상클래스로 지정되면 인스턴스를 생성 불가 |
| * |
| * ■ 추상메소드 |
| * 선언부만 작성해두고 구현부는 작성하지 않은채로 남겨둔 것이 추상메소드 |
| * 자손클래스에서 조상의 추상메소드를 상황에 맞게 적절히 구현해주어야 한다. |
| * 추상메소드 역시 'abstract'를 붙여주고, 추상메소드는 구현부가 없기 때문에 {} 대신 |
| * ';' 붙인다. |
| * |
| * ※ 추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 |
| * 추상메소드를 모두 구현해주어야 한다. 만일 조상으로부터 상속받은 추상메소드 중 하나라도 구현하지 |
| * 않는다면, 자손클래스 역시 추상클래스로 지정해야 한다. |
| * |
| * |
| * */ |
| abstract class Player{ // 추상 클래스 |
| abstract void play(int pos); // 추상 메소드 |
| abstract void stop(); |
| } |
| |
| class AudioPlayer extends Player{ |
| void play(int pos){ // 추상 메소드를 구현 |
| // 구현내용 생략 |
| } |
| void stop(){ // 추상메소드 구현 |
| // 구현내용 생략 |
| } |
| } |
| |
| abstract class AbstractPlayer extends Player{ // 추상메소드 구현 |
| void play(int pos){ |
| // 내용 생략 |
| } |
| } |
| package common.fundament.AbstractStudy; |
| |
|
|
| abstract class AbstractStudy { //추상 클래스( 추상메소드를 포함한 클래스) |
| /* |
| * abstract는 추상적인, 미완성의 의미를 가지고 있음 |
| * 메소드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상메서드를 선언하는데 사용 |
| * abstract 클래스 : 클래스내에 추상메소드가 선언되어 있음을 의미한다. |
| * 메소드 : 선언부만 작성하고 구현부는 작성하지 않은 추상 메소드임을 알린다. |
| * */ |
| abstract void move(); // 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다. |
| |
| } |
댓글 없음:
댓글 쓰기