일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 로버트 C마틴
- 함수형 코딩
- 생코님Redux
- 쏙속 들어오는 함수형코딩
- https://product.kyobobook.co.kr/detail/S000001952246
- 오종택개발자님
- 갈길이 멀구나
- 에릭 노이먼
- 유틸리티타입은 공식문서 자주 보자
- 흥달쌤
- 나는 flux좋아...
- 쏙쏙 들어오는 함수형 코딩
- 출처 : 코딩애플
- 쏙쏙 들어오는 함수형코딩
- 출처 : 자바스크립트 딥다이브
- 클린코드다시읽기
- 출처 : 코딩앙마
- 리엑트를 다루는 기술
- 쏙쏙들어오는함수형코딩
- 고등애플
- 큰돌의 CS책
- 출처는 코딩앙마
- 김영한쌤
- 출처는 코딩애플
- 에릭노이먼
- 출처 : 한입크기로 잘라먹는 타입스크립트
- 이웅모
- 자바스크립트 딥다이브
- 에릭 노먼드
- 출처 : https://www.boostcourse.org/
- Today
- Total
목록전체 글 (133)
흰둥씨의 개발장
TCP / IP (Transmission Control Protocol / Internet Protocol) : 인터넷 통신을 위한 표준 프로토콜 ** IP 프로토콜에서 패킷 순서, 검증등이 안됨(IP 특징 : 비연결성 / 비신뢰성 / 흐름제어 오류복구기능 없음) -> 이를 해결하기 위한 프로토콜 : TCP/UDF (TCP특징 : 연결된상태에서 양종단간 신뢰성 있는 데이터 전달, 흐름제어함) IP는 데이터 배달을 처리하고, TCP는 패킷을 추적 및 관리함 OSI 7계층 (ISO) 장비 데이터흐름 프로토콜 TCP/IP 4계층 응용계층 데이터 TCP 계열 - HTTP(80) - FTP(데이터전달:20,제어전달:21) - SMTP(25) - TELNET(23) UDP 계열 - DNS(53) - SNMP (메시..
1. Single Responsibility Principle (단일 책임 원칙) - 각 모듈은 하나의 책임만을 담당해야 한다. 각 모듈은 변경되는 이유가 하나여야 한다. 하나의 함수가 하나의 동작만 하도록 설계하라는 원칙 (모듈을 설계할때는 빵공장을 세우는 것이아닌 '반죽하는 기계', '빵굽는 오븐'과 같이 각자의 역할을 하는 기계를 만드는 것) **설계할 때 고려사항이 뭐가 있을까? 하나의 책임맡고있니, 응집도높게, 결합도낮게, 우리 조직은 소통에 있어서 유연한가, 2. Open-closed Principle (개방-폐쇄 원칙) 확장하는 것에는 열려있고, 수정에는 닫혀있도록 한다. 기존코드를 변경하지 않고(closed), 새로운 코드를 추가하는 것(open)으로 기능 추가 할수있도록 설계해라. -> ..
자바스크립트는 명령형, 함수형, 프로토타입기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어 자바스크립트는 거의 모든 것이 객체임 ㄴ> 원시타입 값 제외한 나머지 값들(함수, 배열, 정규표현식, 객체...)는 모두 객체임 - 1) 객체 지향 프로그래밍 ㄴ여러개의 독립단위(=객체)의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임 ㄴ실제 세계의 사물이나 개념을 인식하는 철학적 사고를 프로그래밍에 접목하려는 시도에서 시작함 - 객체 (object) : 속성을 통해 여러개의 값을 하나의 단위로 구성한 복합적인 자료구조 상태 데이터(property)와 상태데이터를 조작하는 동작(method)을 묶어서 하나의 논리 단위로 묶어둔 것 - 속성 (attribute / property) : 실체의 특징..
추상화는 어디까지 하는게 좋은걸까 ? 결국 그 범위, 어느정도까지라는 것은 개발자의 손에 남겨진 과제… 추상화의 범위는 협업시에 추상화한 부분에 대해서, 공유가 잘 되어야 함 혼자 코드를 짜고 있다면 추상화수준이 같은 수준을 유지하고 있는지 확인하면서 진행하기 추상화를 할지 How to!? '구현' 위주로 먼저 진행 해보는 것도 좋다고 생각한다. '공통된 부분'을 뽑아내는 방식으로 진행하기 (김영한님 youtube 참조함) 프로젝트 리더가 추상화레벨, 추상화 적용될 로직에 대한 기준을 제시하면서 진행하거나 팀원들끼리 어떤 로직에 추상화를 어떤레벨로 적용해볼지 연구하면서 진행해보기 함수의 인자 개수는 0개인게 정말 이상적일까? 인자의 개수가 적을수록, 테스트시 유리하고, 유지보수에도 좋고, 가독성에도 좋기..
소프트웨어 공학 : 품질 높은 소프트웨어를 개발하기 위한 학문 [개발단계] : - 계획(비용, 일정...) - 요구사항 분석(고객의 요구사항을 듣자, 과다한 것들은 협상) - 설계(어떻게 동작하는지 설계정의 - 디자인 / ) - 구현(스토리보드보고 실제 프로그램 코딩, 디버깅, 단위테스트진행) - 테스트(요구사항만족하는지) - 유지보수(문제수정, 발전) - 3R : 역공학(Reverse Engineering) , 재공학(Re-engineering), 재사용(Reuse) - 역공학 : 개발산출물분석을 통해 설계수준분석하여 문서화진행 - 재공학 : 유지보수를 통해 기존 소프트웨어를 해결(분석해서 재구성함-> 역공학-> 마이그레이션), 예방 유지보수 - 재사용 : 일부를 다른 프로젝트에 재사용함(합성중심 :..
비동기 코드 개발의 어려움 비동기 요청은 1. 함수간 일시적 의존 관계가 형성됨 (데이터 도착할때까지 or 다른 함수가 실행될 때까지 어떤 함수가 기다리는 경우) 2. 콜백의 늪에 빠짐 (이벤트가 발생하면? 콜백함수를 실행하는데 그와중에 에러나면 또 에러 콜백 호출되고... 복잡도 증가) 함수형기법과 프로미스를 사용해서 비동기 코드를 능률적으로 ! => 위 문제를 해결하기 위해서 1. 연속체 전달 스타일 continuation-passing style 사용 (콜백함수를 모두 개별 함수로 나눠서 개별컴포넌트처럼 취급) 2. 비동기 로직을 Promise로 일급화 하기 프로미스의 상태는 항상 pending(unresolved), fulfilled, rejected, settled 중 하나로 fulfilled는..
자바스크립트 함수 실행의 내부원리 - 자바스크립트는 싱글 스레드로 작동 - 전역 context는 단 하나만 존재함 - 모든 함수는 전역 context를 공유함 - 자바스크립트 초기 실행시 콜스택에는 맨 밑에 "전역 context 프레임"이 위치하게됨 - 함수 context에 개수 제한은 없음(FE에서는 브라우저마다 제한개수다름) - 함수를 호출할 때마다 실행 context (= 함수 context프레임)이 생성됨 - 함수 context 프레임은 각 내부 지역 변수개수만큼 메모리를 차지함 (함수 본체에 변수 선언 많을수록 메모리 많이 소요) - 커리된 함수를 지나치게 많이 쓰면 콜스택에 영향 줌(= 오버헤드 많이 발생 = 메모리 많이씀 = 실행 속도 느려질수있음) - 재귀도 지나치면 콜스택에 영향줌(스택오..
재귀 Recursion ? 자기 자신을 호출하여 문제를 해결하는 프로그래밍 더 작고 더 간단한 하위문제로 분할됨 (즉, 전체중 일부 하위문제해결법을 가지고 전체문제를 해결함)나의 경우에 재귀를 떠올릴때면 ? 생각나는 그림이 엘리베이터에 탔을 때 서로 마주본 거울 같은 느낌이다. 마주 본 거울은 계속 자신을 반사반사반사하면서 작아지고 어떤 한 점에 이른다. 재귀를 쓸 때 생각 할 것들1. Base case(종료조건)이 필요함 2. 자기 자신을 호출해야 하고 하위 문제를 결합하여 전체에 대한 해결책을 얻어야 함 (recursive case)3. 재귀 호출시 반드시 종료조건으로 수렴할 수 있도록 하는 조건 필요4. 호출할때마다 콜스텍을 쓰기 때문에 메모리..
🤍 함수형 프로그래밍과 프로그램 테스트 명령형 코드를 테스트 하려고 한다면... 1. 순수함수와 부수효과가 있는 함수를 분리해서 테스트 가능한 단위를 설정해야 함 2. 전역 데이터에 의존하는 함수를 테스트 할 수 없음 3. 평가순서도 신경써야 함 선언형 코드(함수형)를 테스트 하려고 한다면... 1. 평가해야할 함수를 블랙박스로 보고 "동일한 input에 동일한 output내는지" 보면 됨 2. 비즈니스 로직에 집중해서 테스트 할수 있음 3. 모나드로 결합된 함수에서 순수함수/부수효과있는 함수를 떼어서 테스트할 수 있음 4. 부수효과 있는 함수는 "mocking"을 이용하여 테스트 (mocking? 테스트할 함수와 상호작용하는 객체가 할 일을 미리 정의, 기대식을 충족하지 않으면 불합격하는 식으로 사용)..
🧡 명령형 에러 처리 체계의 문제점 try-catch문으로 예외처리를 하는 것은 1. 함수 합성과 체이닝을 할수 없게 하고 2. 동일 input일때 동일한 output을 낸다는 참조 투명성원리에 위배되며, 3. 부수효과발생가능성 4. 에러발생시 호출지점을 벗어나 비지역성 non-locality원리에 위배 5. catch문안에서 특정 예외를 처리하는데에도 에너지를 써야 하기 때문에 호출자 부담 증가 6. 에러 조건 처리 블록들이 중첩되어 사용하기 어려움 예외처리는 적재적소에 쓰면 가장 좋다. 🧡 컨테이너로 잘못된 데이터 접근을 차단 값을 컨테이너화 해서 값을 안전하게 다루고, 프로그램 불변성이 지켜지도록 직접적인 접근 차단하기 //값을 함수형 자료형으로 감싸기 class Wrapper { construct..
💡 모듈성? 프로그램을 작고 독립적인 부분으로 나눌수 있는 정도 💡 함수체인과 함수 파이프라인 비교 함수형 프로그래밍에서 함수는 참조 투명성을 가진 것을 뜻함 (참조 투명성: 동일한 input을 넣으면 동일한 output을 낸다) - 메서드를 체이닝 (단단한 결합, 제한된 표현성) - 함수 파이프라인을 배열 (느슨한 결합, 유연성) 파이프라인 ? 한 함수의 출력이 다음 함수의 입력이 되게 느슨하게 배열한 방향성 함수 순차열 (디자인 패턴 중 '파이프 & 필터' 와 동등한 패턴) 파이프 함수를 만들기 위한 호환요건 ? 형식 : 앞단계 함수의 반환형식과 수신함수의 인수 형식이 일치해야 함 항수 : 수신함수는 앞단계 함수가 반환한 값을 처리하기 위해 적어도 하나 이상의 매개변수 선언해야 함 f(g(x)) = ..
✅ 프로그램 제어와 흐름 📎 제어흐름 (control flow) ? 프로그래밍 정답에 이르기까지 거치는 경로 ㄴ 명령형의 경우 - 분기, 루프에 따라 움직이는 일련의 연산(구문)으로 구성됨 ㄴ 선언형의 경우 - 서로 연결된 블랙박스 연산을 제어함 (= 고수준으로 추상화된 함수을 가지고 체이닝함) 함수형 으로 작성한 코드에서 고수준 추상화 함수로 가는 이유 ? ㄴ 콜백처럼 로직을 파악하려면 가장 안쪽에 감싼 내부 함수부터 하나씩 읽어야 하기 때문에 "가독성이 떨어짐" ㄴ 이미 존재하는 자료구조(배열, 이터러블...등)를 이용해 고계연산을 적용하여, 에러가능성은 줄이고, 유지보수시 편하게 함 ㄴ 부수 효과를 일으킬만한 기존의 수동 루프를 대체함 📎 람다 표현식 ? 한줄 짜리 익명함수를 일반 함수 선언보다 단..