인터페이스

서지우·2023년 7월 11일
0

JAVA

목록 보기
19/28

인터페이스란

- 일종의 추상클래스
- 추상클래스보다 추상화 정도가 높음
- 실제 구현된 것이 전혀 없는 기본 설계도(알맹이가 없는 껍데기)
- 추상메서드와 상수만을 멤버로 가질 수 있음
- 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용됨
- 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용됨

- class대신 interface를 사용한다는 것 외에는 클래스 작성과 동일하다

- but, 구성요소(멤버)는 추상메서드와 상수만 가능하다

- 인터페이스도 클래스처럼 상속이 가능하다(클래스와 달리 다중상속 허용)

- 인터페이스는 object클래스와 같은 최고 조상이 없다.

- 인터페이스를 구현하는 것은 클래스를 상속받는 것과 같다 (다만, extends대신 implements를 사용)

- 인터페이스에 정의된 추상메서드를 완성해야 한다.

- 상속과 구현이 동시에 가능하다

- 인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다

- 인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다.

- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.


인터페이스 장점

1. 개발시간을 단축시킬 수 있다.
2. 표준화가 가능하다.
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
4. 독립적인 프로그래밍이 가능하다.


인터페이스의 이해


디폴트 메서드

- 인터페이스에 새로운 메서드를 추가하면?
  이 인터페이스를 구현한 기존의 모든 클래스가 이 메서드를 구현해야 함
- 이 문제를 해결하기 위해 '디폴트 메서드'를 고안
- 디폴트 메서드는 추상메서드의 기본 구현을 제공함
- 몸통{}을 가지고 있고, 앞에 'default'를 붙이고 항상 public이다(생략가능) 


실습 - ch07 / S08.java

사람을 예시로 해보았다.
주석으로 설명..

package ch07;

// 인터페이스는 '기능'을 의미
// 여러 클래스에 적용될 수 있다
interface{
    void cry();
}

interface{
    void see();
}

interface 날개{
    void fly();
}

class Cat implements,{

    @Override
    public void cry() {
        System.out.println("야옹");
    }

    @Override
    public void see() {
        System.out.println("고양이가 봅니다.");
    }

}

// 인터페이스들이 모이면 종족의 특성이 될 수 있다
abstract class 사람 implements,{

}

class 홍길동 extends 사람{

    @Override
    public void cry() {
            
    }

    @Override
    public void see() {

    }

}

class 천사 extends 사람 implements 날개{

    @Override
    public void cry() {
        
    }

    @Override
    public void see() {
    
    }

    @Override
    public void fly() {
    }

}

// 인터페이스는 클래스에서 여러개를 구현할 수 있다
class Dog implements,{

    @Override
    public void cry() {
        System.out.println("멍");

    }

    @Override
    public void see() {
        System.out.println("강아지가 봅니다.");
    }

}

public class S08 {
    public static void main(String[] args) {
        
    }
}

문제풀기 - ch07 / S08Quiz.java

스마트폰을 예시로 문제를 풀어보았다
주석으로 설명..

package ch07;

// 인터페이스 / 추상클래스 / 클래스를 이용해서
// 스마트폰
// 갤러시 / 아이폰
// 갤럭시 - 통화 / 문자 / 빅스비
// 아이폰 - 통화 / 문자 / 시리
// 갤럭시 - s23
// 아이폰 - IPhone14
interface 통화{
    void call();
}

interface 문자{
    void massage();
}

interface 빅스비{
    void bigsb();
}

interface 시리{
    void siri();
}

abstract class 스마트폰 implements 통화, 문자{

}

class S23 extends 스마트폰 implements 빅스비{

    @Override
    public void call() {
        System.out.println("삼성 ceo 이재용");
    }

    @Override
    public void massage() {
        System.out.println("안녕하신가");
    }

    @Override
    public void bigsb() {
        System.out.println("어떤 것을 도와드릴까요?");
    }

}

class Iphone extends 스마트폰 implements 시리{

    @Override
    public void call() {
        System.out.println("잡스");
    }

    @Override
    public void massage() {
        System.out.println("hello");
    }

    @Override
    public void siri() {
        System.out.println("Can I help you?");
    }

}

public class S08Quiz {
    public static void main(String[] args) {
        S23 galuxyS23 = new S23();
        Iphone appleIPhone = new Iphone();
    }
}

문제풀기 - ch07 / S08QuizeEx.java

스마트폰을 예시로 문제를 풀어보았고 다른 방식으로 푼 코드이다.
주석으로 설명..

package ch07;

// 인터페이스 / 추상클래스 / 클래스를 이용해서
// 스마트폰
// 갤럭시 / 아이폰
// 갤럭시 - 통화 / 문자 / 빅스비
// 아이폰 - 통화 / 문자 / 시리
// 갤럭시 - S23
// 아이폰 - IPhone14

interface 통화 {
    void 통화수신(String data);

    String 통화송신();
}

interface 문자 {
    void 문자수신(String data);

    String 문자송신();
}

interface 빅스비 {
    void search(String question);
}

interface 시리 {
    void search(String question);
}

abstract class 스마트폰 implements 통화, 문자 {

}

abstract class 갤럭시 extends 스마트폰 implements 빅스비 {

}

abstract class 아이폰 extends 스마트폰 implements 시리 {

}

class S23 extends 갤럭시 {

    @Override
    public void search(String question) {
        System.out.println("검색 : " + question);
    }

    @Override
    public void 통화수신(String data) {
        System.out.println(data);
    }

    @Override
    public String 통화송신() {
        return "안녕하세요";
    }

    @Override
    public void 문자수신(String data) {
        System.out.println(data);
    }

    @Override
    public String 문자송신() {
        return "당근에서 연락드립니다.";
    }

}

class IPhone14 extends 아이폰 {

    @Override
    public void search(String question) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'search'");
    }

    @Override
    public void 통화수신(String data) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method '통화수신'");
    }

    @Override
    public String 통화송신() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method '통화송신'");
    }

    @Override
    public void 문자수신(String data) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method '문자수신'");
    }

    @Override
    public String 문자송신() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method '문자송신'");
    }

}



public class S08QuizEx {
    public static void main(String[] args) {

    }
}
profile
미래가 기대되는 풀스택개발자 공부 이야기~~

0개의 댓글