selfstarter

JAVA 추상클래스, 인터페이스 공통점, 차이점(abstract, interface) 본문

Server/Java

JAVA 추상클래스, 인터페이스 공통점, 차이점(abstract, interface)

selfstarter 2020. 1. 6. 20:29

추상클래스, 인터페이스 공통점, 차이점

추상클래스(abstract)

  • 추상클래스는 일반적인 class에 추상함수를 멤버 변수로 갖는 class를 말한다(추상함수가 없어도 에러가 나지 않지만 꼭 목적에 맞게 쓰자)
  • 추상클래스는 객체로 생성할 수 없다. 오로지 상속으로만 구현이 가능하다
  • 객체로 생성할 수 없으므로 현실에서 확실하게 정해지지 않는 것을 추상클래스로 만들어야 한다.(이론은 이런데.. 실제 개발에서는 용도에 따라서 자유롭게 사용가능할 듯)
  • 추상클래스는 class이므로 extends 로 상속받는다(다중상속x)
  • 멤버 변수, 함수, 생성자 선언 및 구현이 가능하다
  • class 맨 앞에 abstract 키워드를 붙여야 한다
  • 추상함수는 선언부만 있고 구현부는 존재하지 않는다
  • 추상함수는 리턴 값 앞에 abstract 키워드를 붙여야 한다
  • 추상함수를 선언하지 않아도 에러는 나지 않는다
public class Main {    
    public static void main(String[] args) {
        Student student = new Student("kinStudent", 15, "중학교", "사람중학교");
        Employee employee = new Employee("kimEmplooy", 30, "회사컴퍼니", 5000);

        student.doing();
        employee.doing();
        student.goHome();
        employee.goHome();
    }

    abstract public static class Person {
        private String name;
        private int age;

        Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public abstract void doing();

        public void goHome() {
            System.out.println(this.getClass().getSimpleName()+" go home!");
        }
    }

    public static class Student extends Person {
        private String type;
        private String schoolName;

        Student(String name, int age, String type, String schoolName) {
            super(name, age);
            this.type = type;
            this.schoolName = schoolName;
        }

        public void doing() {
            System.out.println(this.getClass().getSimpleName()+" study!");
        }
    }

    public static class Employee extends Person {
        private String companyName;
        private int salary;

        Employee(String name, int age, String companyName, int salary) {
            super(name, age);
            this.companyName = companyName;
            this.salary = salary;
        }

        public void doing() {
            System.out.println(this.getClass().getSimpleName()+" work");
        }
    }
}

인터페이스(interface)

  • 인터페이스는 확장의 개념이 아닌 동일한 기능을 가지고 있다는 개념
  • 인터페이스는 객체로 생성할 수 없다. 오로지 상속으로만 구현이 가능하다
  • 다중상속이 가능하다
  • 인터페이스는 interface로 선언하고 implements 키워드로 상속받는다
  • 인터페이스는 선언부만 있고 구현부는 없다
public interface TV {
    public void on();
    public void off();
}

public interface CCTV {
    public void cctvOn();
    public void cctvOff();
}

public class oldTv implements TV {
    @Override public void on() {}
    @Override public void off() {}
}

public class IPTV implements TV, CCTV {
    @Override public void on() {}
    @Override public void off() {}
    public void cctvOn() {}
    public void cctvOff() {}
}

추상클래스와 인터페이스 공통점

  • 객체로 생성할 수 없다
  • 상속을 통해서 구현부가 없는 함수를 정의해야한다

추상클래스와 인터페이스 차이점

  • 추상클래스는 다중상속이 불가능하고, 인터페이스는 다중상속이 가능하다
  • 추상클래스는 abstact 키워드를 사용해서 선언하고 인터페이스는 interface 키워드를 사용해서 선언한다
  • 추상클래스는 상속 사용 시 extends를 사용하고 인터페이스는implements 키워드를 사용한다
  • 추상클래스는 부모 class의 기능을 물려받아 자식 class에서 알맞게 확장해서 만든다.또 일반 클래스와 달리 추상메소드를 강제적으로 만들게 하는 장점이 있다.(계층구조, 부모 자식 관계)
  • 인터페이스는 공통된 기능을 추출한 틀을 상속받는 것이다.(인터페이스 상속 객체를 사용하는 클래스는 해당 인터페이스를 상속받은 객체가 무엇인지 전혀 알 필요 없다. 어떤 객체가 들어오는지 신경쓰지 않아도 된다. 그저 같은 기능이 있다는 것을 알고 기능을 호출만 하면 된다)

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

JAVA ChoiceFormat  (0) 2020.01.07
JAVA Wrapper class  (0) 2020.01.07
자바 프로그램 실행 시간 구하기(System.currentTimeMillis())  (0) 2019.12.30
이클립스 code coverage 툴 EclEmma  (0) 2019.12.27
JAVA DecimalFormat  (0) 2019.11.01
Comments