Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

자르비 왕국

[Java] 인터페이스, 추상클래스 본문

Development/Java

[Java] 인터페이스, 추상클래스

자르비옹스 2022. 4. 10. 00:59

인터페이스 (Interface)

구성

- interface 선언

- 추상 메소드 : 몸체 없는 메소드

interface Printable {
	public void print(String dox);	// 추상 메소드
}

- 상속 키워드 : implements (구현)

특징

- 구현할 인터페이스를 명시할 때 키워드 implements를 사용

- 한 클래스는 둘 이상의 인터페이스 구현 가능 (다중 상속)

- 상속과 구현 동시 가능

본질적 의미

인터페이스를 상속한 클래스들이 내부적으로 어떻게 이루어지는지 알 필요가 없다. 사용자는 인터페이스의 메소드만 호출하면 된다.


인터페이스 문법

메소드

인터페이스의 모든 메소드는 public이 선언된 것으로 간주 (public 생략)

변수

- 반드시 선언과 동시에 초기화 필요

- 모든 변수는 public, static, final이 선언된 것으로 간주 (상수 -> 변수 이름은 대문자로)

상속

인터페이스끼리 상속이 가능하다. 이때 extends를 사용한다.

  • 클래스 - 클래스 : extends
  • 인터페이스 - 인터페이스 : extends
  • 클래스 - 인터페이스 : implements

디폴트 메소드 (default method)

- 자체로 완전한 메소드 (비록 인터페이스 내에 정의되어 있지만)

- 따라서 이를 구현하는 클래스가 오버라이딩 하지 않아도 된다.

interface Printable {
	void print(String doc);
	default void printCMYK(String doc) { 
    		System.out.println("디폴트 메소드");
	}
}

디폴트 메소드는 이미 구현된 인터페이스가 향후 업데이트 되었을 때, 이를 구현한 다른 class들이 모두 수정해야하는 것을 방지하기 위해 만들어진 문법이다. 따라서 디폴트 메소드는 인터페이스를 처음 생성할 때 사용하는 것이 아니라, 기존의 인터페이스가 수정되었을 때 추가되는 메소드여야 한다.


마커 인터페이스 (Marker Interface)

인터페이스는 클래스에 특별한 표식을 다는 용도로도 사용이 된다. 마커 인터페이스는 아무런 메소드도 존재하지 않는 경우가 많다.

interface Upper { }
interface Lower { }

interface Printable {
	String getContents();
}

class Report implements Printable, Upper {
	String cons;
    
    Report(String cons) {
    	this.cons = cons;
    }
    
    public String getContents() {
    	return cons;
    }
}

 


추상 클래스 (Abstract Class)

하나 이상의 추상 메소드를 갖는 클래스를 가리켜 '추상 클래스'라 한다.

즉, 여느 클래스들과 마찬가지로 인스턴스 변수와 인스턴스 메소드를 갖지만, 이를 상속하는 하위 클래스에 의해서 구현되어야 할 메소드가 하나 이상 있는 경우를 추상 클래스라고 한다.

public abstract class House {
    public void methodOne() {
    	System.out.println("methodOne");
    }
    
    @Override
    public abstract void methodTwo();	// 추상 메소드
}

- 인스턴스 생성 불가능

- 다른 클래스에 의해서 추상 메소드가 구현이 되어야 한다.

- 클래스이기 때문에 상속할 때는 extends를 사용


인터페이스 vs 추상클래스

- 인터페이스 (다중상속) / 추상클래스 (단일상속)

- 추상 클래스의 목적 : 상속을 받아서 기능을 확장시키는 것

- 인터페이스의 목적 : 구현하는 모든 클래스에 대해 특정한 메소드가 반드시 존재하도록 강제성을 부여 (구현 객체가 같은 동작을 한다는 것을 보장하기 위함)

 

참고 : https://uzleem.tistory.com/81

'Development > Java' 카테고리의 다른 글

[Java] Map<K, V> 컬렉션 클래스  (0) 2022.04.18
[Java] List<E> 컬렉션 클래스  (0) 2022.04.18
[Java] Generics 제네릭  (0) 2022.04.17
[Java] 메모리 모델  (0) 2022.04.16
[Java] 상속, 오버라이딩  (0) 2022.04.10