* 추상클래스와 인터페이스

   - 설명을 예시를 들어 쉽게 해주시는 얄코님의 강의에서 추상클래스는 물려받는 혈통 가문과 같이 딱 하나만 받을 수 있는 나의 정체성이고, 인터페이스는 여러개를 받을 수있는 자격증과 같은 개념이라고 했다. 

   - 또한 아래 참고에 적어놓은 블로그에서는 "극단적으로 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 것이 역할이자 개념"이라고 정의하고있다.

    - 즉, 어떠한 클래스들이 운전면허증, 복어조리자격증, 주조자격증 등과 같이 어떠한 동일한 목적을 가지고 동일한 기능을 수행할 수 있도록 그런 기능을 모아놓은 인터페이스를 적용하는 것이다.

 

* 인터페이스의 특징

    - 다중상속 가능 (자격증은 100개라도 가질 수 있다..)

    - 생성자 사용 불가: 인터페이스는 메서드의 명세를 정의하고 구현을 강제하기 위한 것이며, 실제 객체 생성은 인터페이스를 구현한 클래스에서 이루어진다.

 

* 인터페이스에 사용되는 4가지

    - 상수 : 필드는 무조건 상수로 선언해야한다. final 키워드를 빼도 된다. 어차피 무조건 상수이니까!

    - 클래스 메서드: 재정의가 불가능한 구현 메서드. 무조건 사용!!

    - 디폴트 메서드: 재정의가 가능한 구현 메서드. 사용하던 말던 괜찮다

    - 추상 메서드 : 메서드 이름만 정의되어있는 추상메서드. abstract 키워드는 빼도 된다. 

 

* 구상 메서드가 추가된 이유

    - 인터페이스 내에서 클래스, 디폴트 메서드는 자바8에서 추가된 기능이다. 

    - A라는 클래스를 사용하고 있는데 b라는 기능이 추가로 나왔을 때 이 b라는 기능을 추상메서드로 추가하게되면 A클래스를 사용하고 있는 곳에서는 모두 b라는 기능을 오버라이드 해주어야한다... 이런 문제를 해결할 수있다.

 

* static 메서드와 default 메서드의 차이

    - static은 이미 구상되어있는 메서드이지만 무조건! 이대로 사용해야하고 수정할 수없다.

    - default는 이미 구상되어있는 메서드이지만 불가피하게 변경을 해야할 때 재정의를 해서 사용할 수 있다.

 

 

 

*Observer pattern

- 옵저버패턴은 객체 간의 일대다 의존관계를 정의하는 패턴이다. 주로 한 객체(subject)의 상태가 변경될 때 이와 관련된 다른 객체들에게 자동으로 알림을 전달할 떄 사용된다. 

=> 객체간의 결합도를 낮추고 유연성을 향상시킴.

 

- Subject: 상태를 관찰하고 관찰자들에게 알림을 보내는 주체. 관찰자인 옵저버를 등록하고 해제하는 메서드를 가지고 있어야함

- Observer: 관찰자는 Subject의 상태 변화를 감지하고 이에 따른 동작을 수행하는 객체. 

 

- 자바에서는 java.util 패키지에 Observerble 클래스와 Observer 인터페이스가 기본적으로 제공되어 이를 사용해서 구현할 수 있다!

- Observable클래스는 deprecated되어서 java.beans 패키지의 PropertyChangeSupport를 사용하는 것을 권장한다고 한다......

- 그리고 Observable이 interface가 아닌 클래스여서 커스텀해서 사용할 수 없다는 단점도  또 있다!

-> 그래서 그냥 만들어서 사용하는게 낫지 않을까..~ 

 

 

 

* 공부하며 만들어본 팀 채팅 알람 기능!

- ChatSubject라는 subject interface는 observer를 등록하고 해제하고 알림을 실행할 수 있는 메서드를 가지고 있다.

- TeamChat 클래스는 ChatSubject를 implements한 클래스이고 주요 동작인 sendMessage() 를 추가해서 캡슐화를 했다.

- ChatObserver는 update()기능을 가지고 있는 interface이다.

- TeamMember는 ChatObserver를 implements한 클래스이다. 



TeamChat 객체를 만들어서 TeamMember들을 넣어놓으면 TeamMember는 TeamChat에서 메세지가 오는지 감지할 수 있다.

메세지가 오는 것을 전달 전달받으면 각각 메세지를 전달받을 수 있다.

당연하게도 detach로 주제에서 member를 빼면 상태 변화를 감지할 수 없다.

ChatAlarmObserver

 

 

 

 

 

** 참고자료 **

 

- 인프런 얄코 제대로 파는 자바  

-https://velog.io/@hanna2100/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-2.-%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%98%88%EC%A0%9C-observer-pattern

- https://limkydev.tistory.com/197

'자바 스터디' 카테고리의 다른 글

5주차 overriding, overloading + up/down casting  (0) 2024.04.11
3주차 Annotation  (1) 2024.03.06
2주차 Optional  (0) 2024.03.06
1주차 Stream  (0) 2024.02.08