hgk0404
hgk0404.tistory
hgk0404

공지사항

전체 방문자
오늘
어제
  • 전체 카테고리
    • [컴퓨터비전]
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [머신러닝]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev]
      • [가상환경]
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [자격증, 일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404

hgk0404.tistory

[WEB]

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

2022. 9. 23. 19:44
728x90

1. 인터페이스

 

인터페이스는 자바에서 클래스와 동일하나 메서드의 알맹이가 없는 클래스입니다.

 

기본 골격은 클래스와 동일하나 class 대신 interface라는 선언이 붙어 있고, 메소드는 몸체 없이 세미콜론으로 마무리 됩니다.

 

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

 

위의 코드처럼 알맹이가 비어있는 메소드를 추상 메소드라고 부릅니다.

 

이러한 인터페이스를 대상으로는 인스턴스 생성이 불가능하며, 다른 클래스에 의해 상속만 될 수 있습니다.

 

또한 상속을 받을때도 extends가 아닌 implements라는 키워드로 사용이 됩니다.

 

class Printer implements Printable {
	public void print(String doc) {
		System.out.println(doc);
	}
}

 

그래서 클래스가 인터페이스를 상속하는 행위는 상속이 아닌 구현이라고 합니다.

 

알맹이가 비어있는 메소드를 가져와서 알맹이를 채우는 과정을 하기 때문입니다.

 

그리고 인터페이스는 다음과 같은 특징을 가지고 있습니다.

 

  • 한 클래스는 둘 이상의 인터페이스를 동시에 구현할 수 있습니다.
  • 상속과 구현은 동시에 가능합니다.
class Robot extends Machine implements Movable, Runnable {...}

 

또한 다음과 같은 특징도 있습니다.

  • 인터페이스의 형을 대상을 참조변수의 선언이 가능
  • 인터페이스의 추상 메소드와 이를 구현하는 메소드 사이에 오버라이딩 관계가 성립

 

interface Printable {
	public void print(String doc);
}

class Printer implements Printable { // Printable을 구현하는 printer 클래스
	public void print(String doc) {
		System.out.println(doc); // 추상 메소드 오버라이딩
	}
}

public class prac1 {
	public static void main(String[] args) {
		Printable prn = new Printer(); // Printable형 참조변수 선언 가능
		prn.print("Hello java"); 
	}
}

인터페이스인 Printable을 형을 하는 prn 참조변수를 선언하였습니다.

 

결과)

Hello java

 

2. 추상 클래스(abstract class)

 

하나 이상의 추상 메소드를 갖는 클래스를 가리켜 "추상 클래스"라고 합니다. 

 

예시)

abstract class House { // 추상 클래스
	public void methodOne() {
		System.out.println("method one");
	}
	public abstract void methodTwo(); // 추상 메소드
}

class MyHouse extends House {
	@Override
	public void methodTwo() {
		System.out.println("method two");
	}
}

 

하나 이상의 추상 메소드를 가지고 있기에 추상 클래스라 부릅니다. 그리고 이러한 추상 클래스에는 abstract 선언을 class 앞에 해주어야 합니다. 또한 추상 메소드도 abstract 선언을 자신의 형앞에 해주어야 하며 void 앞에 abstract를 선언하였습니다.

 

이러한 추상 클래스에는 다음과 같은 특징이 있습니다.

  • 인스턴스 생성 불가
  • 다른 클래스에 의해 추상 메소드가 구현되어야 함

인터페이스와 매우 유사하지만 구현이 아닌 상속의 형태를 띄며 extends를 사용하였습니다.

 

 

728x90
저작자표시 동일조건

'[WEB]' 카테고리의 다른 글

[Java] 자바 제네릭 클래스, 제네릭 메소드  (0) 2022.09.24
[Java] Object 클래스  (0) 2022.09.23
[HTML & CSS] CSS 박스모델 관련 속성  (0) 2022.09.19
[HTML & CSS] CSS 박스모델  (0) 2022.09.19
[HTML & CSS] 경계선(border) 다루기  (0) 2022.09.18
'[WEB]' 카테고리의 다른 글
  • [Java] 자바 제네릭 클래스, 제네릭 메소드
  • [Java] Object 클래스
  • [HTML & CSS] CSS 박스모델 관련 속성
  • [HTML & CSS] CSS 박스모델
hgk0404
hgk0404
공부기록

티스토리툴바