2017년 6월 7일 수요일

추상클래스, 추상메소드 ( Abstract )


추상 - 낱낱의 구체적 표상이나 개념에서 공통된 성질을 뽑아 이를 일반적인 개념으로 파악하는 정신작용

상속이 자손 클래스를 만드는데 조상 클래스를 사용하는 것이라면, 이와 반대로 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상클래스를 만드는 것이라 할 수 있음.

 추상화를 구체화와 반대되는 의미로 이해하면 보다 쉽게 이해할 수 있을 것임
상속계층도를 따라 내려 갈수록 세분화 되며, 올라갈수록 공통요소만 남게된다.

추상화 - 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업
구체화 - 상속을 통해 클래스를 구현, 확장하는 작업


추상메소드 깃허브 링크

43 lines (41 sloc)  1.89 KB
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){
// 내용 생략
}
}

16 lines (13 sloc)  556 Bytes
package common.fundament.AbstractStudy;

abstract class AbstractStudy { //추상 클래스( 추상메소드를 포함한 클래스)
/*
* abstract는 추상적인, 미완성의 의미를 가지고 있음
* 메소드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상메서드를 선언하는데 사용
* abstract 클래스 : 클래스내에 추상메소드가 선언되어 있음을 의미한다.
* 메소드 : 선언부만 작성하고 구현부는 작성하지 않은 추상 메소드임을 알린다.
* */
abstract void move(); // 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다.
}

댓글 없음:

댓글 쓰기

JavaScript_함수의 역할

◎ 자바스크립트 함수의 역할 ■ 자바스크립트 함수와 메서드는 전혀 다른 개념이다. - 자바스크립트 함수는 메서드 역할을 할 수 있지만, 객체지향 프로그래밍의 메서드는 자바스크립트의 함수 역할을 할 수 없다. - 메서드와는 다르게 ...