Tany
백문이불어일Tany
Tany
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • JAVA TPC (1)
    • JAVA (10)
    • CS (3)
    • SPRING (5)
    • DFS BFS (12)
    • SQL (7)
    • 알고리즘 정리 (76)
    • Git, Github (3)
    • 학습 계획 (36)
    • 코드스쿼드 학습일지 (19)
    • Servlet (5)
    • VPC (2)
    • AWS (4)
    • JPA (5)
    • 취미생활 (2)
    • 프로젝트 기록 (7)
      • Issue Tracker 삽질 기록 (5)
      • 당근마켓 API 서버 기록 (2)
      • 나만의 블로그 제작 기록 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • GIT
  • hash
  • 면접을 위한 CS 전공지식 노트
  • 파이썬
  • JSP
  • 문자열
  • 인프런
  • MVC
  • MySQL
  • java
  • Stack
  • BFS
  • 자바
  • EC2
  • sql
  • dfs
  • 이분탐색
  • JPA
  • 이코테
  • 재귀
  • 프로그래머스
  • 완전탐색
  • github
  • 해시
  • AWS
  • 알고리즘
  • 주간 학습 계획
  • 백준
  • 정렬
  • 자료구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tany

백문이불어일Tany

JAVA

[JAVA 복습] 인터페이스(Interface)

2021. 9. 3. 00:06

- 자바의 정석 (기본편)을 참고했습니다.

- 복습을 위한 게시글입니다.

- 소스에 오타가 있을 수 있습니다. ^^;;

 

인터페이스(Interface)의 특징

인터페이스란 일종의 추상 클래스인데, 추상화의 정도가 높아서 구현부를 갖춘 일반 메서드, 멤버변수를 가질 수 없다.

오직 추상 메서드와 상수만을 멤버로 가질 수 있고 그 외는 어떠한 요소도 허용하지 않는다.

불완전한 설계도이기 때문에 그 자체로 이용하기보단 다른 클래스를 작성하는데 도움을 주는 용도로 사용된다.

모든 멤버변수는 public static final을 붙인 제어자가 있어야하며, 이를 생략할 수 있다.

모든 메서드는 public abstract 붙인 제어자가 있어야하며, 이를 생략할 수 있다.

 

인터페이스의 장점

1. 개발시간을 단축시킬 수 있다.

 - 다른 개발자들이 각각의 부분을 완성할 때 까지 기다리지 않고 서로 규칙만 정해두어 따로 나눠서 작성된 코드를

   컴파일 할 수 있다.

 

2. 표준화가 가능하다.

  - 기본 틀을 인터페이스로 작성하고 이 틀에 맞춰 인터페이스를 구현하는 식으로 프로그램을 작성함으로써 일관적이고

    정형화된 프로그램의 개발이 가능해진다.

 

3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.

  - 상속 관계를 가지지 않고 같은 조상을 가지고 있지 않는 전혀 상관없는 클래스들에게 하나의 인터페이스를 공통으로

    구현하도록 함으로써 관계를 맺어줄 수 있다.

 

4. 독립적인 프로그래밍이 가능하다.

  - 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능해진다.

  - 클래스 - 클래스 간의 직접적인 관계를 클래스 - 인터페이스와 같은 간접적인 관계로 변경하면, 한 클래스의 변경이

    관련된 다른 클래스에 영향을 미치지 않기 때문이다.

    즉, 코드의 종속성을 줄이고 유지보수성을 높일 수 있다.

 

제어자 생략 예제 코드

 

interface playingCart {
	public static final int SPADE = 4;
    
    // public static fianl int DIAMOND = 3; (생략 가능)
    fianl int DIAMOND = 3;
    
    // public static fianl int HEART = 2; (생략 가능)
    static int HEART = 2;
    
    // public static fianl int CLOVER = 1; (생략 가능)
    int CLOVER = 1;
    
    // public abstract String getCardNumber(); (생략 가능)
    String getCardNumber();
}

 

인터페이스의 상속

인터페이스는 클래스와 다르게 다중 상속을 허용한다.

 

인터페이스의 다중 상속 예제 코드

 

interface Moveable {
	void move(int x, int y);
}

interface Attackable {
	void attack(Unit u);
}

interface Fightable extends Moveable, Attackable {
	// 다중 상속 가능
}

인터페이스는 다중 상속이 가능하기 때문에 Fightable 인터페이스는 정의된 멤버가 하나도 없지만 조상 인터페이스로

상속받은 두 개의 추상 메서드를 멤버로 갖게 된다.

 

인터페이스의 구현

인터페이스 또한 추상 클래스처럼 그 자체로 인스턴스를 생성할 수 없다.

추상 클래스와 구현방법이 다르지 않지만, extends를 사용하지 않고 implements를 사용한다.

구현하는 인터페이스에서 일부의 추상 메서드만 구현한다면 abstract를 붙여 추상클래스로 선언해야 한다.

 

인터페이스의 구현 예제 코드

 

// 인터페이스 Fightable을 구현하는 클래스 Fighter
class Fighter implements Fightable {
	public void move(int x, int y) {
    	// 내용 생략
    }
    
    public void attack(Unit u) {
    	// 내용 생략
    }
}

// 인터페이스 Fightable을 구현하는 클래스 Fighter
// attack()를 따로 구현하지 않기 때문에 abstrack를 붙여줘야 한다.
abstract class Fighter implement Fightable {
	public void move(int x, int y) {
    	// 내용 생략
    }
}

첫 번째 클래스에서는 모든 추상 메서드를 구현했기 때문에 abstract를 붙이지 않지만, 두 번째 클래스에서는 하나를

구현하지 않기 때문에 abstract를 붙여 추상 클래스로 만들어줘야 한다.

'JAVA' 카테고리의 다른 글

[JAVA 복습] 추상 클래스(abstract class)  (0) 2021.09.02
[JAVA 복습] 다형성(Ploymorphism)  (0) 2021.09.02
[JAVA 복습] 캡슐화와 접근 제어자  (0) 2021.09.02
[JAVA 복습] 참조변수 super와 조상의 생성자 super()  (0) 2021.09.02
[JAVA 복습] 상속에 대해  (0) 2021.09.02
    'JAVA' 카테고리의 다른 글
    • [JAVA 복습] 추상 클래스(abstract class)
    • [JAVA 복습] 다형성(Ploymorphism)
    • [JAVA 복습] 캡슐화와 접근 제어자
    • [JAVA 복습] 참조변수 super와 조상의 생성자 super()
    Tany
    Tany
    내가 보려고 만드는 백엔드 기록장 Github https://github.com/juni8453

    티스토리툴바