의견.png

"추상메소드"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(차이점)
(추상메소드 사용나비와꽃기린, 〈추상메소드/인터페이스〉, 《개인블로그》, 2016-06-22)
50번째 줄: 50번째 줄:
 
  }
 
  }
  
===추상메소드 사용<ref>나비와꽃기린, 〈[https://mkil.tistory.com/112 추상메소드/인터페이스]〉, 《개인블로그》, 2016-06-22</ref>===
+
===추상메소드 사용===
 
====[[추상클래스]]====
 
====[[추상클래스]]====
 
추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다.  
 
추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다.  
만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다.
+
만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다.<ref name="ClassInterface">나비와꽃기린, 〈[https://mkil.tistory.com/112 추상메소드/인터페이스]〉, 《개인블로그》, 2016-06-22</ref>
 
  #추상클래스
 
  #추상클래스
 
  public abstract class ClassA {
 
  public abstract class ClassA {
67번째 줄: 67번째 줄:
 
====[[인터페이스]]====
 
====[[인터페이스]]====
 
모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다.
 
모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다.
인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, [[다중상속]]을 지원한다.
+
인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, [[다중상속]]을 지원한다.<ref name="ClassInterface"></ref>
 
  #인터페이스
 
  #인터페이스
 
  public interface InterfaceA {
 
  public interface InterfaceA {

2020년 8월 28일 (금) 17:04 판

추상메소드(abstract method)란 구현없이 선언만 되어 있는 메소드를 말한다. 추상 메소드는 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미한다. 메서드는 선언부와 구현부로 구성되어 있다. 추상 메서드란 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상 메서드이다. 실제 내용은 상속받는 클래스에서 구현하도록 비워둔 것이며, 추상메서드 역시 키워드 'abstract'를 앞에 붙여주고, 구현부가 위치할 {}대신 마침을 의미하는 ;을 작성한다. 조상으로부터 상속받은 추상 메서드 중 하나라도 구현하지 않는다면, 추상 클래스로 지정해 주어야 한다.

목적

추상클래스는 실체클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해놓은 추상적인 클래스로 실체 클래스의 멤버인 필드와 메소드를 통일화하기 위해 사용한다. 모든 실체들의 메소드 실행 내용이 동일하다면 추상클래스에 메소드를 작성하면 되지만 실행 내용이 실체클래스마다 달라야 할 경우 추상메소드를 사용하면 된다.

생성 및 구현

생성

추상메소드의 선언은 abstract 키워드를 사용하고 메소드 중괄호 {}가 없다.

[public | protected] abstract 리턴타입 메소드명(매개변수, ...);
public abstract classA {
    public abstract void methodA(int a);
}

구현

추상메소드 오버라이딩

추상클래스에 선언되어 있는 추상메소드를 구현하는 것을 추상메소드의 재정의 또는 오버라이딩이라고 한다.

#추상클래스
public abstract class ClassA { //추상클래스
	public String a;

	public void methodA() {
		System.out.println("일반 메소드입니다.");
	}

	public abtract void methodB(); //추상메소드
}
#추상메소드 오버라이딩_example1
public class ClassB entends ClassA {
	public ClassB() { //생성자
		this.a = "test";
	}

	@Override
	public void method() {
		System.out.pirintln("ClassB 추상메소드 오버라이딩");
	{
}
#추상메소드 오버라이딩_example2
public class ClassC entends ClassA {
	public ClassC() { //생성자
		this.a = "example";
	};

	@Override
	public void method() {
		System.out.pirintln("ClassC 추상메소드 오버라이딩");
	{
}

추상메소드 사용

추상클래스

추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다. 만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다.[1]

#추상클래스
public abstract class ClassA {
	int a;

	public void methodA {
           	System.out.println("메소드입니다.");
	}

	public void methodB();  //추상메소드
}

인터페이스

모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다. 인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, 다중상속을 지원한다.[1]

#인터페이스
public interface InterfaceA {
	int a=5;

	public void methodA();

	public void methodB();
}

차이점

추상클래스와 인터페이스 차이점
추상클래스 인터페이스
  • 일반 메소드 포함 가능
  • 상수, 변수 포함 가능
  • 단일 상속
  • 모든 메소드가 추상메소드
  • 상수만 포함 가능
  • 다중 상속 지원

각주

  1. 1.0 1.1 나비와꽃기린, 〈추상메소드/인터페이스〉, 《개인블로그》, 2016-06-22

참고자료

같이 보기


  의견.png 이 추상메소드 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.