The Debugging Chronicles : "코드의 미학"

Mentor JAVA - section12. 추상 클래스와 인터페이스 본문

JAVA/Mentor JAVA

Mentor JAVA - section12. 추상 클래스와 인터페이스

sweetseonah1004 2024. 7. 24. 14:07

추상 클래스와 추상 메서드

- 추상 메서드(abstract method)

· 자식 클래스에게 해당 메서드 오버라이딩을 강제하기 위해 사용하는 메서드를 말한다.

· abstract 키워드와 함께 표기하여 선언하고, 메서드 구현부인 중괄호{ } 대신 선언부에 세미콜론(;)을 사용한다.

· 추상 메서드를 선언하는 부모 클래스에서는 구현부는 비워두고 선언부만 작성하고, 자식 클래스에서 오버라이딩으로 구현한다.

· 추상 메서드는 반드시 추상 클래스 안에서 정의되어야 한다.

[접근 제한자] abstract 반환타입 메서드명(매개변수1, 매개변수2, ...);

- 추상 클래스(abstract class)

· 하나 이상의 추상 메서드를 포함하는 클래스를 말한다.

(단, 추상 클래스는 추상 메서드를 생성하지 않아도 생성이 가능하다.)

· abstract 키워드와 함께 표기하여 선언한다.

· 일반 클래스처럼 생성자, 멤버변수, 메서드를 가질 수 있다.

· 독립적으로 생성자를 호출해 객체를 생성할 수 없으므로, 부모 클래스의 객체를 생헝하지

· 자식 클래스의 생성자에서 super()을 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체를 생성한다.

· 자식 클래스들이 반드시 공통으로 가져야하는 메서드가 있을 때 사용한다.

[접근 제한자] abstract class 클래스명 { // 멤버 변수(필드) // 생성자 // 메서드 (추상 메서드 포함) }

- 추상 클래스와 추상 메서드의 용도

· 자식 클래스 간의 공통적인 필드와 메서드 이름을 통일할 수 있다.

· 반드시 구현해야 하는 메서드를 선언함으로써 공통 규격을 제공한다.

→ 통일감 있는 코드(자식 클래스들에게 기본 틀과 공통 기능을 제공) ⇒ 다형성을 구현, 개발 시간을 단축

인터페이스 구현

- 인터페이스(interface)

· 모든 메서드가 일종의 추상 메서드인 추상 클래스를 말한다.

· 추상 메서드와 상수로만 이루어져 있으며, 추상 클래스와 마찬가지고 스스로 객체를 생성할 수 없다.

· 구현 클래스들의 공통의 기본 틀을 제공하면서, 다른 클래스 코드들과의 사이에서 중간 매개 역할을 한다.

- 추상 클래스와 인터페이스의 공통점과 차이점

추상 클래스
인터페이스
공통점
정보 은닉, 모듈화, 추상화 등을 가지고 있다.
다형성을 구현할 틀을 제공한다.
추상 메서드 구현에 대한 강제성을 가지고 있다.
차이점
추상화와 모듈화를 중점으로 두고 있다.
자식 클래스의 생성자를 통해 객체 생성 가능
정보 은닉과 모듈화를 중점으로 두고 있다.
어떤 형태로도 객체 생성 불가능

- 인터페이스 선언

· 인터페이스는 어떤 형태로도 객체를 만들 수 없고, 객체를 사용하는 방법을 제공하는 객체의 매개체 역할만 한다.

· interface 키워드와 함께 사용된다.

· 필드와 생성자를 가지지 않고 오직 추상 메서드와 상수만을 포함한다.

· 인터페이스의 추상 메서드는 다른 클래스들과의 매개체 역할을 하므로 항상 public / abstract 으로 구현한다.

(default를 사용해도 자동으로 public 으로 인식)

· 인터페이스 의 모든 필드는 public / static / final이어야 한다.

※ 메소드와 필드에 공통적으로 적용되는 사항이므로 생략이 가능하고, 생략된 제한자는 컴파일 시 자동으로 추가된다.

[접근 제한자] interface 인터페이스명 { ... 접근 제한자 abstract 메서드명(매개변수1, 매개변수2, ...}; ... }

- 상수 선언

· 필드(=매개변수) 대신 상수(고정된 값)를 선언할 수 있다.

[접근 제한자] interface 인터페이스명 { public static final 자료형 상수명 =; ... }

인터페이스 사용

- 인터페이스가 가지고 있는 추상 메서드를 구현해 줄 구현 클래스를 작성해야 한다.

- implements 키워드를 사용하여 선언한다.

- 인터페이스의 모든 추상 메서드를 반드시 오버라이딩해서 구현해야 한다.

- 상수를 사용할 때는 '인터페이스명.상수명'으로 호출해야 한다.

[접근 제한자] class 클래스명 implements 인터페이스명 { // 필드 // 생성자 // 구현 메서드 (추상 메서드 오버라이딩) }

- 인터페이스 사용 시 장점

· 정보 은닉 : 실제 구현 클래스의 내용을 보지 않아도 개발 코드로 객체를 사용할 수 있다.

· 모듈화 : 구현 클래스들이 독립적으로 구현되고, 사용될 수 있다. 개발 코드에서 객체에 수정이 필요할 때 수정을 최소화 할 수 있다.

- 다중 인터페이스 구현

· 하나의 클래스의 여러 개의 인터페이스를 구현할 수 있다.

· implements 키워드 뒤에 인터페이스 이름을 콤마(,)를 사용해 여러 개 붙여 선언한다.

· 선언한 모든 인터페이스의 추상 메서드를 구현해야 한다.

[접근 제한자] class 클래스명 implements 인터페이스명1, 인터페이스명2, ... { // 필드 // 생성자 // 인터페이스1의 구현 메서드 (추상 메서드 오버라이딩) // 인터페이스2의 구현 메서드 (추상 메서드 오버라이딩) }

· 이렇게 2개 이상의 인터페이스로 구현된 구현 클래스는 각각의 인터페이스의 클래스 타입으로 변환이 가능하다.

단, 각 타입으로 변환시 그 인트페이스에 해당되는 메서드에만 접근이 가능하다.

인터페이스 상속

- 인터페이스끼리 상속 관계가 가능하며, 클래스의 상속과 마찬가지로 extends 키워드를 사용한다.

- 다중 상속이 가능하다.

- 하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 추상 메서드를 포함하여 상위 인터페이스의 추상 메서드까지 구현해야 한다.

[접근 제한자] interface 인터페이스명 extends 인터페이스1, 인터페이스2, ... { ... // 추상 메서드 }