검수요청.png검수요청.png

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

위키원
이동: 둘러보기, 검색
잔글 (같이 보기)
 
(다른 사용자 한 명의 중간 판 4개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''추상메소드'''<!--추상 메소드, 추상메서드, 추상 메서드-->(abstract method)란 구현없이 선언만 되어 있는 [[메소드]]를 말한다.추상 메소드는 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미한다. 메서드는 선언부와 구현부로 구성되어 있다. 추상 메서드란 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상 메서드이다. 실제 내용은 상속받는 클래스에서 구현하도록 비워둔 것이먀, 추상메서드 역시 키워드 'abstract'를 앞에 붙여주고, 구현부가 위치할 {}대신 마침을 의미하는 ; 작성한다. 조상으로부터 상속받은 추상 메서드 중 하나라도 구현하지 않는다면, 추상 클래스로 지정해 주어야 한다.
+
'''추상메소드'''<!--추상 메소드, 추상메서드, 추상 메서드-->(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 키워드를 선언해야 한다.
 +
만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다.<ref name="ClassInterface">나비와꽃기린, 〈[https://mkil.tistory.com/112 추상메소드/인터페이스]〉, 《개인블로그》, 2016-06-22</ref>
 +
#추상클래스
 +
public abstract class ClassA {
 +
int a;
 +
 +
public void methodA {
 +
            System.out.println("메소드입니다.");
 +
}
 +
 +
public void methodB();  //추상메소드
 +
}
 +
 
 +
====[[인터페이스]]====
 +
모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다.
 +
인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 없으며, [[다중상속]]을 지원한다.<ref name="ClassInterface"></ref>
 +
#인터페이스
 +
public interface InterfaceA {
 +
int a=5;
 +
 +
public void methodA();
 +
 +
public void methodB();
 +
}
 +
 
 +
====차이점====
 +
:{|class=wikitable width=700 style="background-color:#ffffee"
 +
|+ 추상클래스와 인터페이스 차이점
 +
!align=center style="background-color:#ffeecc"|추상클래스
 +
!align=center style="background-color:#ffeecc"|인터페이스
 +
|-
 +
|align=center|
 +
*일반 메소드 포함 가능
 +
*[[상수]], [[변수]] 포함 가능
 +
*단일 상속
 +
|align=center|
 +
*모든 메소드가 추상메소드
 +
*상수만 포함 가능
 +
*다중 상속 지원
 +
 
 +
|}
 +
{{각주}}
 +
 
 +
==참고자료==
 +
*신용권, 〈[https://www.hanbit.co.kr/store/books/look.php?p_code=B1460673937 이것이 자바다]〉, 《한빛출판네트워크》, 2015-01-06
 +
*나비와꽃기린, 〈[https://mkil.tistory.com/112 추상메소드/인터페이스]〉, 《개인블로그》, 2016-06-22
  
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[메소드]]
 
* [[메소드]]
 +
* [[추상클래스]]
 +
* [[인터페이스]]
  
{{프로그래밍|토막글}}
+
{{프로그래밍|검토 필요}}

2020년 8월 28일 (금) 20:13 기준 최신판

추상메소드(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검수요청.png 이 추상메소드 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.