## 23. Composite, Command, Observer 디자인 패턴, 추상 클래스/메서드 활용하기
- Generalization(상속) 수행
- AbstractBoardListener 추상 클래스 정의
- 추상 메서드 도입
Generalization(상속) 수행
AbstractBoardListener 추상 클래스 정의
추상 메서드 도입
ㄴ bitcamp.handler 패키지에 BoardListener 생성
BoardDetailList.java
BoardListener.java
ㄴ 중복되는 코드 findBy(int no) 가 있는 BoardDetailList 클래스에서 해당 코드 BoardListener 클래스로 잘라내서 가져오기
ㄴ 중복되는 코드 각각 찾아서 제거해줘야 함
=> 클래스의 상속 관계를 고려하여 필드를 보호하고 상속한 클래스에서 필드에 접근할 수 있도록 protected 접근제어자 사용
BoardListener.java
ㄴ ActionListener 인터페이스 import 해주기
BoardAddListener.java
ㄴ BoardAddListener 클래스가 BoardListener 클래스를 상속 받도록 구현
BoardListListener.java
ㄴ BoardListListener 클래스가 BoardListener 클래스를 상속 받도록 구현
BoardDetailListener.java
ㄴ BoardDetailListener 클래스가 BoardListener 클래스를 상속 받도록 구현
BoardUpdateListener.java
ㄴ BoardUpdateListener 클래스가 BoardListener 클래스를 상속 받도록 구현
BoardDeleteListener.java
ㄴ BoardDeleteListener 클래스가 BoardListener 클래스를 상속 받도록 구현
BoardListener.java
ㄴ BoardListener 클래스에 abstract 붙여주기
BoardListener.java
ㄴ BoardListener 클래스가 추상클래스임을 직관적으로 알려주기 위해 이름을 AbstractBoardListener 로 이름 변경 (refactor 이용)
"oo님 반가워요!" 출력하도록 만들기
ㄴ "oo님 반가워요!" 출력하도록 만들어주는 HelloListener 클래스 생성
HelloListener.java
App.java
ㄴ HelloListener 클래스를 이용하여
ㄴ helloMenu.addActionListener(new HelloListener()); => helloMenu에 HelloListener를 등록
=> helloMenu를 실행할 때 HelloListener의 service 메서드가 호출됨
ㄴ addActionListener 메서드를 통해 해당 Menu 객체에 이벤트 리스너를 등록함으로써, 특정 이벤트 발생 시 HelloListener의 동작을 수행할 수 있음
ㄴ mainMenu.add(helloMenu); => mainMenu에 helloMenu를 추가
=> mainMenu를 실행할 때 helloMenu도 함께 출력되고 사용자가 선택할 수 있는 메뉴로 제공됨
ㄴ HelloListener 클래스를 HeaderListener 라는 이름으로 복사한 후 수정
ㄴ HelloListener 클래스를 FooterListenr 라는 이름으로 복사한 후 수정
=>
FooterListener.java
=>