2021-04-16(Fri)

항목

내용

학습 날짜

2021-04-16(금)

학습 시간

09:00~23:00

학습 범위 및 주제

디자인 패턴, Rails

학습 목표

rspec을 이용하여 TDD한다.

동료 학습 방법

-

상세 학습 내용

옵저버 패턴

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다.

자바 내장 옵저버 패턴 사용

java.util.Observer 인터페이스와 java.util.Observable 클래스를 사용할 수 있음.

  • 자바 내장 옵저버 패턴은 푸시 방식, 풀 방식 모두 사용가능.

java.util.Observer 인터페이스를 구현하고 java.util.Observable 객체의 addObserver() 메소드를 호출하면 옵저버 목록에 추가가 되고 deleteObserver()를 호출하면 옵저버 목록에서 제거가 된다.

연락을 돌리는 방법은 java.util.Observable를 상속받는 주제 클래스에서 setChanged() 메소드를 호출해서 객체의 상태가 바뀌었다는 것을 알린 후 notifyObservers() 또는 notifyObserver(Object arg) 메소드를 호출하면 된다. (인자값을 넣어주는 메소드는 푸시방식으로 쓰임.)

옵저버 객체가 연락을 받는 방법은 update(Observable o, Object arg) 메소드를 구현하기만 하면 된다. Observable o 에는 연락을 보내는 주제 객체가 인자로 전달이 되고 Object arg 에는 notifyObservers(Object arg) 메소드에서 인자로 전달된 데이터 객체가 넘어온다.

자바 내장 옵저버 패턴의 단점과 한계

  1. Observable은 클래스다. 따라서 재사용성에 제약이 생긴다.

    • 따라서 서브 클래스를 만들어야 한다는 점이 문제다. 이미 다른 슈퍼 클래스를 확장하고 있는 클래스에 Observable의 기능을 추가할 수 없기 때문이다. 그래서 재사용성에 제약이 생긴다.

  2. Observable 클래스의 핵심 메소드를 외부에서 호출할 수 없다.

    • Observervable API를 살펴보면, setChanged() 메소드가 protected로 선언되어 있따.

    • Observable의 서버클래스에서만 setChanged()를 호출할 수 있다. 결국 직접 어떤 클래스를 만드록, Observable의 서브클래스를 인스턴스 변수로 사용하는 방법도 쓸 수 없다. 이런 디자인은 상속보다는 구성을 사용한다는 디자인 원칙에도 위배된다.

정규표현식

문법 정리

Groups and ranges

Chracter

|

또는

()

그룹

[]

문자셋, 괄호 안의 어떤 문자든

[^]

부정 문자셋, 괄호안의 어떤 문자가 아닐 때

(?:)

찾지만 기억하지는 않음

Quantifiers

Character

?

없거나 있거나 (zero or one)

*

없거나 있거나 많거나(zero or more)

+

하나 또는 많이 (one or more)

{n}

n번 반복

{min,}

최소

{min,max}

최소, 그리고 최대

Boundary-type

Chracter

\b

단어 경계

\B

단어 경계가 아님

^

문장의 시작

$

문장의 끝

Character classes

Chracter

\

특수 문자가 아닌 문자

.

어떤 글자(줄바꿈 문자 제외)

\d

digit 숫자

\D

digit 숫자 아님

\w

word 문자

\W

word 문자 아님

\s

space 공백

\S

space 공백 아님

연습용 사이트

학습 내용에 대한 개인적인 총평

TDD 연습이 참 재밌다. 라이브 코딩에서는 시간이 많이 걸려서 하기 힘들 수도 있겠는데, 아직 테스트 작성이 미숙한가보다.

다음 학습 계획

  • Rails로 로그인 기능 구현하기

Last updated