본문 바로가기
Java/JAVA 문법

자바 기초 배우기 22일차 [ 추상클래스, 인터페이스, 익명클래스 ]

by lchit 2020. 1. 4.

1. 추상 클래스

 

2. 인터페이스 클래스

3. 다중 상속

4. 익명 클래스

1. 추상 클래스

추상 클래스에 대한 내용은

https://lchit.tistory.com/37?category=851250

 

자바 기초 배우기 21일차 [ 내부클래스, 추상클래스 ]

*17일~20일 차는 예제로만 진행되어 따로 업로드 하지않음. ​ 1. 내부 클래스 ​ 2. 추상 클래스 ​ ​ ​ ​ ​ ​ 1. 내부 클래스 정의: 클래스 내부에 선언된 클래스 목적: 코드의 복잡성을 줄이기 위함 장점:..

lchit.tistory.com

자바 21일 차 [ 내부 클래스, 추상 클래스 ]

*17일~20일 차는 예제로만 진행되어 따로 업로드하지 않음.​1. 내부 클래스​2. 추상 클래스​​​​​​1....

blog.naver.com

21일 차 를 참고하길 바람.

특징만을 정리하자면

1) 객체 생성 불가

A가 추상 클래스라면

A a =new A(); 가 불가

: 추상 클래스를 작성하는 목적은, 상속받는 자식들이

오버 라이딩할 메서드를 지정하기 위해 만드는 것이기 때문에

객체를 생성할 목적으로 만드는 것이 아니다.

2) 추상 클래스를 상속받는 클래스는 무조건

추상 메서드를 오버 라이딩 추상 클래스 목적은

자신을 상속받는 자식 클래스에게 가이드라인 제시

추상 메서드를 구현하도록 비워놓는 것

> 상속받은 클래스는 무조건 추상 메서드 구현해야 한다.

인터페이스로 넘어가기에 앞서 추상 클래스를 한번 더

정리하고 오면 좋다

2. 인터페이스

정의?

서로 다른 것들이 데이터를

주고받을 수 있도록 정해 놓은 규격

이게 무슨 말일까

이 인터페이스라는 건 추상 메서드보다 좀 더

체계적이며 구현만을 위한 설계도와 같다

예를 들면

추상 메서드에는

구현을 위한 추상 메서드만이 아니라

일반적인 구현을 해놓는 메서드도 사용할 수 있었다.

인터페이스는 다르다 오로지 '미구현' 추상 메서드로

이루어지고 설계만을 목적으로 하는 클래스이다

그런 이 인터페이스 예제를

뭔가 기능설계라는 것과 어울리는 예제로 코드를

봐 보도록 하자

핸드폰

Ex) PhoneMain.java

인터페이스 클래스를 생성할 때는 클래스명 앞에

interface를 붙여줘야 한다

그리고 그 안에는

오로지! abstract (추상) 메서드만이 존재할 수 있다.

Interface Phone 에는

call, message, camera, callAi

기능의 추상 메서드가 있다

이 인터페이스대로 두 핸드폰을 만들어보자

implements : 인터페이스 클래스를 상속받을 때 사용하는 키워드

implements Phone을 입력하여 interface Phone의

'설계' 대로 두 핸드폰을 재정의 하였다

이제 메인에서 실행해 보겠다

각각 클래스에 메서드들을 호출하자

재정의해놓은 sysout들이 출력된다

call, message, camera 기능은 공통되는데

callAi 기능만 각각 빅스비 시리로 다르다

이럴 때 추상 클래스와 인터페이스 클래스를 혼용하여

더 간결하게 만들어 볼 수 도있다.

2 -1) [ 추상 클래스 & 인터페이스 클래스 ]

일단 phone 인터페이스

phone에 대한 모든 기능들을 담아놓은

상속받는 자식에게 이런 기능을 구현하라고

시키는 설계도 같은 존재.

그리고 새로운 클래스를 하나 더 만들었다

사진 예제로 설명을 읽어주세요~

그리고 OverlapPhone 추상 클래스를 각각 A_Phone S_Phone클래스에

상속시켜보겠다.

이미 구현된 공통된 메서드를 제외하고 서로 다른 특징을 가지는

callAi만 재정의 하면 되게끔 바뀌었다.

재정의 완료!!

그럼 이제 메인으로 돌아가자

정상적으로 메서드들이 출력된다

추상 메서드 & 인터페이스 구조를 살펴보면

이런 형식이 나온다

3. 다중 상속

interface 클래스가 특별한 이유 중

하나는 다중 상속에 있다 클래스의 다중 상속을

interface class는 가능하다

우리가 만든 전화, 문자, 카메라, Ai호출 기능이 담긴

Phone 클래스를 상속받은 S, A_phone이 있었다

그런데

추가적인 설계도가 나왔다

홀로그램, 가전제품 제어, 프린터 기능이 있는 인터페이스다

그렇다면 다중 상속을 이용하여 기존 기능+새로운 인터페이스를

한 번에 담을 수 도 있다

방법은 간단하다 implements 뒤에 두 개의 클래스명을 , 로 구분하여

써주면 된다

이렇게 인터페이스 클래스는 다중 상속이 되기에

한 클래스에서 여러 인터페이스들을 불러와 재정의하는 작업도 가능하다!!

4. 익명 클래스

정의?

이름이 없는 클래스

사용 시기?

객체 생성과 동시에 구현할 때

목적?

1회성으로 사용 시

이게 무슨 말일까

익명 클래스는 주로 인터페이스와 짝을 이룬다

인터페이스는 객체 생성이 안된다

아래 예제를 보자

인터페이스로 객체 생성을 가능하게 해 준 익명 클래스이다

객체 생성부에서 { } 구현부를 설정하여 재정의되지 않은 추상 메서드를

오버 라이딩함으로써 객체 생성이 가능해진 것이다

이 처럼 익명 클래스는 이름도 없고 객체를 위해 한번 사용되고

존재 이유가 없어지는 그런 클래스..ㅠ