-
추상 메서드 (abstract method)백엔드/자바 2020. 8. 6. 15:39
추상이란?
자바에서 추상이란 구체화와 반대되는 구체적이지 않은 대략적인 미완성을 의미한다.
추상은 abstract라는 제어자를 붙이며 선언할 수 있다.
그리고 추상의 능력을 붙여줄 수 있는 것은 클래스와 메서드이다.
추상 메서드란?
기존의 함수는 아래와 같은 형식을 가진다.
◎ 선언부: '접근제어자 + 반환값 + 메서드명 + 파라미터'
◎ 구현부: 대괄호 ( { } ) 안에 메서드의 실행 코드를 입력
class abstract_test{ // 일반적인 클래스 선언 public int test() { // 어디서나 접근 가능한 정수값을 반환해주는 test 메서드 선언 return 5; // 메서드 실행 결과로 정수 5를 반환 } }
반면 추상 클래스는 다음과 같은 특징을 가진다.
◎ 선언부: '접근제어자 + 반환값 + 메서드명 + 파라미터'
◎ 구현부: 없음
abstract class abstract_test{ // 추상 메서드를 갖게되므로 abstract를 붙여서 추상 클래스 선언 public int test() { // 일반 메서드 'test' 선언 return 5; } abstract public int test2(); // 일반적인 클래스 선언부같지만 앞에 abstract는 붙여서 추상 메서드로서 선언함 // 선언부는 abstract를 제외하고 일반 클래스와 같이 접근제어자+반환값+메서드명으로 구성 // 반면 구현부는 아무 내용도 선언되지 않고 심지어 대괄호 ( {} ) 도 없다. }
둘을 비교하면 다음과 같다.
일반 메서드
추상 메서드
형태
public int test(int a) {return a;}
abstract public int test2(int a);
abstract
X
O
접근 제어자
O
O
반환값
O
O
메서드명
O
O
파라미터
O
O
구현부
O
X
정리하면 추상 메서드는 형태적으로는 astract 제어자를 달고 구현부가 없는 메서드를 이야기한다.
추상 메서드가 필요한 이유와 사용법
추상 메서드의 형태는 알아보았는데, 그럼 왜 미완성인 메서드를 사용해야 하는걸까?
코드의 표준화와 중복을 방지하고 작업 효율화를 높여줄 수 있기 때문이다.
추상 메서드는 구현부가 없는 미완성인 관계로 그 자체로 단독으로 써줄 수 없다.
추상 메서드를 사용하기 위해선 다음과 같이 해야한다.
◎ 추상 메서드가 있는 추상 클래스를 일반클래스에서 상속한다.
◎ 추상 메서드를 일반 클래스 내에서 오버라이딩으로 구현한다.
이 과정에서 추상 메서드는 구현부가 없으므로 상속받은 자손 클래스마다 구현부를 다르게 할 수 있다.
즉 추상 메서드는 코드를 짤 때 메서드에 대한 최소한의 가이드라인 역할을 하게 되는 것이다.
아래 예시를 보면 더욱 이해가 쉽다.
abstract class Animal{ // 추상 클래스 'Animal' 구현 abstract void bark(); // 추상 메서드 'bark' 구현 } class Dog extends Animal{ // 'Animal'을 상속받은 'Dog' 클래스 구현 void bark() { // 추상 메서드 'bark'를 오버라이딩하여 일반 메서드로 구현 System.out.println("왕왕"); // 실행시 "왕왕" } } class Cat extends Animal{ // 'Animal'을 상속받은 'Cat' 클래스 구현 void bark() { // 추상 메서드 'bark'를 오버라이딩하여 일반 메서드로 구현 System.out.println("야옹야옹"); // 실행시 "야옹야옹" } } class Pig extends Animal{ // 'Animal'을 상속받은 'Pig' 클래스 구현 void bark() { // 추상 메서드 'bark'를 오버라이딩하여 일반 메서드로 구현 System.out.println("꿀꿀"); // 실행시 "꿀꿀" } }
'Animal'이라는 추상 클래스를 선언하고 그 안에 'bark'라는 추상 메서드를 선언했다.
그리고 'Dog', 'Cat', 'Pig' 각각의 클래스가 'Animal'을 상속 받아 'bark'를 각자 방식대로 구현했다.
이런 의문이 들 수 있다.
"일반 클래스의 오버라이딩으로도 가능한데, 굳이 추상으로 해야하는지?"
실제 프로그램을 짤 때는 특히 여러 명의 사람이 코드를 짜게 된다.
그런데 사람마다 쓰는 형식이 제각각이고 내용도 제각각일 수 있다.
그런 상황에서 추상 메서드는 최소한의 가이드 라인을 주고 구현을 자유롭게 만든다.
즉 추상 메서드를 쓰면 작업에 통일성을 부여하는 한편 자유롭게 프로그램을 짤 수 있게 도와준다.
'백엔드 > 자바' 카테고리의 다른 글
인터페이스 (interface) (0) 2020.08.07 추상 클래스 (abstract class) (0) 2020.08.06 상속과 다형성(polymorphism) (0) 2020.08.05 초기화 (0) 2020.08.05 생성자(Constructor) (0) 2020.08.05