2020-09-04 TIL ing
1 minute read
인터페이스
기존에 구현한 인터페이스에 새 기능을 추가했을 때
- 인터페이스를 구현한 다른 클래스들에 오류가 생긴다.
- 새 기능을 추가한 새 인터페이스를 생성
인터페이스 메서드는 규칙
- 인터페이스와 추상 클래스는 다르다.
- 인터페이스는 규칙을 말하는 것이고 추상 클래스는 상속해줄 어떠한 필드나 메서드를 가지고 있으면서 추상 메서드도 가지는 것이다.
디폴트 메서드
- 기존 클래스에 영향을 끼치지 않으면서 새로운 규칙을 추가하는 것이 목표이다.
추상 클래스와 인터페이스 비교
A 인터페이스를 상속한 ㄱ 클래스와 ㄱ 클래스를 상속받은 ㄴ 클래스
- A 인터페이스로 ㄱ 클래스와 ㄴ 클래스를 다 가리킬 수 있다.
추상 메서드의 구현
- 인터페이스도 스태틱 메서드를 가질 수 있다.(스태틱 블럭은 안된다.)
- 특정 인스턴스에 종속되지 않고 작업하는 경우에는 스태틱 메서드로 정의한다.
- 인터페이스는 디폴트 메서드를 가질 수 있다.
- 기존 프로젝트에 영향을 끼치지 않으면서 기존 규칙에 새 메서드를 추가할 때 유용하다.
- 인터페이스에 스태틱 메서드나 디폴트 메서드가 여러개 있더라도 그 메서드들은 이미 구현된 메서드이기 때문에 추상 메서드와 상관없다.
추상 메서드
- 수퍼 클래스를 추상 클래스로 만들고 추상 클래스가 인터페이스로부터 상속받은 추상 메서드 중 일부만 구현하게 하고 추상 클래스를 상속받은 추상 메서드를 서브 클래스에서 구현하도록 하는 방법을 자주 쓴다.
- 인터페이스를 직접 구현하면 인터페이스에 선언된 모든 메서드를 구현해야 하지만, 미리 인터페이스의 몇몇 메서드를 구현한 추상클래스(AbstractServlet)를 상속 받는다면 서브 클래스는 좀 더 쉽게 인터페이스를 구현할 수 있다.
- 즉 이렇게 인터페이스의 메서드가 많을 경우 일부 메서드를 미리 구현함으로써 개발자가 좀 더 쉽게 인터페이스를 구현할 수 있게 도와주는 용도로 “추상 클래스” 문법을 사용할 수 있다!
디자인 패턴 - Singleton
- 인스턴스를 딱 하나만 생성하여 공유하고 싶다면 Singleton 설계 방식으로 클래스를 정의한다.
- 방법:
- 1) 생성자를 정의하고 private로 선언하여 비공개로 만든다.
- 비공개 생성자는 외부에서 사용할 수 없고 내부에서만 사용할 수 있다.
- 2) 인스턴스를 생성해주는 메서드를 정의한다.
- 인스턴스를 생성한 적이 없다면 즉시 인스턴스를 생성한다.
- 기존 변수에 저장된 인스턴스 변수를 리턴한다.
- 3) 생성자가 존재하지만 private로 비공개되어 있기 때문에 직접 호출할 수 없다.
- 생성자를 호출할 수 없으면 인스턴스를 생성할 수 없다.
- 다른 메서드를 호출하여 인스턴스를 생성하라는 의미아다.
- 4) 인스턴스를 생성해주는 메서드를 통해 인스턴스를 얻는다.
- 기존에 생성된 인스턴스 주소를 리턴해주는 것이기 때문에 주소가 계속 같다.