시스템을 만드는 절차
- 분석 -> 설계 -> 개발 및 테스트 -> 시스템 릴리즈
인터페이스
- 두 물체의 경계면
- 가장 일반적인 것이 DAO 패턴
- 함수 시그내처를 인터페이스라고 부르기도 함
- 순수 추상 클래스 == 인터페이스
특징
- 상태가 없음
- 동작의 구현도 없음
- 동작의 시그내처만 있음
- 다중 상속 가능
- Java 8 이후로 default, static 가능
- 동작의 구현도 가능
목적
- 공통적인 것을 구현하면, 선언과 구현을 구분할 수 있다.
- 기능 구현에만 집중할 수 잇다.
Interface는 abstract class를 편하게 작성하기 위함
- Abstract를 작성할 필요가 없음
- 메소드는 언제나 public
Implements 예약어
- 상속받을 때 구현안하면 컴파일 오류
*메소드이름 바꿔서 새로운 메소드가 되는 문제가 실무에서 발생하는 경우가 있음
- 이러한 실수를 막기 위해 인터페이스를 사용하면 컴파일 단계에서 검사되긴 함
추상 메소드는 protected를 붙일 수 있다.
Public interface , interface 둘 다 가능하다.
Interface도 상속처럼 부모 = 자식 형변환 가능
Abstract (추상 클래스)
- abstract로 선언된 메소드가 하나라도 있어야 함
- interface랑 달리 구현되어 있는 메소드가 있어도 상관없음
- interface와 달리 final, static이 있어 됨.
Interface와 abstract를 어느 상황에 사용할까?
- 상속에 추가로 인터페이스를 추가
- 구현한 내용을 상속할 때(추상 클래스)
추상클래스와 일반클래스의 차이
- 추상 클래스는 메소드 구현을 강제하지만, 일반은 그렇지 않고 확장의 개념
- 추상은 직접 객체 생성이 불가능하다.
final
- 상속받아서 내용을 변경하면 안 되는 클래스를 선언할 때 final로 선언
- 변수에 사용시 생성과 동시에 초기화 해야함. 단 지역변수는 생성만 해도 가능
- 해당 클래스가 final이라고 해서 안에 있는 변수들이 final이 아니라 변경 가능
final의 동작 원리는?
- 변수: 해당 변수의 재할당 확인
- 메소드: 해당 메소드의 오버라이딩 확인
- 클래스: 해당 클래스의 상속 확인
Enum
- 상수의 집합
- 생성자를 만들 수 있으나, package-private과 private만 가능
- 내부적으로 static final
- 부모는 java.lang.Enum 이어야 한다
- values(): 모든 상수 배열을 리턴
- 열거되어 있는 데이터나 상수를 처리할 때 용이
왜 클래스는 다중상속 안되는데 인터페이스는 되는가?
- 인터페이스는 상태, 구현이 없으니까.
- 메소드의 반환형이 다르면 컴파일 오류 남 – 함수 오버로딩 문제
- 다중 상속에서 많이 쓰임
일반 클래스 상속으로도 할 수 있는데 굳이 추상 클래스 상속 하는 이유는?
- 추상클래스는 추상 메서드를 통해 상속을 강제해야 할 때
인터페이스를 사용할 때, 추상 클래스를 사용해야 할 때는 언제인가?
- 인터페이스: 구현 명세만 제공하고자 할 때 / 다형성, 유연성을 높일 수 있음
- 추상클래스: 구현한 내용까지 상속할 때 / 코드 재사용성을 높일 수 있음