SW Academy

[CNU SW Academy] 3일차(22.12.05.)

narlo 2022. 12. 5. 14:10

하석재 강사님

SW아카데미 특강 #5 (POJO와 DI #2)

 

객체지향전체 코드가 클래스 하나인 경우? -> 객체지향 맞음디자인패턴(best practice, 최선책) 

- MVC(Model-View-Controller) 

- 모바일/PC 동시 대응, VIEW만 바꾸면 됨

- MVVM(Model-View-ViewModel)

- DI(Dependency Injection) 패턴

- 전략패턴(Strategy)

- 인터페이스 기반 패턴

 

POJO(Plain Old Java Object)자바 객체지향의 특징 및 정신을 요약궁극적인 객체지향특정 클래스를 상속받아야 함(X) - 자바는 단일상속이라 제약 발생Thread 생성 -> Thread 클래스 상속/Runnable 인터페이스 상스프링 삼각형   POJO = DI + AOP + PSA

 

객체지향 분석설계(OOAD)객체지향 기술(OO) = OOA + OOD + OOP객체지향분석설계의 5원칙(SOLID)- SRP(단일 책임의 원칙, 코드에 기능 하나만 넣어라)- OCP(개방 폐쇄의 원칙, 기능 추가에는 열려 있고, 수정에는 닫혀 있어야 한다)- LRP- ISP- DIP 클래스 아닌 인터페이스 사용을 선호

 

IoC, 제어의 역전

 

UML

의존성 주입(DI)디자인 패턴의 전략 패턴(Strategy Pattern)의존성이 없는 프로그래밍을 작성하라 (프로그램의 실행 단계에서 결정할 수 있는)

 

의존성

use, 의존성은 방향이 있다. (전체는 부분에 의존한다.)

 

인터페이스를 선호하는 이유

상속 -> 사용되지 않는 코드가 늘어날 가능성

인터페이스는 오버헤드 없는 상속이 가능(코드의 통일성 유지 및 기능추가에 유연한 구조)


프로그래머스 - 프론트엔드 미니 데브코스

네트워크기초

브라우저에 URL을 입력하면 잠깐의 로딩 뒤에 웹사이트가 나타난다.

잠깐의 로딩 사이에 어떤 일이 발생하는거지?

1. URL 해석

scheme://<user>:<password>@<host>:<port>/url-path

2. DNS 조회(Domain Name System)

- 도메인과 IP주소를 서로 변환해준다.

3. 찾은 IP가 존재하는 서버로 이동

4. ARP를 이용하여 MAC주소 변환

- 논리적 주소인 IP를 물리 주소인 MAC으로 변환(실제 위치를 알기 위해 MAC이 필요)

- IP는 대역을 통해 범위를 좁혀나가는 데 사용

5. TCP통신을 위해 Socket을 열기

6. 서버는 응답을 반환

7. 브라우저 렌더링

- HTML을 읽어 DOM Tree를 구성하고, DOM Tree를 화면에 나타냄

 

컴퓨터 시간

물리량, 위치, 천문 현상, 문화, 역사, 사회 6가지 조건을 고려하여 시간을 표시해야 한다.

협정 세계시(UTC)

대한민국은 UTC+9

컴퓨터가 시간을 표현하는 방법

하드웨어의 시스템 클럭 이용

특정 시각을 기준으로 시스템 클럭의 틱을 세는 것으로 구현 (시스템 시간)

시스템 시간을 값으로 표현한 것을 타임 스탬프 라고 함

 

RTC모듈(메인보드에 붙어있음)

RTC의 카운터 회로의 결정 진동자가 만드는 정확한 주파수 이용

 

Unix Time

1970년 1월 1일 0시 0분 0초 기준 시각

 

네트워크 타임 프로토콜(NTP)를 통해 서버에서 시간을 받아옴

 

순수한 시간

UTC : 사건이 발생한 시각만을 고려할 때 사용

Time Zone이 적용된 시간 : 역사, 사회, 문화를 고려하여 사용자가 이용한 시각을 정확히 알아야 할 때 사용

 

JS에서는 Date 객체를 이용하여 사용

date-fns, luxon

 

암호화

평문을 해독할 수 없는 암호문으로 변환하는 것

 

단방향암호화

해시 알고리즘을 이용하여 평문을 복호화할 수 없는 형태로 암호화

저장 측에서도 값을 알면 안되는 경우

rainbow table을 통해  원문을 알아낼 수도 있음 -> salt, key stretching을 이용하여 해결

salt : 평문에 임의의 문자열을 추가하여 암호화, salt는 128bit 이상, 사용자마다 다른 salt

 key stretching : 해시를 여러 번 반복하여 원문을 알기 힘들게 만드는 방법

PBKDF2, bcrypt 알고리즘을 이용하여 salt, key stretching

 

양방향암호화

평문을 복호화 할 수 있는 형태로 암호화

대칭키(AES, Advanced Encryption Standard) : 암호화, 복호화 키가 동일

비대칭키(RSA, Rivest, Shamir and Adleman) : 암호화, 복호화 키가 다름, 공개키와 개인키 두 가지 키가 존재

 

javascript에서 crypto-js를 이용하면 암호화를 사용할 수 있음

 

함수형 프로그래밍

함수형 패러다임

함수형 패러다임은 함수가 추상화의 최소 단위이다. => 재사용성이 높다.

불변성을 지향하기에 동작을 예측하기 쉽고 사이드 이펙트를 방지한다.(동시성 문제 해결)

 

선언형 프로그래밍

무엇을 해결해야 할지에 집중하고 해결 방법은 컴퓨터에게 위임하는 방법

Data Flow

 

객체지향과 프로토타입

객체지향의 객체는 현실에 있는 것을 추상화 한 것

추상 : 사물이 지니고 있는 여러 측면 중 특정한 부분만 보는것

 

객체지향 : 객체 위주로 설계하고 프로그래밍하는 패러다임, 추상화의 최소 단위는 객체

자바스크립트는 프로토타입을 통해 객체지향을 표현

객체 생성 방법

- 객체 리터럴

- Object

- 생성자 함수

 

프로토타입 : 기존 객체를 효율적으로 사용할 수 있는 방법 

상속 흉내내기

Object.create : 기존 객체 재활용

 

이벤트루프

 javascript의 call stack은 하나만 존재 -> 싱글스레드로 동작

브라우저나 node.js의 event loop

비동기작업은 task queue(or microtask queue, animation frames에 등록됨)

 

모듈

스크립트 간 의존도 쉽게 파악, 실행 순서 제어

모듈은 설계 시점에 의미있는 요소, 컴포넌트는 런타임 시점에 의미 있는 요소

JS가 지원하는 모듈은 HTTP, HTTPS 프로토콜을 통해서만 동ㄷ작한다.

 

<script type="module">

script 태그는 모듈로 동작한다.

-> import를 통해 다른 모듈을 불러올 수 있다.

모듈의 특징

1. 항상 use strict로 실행된다.

2. 모듈 레벨 스코프가 있다.

3. 단 한 번만 평가된다.

4. 지연 실행된다.(모든 돔이 만들어진 후 실행)

 

Webpack을 이용하여 번들링한 스크립트를 불러오기 때문에 type="module"을 사용할 일이 별로 없다.

 

유니코드 : 전 세계 문자를 컴퓨터에 다룰 수 있게 만든 표준 시스템(4byte 영역까지 사용)

Surrogate Pair를 이용하여 2바이트보다 큰 문자를 표현

UTF-32, UTF-16, UTF-8

Big Endian: 사람이 보기 편함

Little Endian: 컴퓨터가 사용하기 편함

BOM(Byte Order Mark) : 인코딩을 바꾸다가 깨지는 원인, 문서 제일 앞에 바이트 순서를 알 수 있게 해주는 것

 

CCS(Coded Character Set) : ex) 아스키코드

CES(Character Encoding Scheme) : CCS를 8비트 집합에 대응시키는, 인코딩 - 문자를 시스템이 인식 할 수 있는 값으로 변환하는 것

TES(Transfer Encoding Syntax) : 인코딩한 문자가 특정 프로토콜을 타고 전송되도록 변환하는 것

 

정규표현식

패턴을 이용하여 문자를 검색, 대체, 추출 가능

대신 매우 느리다.

/패턴/플래그

/는 시작, 종료기호

 

ex) 휴대폰 번호의 정규표현식

\d{3}-\d{3,4}-\d{4}

JS : RegExp 객체로정규표현식 기능 제공

test : 문자열에 찾는 패턴이 있는지 여부 확인

exec : 패턴을 찾으면 일치한 패턴 정보를, 없으면 null을 반환

 

String.match : 정규표현식 객체를 파라미터로 받아 패턴이 있는지 찾은 후 일치한 패턴 정보를 반환하고 없으면 null을 반환

- matchAll : 매칭된 모든 case 반환

String.replace : 정규표현식 객체를 파라미터로 받아 패턴이 있는지 찾은 후 문자 대체

String.search : 정규표현식 객체를 파라미터로 받아 패턴이 있는지 찾은 후 일치한 패턴 정보의 위치 반환

 

Run-length encoding(비손실 압축)

문자열과 개수로 압축하는 방법


코딩테스트 - 최대공약수

문제 : 최대공약수

유클리드 호제법을 이용한 최대공약수 계산

x, y = map(int, input().strip().split(' '))
x, y = max(x, y), min(x, y)
r = x % y
while True:
    if r == 0:
        print(y)
        break
    x = y
    y = r
    r = x % y

'SW Academy' 카테고리의 다른 글

[CNU SW Academy] 6일차(22.12.08.)  (0) 2022.12.08
[CNU SW Academy] 5일차(22.12.07.)  (0) 2022.12.07
[CNU SW Academy] 4일차(22.12.06.)  (0) 2022.12.06
[CNU SW Academy] 2일차(22.12.02.)  (0) 2022.12.02
[CNU SW Academy] 1일차(22.12.01.)  (2) 2022.12.01