추상메소드 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
1번째 줄: 1번째 줄:
'''추상메소드'''<!--추상 메소드, 추상메서드, 추상 메서드-->(abstract method)란 구현없이 선언만 되어 있는 [[메소드]]를 말한다. 추상 메소드는 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미한다. 메서드는 선언부와 구현부로 구성되어 있다. 추상 메서드란 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상 메서드이다. 실제 내용은 상속받는 클래스에서 구현하도록 비워둔 것이며, 추상메서드 역시 키워드 'abstract'를 앞에 붙여주고, 구현부가 위치할 {}대신 마침을 의미하는 ;을 작성한다. 조상으로부터 상속받은 추상 메서드 중 하나라도 구현하지 않는다면, 추상 클래스로 지정해 주어야 한다.
+
'''추상메소드'''<!--추상 메소드, 추상메서드, 추상 메서드-->(abstract method)란 구현없이 선언만 되어 있는 [[메소드]]를 말한다.
 
 
==목적==
 
추상클래스는 실체클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해놓은 추상적인 클래스로 실체 클래스의 멤버인 필드와 메소드를 통일화하기 위해 사용한다. 모든 실체들의 메소드 실행 내용이 동일하다면 추상클래스에 메소드를 작성하면 되지만 실행 내용이 실체클래스마다 달라야 할 경우 추상메소드를 사용하면 된다.
 
 
 
==생성 및 구현==
 
===생성===
 
추상메소드의 선언은 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
 
  
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[메소드]]
 
* [[메소드]]
* [[추상클래스]]
 
* [[인터페이스]]
 
  
{{프로그래밍|검토 필요}}
+
{{프로그래밍|토막글}}

위키원에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 위키원:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)