[Java] 추상 클래스 / 인터페이스
2021. 11. 24. 17:16ㆍLanguage`/Java
추상 클래스 (abstract)
- 선언은 되어 있으나, 코드가 구현되어 있지 않은 메소드
- 추상 메소드를 가지고 있으면, 반드시 추상 클래스로 선언
- 객체를 생성할 수 없다
- 레퍼런스 변수는 선언 가능하다
※ Example
abstract class Calculator{ public abstract int add(int a, int b); public abstract int subtract(int a, int b); public abstract double average(int[] a); } class Cal extends Calculator{ // 추상 메소드 구현 @Override public int add(int a, int b) { return a+b; } @Override public int subtract(int a, int b) { return a-b; } @Override public double average(int[] a) { double sum = 0; for(int i=0; i<a.length; i++) sum += a[i]; return sum/a.length; } } public class test{ public static void main(String[] args) { Cal t = new Cal(); System.out.println(t.add(10, 100)); System.out.println(t.subtract(10, 100)); System.out.println(t.average(new int [] {1, 3, 5, 7, 9, 11})); } } ------------------- 110 -90 6.0
인터페이스 (Interface)
- default, private, static 메소드들은 Interface 내에 코드가 작성되어 있어야 한다
- default 메소드의 접근 지정 = public (고정)
- private 메소드는 Interface 내에서만 호출 가능
- static 메소드의 접근 지정 = public(생략되면) or private(지정)
- 추상 메소드 = public abstract 생략 가능
- 필드(멤버 변수)를 만들 수 없다
- 객체를 생성할 수 없다
- 레퍼런스 변수는 선언 가능
- 인터페이스끼리는 상속 가능
※ Example
interface PhoneInterface{ final int TIMEOUT = 10000; void sendCall(); void receiveCall(); default void printLogo(){ System.out.println("** Phone **"); } } interface mobilePhoneInterface extends PhoneInterface{ void sendSMS(); void receiveSMS(); } interface MP3Interface{ public void play(); public void stop(); } class smartPhone implements mobilePhoneInterface, MP3Interface{ @Override public void sendCall() { System.out.println("따르릉 따르릉~~"); } @Override public void receiveCall() { System.out.println("전화 왔어요~~"); } @Override public void sendSMS() { System.out.println("문자 가요~~"); } @Override public void receiveSMS() { System.out.println("문자 왔어요~~"); } @Override public void play() { System.out.println("음악 시작~~"); } @Override public void stop() { System.out.println("음악 중단~~"); } } public class test{ public static void main(String[] args) { smartPhone sp = new smartPhone(); sp.printLogo(); sp.sendCall(); sp.receiveCall(); sp.sendSMS(); sp.receiveSMS(); sp.play(); sp.stop(); } } --------------------------- ** Phone ** 따르릉 따르릉~~ 전화 왔어요~~ 문자 가요~~ 문자 왔어요~~ 음악 시작~~ 음악 중단~~
추상 클래스 / 인터페이스
비교 | 목적 | 구성 |
추상 클래스 | ● 서브 클래스에서 필요로 하는 대부분의 기능을 구현해 두고, 상속받아 활용할 수 있게 한다 ● 서브 클래스에서 구현할 수 없는 기능을 추상 메소드로 선언해서 서브 클래스에서 구현하도록 |
● 추상 메소드, 일반 메소드 모두 포함 ● 상수, 변수 필드 모두 포함 |
인터페이스 | ● 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적 | ● 변수 필드(멤버 변수)는 포함 X ● 상수, 추상 메소드, 일반 메소드, default 메소드, static 메소드 모두 포함 ● protected 접근 지정 선언 불가 ● 다중 상속 지원 |