Nebo - Test - Page 5
  1. 개방폐쇄 원칙 (open closed)

0 확장에는 열려 있어야 하고
변경에는 닫혀 있어야 한다.
= 기능을 변경, 확장 가능하지만 기능을 사용하는 코드는 수정하지 x ) Memory byte 읽는 기능추가 = 기능은 추가되고 코드 변경 x
(코드는
interface 추가됨)
0 확장되는 부분이 추상화됐므로 가능

2.1 원칙이 깨질때 주요증상

  1. 다운캐스팅을 한다.
    instance of 사용
  2. 비슷한 if_else 블록이 존재

2.2 개방 폐쇄 원칙은 유연함 기능확장을 위해 기존코드 수정 = 확장에 닫히고 변경에 열림

  1. 리스코프 치환 원칙

0 상위타입이 아닌 하위 타입을 사용해도 기능이 정상적으로 수행

3.1 위반시 문제점
o 직사각형 정사각형 문제
o 서로 다른 리턴범위

3.2 원칙은 계약과 확장에 대한 0 명세된 계약대로
o instance of 사용은 원칙의 위반을 보여준 .

  1. 인터페이스 분리원칙
  2. 인터페이스는 인터페이스를 사용하는

클라이언트를 기준으로 분리해야 한다.

  • 용도에 맞게 인터페이스를 분리

4.3 인터페이스 분리 원칙은 클라이언트에 대한 .

  • 의존의 양면성
  1. 의존역전원칙
  2. 고수준모듈은 저수준모듈의 구현에

의존해서는 안된다. 저수준모듈이 고수준 모듈에서 정의상 추상타입에 의존해야 한다

  • 고수준 모듈: 바이트 데이터를 읽고 암호화하고
    결과 바이트 데이트를 쓴다

. 저수준모듈: 1. 바이트를 읽는다.

  1. 암호화 한다
  2. 데이터를 쓴다

  1. I 문제점
  2. 가격 계산 모듈이 쿠폰에 의존하게

되면 새로운 쿠폰추가시 가격 계산 모듈이 변경되는 상황 초래

  • 저수준이 변경되도 고수준에 영향을

끼치는게 원칙의 목적.

5.2 의존 역전원칙을 통한 변경의 유연함 확보

  • 저수준 모듈이 고수준에 의지.
  • 추상화

  • file Data Reader Bk Source 의존
  • Byte Source flow Control 입장에서

만들어
= 의존이 역전됨.

  • 소스코드 상에서 역전됨

5.4 의존 역전과 패키지

  • flow control Byte source

하나의 패케이로 묶을 있음

  1. 정리.
  2. 변화에 유연하게 대처하는
  3. 단일책임원칙, 인터페이스 분리원칙 = 객체의 크기 조절 (기능, 책임)
  4. 리스코프, 의존 역전원칙
    = 추상화, 다형성, 기능확장
Nebo - Test - Page 4

1장

  1. 1 수정하기 안좋은 코드

메뉴 클릭에 따른 행동이 있을 이를 if / else 처리하게 되면 요구사항 추가 때마다 코드가 늘어남.

1.2 수정하기 좋은 코드
비슷한 동작을 찾자.
클릭,
보여주기

  • interface 하고 implements.

1.3 소프트웨어란...
여러 요구사항이 계속 추가됨.

  • 변화가능한 유연한 구조를 만들자.

2장 객체지향

  1. 절차지향과 객체지향
  2. I 절차지향
  3. procedure 프로그램을 구성
  4. 하지만 데이터가 많아질수록 감당 x

1.2 객체지향
객체 단위로 묶는다.

  • 데이터 변화가 발생해도 해당

객체만 변화가 발생

  1. 객차

21 객체의 핵심은 기능을 제공

  • 소리크기 제어 객체
  • 데이터 타입 안중요

소리 증가, 감소, 음소거 등의 기능

22 인터페이스와 클래스

  • 객체가 제공하는 기능 = operation

객체는 operation 으로 정의

  • 객체가 제공하는 operation 집합 = 인터페이스
    (일종의
    명세서나 규칙)
  • 실제 구현은 클로니스가 한다.

2.3 메시지

  • 오퍼레이션의 실행을 요청 = message
    = 메서드를 호출하는 .

  1. 객체의 책임과 크기.
  2. 객체는 기능으로 정의
    = 객체마다 자신만의 책임이 있다.
  • 객체의 책임을 결정짓는 것이 객체지향설계의 출발점
  • 처음에는 필요 기능을 정리.

. 기능을 할당하는 가장 어려움. 다만 책임의 크기는 작을수록 좋다.

  • 파일을 읽고 이를 암호화 한뒤 파일을 쓰는 경우
  • 흐름제어, 파일 읽기, 파일쓰기, 암호화
  • 기능이 많다 = 관련 데이터도 많다 = 절차지향식 구조

  1. 의존
  2. 한객체가 다른 객체를 생성, 호출 =

의존

  • 부른 객체가 사용하려는 객체에 의존

  • 파라미터로 받아도 의존임.

. A B c
(
B에, B가 A에 의존하고 있다. A가 변경된다면 B, c 모두 영향

  1. I 의존의 양면성

. 내가 변경되면 나에게 의존하고 있는 코드에 영향을 준다.

  • 나의 요구가 변경되면 내가 의존하고 있는 타입에 영향을 준다.

  1. 캡슐화.
  2. 변경이 다른곳에 가하지 않게.

. 내부의 기능이 어떻게 구현하는지 감추는 .

  1. I 절차지향적 코드

. 데이터를 중심으로 작성

  • 데이터 변화시 이를 사용하는 코드도 연쇄적으로 수정

5.2 캡슐화코드

  • 요구사항 변경에도 변화없음.

) 회원가입 만료를 계산할때 절차: 여성, vip 데이터에 집중

  • 고쳐야할 많다.

캡슐: member 클래스에 is Expired 메서드 기능 수정.

5.4 캡슐화 2개 규칙

  • Tell, Don't ASK
    데이터를 묻지 않고 기능을 실행
  • 만료일자를 가져와서 확인 x 만표확인 미서드를 불러 .
  • 데미테르의 법칙
  • 메서드에서 생성한 객체의 메서드 호출
  • 파라미터로 받은 객체의 메서드만 호출.
  • 필드로 참조하는 객체의 메서드만 호출.

member.get Some ().get Some x

  • 결국은 기능중심.

  1. 객체지향설계과정
  2. 기능, 세분화, 객체에 할당
  3. 최대한 캡슐화.
  4. 어떻게 메시지 받을지 구상
  5. 반복

3장 다형성과 추상타입.

  1. 상속개요.
    Pass

  1. 다형성과 상속.
  2. 다형성 = 여러 가지 (poly) 모습 (morph)
  3. 기능요청에 따라서 서로 다른 타입이 나옴.

. Turbo Plane extends Plane implements Turbo
= Plane 되고 Turbo 된다.

  1. 추상타입과 유연함.
  2. 추상화: 데이터, 프로세스 등을

의미가 비슷한 개념이나 표현으로 정의.
.
FTP에서 파일 다운로드,소켓에서 데이터 읽기,
DB 테이블에서 데이터를 조회

  • 로그 수집
    상세 구현은 알수없다.

  1. I 추상타입과 실제 구현의 연결.
  2. 추상클래스는 상속을 통해 연결.
  • Log Collector CO = create(); CO. collect ();
    이렇게 가능
    create () 생성하는 타입에 따라 달라진다.
    (아래
    클래스를 콘크리트 클래스라 부른다)

3.2 추상 E1 입자 교체의 유연함
.
콘크리트 직접 사용?

  • 수정사항 발생시 if l else 계속추가
  • 공통된 기능을 interface 화시키고 이를 관리하는 클래스를 따로 만들어

책임을 분리시킨다.

  1. 3 변화되는 부분을 추상화하기
  2. 변화되는 부분을 추상화
  3. 주로 if / else 구조로 등장
  4. 데이 형태에 따라 다른 결과 = 데이터 형태를 추상화

3.4 인터페이스에 대고 프로그래밍

  • program to interface
  • 변화 가능성이 높은 곳에 인터페이스 사용

3.5 인터페이스는 인터페이스 사용자 입장에서 만들기

  • Data를 읽는 인터페이스
  • File Data Reader x

사용자: Flow Con 이므로 Bk Source 좋음.
(
그러면 모든 소스가 file로 부터 오는줄 )

3.6 인터페이스와 테스트

  • 콘크리트 클래스를 사용하면

test 할때도 완성까지 기다려야 .

  • 인터페이스와 mock 활용하면 빠르게 테스트 가능

4장 재사용: 상속보단 조립.

  • 상속에는 몇가지 문제가 존재

1.1 상위클래스 변경 어려움

  • 상속이란 의존.
    그렇기에 아래로 변화가 내려

1.2 클래스 불필요 증가

  1. 조립을 이용한 재사용
  2. 조립은 다른 객체를 참조하는 방식
  3. 다른 객체를 조립해서 필드로

갖는다 = 다른 객체 사용

  • 상속보다 객체조립을 먼저 고민

2.1 위임
.
내가 일을 다른 객체에게 넘김

5장 설계원칙, DI

  1. Single responsibility principle
  2. 클리이스는 개의 책임을 가져야 한다
  3. 클래스를 변경하는 이유는 한개

1.1 SRP 위반시 문제

  • 데이터를 읽는 책임과 보여주는 책임으로 구성시 데이터를 읽는 방식이 변경시 보여주는 방식도 수정됨.

1.2 책임이란 변화에 대한

  • 책임의 단위는 변화와 관련
  • 데이터 읽기 기능 변경이 데이터 보여주는 기능에도 영향을 끼치지 않음.
  • 메서드 실행주체가 누구인가
  • 클래스 사용자들이 서로 다른

메서드 사용시 메서드는 각각 다른 책임 속할 가능성이 높다.

'한달에 2권' 카테고리의 다른 글

최범균, 객체지향과 디자인 패턴(3회)  (0) 2018.08.12
최범균, 객체지향과 디자인 패턴  (0) 2018.07.28
Nebo - Test - Page 4

1장

  1. 1 수정하기 안좋은 코드

메뉴 클릭에 따른 행동이 있을 이를 if / else 처리하게 되면 요구사항 추가 때마다 코드가 늘어남.

1.2 수정하기 좋은 코드
비슷한 동작을 찾자.
클릭,
보여주기

  • interface 하고 implements.

1.3 소프트웨어란...
여러 요구사항이 계속 추가됨.

  • 변화가능한 유연한 구조를 만들자.

2장 객체지향

  1. 절차지향과 객체지향
  2. I 절차지향
  3. procedure 프로그램을 구성
  4. 하지만 데이터가 많아질수록 감당 x

1.2 객체지향
객체 단위로 묶는다.

  • 데이터 변화가 발생해도 해당

객체만 변화가 발생

  1. 객차

21 객체의 핵심은 기능을 제공

  • 소리크기 제어 객체
  • 데이터 타입 안중요

소리 증가, 감소, 음소거 등의 기능

2.2 인터페이스와 클래스

  • 객체가 제공하는 기능 = operation

객체는 operation 으로 정의

  • 객체가 제공하는 operation 집합 = 인터페이스
    (일종의
    명세서나 규칙)
  • 실제 구현은 클로니스가 한다.

2.3 메시지

  • 오퍼레이션의 실행을 요청 = message
    = 메서드를 호출하는 .

  1. 객체의 책임과 크기.
  2. 객체는 기능으로 정의
    = 객체마다 자신만의 책임이 있다.
  • 객체의 책임을 결정짓는 것이 객체지향설계의 출발점
  • 처음에는 필요 기능을 정리.

기능을 할당하는 가장 어려움. 다만 책임의 크기는 작을수록 좋다.

  • 파일을 읽고 이를 암호화 한뒤 파일을 쓰는 경우
  • 흐름제어, 파일 읽기, 파일쓰기, 암호화
  • 기능이 많다 = 관련 데이터도 많다 = 절차지향식 구조

  1. 의존
  2. 한객체가 다른 객체를 생성, 호출 의존
  • 부른 객체가 사용하려는 객체에 의존

  • 파라미터로 받아도 의존임.

. A B c
(
B에, B가 A에 의존하고 있다. A가 변경된다면 B, c 모두 영향

  1. I 의존의 양면성

. 내가 변경되면 나에게 의존하고 있는 코드에 영향을 준다.

  • 나의 요구가 변경되면 내가 의존하고 있는 타입에 영향을 준다.

  1. 캡슐화.
  2. 변경이 다른곳에 가하지 않게.

. 내부의 기능이 어떻게 구현하는지 감추는 .

  1. I 절차지향적 코드

. 데이터를 중심으로 작성

  • 데이터 변화시 이를 사용하는 코드도 연쇄적으로 수정

5.2 캡슐화코드

  • 요구사항 변경에도 변화없음.

) 회원가입 만료를 계산할때 절차: 여성, vip 데이터에 집중

  • 고쳐야할 많다.

캡슐: member 클래스에 is Expired 메서드 기능 수정.

5.4 캡슐화 2개 규칙

  • Tell, Don't ASK
    데이터를 묻지 않고 기능을 실행
  • 만료일자를 가져와서 확인 x 만표확인 미서드를 불러 .
  • 데미테르의 법칙
  • 메서드에서 생성한 객체의 메서드 호출
  • 파라미터로 받은 객체의 메서드만 호출.
  • 필드로 참조하는 객체의 메서드만 호출.

member.get Some ().get Some x

  • 결국은 기능중심.

  1. 객체지향설계과정
  2. 기능, 세분화, 객체에 할당
  3. 최대한 캡슐화.
  4. 어떻게 메시지 받을지 구상
  5. 반복


1

+ Recent posts