"추상메소드"의 두 판 사이의 차이
1번째 줄: | 1번째 줄: | ||
− | '''추상메소드'''<!--추상 메소드, 추상메서드, 추상 메서드-->(abstract method)란 구현없이 선언만 되어 있는 [[메소드]]를 말한다.추상 메소드는 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미한다. 메서드는 선언부와 구현부로 구성되어 있다. 추상 메서드란 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상 메서드이다. 실제 내용은 상속받는 클래스에서 구현하도록 비워둔 | + | '''추상메소드'''<!--추상 메소드, 추상메서드, 추상 메서드-->(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 추상메소드 오버라이딩"); | ||
+ | { | ||
+ | } | ||
+ | |||
+ | ===추상메소드 사용<ref>나비와꽃기린, 〈[https://mkil.tistory.com/112 추상메소드/인터페이스]〉, 《개인블로그》, 2016-06-22</ref>=== | ||
+ | ====[[추상클래스]]==== | ||
+ | 추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다. | ||
+ | 만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다. | ||
+ | #추상클래스 | ||
+ | public abstract class ClassA { | ||
+ | int a; | ||
+ | |||
+ | public void methodA { | ||
+ | System.out.println("메소드입니다."); | ||
+ | } | ||
+ | |||
+ | public void methodB(); //추상메소드 | ||
+ | } | ||
+ | |||
+ | ====[[인터페이스]]==== | ||
+ | 모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다. | ||
+ | 인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, [[다중상속]]을 지원한다. | ||
+ | #인터페이스 | ||
+ | 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일 (금) 15:16 판
추상메소드(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 추상메소드 오버라이딩"); { }
추상메소드 사용[1]
추상클래스
추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다. 만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다.
#추상클래스 public abstract class ClassA { int a; public void methodA { System.out.println("메소드입니다."); } public void methodB(); //추상메소드 }
인터페이스
모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다. 인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, 다중상속을 지원한다.
#인터페이스 public interface InterfaceA { int a=5; public void methodA(); public void methodB(); }
차이점
각주
- ↑ 나비와꽃기린, 〈추상메소드/인터페이스〉, 《개인블로그》, 2016-06-22
참고자료
- 신용권, 〈이것이 자바다〉, 《한빛출판네트워크》, 2015-01-06
- 나비와꽃기린, 〈추상메소드/인터페이스〉, 《개인블로그》, 2016-06-22
같이 보기