。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-40일차(6월21일)] - 웹프로그래밍 21일차

quarrrter 2023. 6. 21. 17:13

Composite, command, observer 패턴 활용 

 

스피커 sound card, 프린터 write only

마이크 read only

 

1. Composite 패턴 

활용 예)

메뉴를 포함하고 있는 메뉴 , 부서 구성원(직원, 임직원 포함하고 있는,,), 디렉터리 구조(파일을 포함하는)

 

패턴 구현

1. 메뉴 만들기

#. 접근 범위 제어

- private은 같은 클래스 멤버만 사용 가능 

- default (package private) 같은 패키지 멤버만 접근 가능

- protected : (default) + 서브클래스 멤버 // 같은 패키지 접근 가능, 다른패키지는 안 됨.

(D extends A이면 ,,, D클래스는 A클래스의 서브, 그 중 상속받은 멤버만 A에 접근 가능)

- public 완전 공개 

 

 

protected. 자식클래스가 무조건 접근가능한건 아님 !!!!!!!!!!!!!!!!

인스턴스 메서드를 호출하려면 인스턴스를 만들어야 호출가능하다. 

Composite패턴: Menu를 포함한 MenuGroup의 클래스 모양새

클래스에서 생성자를 안 만들면 컴파일러가 자동으로 생성자를 만들고 수퍼클래스의 필드를 제일 먼저 호출해옴. 그 다음 본 클래스의 필드를 생성함. 각 필드 초기화는 각 클래스에서 담당 

 

밖에서 하나 생성자에서 하나 똑같음.초기화 수행문은 아래로 내려가기 때문에

 

 

package bitcamp.util;

 

public class MenuGroup extends Menu {

ArrayList menus ; //ArrayList menus = new ArrayList(); 초기화 수행문은 밑으로 내려감

 

public MenuGroup(String title) {

super(title);// 자바세계에서는 맨 먼저 수퍼 클래스의 생성자를 호출하는 코드를 넣어야하는데 안 넣으면 컴파일러가 자동으로 넣음

//근데 만약 수퍼클래스 안에 생성자가 없으면 super(파라미터)로 명시적으로 써서 호출해야함.

menus =new ArrayList();

}

}

menu의 execute를 menugroup에서 오버라이딩함

*상속과 생성자

association연관(단순 사용), inherrigance상속, aggregation 집합(포함), compostion(음,, 거의 일체형같은,,자동차->엔진)

 

점선: dependency 필요할 때만 

uml에서만 그런거고 

평상시엔 전체 다 dependency(의존)임 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Observer 패턴 

=> 객체의 상태가 변경됐을 때 보고 받아서 처리하는 경우 (보고 받는 사람: event listener = observer)

Observer 패턴의 동작 원리 (listener) 

listener... 

뭔지 잘 모르겠음 ..

 

3.Command 패턴

한 명령어 한 클래스에 

이점: 명령 추가 -> 클래스 추가 : 기존 코드를 수정할 필요없다. 

생성자가 호출될때 다른 생성자 호출할때 this 씀

super와 this는 함께 있을 수 없음 

 

 

상속의 종류 2개

특수화 : 스페셜: 위에서 아래로 확장하는거 // 특별한 카 (보편적인 상속)/  클래스의 기능을 덧붙여 좀 더 특별한 일을 하는 서브클래스를 정의

제너럴: 두 클래스에서 일반적인 기능(공통기능)을 추출해서 수퍼클래스로 정의하는것

제너럴: 이 클래스는 직접 사용하려고 만든 클래스가 아니다. 서브 클레스에 공통기능을 물려주려고 만든 클래스다. 

그래서 직접 사용하지 못하도록 막는다 = > " 추상클래스"

추상클래스

클래스 앞에 public abstarct class 붙이면 사용하지 말라는 뜻

미완성이니 상속받아서만 쓰던지 상속받아져있는 클래스 쓰세요 .

보통 자바 외 클래스 이름은 abstract어쩌구~로 한다. 

 

추상클래스는 추상 메서드를 가질수있다? 먼말 ,, 

추상클래스는 미완성된 클래스이기 때문에 일부 메서드가 구현되지 않은채로 있어도 됨. 

어차피 추상클ㄹ래스는 인스턴스를 못 만들기때문에 .

상속받은 서브클래스는 완성을 해야함.