The Debugging Chronicles : "코드의 미학"
Mentor JAVA - section12. 추상 클래스와 인터페이스 본문
추상 클래스와 추상 메서드
- 추상 메서드(abstract method)
· 자식 클래스에게 해당 메서드 오버라이딩을 강제하기 위해 사용하는 메서드를 말한다.
· abstract 키워드와 함께 표기하여 선언하고, 메서드 구현부인 중괄호{ } 대신 선언부에 세미콜론(;)을 사용한다.
· 추상 메서드를 선언하는 부모 클래스에서는 구현부는 비워두고 선언부만 작성하고, 자식 클래스에서 오버라이딩으로 구현한다.
· 추상 메서드는 반드시 추상 클래스 안에서 정의되어야 한다.
- 추상 클래스(abstract class)
· 하나 이상의 추상 메서드를 포함하는 클래스를 말한다.
(단, 추상 클래스는 추상 메서드를 생성하지 않아도 생성이 가능하다.)
· abstract 키워드와 함께 표기하여 선언한다.
· 일반 클래스처럼 생성자, 멤버변수, 메서드를 가질 수 있다.
· 독립적으로 생성자를 호출해 객체를 생성할 수 없으므로, 부모 클래스의 객체를 생헝하지
· 자식 클래스의 생성자에서 super()을 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체를 생성한다.
· 자식 클래스들이 반드시 공통으로 가져야하는 메서드가 있을 때 사용한다.
- 추상 클래스와 추상 메서드의 용도
· 자식 클래스 간의 공통적인 필드와 메서드 이름을 통일할 수 있다.
· 반드시 구현해야 하는 메서드를 선언함으로써 공통 규격을 제공한다.
→ 통일감 있는 코드(자식 클래스들에게 기본 틀과 공통 기능을 제공) ⇒ 다형성을 구현, 개발 시간을 단축
인터페이스 구현
- 인터페이스(interface)
· 모든 메서드가 일종의 추상 메서드인 추상 클래스를 말한다.
· 추상 메서드와 상수로만 이루어져 있으며, 추상 클래스와 마찬가지고 스스로 객체를 생성할 수 없다.
· 구현 클래스들의 공통의 기본 틀을 제공하면서, 다른 클래스 코드들과의 사이에서 중간 매개 역할을 한다.
- 추상 클래스와 인터페이스의 공통점과 차이점
|
추상 클래스
|
인터페이스
|
공통점
|
정보 은닉, 모듈화, 추상화 등을 가지고 있다.
다형성을 구현할 틀을 제공한다.
추상 메서드 구현에 대한 강제성을 가지고 있다.
|
|
차이점
|
추상화와 모듈화를 중점으로 두고 있다.
자식 클래스의 생성자를 통해 객체 생성 가능
|
정보 은닉과 모듈화를 중점으로 두고 있다.
어떤 형태로도 객체 생성 불가능
|
- 인터페이스 선언
· 인터페이스는 어떤 형태로도 객체를 만들 수 없고, 객체를 사용하는 방법을 제공하는 객체의 매개체 역할만 한다.
· interface 키워드와 함께 사용된다.
· 필드와 생성자를 가지지 않고 오직 추상 메서드와 상수만을 포함한다.
· 인터페이스의 추상 메서드는 다른 클래스들과의 매개체 역할을 하므로 항상 public / abstract 으로 구현한다.
(default를 사용해도 자동으로 public 으로 인식)
· 인터페이스 의 모든 필드는 public / static / final이어야 한다.
※ 메소드와 필드에 공통적으로 적용되는 사항이므로 생략이 가능하고, 생략된 제한자는 컴파일 시 자동으로 추가된다.
- 상수 선언
· 필드(=매개변수) 대신 상수(고정된 값)를 선언할 수 있다.
인터페이스 사용
- 인터페이스가 가지고 있는 추상 메서드를 구현해 줄 구현 클래스를 작성해야 한다.
- implements 키워드를 사용하여 선언한다.
- 인터페이스의 모든 추상 메서드를 반드시 오버라이딩해서 구현해야 한다.
- 상수를 사용할 때는 '인터페이스명.상수명'으로 호출해야 한다.
- 인터페이스 사용 시 장점
· 정보 은닉 : 실제 구현 클래스의 내용을 보지 않아도 개발 코드로 객체를 사용할 수 있다.
· 모듈화 : 구현 클래스들이 독립적으로 구현되고, 사용될 수 있다. 개발 코드에서 객체에 수정이 필요할 때 수정을 최소화 할 수 있다.
- 다중 인터페이스 구현
· 하나의 클래스의 여러 개의 인터페이스를 구현할 수 있다.
· implements 키워드 뒤에 인터페이스 이름을 콤마(,)를 사용해 여러 개 붙여 선언한다.
· 선언한 모든 인터페이스의 추상 메서드를 구현해야 한다.
· 이렇게 2개 이상의 인터페이스로 구현된 구현 클래스는 각각의 인터페이스의 클래스 타입으로 변환이 가능하다.
단, 각 타입으로 변환시 그 인트페이스에 해당되는 메서드에만 접근이 가능하다.
인터페이스 상속
- 인터페이스끼리 상속 관계가 가능하며, 클래스의 상속과 마찬가지로 extends 키워드를 사용한다.
- 다중 상속이 가능하다.
- 하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 추상 메서드를 포함하여 상위 인터페이스의 추상 메서드까지 구현해야 한다.
'JAVA > Mentor JAVA' 카테고리의 다른 글
Mentor JAVA - section14. 예외 처리 (0) | 2024.07.25 |
---|---|
Mentor JAVA - section13. 내부 클래스 (0) | 2024.07.24 |
Mentor JAVA - section11. 다형성과 타입 변환 (0) | 2024.07.22 |
Mentor JAVA - section10. 상속 (0) | 2024.07.21 |
Mentor JAVA - section09. 생성자 (0) | 2024.07.21 |