티스토리 뷰

JAVA

추상클래스(Abstract Class)

Y.일월 2019. 9. 19. 12:30

추상클래스(Abstract Class)


클래스는 객체를 직접 생성할 수 있는 실체 클래스와 추상 클래스가 존재한다.

우리가 만들어왔던 클래스는 전부 실체 클래스이다.

그럼 추상클래스는 무엇일까?


실체 클래스는 실체 클래스들의 공통 특성을 추출해서 선언한 클래스이다.

추상클래스와 실체 클래스는 상속의 관계를 가지고 있으며( 추상클래스 - 부모 / 실체 클래스 - 자식 ), 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 필드와 메소드를 가질 수 있다.


추상 클래스는 실체클래스의 설계도와 같은 역할을 한다.

그러므로 추상 클래스는 객체를 직접 생성하지는 못한다.

즉, new 연산자를 사용하여 인스턴스를 생성시키지 못한다는 것이다.


추상 클래스는 다음과 같은 방법으로 선언한다.


public abstract class 클래스 {


//필드

//생성자

//메소드


}



대부분의 실체들이 가지고 있는 메소드의 실행 내용이 동일하다면, 추상 클래스에 메소드를 작성하는 것이 좋다.

추상 메소드는 추상 클래스에서만 사용 가능하며, 메소드의 선언부만 있고, 메소드의 실행 내용을 작성하는 중괄호가 없는 메소드를 말한다.


추상 메소드를  선언하는 방법은 다음과 같다.


접근제한자 abstract 리턴타입 메소드명 (매개변수);




다음은 추상 메소드의 예시 코드이다.


Electronics.java

public abstract class Electronics {

public String kind;

public Electronics() {

// TODO Auto-generated constructor stub

this.kind = "전기기기";

}

public void PowerOn() {

System.out.println(kind+"를 켰습니다.");

}

public abstract void Doing();

}


Computer.java

public class Computer extends Electronics {


public Computer(){

this.kind = "컴퓨터";

}

@Override

public void Doing() {

// TODO Auto-generated method stub

System.out.println("유튜브를 봅니다.");

}

}


SmartTv.java

public class SmartTV extends Electronics {


SmartTV(){

this.kind = "TV";

}

@Override

public void Doing() {

// TODO Auto-generated method stub

System.out.println("예능 프로그램을 봅니다.");

}

}


ElectronicsEx.java

public class ElectronicsEx {


public static void main(String[] args) {

// TODO Auto-generated method stub

Computer com = new Computer();

SmartTV tv = new SmartTV();

Electronics ElectCom = new Computer(); //자동 형변환

Electronics ElectTv = new SmartTV(); //자동 형변환

com.Doing();

tv.Doing();

System.out.println();


ElectCom.Doing(); //재정의된 메소드 호출

ElectTv.Doing(); //재정의된 메소드 호출

}

}





마지막으로 추상 클래스를 사용하는 이유를 설명하고 포스팅을 마무리 하겠다.

추상 클래스를 사용하는 이유는 무엇일까?


첫번째로, 실체 클래스의 공통 필드와 메소드의 이름을 통일할 목적으로 쓰일 수 있다.


프로그래머가 Computer 클래스에서는 전원을 켜는 메소드 이름을 PowerOn()이라고 쓰고, SmartTv클래스에서는 메소드 이름을 turnOn()이라고 작성했다고 하자.

클래스가 굉장히 많아지고, 동일한 기능을 하는 메소드마다 이름을 다르게 지정했다면, 프로그래머는 메소드를 호출할때마다 메소드이름이 헷갈려서 매우 혼란스러울 것이다.

그러므로 우리는 동일한 기능을 하는 필드와 메소드의 이름을 통일해야하고, 그러한 목적으로 추상 클래스를 사용한다.


두번째로, 실체 클래스를 작성할 때 시간을 절약할 수 있다.


추상 클래스에는 만들어야하는 메소드와 필드의 골격이 짜여있으므로, 실체 클래스를 작성할 때 시간을 절약할 수 있다.

그러므로 추상 클래스를 사용한다.


'JAVA' 카테고리의 다른 글

Mail Client  (0) 2019.09.23
인터페이스(Interface)  (0) 2019.09.20
타입변환과 다형성  (0) 2019.09.18
final 클래스와 메소드  (0) 2019.09.17
상속(Inheritance)  (0) 2019.09.17
공지사항
최근에 올라온 글